Merge branch 'master' of https://github.com/Anuken/Mindustry into 7.0-features

This commit is contained in:
Anuken
2021-10-12 12:36:20 -04:00
80 changed files with 2247 additions and 187 deletions

View File

@@ -5,6 +5,7 @@ This is done by letting clients `GET` a [JSON list of servers](https://github.co
You may want to add your server to this list. The steps for getting this done are as follows: You may want to add your server to this list. The steps for getting this done are as follows:
0. **Take note of the fact that modded servers are not allowed on this list.** Such servers confuse users, and there's currently no easy way to fix mod incompatibilities after a failed connection.
1. **Ensure your server is properly moderated.** For the most part, this applies to survival servers, but PvP servers can be affected as well. 1. **Ensure your server is properly moderated.** For the most part, this applies to survival servers, but PvP servers can be affected as well.
You'll need to either hire some moderators, or make use of (currently non-existent) anti-grief and anti-curse plugins. You'll need to either hire some moderators, or make use of (currently non-existent) anti-grief and anti-curse plugins.
*Consider enabling a rate limit:* `config messageRateLimit 2` will make it so that players can only send messages every 2 seconds, for example. *Consider enabling a rate limit:* `config messageRateLimit 2` will make it so that players can only send messages every 2 seconds, for example.

View File

@@ -31,9 +31,11 @@ There are two ways to test the translation bundle:
1) Assuming you have the PC version downloaded, download your bundle file, name it `bundle.properties`, then place it in the same folder as the Mindustry desktop executable and run it. *You should get a popup message in-game confirming that you have loaded an external translation.* 1) Assuming you have the PC version downloaded, download your bundle file, name it `bundle.properties`, then place it in the same folder as the Mindustry desktop executable and run it. *You should get a popup message in-game confirming that you have loaded an external translation.*
2) For advanced users: simply download your fork of mindustry and compile/run the game. 2) For advanced users: simply download your fork of mindustry and compile/run the game.
#### Translating for stores (Steam, Google Play) #### Translating for stores (Steam, ~~Google Play~~)
If you would like to translate the descriptions for Google Play or Steam, see the [Fastlane Metadata folder](https://github.com/Anuken/Mindustry/tree/master/fastlane/metadata) and submit a pull request for files there. On Google Play, you would create or edit the folder with the correct local code; for Steam, I have to update the translations manually, so just name the folder with the language name, and include the same files as the English folder does. NOTE: The Google Play description is in the process of being re-written, please do not translate it.
If you would like to translate the descriptions for ~~Google Play~~ or Steam, see the [Fastlane Metadata folder](https://github.com/Anuken/Mindustry/tree/master/fastlane/metadata) and submit a pull request for files there. On Google Play, you would create or edit the folder with the correct local code; for Steam, I have to update the translations manually, so just name the folder with the language name, and include the same files as the English folder does.
**And that's it.** **And that's it.**

View File

@@ -1617,7 +1617,7 @@ unit.omura.description = Fires a long-range piercing railgun bolt at enemies. Co
unit.alpha.description = Defends the Shard core from enemies. Builds structures. unit.alpha.description = Defends the Shard core from enemies. Builds structures.
unit.beta.description = Defends the Foundation core from enemies. Builds structures. unit.beta.description = Defends the Foundation core from enemies. Builds structures.
unit.gamma.description = Defends the Nucleus core from enemies. Builds structures. unit.gamma.description = Defends the Nucleus core from enemies. Builds structures.
unit.retusa.description = Fires homing torpedos at nearby enemies. Repairs allied units. unit.retusa.description = Fires homing torpedoes at nearby enemies. Repairs allied units.
unit.oxynoe.description = Fires structure-repairing streams of flame at nearby enemies. Targets nearby enemy projectiles with a point defense turret. unit.oxynoe.description = Fires structure-repairing streams of flame at nearby enemies. Targets nearby enemy projectiles with a point defense turret.
unit.cyerce.description = Fires seeking cluster-missiles at enemies. Repairs allied units. unit.cyerce.description = Fires seeking cluster-missiles at enemies. Repairs allied units.
unit.aegires.description = Shocks all enemy units and structures that enter its energy field. Repairs all allies. unit.aegires.description = Shocks all enemy units and structures that enter its energy field. Repairs all allies.

View File

@@ -1200,19 +1200,19 @@ tutorial.waves = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 wav
tutorial.waves.mobile = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves. Your ship will automatically fire at enemies.\nBuild more turrets and drills. Mine more copper. tutorial.waves.mobile = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves. Your ship will automatically fire at enemies.\nBuild more turrets and drills. Mine more copper.
tutorial.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese obtained resources can then be used to research new technology.\n\n[accent]Press the launch button. tutorial.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese obtained resources can then be used to research new technology.\n\n[accent]Press the launch button.
item.copper.description = The most basic structural material. Used extensively in all types of blocks. item.copper.description = Ang pinaka basic na struktural materyal. Malawakang ginagamit sa lahat ng types ng blocks.
item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks. item.lead.description = Ang panimulang at basic na materyal. Malawakang ginagamit sa electronika at sa transportasyon ng likido gamit ng blocks.
item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage. item.metaglass.description = Ito ay matigas na glass compound. Malawakang ginagamit sa distribution ng likido at pag imbakan.
item.graphite.description = Mineralized carbon, used for ammunition and electrical components. item.graphite.description = Mineralized carbon, Malawakang ginagamit sa ammunisyon at sa mga bahagi ng electrisidad.
item.sand.description = A common material that is used extensively in smelting, both in alloying and as a flux. item.sand.description = Ang karaniwang materyal na malawakang ginagamit sa smelting, pareho sa alloying at bilang flux
item.coal.description = Fossilized plant matter, formed long before the seeding event. Used extensively for fuel and resource production. item.coal.description =Ang karaniwang materyal na malawakang ginagamit sa smelting, pareho sa alloying at bilang flux
item.titanium.description = A rare super-light metal used extensively in liquid transportation, drills and aircraft. item.titanium.description = Ang bihira hanapin at magaan na metal. Malawaking ginagamit sa transportasyon ng likido, mga drills at aircraft.
item.thorium.description = A dense, radioactive metal used as structural support and nuclear fuel. item.thorium.description = Ito ay malagong, radioactive metal ginagamit para sa supporta sa istraktura at nuklear fuel.
item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. item.scrap.description = Galing sa mga matatanda at natirang struktura at units. Naglalaman ng ibat ibang metals.
item.silicon.description = An extremely useful semiconductor. Applications in solar panels, complex electronics and homing turret ammunition. item.silicon.description = Ang nakakatulong na semiconductor. Aplikasyon sa solar panels, Komplikadong electronika at homing turret ammunisyon.
item.plastanium.description = A light, ductile material used in advanced aircraft and fragmentation ammunition. item.plastanium.description = Ito ay magaan, malagkit na materyal ginamit sa advanced aircraft at fragmentation ammunisyon.
item.phase-fabric.description = A near-weightless substance used in advanced electronics and self-repairing technology. item.phase-fabric.description = Ito ay malapit na mawalan ng timbang na substansya ginamit sa advanced na electronika at self-repairing na technolohiya.
item.surge-alloy.description = An advanced alloy with unique electrical properties. item.surge-alloy.description = Ang advanced na pinag halung metal na may kakaibang electrical properties.
item.spore-pod.description = A pod of synthetic spores, synthesized from atmospheric concentrations for industrial purposes. Used for conversion into oil, explosives and fuel. item.spore-pod.description = A pod of synthetic spores, synthesized from atmospheric concentrations for industrial purposes. Used for conversion into oil, explosives and fuel.
item.blast-compound.description = An unstable compound used in bombs and explosives. Synthesized from spore pods and other volatile substances. Use as fuel is not advised. item.blast-compound.description = An unstable compound used in bombs and explosives. Synthesized from spore pods and other volatile substances. Use as fuel is not advised.
item.pyratite.description = An extremely flammable substance used in incendiary weapons. item.pyratite.description = An extremely flammable substance used in incendiary weapons.

View File

@@ -122,7 +122,7 @@ committingchanges = Validation des modifications
done = Fait done = Fait
feature.unsupported = Votre appareil ne prend pas en charge cette fonctionnalité. feature.unsupported = Votre appareil ne prend pas en charge cette fonctionnalité.
mods.initfailed = [red]⚠[] L'instance précédente de Mindustry na pas pu sinitialiser. Cela a probablement été causé par des mods..\n\nPour éviter une boucle de crash, [red]tous les mods ont été désactivés.[]\n\nPour désactiver cette fonctionnalité, désactivez-la dans [accent]Paramètres->Jeu->Désactiver les mods lors d'un crash au démarrage[]. mods.initfailed = [red]⚠[] L'instance précédente de Mindustry na pas pu sinitialiser. Cela a probablement été causé par des mods..\n\nPour éviter une boucle de crash, [red]tous les mods ont été désactivés.[]
mods = Mods mods = Mods
mods.none = [lightgray]Aucun Mod trouvé ! mods.none = [lightgray]Aucun Mod trouvé !
mods.guide = Guide de Modding mods.guide = Guide de Modding
@@ -363,6 +363,7 @@ publish.confirm = Êtes-vous sûr de vouloir publier ceci ?\n\n[lightgray]Assure
publish.error = Erreur de publication de l'élément : {0} publish.error = Erreur de publication de l'élément : {0}
steam.error = Échec d'initialisation des services Steam.\nErreur : {0} steam.error = Échec d'initialisation des services Steam.\nErreur : {0}
editor.cliffs = De murs à falaises
editor.brush = Pinceau editor.brush = Pinceau
editor.openin = Ouvrir dans l'éditeur editor.openin = Ouvrir dans l'éditeur
editor.oregen = Génération de minerais editor.oregen = Génération de minerais
@@ -378,6 +379,9 @@ editor.ingame = Éditer dans le jeu
editor.publish.workshop = Publier sur le Workshop editor.publish.workshop = Publier sur le Workshop
editor.newmap = Nouvelle carte editor.newmap = Nouvelle carte
editor.center = Centrer editor.center = Centrer
editor.search = Recherche de cartes...
editor.filters = Filtrer les cartes
editor.showAll = Afficher les cartes par défaut
workshop = Steam Workshop workshop = Steam Workshop
waves.title = Vagues waves.title = Vagues
waves.remove = Supprimer waves.remove = Supprimer
@@ -1133,6 +1137,7 @@ block.sand-boulder.name = Bloc de Sable
block.basalt-boulder.name = Rocher de Basalte block.basalt-boulder.name = Rocher de Basalte
block.grass.name = Herbe block.grass.name = Herbe
block.molten-slag.name = Scories block.molten-slag.name = Scories
block.pooled-cryofluid.name = Cryofluide
block.space.name = Espace block.space.name = Espace
block.salt.name = Sel block.salt.name = Sel
block.salt-wall.name = Mur de Sel block.salt-wall.name = Mur de Sel
@@ -1613,7 +1618,7 @@ unit.omura.description = Tire avec un canon à rails à longue portée, une puis
unit.alpha.description = Défend le Noyau fragment contre les ennemis. Peut construire des structures. unit.alpha.description = Défend le Noyau fragment contre les ennemis. Peut construire des structures.
unit.beta.description = Défend le Noyau fondation contre les ennemis. Peut construire des structures. unit.beta.description = Défend le Noyau fondation contre les ennemis. Peut construire des structures.
unit.gamma.description = Défend le Noyau épicentre contre les ennemis. Peut construire des structures. unit.gamma.description = Défend le Noyau épicentre contre les ennemis. Peut construire des structures.
unit.retusa.description = Pose des mines de proximité. Répare les unités alliées. unit.retusa.description = Tire des torpilles à tête chercheuse sur les ennemis proches. Répare les unités alliées.
unit.oxynoe.description = Tire des jets de flammes qui réparent les structures et endommage les ennemis proches. Cible les projectiles ennemis proches avec une tourelle de défense ponctuelle. unit.oxynoe.description = Tire des jets de flammes qui réparent les structures et endommage les ennemis proches. Cible les projectiles ennemis proches avec une tourelle de défense ponctuelle.
unit.cyerce.description = Tire des missiles à fragmentation sur les ennemis. Répare les unités alliées. unit.cyerce.description = Tire des missiles à fragmentation sur les ennemis. Répare les unités alliées.
unit.aegires.description = Secoue toutes les unités et structures ennemies qui entrent dans son champ d'énergie. Répare tous les alliés. unit.aegires.description = Secoue toutes les unités et structures ennemies qui entrent dans son champ d'énergie. Répare tous les alliés.

View File

@@ -122,7 +122,7 @@ committingchanges = 変更を適応中
done = 完了 done = 完了
feature.unsupported = あなたのデバイスはこの機能をサポートしていません。 feature.unsupported = あなたのデバイスはこの機能をサポートしていません。
mods.initfailed = [red]⚠[] 以前のMindustryの初期化に失敗しました。\nおそらくModの誤作動が原因です。\n\nクラッシュループを防ぐために、[red]全てのModが無効になっています。[]\n\nこの機能を無効にするのは、[accent]設定->ゲーム->起動時にクラッシュした場合にModを無効にする[]をオフにします。 mods.initfailed = [red]⚠[] 以前のMindustryの初期化に失敗しました。\nおそらくModの誤作動が原因です。\n\nクラッシュループを防ぐために、[red]全てのModが無効になっています。[]
mods = Mods mods = Mods
mods.none = [lightgray]Modが見つかりませんでした! mods.none = [lightgray]Modが見つかりませんでした!
mods.guide = Mod作成ガイド mods.guide = Mod作成ガイド
@@ -379,6 +379,9 @@ editor.ingame = ゲーム内で編集する
editor.publish.workshop = ワークショップで公開 editor.publish.workshop = ワークショップで公開
editor.newmap = 新しいマップ editor.newmap = 新しいマップ
editor.center = 中心 editor.center = 中心
editor.search = マップを検索...
editor.filters = マップをフィルターする
editor.showAll = デフォルトマップを表示
workshop = ワークショップ workshop = ワークショップ
waves.title = ウェーブ waves.title = ウェーブ
waves.remove = 削除 waves.remove = 削除
@@ -1134,6 +1137,7 @@ block.sand-boulder.name = 巨大な礫
block.basalt-boulder.name = 玄武岩の礫 block.basalt-boulder.name = 玄武岩の礫
block.grass.name = block.grass.name =
block.molten-slag.name = スラグ block.molten-slag.name = スラグ
block.pooled-cryofluid.name = 冷却水
block.space.name = Space block.space.name = Space
block.salt.name = 岩塩氷河 block.salt.name = 岩塩氷河
block.salt-wall.name = 塩の壁 block.salt-wall.name = 塩の壁
@@ -1615,7 +1619,7 @@ unit.omura.description = 敵に長距離かつ貫通性能を持つレールガ
unit.alpha.description = シャードコアを敵から守ります。\n建造物を建築します。 unit.alpha.description = シャードコアを敵から守ります。\n建造物を建築します。
unit.beta.description = ファンデーションコアを敵から守ります。\n建造物を建築します。 unit.beta.description = ファンデーションコアを敵から守ります。\n建造物を建築します。
unit.gamma.description = ニュークリアスコアを敵から守ります。\n建造物を建築します。 unit.gamma.description = ニュークリアスコアを敵から守ります。\n建造物を建築します。
unit.retusa.description = 接地雷を配置します。\n味方ユニットを修復します。 unit.retusa.description = くの敵に追尾魚雷を発射します。\n味方ユニットを修復します。
unit.oxynoe.description = 建造物修復火炎放射を発射します。敵にはダメージを与えます。\n地点防空タレットによって敵の弾丸を撃ち落とします。 unit.oxynoe.description = 建造物修復火炎放射を発射します。敵にはダメージを与えます。\n地点防空タレットによって敵の弾丸を撃ち落とします。
unit.cyerce.description = 敵に追尾クラスターミサイルを発射します。\n味方ユニットを修復します。 unit.cyerce.description = 敵に追尾クラスターミサイルを発射します。\n味方ユニットを修復します。
unit.aegires.description = エネルギーフィールド内の全ての敵ユニットと建造物には電撃を放ち、全ての味方ユニットには修復効果を与えます。 unit.aegires.description = エネルギーフィールド内の全ての敵ユニットと建造物には電撃を放ち、全ての味方ユニットには修復効果を与えます。

View File

@@ -904,7 +904,7 @@ category.view.name = Wyświetl
category.multiplayer.name = Wielu graczy category.multiplayer.name = Wielu graczy
category.blocks.name = Wybierz Blok category.blocks.name = Wybierz Blok
command.attack = Atakuj command.attack = Atakuj
command.rally = Zbierz command.rally = Zbiórka
command.retreat = Wycofaj command.retreat = Wycofaj
command.idle = Nieaktywny command.idle = Nieaktywny
placement.blockselectkeys = \n[lightgray]Klawisz: [{0}, placement.blockselectkeys = \n[lightgray]Klawisz: [{0},

View File

@@ -121,7 +121,7 @@ committingchanges = Внесение изменений
done = Готово done = Готово
feature.unsupported = Ваше устройство не поддерживает эту возможность. feature.unsupported = Ваше устройство не поддерживает эту возможность.
mods.initfailed = [red]⚠[] Не удалось инициализировать предыдущий запуск Mindustry. Это могло быть вызвано неисправными модификациями.\n\nЧтобы предотвратить зацикленные вылеты игры, [red]все модификации были отключены.[]\n\nЧтобы отключить эту функцию, выключите её в [accent]Настройки->Игра->Отключение модификаций после вылета при запуске[]. mods.initfailed = [red]⚠[] Не удалось инициализировать предыдущий запуск Mindustry. Это могло быть вызвано неисправными модификациями.\n\nЧтобы предотвратить зацикленные вылеты игры, [red]все модификации были отключены.[]
mods = Модификации mods = Модификации
mods.none = [lightgray]Модификации не найдены! mods.none = [lightgray]Модификации не найдены!
mods.guide = Руководство по модификациям mods.guide = Руководство по модификациям
@@ -168,6 +168,7 @@ launchcore = Запуск ядра
filename = Имя файла: filename = Имя файла:
unlocked = Новый контент разблокирован! unlocked = Новый контент разблокирован!
available = Доступно новое исследование! available = Доступно новое исследование!
unlock.incampaign = < Разблокируйте в кампании для подробностей >
completed = [accent]Завершено completed = [accent]Завершено
techtree = Дерево\n технологий techtree = Дерево\n технологий
research.legacy = Найдены данные исследований из [accent]5.0[].\nХотите [accent]загрузить эти данные[], или [accent]отказаться от них[] и перезапустить исследования в новой кампании (рекомендуется)? research.legacy = Найдены данные исследований из [accent]5.0[].\nХотите [accent]загрузить эти данные[], или [accent]отказаться от них[] и перезапустить исследования в новой кампании (рекомендуется)?
@@ -315,7 +316,7 @@ data.invalid = Эти игровые данные являются недейс
data.import.confirm = Импорт внешних данных сотрёт[scarlet] все[] ваши игровые данные.\n[accent]Это не может быть отменено![]\n\nКак только данные импортированы, ваша игра немедленно закроется. data.import.confirm = Импорт внешних данных сотрёт[scarlet] все[] ваши игровые данные.\n[accent]Это не может быть отменено![]\n\nКак только данные импортированы, ваша игра немедленно закроется.
quit.confirm = Вы уверены, что хотите выйти? quit.confirm = Вы уверены, что хотите выйти?
loading = [accent]Загрузка… loading = [accent]Загрузка…
reloading = [accent]Перезагрузка модификаций… downloading = [accent]Скачивание...
saving = [accent]Сохранение… saving = [accent]Сохранение…
respawn = [accent][[{0}][] для возрождения из ядра respawn = [accent][[{0}][] для возрождения из ядра
cancelbuilding = [accent][[{0}][] для очистки плана cancelbuilding = [accent][[{0}][] для очистки плана
@@ -343,9 +344,9 @@ custom = Пользовательская
builtin = Встроенная builtin = Встроенная
map.delete.confirm = Вы действительно хотите удалить эту карту? Это действие не может быть отменено! map.delete.confirm = Вы действительно хотите удалить эту карту? Это действие не может быть отменено!
map.random = [accent]Случайная карта map.random = [accent]Случайная карта
map.nospawn = Эта карта не имеет ни одного ядра, в котором игрок может появиться! Добавьте [accent]оранжевое[] ядро на эту карту в редакторе. map.nospawn = Эта карта не имеет ни одного ядра, в котором игрок может появиться! Добавьте [#{0}]{1}[] ядро на эту карту в редакторе.
map.nospawn.pvp = У этой карты нет вражеских ядер, в которых игрок может появиться! Добавьте [scarlet]не оранжевое[] ядро на эту карту в редакторе. map.nospawn.pvp = У этой карты нет вражеских ядер, в которых игрок может появиться! Добавьте [scarlet]не оранжевое[] ядро на эту карту в редакторе.
map.nospawn.attack = У этой карты нет вражеских ядер для атаки игроком! Добавьте [scarlet]красное[] ядро на эту карту в редакторе. map.nospawn.attack = У этой карты нет вражеских ядер для атаки игроком! Добавьте [#{0}]{1}[] ядро на эту карту в редакторе.
map.invalid = Ошибка загрузки карты: повреждённый или недопустимый файл карты. map.invalid = Ошибка загрузки карты: повреждённый или недопустимый файл карты.
workshop.update = Обновить содержимое workshop.update = Обновить содержимое
workshop.error = Ошибка загрузки информации из Мастерской: {0} workshop.error = Ошибка загрузки информации из Мастерской: {0}
@@ -375,6 +376,9 @@ editor.ingame = Редактировать в игре
editor.publish.workshop = Опубликовать в Мастерской editor.publish.workshop = Опубликовать в Мастерской
editor.newmap = Новая карта editor.newmap = Новая карта
editor.center = Центрировать editor.center = Центрировать
editor.search = Поиск карт...
editor.filters = Фильтры
editor.showAll = Показать карты по умолчанию
workshop = Мастерская workshop = Мастерская
waves.title = Волны waves.title = Волны
waves.remove = Удалить waves.remove = Удалить
@@ -383,6 +387,7 @@ waves.waves = волна(ы)
waves.perspawn = за появление waves.perspawn = за появление
waves.shields = ед. щита/волну waves.shields = ед. щита/волну
waves.to = до waves.to = до
waves.max = максимум единиц
waves.guardian = Страж waves.guardian = Страж
waves.preview = Предварительный просмотр waves.preview = Предварительный просмотр
waves.edit = Редактировать… waves.edit = Редактировать…
@@ -843,13 +848,13 @@ category.items = Предметы
category.crafting = Ввод/вывод category.crafting = Ввод/вывод
category.function = Действие category.function = Действие
category.optional = Дополнительные улучшения category.optional = Дополнительные улучшения
setting.skipcoreanimation.name = Пропускать анимацию запуска/приземления ядра
setting.landscape.name = Только альбомный (горизонтальный) режим setting.landscape.name = Только альбомный (горизонтальный) режим
setting.shadows.name = Тени setting.shadows.name = Тени
setting.blockreplace.name = Автоматическая замена блоков setting.blockreplace.name = Автоматическая замена блоков
setting.linear.name = Линейная фильтрация setting.linear.name = Линейная фильтрация
setting.hints.name = Подсказки setting.hints.name = Подсказки
setting.logichints.name = Подсказки для логики setting.logichints.name = Подсказки для логики
setting.flow.name = Показывать скорость потока ресурсов
setting.backgroundpause.name = Фоновая пауза setting.backgroundpause.name = Фоновая пауза
setting.buildautopause.name = Автоматическая приостановка строительства setting.buildautopause.name = Автоматическая приостановка строительства
setting.doubletapmine.name = Добыча руды двойным нажатием setting.doubletapmine.name = Добыча руды двойным нажатием
@@ -1113,13 +1118,13 @@ unit.reign.name = Власть
unit.vela.name = Парус unit.vela.name = Парус
unit.corvus.name = Ворон unit.corvus.name = Ворон
block.resupply-point.name = Пункт снабжения
block.parallax.name = Параллакс block.parallax.name = Параллакс
block.cliff.name = Скала block.cliff.name = Скала
block.sand-boulder.name = Песчаный валун block.sand-boulder.name = Песчаный валун
block.basalt-boulder.name = Базальтовый валун block.basalt-boulder.name = Базальтовый валун
block.grass.name = Трава block.grass.name = Трава
block.molten-slag.name = Шлак block.molten-slag.name = Шлак
block.pooled-cryofluid.name = Криогенная жидкость
block.space.name = Космос block.space.name = Космос
block.salt.name = Соль block.salt.name = Соль
block.salt-wall.name = Соляная стена block.salt-wall.name = Соляная стена
@@ -1366,6 +1371,7 @@ hint.placeTurret = Установите \uf861 [accent]Турели[] для з
hint.breaking = Выделите блоки в рамку [accent]правой кнопкой мыши[], чтобы разобрать их. hint.breaking = Выделите блоки в рамку [accent]правой кнопкой мыши[], чтобы разобрать их.
hint.breaking.mobile = Активируйте \ue817 [accent]молоток[] в правом нижнем углу и нажимайте на блоки, чтобы разобрать их. Удерживайте палец в течение секунды и переместите, чтобы разобрать выделением. hint.breaking.mobile = Активируйте \ue817 [accent]молоток[] в правом нижнем углу и нажимайте на блоки, чтобы разобрать их. Удерживайте палец в течение секунды и переместите, чтобы разобрать выделением.
hint.blockInfo = Для просмотра информации о блоке, выберите его в [accent]меню строительства[], затем нажмите на кнопку [accent][[?][] справа. hint.blockInfo = Для просмотра информации о блоке, выберите его в [accent]меню строительства[], затем нажмите на кнопку [accent][[?][] справа.
hint.derelict = [accent]Покинутые[] постройки - это остатки старых баз, которые больше не функционируют.\n\nОни могут быть [accent]разобраны[] для получения ресурсов.
hint.research = Используйте кнопку \ue875 [accent]Исследований[], чтобы исследовать новые технологии. hint.research = Используйте кнопку \ue875 [accent]Исследований[], чтобы исследовать новые технологии.
hint.research.mobile = Используйте кнопку \ue875 [accent]Исследований[] в \ue88c [accent]Меню[], чтобы исследовать новые технологии. hint.research.mobile = Используйте кнопку \ue875 [accent]Исследований[] в \ue88c [accent]Меню[], чтобы исследовать новые технологии.
hint.unitControl = Зажмите [accent][[Л-Ctrl][] и [accent]нажмите левую кнопку мыши[], чтобы контролировать дружественные единицы и турели. hint.unitControl = Зажмите [accent][[Л-Ctrl][] и [accent]нажмите левую кнопку мыши[], чтобы контролировать дружественные единицы и турели.
@@ -1418,7 +1424,6 @@ liquid.slag.description = Может быть переработан в разд
liquid.oil.description = Используется в производстве продвинутых материалов и как зажигательный боеприпас. liquid.oil.description = Используется в производстве продвинутых материалов и как зажигательный боеприпас.
liquid.cryofluid.description = Используется в качестве охлаждающей жидкости для реакторов, турелей и фабрик. liquid.cryofluid.description = Используется в качестве охлаждающей жидкости для реакторов, турелей и фабрик.
block.resupply-point.description = Снаряжает медными боеприпасами ближайшие боевые единицы. Не совместим с единицами, требующими питания от батареи.
block.armored-conveyor.description = Перемещает предметы вперёд. Не принимает вход по бокам. block.armored-conveyor.description = Перемещает предметы вперёд. Не принимает вход по бокам.
block.illuminator.description = Излучает свет. block.illuminator.description = Излучает свет.
block.message.description = Сохраняет сообщение для связи между союзниками. block.message.description = Сохраняет сообщение для связи между союзниками.
@@ -1598,6 +1603,11 @@ unit.omura.description = Стреляет дальнобойным пробив
unit.alpha.description = Защищает ядро «Осколок» от врагов. Основная строительная единица. unit.alpha.description = Защищает ядро «Осколок» от врагов. Основная строительная единица.
unit.beta.description = Защищает ядро «Штаб» от врагов. Основная строительная единица. unit.beta.description = Защищает ядро «Штаб» от врагов. Основная строительная единица.
unit.gamma.description = Защищает ядро «Атом» от врагов. Основная строительная единица. unit.gamma.description = Защищает ядро «Атом» от врагов. Основная строительная единица.
unit.retusa.description = Запускает самонаводящиеся торпеды в ближайших противников. Ремонтирует союзные единицы.
unit.oxynoe.description = Стреляет потоками пламени, которые восстанавливают союзные постройки и наносят урон врагам. Разрушает ближайшие вражеские снаряды с помощью турели точечной защиты.
unit.cyerce.description = Стреляет по врагам скоплениями ракет. Ремонтирует союзные единицы.
unit.aegires.description = Оглушает все вражеские единицы и постройки, которые попадают в его энергетическое поле. Ремонтирует всех союзников.
unit.navanax.description = Запускает взрывные ЭМИ-снаряды, которые наносят значительный урон силовым узлам противника и ремонтируют союзные постройки. Плавит ближайших врагов с помощью 4 автономных лазерных турелей.
lst.read = Считывает число из соединённой ячейки памяти. lst.read = Считывает число из соединённой ячейки памяти.
lst.write = Записывает число в соединённую ячейку памяти. lst.write = Записывает число в соединённую ячейку памяти.

File diff suppressed because it is too large Load Diff

View File

@@ -37,7 +37,7 @@ load.scripts = สคริปต์
be.update = เวอร์ชั่นรุ่นพัฒนาล่าสุดออกแล้ว: be.update = เวอร์ชั่นรุ่นพัฒนาล่าสุดออกแล้ว:
be.update.confirm = ดาวน์โหลดเวอร์ชั่นใหม่แล้วรีสตาร์ทเลยไหม? be.update.confirm = ดาวน์โหลดเวอร์ชั่นใหม่แล้วรีสตาร์ทเลยไหม?
be.updating = กำลังอัปเดต... be.updating = กำลังอัปเดต...
be.ignore = กเลิก be.ignore = เพิกเฉ
be.noupdates = ไม่พบอัปเดตใหม่ be.noupdates = ไม่พบอัปเดตใหม่
be.check = ตรวจหาอัปเดตใหม่ be.check = ตรวจหาอัปเดตใหม่
@@ -122,7 +122,7 @@ committingchanges = กำลังทำการเปลี่ยนแปล
done = เรียบร้อย done = เรียบร้อย
feature.unsupported = อุปกรณ์ของคุณไม่รองรับฟีเจอร์นี้ feature.unsupported = อุปกรณ์ของคุณไม่รองรับฟีเจอร์นี้
mods.initfailed = [red]⚠[] ไม่สามารถเปิดเกม Mindustry ได้ อาจเกิดจากม็อดที่ทำงานผิดปกติ\n\nเพื่อป้องกันการแครชต่อเนื่อง [red]ม็อดทั้งหมดได้ปิดตัวลง[]\n\nหากต้องการปิดฟีเจอร์นี้ ปิดได้ที่ [accent]ตั้งค่า->เกม->ปิดม็อดเมื่อเกมขัดข้อง[] mods.initfailed = [red]⚠[] ไม่สามารถเปิดเกม Mindustry ได้ อาจเกิดจากม็อดที่ทำงานผิดปกติ\n\nเพื่อป้องกันการแครชต่อเนื่อง [red]ม็อดทั้งหมดได้ปิดตัวลง[]
mods = ม็อด mods = ม็อด
mods.none = [lightgray]ไม่พบม็อด! mods.none = [lightgray]ไม่พบม็อด!
mods.guide = คู่มือการทำม็อด mods.guide = คู่มือการทำม็อด
@@ -152,7 +152,7 @@ mod.reloadrequired = [scarlet]จำเป็นต้องรีโหลด
mod.import = นำเข้าม็อด mod.import = นำเข้าม็อด
mod.import.file = นำเข้าไฟล์ mod.import.file = นำเข้าไฟล์
mod.import.github = นำเข้าม็อดจาก Github mod.import.github = นำเข้าม็อดจาก Github
mod.jarwarn = [scarlet]ม็อดไฟล์ JAR นั้นค่อนข้างไม่ปลอดภัย[]\nกรุณาเช็ให้แน่ใจว่าคุณนำเข้าม็อดนี้จะแหล่งที่เชื่อถือได้! mod.jarwarn = [scarlet]ม็อดไฟล์ JAR นั้นค่อนข้างไม่ปลอดภัย[]\nกรุณาเช็ให้แน่ใจว่าคุณนำเข้าม็อดนี้จะแหล่งที่เชื่อถือได้!
mod.item.remove = ไอเท็มนี้เป็นส่วนหนึ่งของม็อด [accent]'{0}'[] หากต้องการนำออก กรุณาถอนการติดตั้งม็อดนั้น mod.item.remove = ไอเท็มนี้เป็นส่วนหนึ่งของม็อด [accent]'{0}'[] หากต้องการนำออก กรุณาถอนการติดตั้งม็อดนั้น
mod.remove.confirm = ม็อดนี้จะถูกลบ mod.remove.confirm = ม็อดนี้จะถูกลบ
mod.author = [lightgray]ผู้สร้าง:[] {0} mod.author = [lightgray]ผู้สร้าง:[] {0}
@@ -201,7 +201,7 @@ server.kicked.customClient = เซิร์ฟเวอร์นี้ไม่
server.kicked.gameover = จบเกม! server.kicked.gameover = จบเกม!
server.kicked.serverRestarting = เซิร์ฟเวอร์กำลังเริ่มใหม่ server.kicked.serverRestarting = เซิร์ฟเวอร์กำลังเริ่มใหม่
server.versions = เวอร์ชั่นของคุณ:[accent] {0}[]\nเวอร์ชั่นของเซิร์ฟเวอร์:[accent] {1}[] server.versions = เวอร์ชั่นของคุณ:[accent] {0}[]\nเวอร์ชั่นของเซิร์ฟเวอร์:[accent] {1}[]
host.info = ปุ่ม[accent]โฮสต์[]นั้นโฮสต์เซิร์ฟเวอร์ที่พอร์ต [scarlet]6567[] \nทุกคนที่อยู่ใน [lightgray]Wi-Fi หรือเครือข่ายท้องถิ่น[]เดียวกันจะสามารถเห็นเซิร์ฟเวอร์ของคุณในรายชื่อของ\nเซิร์ฟเวอร์ได้\n\nถ้าคุณต้องการให้ผู้เล่นอื่นๆ สามารถเชื่อมต่อได้จากทุกที่โดยใช้ IP คุณจำเป็นจะต้องใช้การ[accent]การส่งต่อพอร์ต (Port Forwarding)[] \n\n[lightgray]โน๊ต: ถ้าผู้เล่นคนใดมีปัญหาในการเชื่อมต่อ LAN ของคุณ เช็ให้แน่ใจว่าคุณได้อนุญาตให้ Mindustry เข้าถึงเครือข่ายท้องถิ่นของคุณในการตั้งค่า Firewall จำไว้ว่าเครือข่ายสาธารณะบางครั้งอาจไม่อนุญาตการ\nค้นหาเซิร์ฟเวอร์ host.info = ปุ่ม[accent]โฮสต์[]นั้นโฮสต์เซิร์ฟเวอร์ที่พอร์ต [scarlet]6567[] \nทุกคนที่อยู่ใน [lightgray]Wi-Fi หรือเครือข่ายท้องถิ่น[]เดียวกันจะสามารถเห็นเซิร์ฟเวอร์ของคุณในรายชื่อของ\nเซิร์ฟเวอร์ได้\n\nถ้าคุณต้องการให้ผู้เล่นอื่นๆ สามารถเชื่อมต่อได้จากทุกที่โดยใช้ IP คุณจำเป็นจะต้องใช้การ[accent]การส่งต่อพอร์ต (Port Forwarding)[] \n\n[lightgray]โน๊ต: ถ้าผู้เล่นคนใดมีปัญหาในการเชื่อมต่อ LAN ของคุณ เช็ให้แน่ใจว่าคุณได้อนุญาตให้ Mindustry เข้าถึงเครือข่ายท้องถิ่นของคุณในการตั้งค่า Firewall จำไว้ว่าเครือข่ายสาธารณะบางครั้งอาจไม่อนุญาตการ\nค้นหาเซิร์ฟเวอร์
join.info = คุณสามารถใส่ [accent]IP ของเซิร์ฟเวอร์[]เพื่อที่จะเชื่อมต่อหรือค้นหาเซิร์ฟเวอร์ เซิร์ฟเวอร์ที่ใช้[accent]เครือข่ายท้องถิ่น[]จะสามารถเชื่อมโดยใช้\n LAN หรือ WAN ก็ได้\n\n[lightgray]ถ้าคุณอยากเชื่อมต่อกับใครบางคนโดยใช้ IP คุณต้องไปถามโฮสต์เอาว่า IP ของโฮสต์คืออะไร ซึ่งสามารถหาได้โดยการค้นหาในกูเกิ้ลว่า "ip ของฉัน" จากเครื่องของโฮสต์ join.info = คุณสามารถใส่ [accent]IP ของเซิร์ฟเวอร์[]เพื่อที่จะเชื่อมต่อหรือค้นหาเซิร์ฟเวอร์ เซิร์ฟเวอร์ที่ใช้[accent]เครือข่ายท้องถิ่น[]จะสามารถเชื่อมโดยใช้\n LAN หรือ WAN ก็ได้\n\n[lightgray]ถ้าคุณอยากเชื่อมต่อกับใครบางคนโดยใช้ IP คุณต้องไปถามโฮสต์เอาว่า IP ของโฮสต์คืออะไร ซึ่งสามารถหาได้โดยการค้นหาในกูเกิ้ลว่า "ip ของฉัน" จากเครื่องของโฮสต์
hostserver = โฮสต์เกมผู้เล่นหลายคน hostserver = โฮสต์เกมผู้เล่นหลายคน
invitefriends = ชวนเพื่อน invitefriends = ชวนเพื่อน
@@ -229,7 +229,7 @@ trace = แกะรอยผู้เล่น
trace.playername = ชื่อผู้เล่น: [accent]{0} trace.playername = ชื่อผู้เล่น: [accent]{0}
trace.ip = IP: [accent]{0} trace.ip = IP: [accent]{0}
trace.id = ID: [accent]{0} trace.id = ID: [accent]{0}
trace.mobile = ไคลเอนต์โมบาย: [accent]{0} trace.mobile = ไคลเอนต์โทรศัพท์: [accent]{0}
trace.modclient = ไคลเอนต์ปรับแต่ง: [accent]{0} trace.modclient = ไคลเอนต์ปรับแต่ง: [accent]{0}
trace.times.joined = เวลาเข้า: [accent]{0} trace.times.joined = เวลาเข้า: [accent]{0}
trace.times.kicked = เวลาโดนเตะ: [accent]{0} trace.times.kicked = เวลาโดนเตะ: [accent]{0}
@@ -343,7 +343,7 @@ loadimage = โหลดรูป
saveimage = เซฟรูป saveimage = เซฟรูป
unknown = ไม่ทราบ unknown = ไม่ทราบ
custom = กำหนดเอง custom = กำหนดเอง
builtin = ติดตัว builtin = ค่าเริ่มต้น
map.delete.confirm = คุณแน่ใจหรือว่าจะลบแมพนี้? การกระทำครั้งนี้ไม่สามารถย้อนกลับได้! map.delete.confirm = คุณแน่ใจหรือว่าจะลบแมพนี้? การกระทำครั้งนี้ไม่สามารถย้อนกลับได้!
map.random = [accent]สุ่มแมพ map.random = [accent]สุ่มแมพ
map.nospawn = แมพนี้ไม่มีแกนกลางให้ผู้เล่นเกิด! กรุณาใส่แกนกลาง[#{0}]{1}[] ลงในตัวแก้ไข map.nospawn = แมพนี้ไม่มีแกนกลางให้ผู้เล่นเกิด! กรุณาใส่แกนกลาง[#{0}]{1}[] ลงในตัวแก้ไข
@@ -379,6 +379,9 @@ editor.ingame = แก้ไขในเกม
editor.publish.workshop = เผยแพร่บนเวิร์กช็อป editor.publish.workshop = เผยแพร่บนเวิร์กช็อป
editor.newmap = แมพใหม่ editor.newmap = แมพใหม่
editor.center = ศูนย์กลางแมพ editor.center = ศูนย์กลางแมพ
editor.search = ค้นหาแมพ...
editor.filters = ตัวกรองแมพ
editor.showAll = แสดงแมพค่าเริ่มต้น
workshop = เวิร์กช็อป workshop = เวิร์กช็อป
waves.title = คลื่น waves.title = คลื่น
waves.remove = ลบ waves.remove = ลบ
@@ -432,8 +435,8 @@ editor.loadmap = โหลดแมพ
editor.savemap = เซฟแมพ editor.savemap = เซฟแมพ
editor.saved = เซฟเรียบร้อย! editor.saved = เซฟเรียบร้อย!
editor.save.noname = แมพของคุณไม่มีชื่อ! สามารถตั้งชื่อได้ในเมนู 'ข้อมูลแมพ' editor.save.noname = แมพของคุณไม่มีชื่อ! สามารถตั้งชื่อได้ในเมนู 'ข้อมูลแมพ'
editor.save.overwrite = แมพของคุณไปทับกับแมพติดตัว! เปลี่ยนชื่อได้ในเมนู 'ข้อมูลแมพ' editor.save.overwrite = แมพของคุณไปทับกับแมพค่าเริ่มต้น! เปลี่ยนชื่อได้ในเมนู 'ข้อมูลแมพ'
editor.import.exists = [scarlet]ไม่สามารถนำเข้าได้:[] มีแมพติดตัวที่ชื่อ '{0}' อยู่แล้ว! editor.import.exists = [scarlet]ไม่สามารถนำเข้าได้:[] มีแมพค่าเริ่มต้นที่ชื่อ '{0}' อยู่แล้ว!
editor.import = นำเข้า... editor.import = นำเข้า...
editor.importmap = นำเข้าแมพ editor.importmap = นำเข้าแมพ
editor.importmap.description = นำเข้าแมพที่มีอยู่แล้ว editor.importmap.description = นำเข้าแมพที่มีอยู่แล้ว
@@ -560,8 +563,8 @@ guardian = ผู้พิทักษ์
connectfail = [crimson]การเชื่อมต่อผิดพลาด:\n\n[accent]{0} connectfail = [crimson]การเชื่อมต่อผิดพลาด:\n\n[accent]{0}
error.unreachable = เซิร์ฟเวอร์ไม่สามารถเข้าถึงได้\nแน่ใจหรือว่าที่อยู่เขียนถูกต้อง? error.unreachable = เซิร์ฟเวอร์ไม่สามารถเข้าถึงได้\nแน่ใจหรือว่าที่อยู่เขียนถูกต้อง?
error.invalidaddress = ที่อยู่ไม่ถูกต้อง error.invalidaddress = ที่อยู่ไม่ถูกต้อง
error.timedout = Timed out!\nเช็ให้แน่ใจว่า port forwarding ของโฮสต์เปิดอยู่และที่อยู่นั้นถูกต้อง! error.timedout = Timed out!\nเช็ให้แน่ใจว่า port forwarding ของโฮสต์เปิดอยู่และที่อยู่นั้นถูกต้อง!
error.mismatch = Packet error:\nอาจเกิดจากเวอร์ชั่นของ ไคลเอนต์/เซิร์ฟเวอร์ ไม่ตรงกัน\nเช็ให้แน่ใจว่าคุณและโฮสต์ใช้ Mindustry เวอร์ชั่นล่าสุด! error.mismatch = Packet error:\nอาจเกิดจากเวอร์ชั่นของ ไคลเอนต์/เซิร์ฟเวอร์ ไม่ตรงกัน\nเช็ให้แน่ใจว่าคุณและโฮสต์ใช้ Mindustry เวอร์ชั่นล่าสุด!
error.alreadyconnected = เชื่อมต่ออยู่แล้ว error.alreadyconnected = เชื่อมต่ออยู่แล้ว
error.mapnotfound = ไม่พบไฟล์แมพ error.mapnotfound = ไม่พบไฟล์แมพ
error.io = Network I/O error error.io = Network I/O error
@@ -624,7 +627,7 @@ sector.stainedMountains.name = ภูเขาหลากสี
sector.desolateRift.name = เดโซเลต ริฟต์ sector.desolateRift.name = เดโซเลต ริฟต์
sector.nuclearComplex.name = ฐานผลิตนิวเคลียร์ sector.nuclearComplex.name = ฐานผลิตนิวเคลียร์
sector.overgrowth.name = โอเวอร์โกรว์ด sector.overgrowth.name = โอเวอร์โกรว์ด
sector.tarFields.name = ผืนแผ่นแห่งน้ำมัน sector.tarFields.name = ราบลุ่มน้ำมัน
sector.saltFlats.name = ที่ราบเกลือ sector.saltFlats.name = ที่ราบเกลือ
sector.fungalPass.name = ทางผ่านฟังกัล sector.fungalPass.name = ทางผ่านฟังกัล
sector.biomassFacility.name = แหล่งสังเคราะห์ชีวมวล sector.biomassFacility.name = แหล่งสังเคราะห์ชีวมวล
@@ -634,21 +637,21 @@ sector.planetaryTerminal.name = ท่าปล่อยจรวดอวกา
sector.coastline.name = แนวชายฝั่ง sector.coastline.name = แนวชายฝั่ง
sector.navalFortress.name = ปราการแห่งวารี sector.navalFortress.name = ปราการแห่งวารี
sector.groundZero.description = ที่ที่ดีที่สุดในการเริ่มต้นอีกครั้ง ศัตรูน้อย ทรัพยากรน้อย\nเก็บ[accent]ตะกั่ว[]และ[accent]ทองแดง[]ให้ได้มากที่สุด\nแล้วลุยต่อ sector.groundZero.description = ที่ที่ดีที่สุดในการเริ่มต้นอีกครั้ง ศัตรูน้อย ทรัพยากรน้อย\nเก็บ[accent]ตะกั่ว[]และ[orange]ทองแดง[]ให้ได้มากที่สุด\nแล้วลุยต่อ
sector.frozenForest.description = แม้แต่ที่นี่ ณ ที่ที่อยู่ใกล้ภูเขา [accent]สปอร์[]ก็ยังแพร่มาถึงที่นี่\nอากาศอันแสนเย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป\n\nเริ่มต้นการใช้ไฟฟ้า สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้\nเรียนรู้ที่จะใช้เครื่องซ่อมแซม sector.frozenForest.description = แม้แต่ที่นี่ ณ ที่ที่อยู่ใกล้ภูเขา [accent]สปอร์[]ก็ยังแพร่มาถึงที่นี่ อากาศอันแสนเย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป\n\nเริ่มต้นการใช้ไฟฟ้า สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้ เรียนรู้ที่จะใช้เครื่องซ่อมแซม
sector.saltFlats.description = ณ ขอบของทะเลทราย เป็นที่ตั้งของที่ราบเกลือ สามารถพบทรัพยากรบางอย่างได้ที่นี่\n\nศัตรูได้ตั้งฐานเก็บทรัพยากรไว้ที่นี่ ทำลายแกนกลางของพวกมัน อย่าให้มีอะไรเหลือ sector.saltFlats.description = ณ ขอบของทะเลทราย เป็นที่ตั้งของที่ราบเกลือ สามารถพบทรัพยากรบางอย่างได้ที่นี่\n\nศัตรูได้ตั้งฐานเก็บทรัพยากรไว้ที่นี่ ทำลายแกนกลางของพวกมัน อย่าให้มีอะไรเหลือ
sector.craters.description = มีน้ำขังอยู่ในหลุมอุกกาบาศแห่งนี้ เป็นอนุสรณ์สถานของสงครามเก่าแก่\nยึดพื้นที่นี่มา เก็บทราย เผา[accent]กระจกเมต้า[]\nปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและเครื่องขุดเจาะ sector.craters.description = มีน้ำขังอยู่ในหลุมอุกกาบาศแห่งนี้ เป็นอนุสรณ์สถานของสงครามเก่าแก่ ยึดพื้นที่นี่มา เก็บทราย เผา[white]กระจกเมต้า[] ปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและเครื่องขุดเจาะ
sector.ruinousShores.description = ถัดมาจากทะเลทราย เป็นที่ตั้งของชายฝั่ง ที่ครั้งก่อน เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง\nซึ่งทุกทำลายไปซะส่วนใหญ่แล้ว มีเหลือแค่ระบบการป้องกันพื้นฐาน\nทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก\n\nทำการขยายการสำรวจต่อไป ค้นพบกับเทคโนโลยีอีกครั้ง sector.ruinousShores.description = ถัดมาจากทะเลทราย เป็นที่ตั้งของชายฝั่ง ที่ครั้งก่อน เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง ซึ่งทุกทำลายไปซะส่วนใหญ่แล้ว มีเหลือแค่ระบบการป้องกันพื้นฐาน ทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก\n\nทำการขยายการสำรวจต่อไป ค้นพบกับเทคโนโลยีอีกครั้ง
sector.stainedMountains.description = เข้าลึกไปในพื้นที่ จะพบกับภูเขา ซึ่งยังไม่ถูกสปอร์แตะต้อง\nขุด[accent]ไทเทเนี่ยม[]ที่อุดมสมบูรณ์ในพื้นที่นี้ เรียนรู้ที่จะใช้มัน\n\nมีศัตรูปรากฏตัวมากขึ้นในบริเวณนี้ อย่าปล่อยให้พวกมันส่งยูนิตที่แข็งแกร่งที่สุดออกมา sector.stainedMountains.description = เข้าลึกไปในพื้นที่ จะพบกับภูเขา ซึ่งยังไม่ถูกสปอร์แตะต้อง\nขุด[sky]ไทเทเนี่ยม[]ที่อุดมสมบูรณ์ในพื้นที่นี้ เรียนรู้ที่จะใช้มัน\n\nมีศัตรูปรากฏตัวมากขึ้นในบริเวณนี้ อย่าปล่อยให้พวกมันส่งยูนิตที่แข็งแกร่งที่สุดออกมา
sector.overgrowth.description = พื้นที่นี้ถูกปกคลุมไปด้วยพืช เข้าใกล้กับแหล่งกำเนิดของสปอร์\nศัตรูได้ตั้งฐานเฝ้าระวังไว้ที่นี่ สร้างยูนิตเมส ทำลายฐานทิ้งซะ\nวิจัย[accent]เครื่องพัฒนารุ่นยกกำลัง[]เพื่อผลิตยูนิตขนาดที่ใหญ่ขึ้น sector.overgrowth.description = พื้นที่แห่งนี้ถูกปกคลุมไปด้วยพืชรกร้าง เริ่มเข้าใกล้กับแหล่งกำเนิดของสปอร์\nศัตรูได้ตั้งฐานเฝ้าระวังไว้ที่นี่ สร้างยูนิตเมส ทำลายฐานทิ้งซะ\nวิจัย[accent]เครื่องพัฒนารุ่นยกกำลัง[]เพื่อผลิตยูนิตขนาดที่ใหญ่ขึ้น
sector.tarFields.description = แนวชานขอบของแหล่งผลิตน้ำมัน อยู่ระหว่างภูเขาและทะเลทราย เป็นหนึ่งในพื้นที่ที่มีแหล่งน้ำมันดินที่ใช้งานได้\nแม้ว่าจะถูกทิ้งร้าง พื้นที่นี้ยังคงมีฐานทัพของศัตรูอยู่ใกล้ๆ อย่าประมาทกับพวกมัน\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้ sector.tarFields.description = แนวชานขอบของแหล่งผลิตน้ำมัน อยู่ระหว่างภูเขาและทะเลทราย เป็นหนึ่งในพื้นที่ที่มีแหล่งน้ำมันดินที่ใช้งานได้\nแม้ว่าจะถูกทิ้งร้าง พื้นที่นี้ยังคงมีฐานทัพของศัตรูอยู่ใกล้ๆ อย่าประมาทกับพวกมัน\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้[]
sector.desolateRift.description = เป็นพื้นที่ที่อันตรายมาก ทรัพยากรมากมาย แต่พื้นที่คับแคบ\nความเสี่ยงการโดนทำลายล้างสูง ออกไปจากที่นี่ให้เร็วที่สุด\nอย่าถูกหลอกโดยระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ sector.desolateRift.description = เป็นพื้นที่ที่อันตรายมาก ทรัพยากรมากมาย แต่พื้นที่คับแคบ ความเสี่ยงการโดนทำลายล้างสูง ออกไปจากที่นี่ให้เร็วที่สุด อย่าถูกหลอกโดยระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ
sector.nuclearComplex.description = สถานที่ผลิตและแปรรูปทอเรี่ยมเก่า ถูกทำลายไม่เหลือสิ้น\nวิจัยทอเรี่ยมและวิธีการใช้มัน\n\nศัตรูในบริเวณนี้มีจำนวนมาก คอยตรวจตราหาผู้บุกรุกอยู่ตลอดเวลา sector.nuclearComplex.description = สถานที่ผลิตและแปรรูป[pink]ทอเรี่ยม[]เก่า ถูกทำลายไม่เหลือสิ้น\nวิจัยทอเรี่ยมและวิธีการใช้มัน\n\nศัตรูในบริเวณนี้มีจำนวนมาก คอยตรวจตราหาผู้บุกรุกอยู่ตลอดเวลา
sector.fungalPass.description = ทางผ่านระหว่างพื้นที่สูงและต่ำของภูเขา พื้นที่นี้เต็มไปด้วยสปอร์ ฐานลาดตระเวนขนาดเล็กของศัตรูตั้งอยู่ที่นี่\nทำลายมันซะ\nผลิตยูนิตแด็กเกอร์และครอว์เลอร์ ทำลายแกนกลางทั้งสองไม่ให้เหลือซาก sector.fungalPass.description = ทางผ่านระหว่างพื้นที่สูงและต่ำของภูเขา พื้นที่นี้เต็มไปด้วยสปอร์ ฐานลาดตระเวนขนาดเล็กของศัตรูตั้งอยู่ที่นี่\nทำลายมันซะ\nผลิตยูนิตแด็กเกอร์และครอว์เลอร์ ทำลายแกนกลางทั้งสองไม่ให้เหลือซาก
sector.biomassFacility.description = แหล่งต้นกำเนิดของสปอร์ ที่นี่คือฐานวิจัยและผลิตสปอร์เริ่มแรก\nวิจัยเทคโนโลยีที่อยู่ภายในนั้น เพาะชำ[accent]สปอร์[]เพื่อเป็นเชื้อเพลิงและใช้ในการผลิตพลาสติก\n\n[gray]เมื่อสถานที่นี้ถูกทิ้งร้าง สปอร์ก็ถูกปล่อยออกมา ไม่มีสิ่งใดในระบบนิเวศท้องถิ่นที่สามารถแข่งขันกับสิ่งมีชีวิตที่\nแพร่กระจายเช่นนี้ได้ sector.biomassFacility.description = แหล่งต้นกำเนิดของสปอร์ ที่นี่คือฐานวิจัยและผลิตสปอร์เริ่มแรก\nวิจัยเทคโนโลยีที่อยู่ภายในนั้น เพาะชำ[accent]สปอร์[]เพื่อเป็นเชื้อเพลิงและใช้ในการผลิตพลาสติก\n\n[gray]เมื่อสถานที่นี้ถูกทิ้งร้าง สปอร์ก็ถูกปล่อยออกมา ไม่มีสิ่งใดในระบบนิเวศท้องถิ่นที่สามารถแข่งขันกับสิ่งมีชีวิตที่\nแพร่กระจายเช่นนี้ได้
sector.windsweptIslands.description = เลยแนวชายฝั่งไปจะพบกับหมู่เกาะที่ตั้งอยู่ห่างไกลแห่งนี้ เคยมีบันทึกว่าที่นี่มีโรงงานผลิต[accent]พลาสตาเนี่ยม[]อยู่\n\nทำลายเรือศัตรู สร้างฐานทัพบนเกาะ วิจัยโรงงานพวกนี้ sector.windsweptIslands.description = เลยแนวชายฝั่งไปจะพบกับหมู่เกาะที่ตั้งอยู่ห่างไกลแห่งนี้ เคยมีบันทึกว่าที่นี่มีโรงงานผลิต[green]พลาสตาเนี่ยม[]อยู่\n\nทำลายเรือศัตรู สร้างฐานทัพบนเกาะ วิจัยโรงงานพวกนี้
sector.extractionOutpost.description = ด่านที่อยู่ห่างไกล สร้างโดยศัตรูเพื่อใช้ในการส่งทรัพยากรไปยังฐานทัพอื่น\n\nเทคโนโลยีการส่งไอเท็มข้ามเซ็กเตอร์เป็นสิ่งจำเป็นสำหรับการพิชิตถัดๆ ไป ทำลายด่าน วิจัยฐานส่งของ sector.extractionOutpost.description = ด่านที่อยู่ห่างไกล สร้างโดยศัตรูเพื่อใช้ในการส่งทรัพยากรไปยังฐานทัพอื่น\n\nเทคโนโลยีการส่งไอเท็มข้ามเซ็กเตอร์เป็นสิ่งจำเป็นสำหรับการพิชิตถัดๆ ไป ทำลายด่าน วิจัยฐานส่งของ
sector.impact0078.description = ณ ที่แห่งนี้คือเศษซากของเรือขนส่งระหว่างดวงดาวที่เคยเข้ามายังระบบนี้\nเศษเหล็กและหิมะปกคลุมทั่วทั้งพื้นที่\n\nกอบกู้ซากยานให้ได้มากที่สุด วิจัยเทคโนโลยีทั้งหมดที่ยังเหลือรอด\n\n\n[gray]อย่าประมาทกับฐานทัพศัตรูที่อยู่ใกล้ๆ โดยอันขาด\nศัตรูจะส่งกองกำลังมาโจมตีเรื่อยๆ จนกว่าคุณจะพ่ายแพ้ sector.impact0078.description = ณ ที่แห่งนี้คือเศษซากของเรือขนส่งระหว่างดวงดาวที่เคยเข้ามายังระบบนี้\nเศษเหล็กและหิมะปกคลุมทั่วทั้งพื้นที่\n\nกอบกู้ซากยานให้ได้มากที่สุด วิจัยเทคโนโลยีทั้งหมดที่ยังเหลือรอด\n\n\n[gray]อย่าประมาทกับฐานทัพศัตรูที่อยู่ใกล้ๆ โดยอันขาด\nศัตรูจะส่งกองกำลังมาโจมตีเรื่อยๆ จนกว่าคุณจะพ่ายแพ้[]
sector.planetaryTerminal.description = เป้าหมายสุดท้าย\n\nฐานทัพติดชายหาดนี้มีสิ่งประดิษฐ์ที่สามารถส่งแกนกลางไปยังดาวที่อยู่ใกล้ๆ ได้ ฐานทัพมีการป้องกันที่แน่นหนามาก\n\nผลิตยูนิตเรือ กวาดล้างศัตรูให้เร็วที่สุด วิจัยสิ่งประดิษฐ์นั่น sector.planetaryTerminal.description = เป้าหมายสุดท้าย\n\nฐานทัพติดชายหาดนี้มีสิ่งประดิษฐ์ที่สามารถส่งแกนกลางไปยังดาวที่อยู่ใกล้ๆ ได้ ฐานทัพมีการป้องกันที่แน่นหนามาก\n\nผลิตยูนิตเรือ กวาดล้างศัตรูให้เร็วที่สุด วิจัยสิ่งประดิษฐ์นั่น
status.burning.name = เผาไหม้ status.burning.name = เผาไหม้
@@ -740,7 +743,7 @@ stat.maxunits = จำนวนยูนิตสูงสุด
stat.armor = เกราะ stat.armor = เกราะ
stat.health = พลังชีวิต stat.health = พลังชีวิต
stat.buildtime = เวลาในการสร้าง stat.buildtime = เวลาในการสร้าง
stat.maxconsecutive = ติดต่อกันสูงสุด stat.maxconsecutive = ติดต่อกันได้สูงสุด
stat.buildcost = ใช้ stat.buildcost = ใช้
stat.inaccuracy = ความคลาดเคลื่อน stat.inaccuracy = ความคลาดเคลื่อน
stat.shots = นัด stat.shots = นัด
@@ -920,7 +923,7 @@ setting.showweather.name = แสดงแกรฟฟิกสภาพอา
public.confirm = คุณต้องการให้เกมของคุณเปิดเป็นสาธารณะหรือไม่?\n[accent]ทุกคนจะสามารถเข้าร่วมเกมของคุณได้\n[lightgray]คุณสามารถเปลี่ยนการตั้งค่านี้ได้ที่ ตั้งค่า->เกม->การมองเห็นเซิร์ฟเวอร์สาธารณะ public.confirm = คุณต้องการให้เกมของคุณเปิดเป็นสาธารณะหรือไม่?\n[accent]ทุกคนจะสามารถเข้าร่วมเกมของคุณได้\n[lightgray]คุณสามารถเปลี่ยนการตั้งค่านี้ได้ที่ ตั้งค่า->เกม->การมองเห็นเซิร์ฟเวอร์สาธารณะ
public.confirm.really = หากคุณอยากเล่นกับเล่นกับเพื่อน ใช้[green]ชวนเพื่อน[]ดีกว่า แทนที่จะใช้[scarlet]เซิร์ฟเวอร์สาธารณะ[]!\nคุณแน่ใจนะว่าจะเปลี่ยนเกมคุณเป็น[scarlet]สาธารณะ[]? public.confirm.really = หากคุณอยากเล่นกับเล่นกับเพื่อน ใช้[green]ชวนเพื่อน[]ดีกว่า แทนที่จะใช้[scarlet]เซิร์ฟเวอร์สาธารณะ[]!\nคุณแน่ใจนะว่าจะเปลี่ยนเกมคุณเป็น[scarlet]สาธารณะ[]?
public.beta = เกมเวอร์ชั่นเบต้าไม่สามารถเปิดเซิร์ฟเวอร์สาธารณะได้ public.beta = เกมเวอร์ชั่นเบต้าไม่สามารถเปิดเซิร์ฟเวอร์สาธารณะได้
uiscale.reset = อัตราขนาดของ UI ได้มีการเปลี่ยนแปลง\nกด "โอเค" เพื่อยืนยันขนาด UI นี้\n[scarlet]จะเปลี่ยนกลับไปเป็นแบบเดิมและออกในอีก[accent] {0}[] วินาที... uiscale.reset = อัตราขนาดของ UI ได้มีการเปลี่ยนแปลง\nกด "โอเค" เพื่อยืนยันขนาด UI นี้\n[scarlet]จะเปลี่ยนกลับไปเป็นขนาดเดิมและออกในอีก[accent] {0}[] วินาที...
uiscale.cancel = ยกเลิกและออก uiscale.cancel = ยกเลิกและออก
setting.bloom.name = บลูม setting.bloom.name = บลูม
keybind.title = ตั้งค่าปุ่ม keybind.title = ตั้งค่าปุ่ม
@@ -1130,6 +1133,7 @@ block.sand-boulder.name = ก้อนหินทราย
block.basalt-boulder.name = ก้อนบะซอลต์ block.basalt-boulder.name = ก้อนบะซอลต์
block.grass.name = หญ้า block.grass.name = หญ้า
block.molten-slag.name = แร่หลอมละลาย block.molten-slag.name = แร่หลอมละลาย
block.pooled-cryofluid.name = สารหล่อเย็น
block.space.name = อวกาศ block.space.name = อวกาศ
block.salt.name = เกลือ block.salt.name = เกลือ
block.salt-wall.name = กำแพงเกลือ block.salt-wall.name = กำแพงเกลือ
@@ -1298,7 +1302,7 @@ block.thorium-reactor.name = เตาปฏิกรณ์ทอเรี่ย
block.mass-driver.name = เครื่องโอนถ่ายมวล block.mass-driver.name = เครื่องโอนถ่ายมวล
block.blast-drill.name = เครื่องขุดแอร์บลาสต์ block.blast-drill.name = เครื่องขุดแอร์บลาสต์
block.thermal-pump.name = ปั๊มความร้อน block.thermal-pump.name = ปั๊มความร้อน
block.thermal-generator.name = เครื่องกำเนิดไฟฟ้าจากความร้อน block.thermal-generator.name = เครื่องกำเนิดไฟฟ้าพลังอัคคี
block.alloy-smelter.name = เครื่องหลอมอัลลอย block.alloy-smelter.name = เครื่องหลอมอัลลอย
block.mender.name = เครื่องซ่อมแซม block.mender.name = เครื่องซ่อมแซม
block.mend-projector.name = เครื่องฉายซ่อมแซม block.mend-projector.name = เครื่องฉายซ่อมแซม
@@ -1532,8 +1536,8 @@ block.thorium-reactor.description = ผลิตพลังงานจำน
block.thorium-reactor.details = เตาปฏิกรที่เป็นดาบสองคม ผลิตพลังงานได้มหาศาลขึ้นอยู่จำนวนทอเรี่ยม แต่จะระเบิดอย่างรุนแรงเช่นกันหากขาดสารหล่อเย็น ควรมั่นใจเรื่องทรัพยากรก่อนใช้เตาปฎิกรนี้ block.thorium-reactor.details = เตาปฏิกรที่เป็นดาบสองคม ผลิตพลังงานได้มหาศาลขึ้นอยู่จำนวนทอเรี่ยม แต่จะระเบิดอย่างรุนแรงเช่นกันหากขาดสารหล่อเย็น ควรมั่นใจเรื่องทรัพยากรก่อนใช้เตาปฎิกรนี้
block.impact-reactor.description = สามารถผลิตไฟฟ้าได้จำนวนมหาศาลที่ประสิทธิภาพสูงสุด จำเป็นต้องใช้พลังงานจำนวนมากในการสตาร์ทเครื่อง block.impact-reactor.description = สามารถผลิตไฟฟ้าได้จำนวนมหาศาลที่ประสิทธิภาพสูงสุด จำเป็นต้องใช้พลังงานจำนวนมากในการสตาร์ทเครื่อง
block.mechanical-drill.description = เมื่อวางบนพื้นแร่ จะขุดแร่นั้นและส่งออกมาอย่างช้าๆ\nไปเรื่อยๆ ไม่มีที่สิ้นสุด ขุดได้แค่ทรัพยากรพื้นฐาน block.mechanical-drill.description = เมื่อวางบนพื้นแร่ จะขุดแร่นั้นและส่งออกมาอย่างช้าๆ\nไปเรื่อยๆ ไม่มีที่สิ้นสุด ขุดได้แค่ทรัพยากรพื้นฐาน
block.pneumatic-drill.description = เครื่องขุดที่ได้รับการปรับปรุง สามารถขุด[accent]ไทเทเนี่ยม[]ได้ ขุดได้เร็วกว่าเครื่องขุดเชิงกล block.pneumatic-drill.description = เครื่องขุดที่ได้รับการปรับปรุง สามารถขุด[sky]ไทเทเนี่ยม[]ได้ ขุดได้เร็วกว่าเครื่องขุดเชิงกล
block.laser-drill.description = ขุดได้เร็วขึ้นด้วยเทคโนโลยีเลเซอร์ แต่ต้องใช้พลังงาน\nสามารถขุด[accent]ทอเรี่ยม[]ได้ block.laser-drill.description = ขุดได้เร็วขึ้นด้วยเทคโนโลยีเลเซอร์ แต่ต้องใช้พลังงาน\nสามารถขุด[pink]ทอเรี่ยม[]ได้
block.blast-drill.description = เครื่องขุดขั้นสุดยอด ใช้พลังงานจำนวนมาก block.blast-drill.description = เครื่องขุดขั้นสุดยอด ใช้พลังงานจำนวนมาก
block.water-extractor.description = ขุดน้ำบาดาลจากใต้พื้นดิน ใช้ในพื้นที่ที่ไม่มีน้ำบนดินให้ใช้ block.water-extractor.description = ขุดน้ำบาดาลจากใต้พื้นดิน ใช้ในพื้นที่ที่ไม่มีน้ำบนดินให้ใช้
block.cultivator.description = รวบรวมสปอร์ในชั้นบรรยากาศมาสกัดเป็นกระเปาะสปอร์สำหรับ\nอุตสาหกรรม block.cultivator.description = รวบรวมสปอร์ในชั้นบรรยากาศมาสกัดเป็นกระเปาะสปอร์สำหรับ\nอุตสาหกรรม
@@ -1594,15 +1598,15 @@ block.repair-turret.description = ซ่อมแซมยูนิตที่
block.payload-propulsion-tower.description = บล็อกขนส่งสิ่งบรรทุกทางไกล\nยิงสิ่งบรรทุกไปยังหอเคลื่อนย้ายสิ่งบรรทุกอีกเครื่องที่เชื่อมต่อไว้ block.payload-propulsion-tower.description = บล็อกขนส่งสิ่งบรรทุกทางไกล\nยิงสิ่งบรรทุกไปยังหอเคลื่อนย้ายสิ่งบรรทุกอีกเครื่องที่เชื่อมต่อไว้
unit.dagger.description = ยิงกระสุนธรรมดาใส่ศัตรูที่อยู่ใกล้เคียง unit.dagger.description = ยิงกระสุนธรรมดาใส่ศัตรูที่อยู่ใกล้เคียง
unit.mace.description = ยิงเปลวไฟใส่ศัตรูที่อยู่ใกล้เคียง ทำให้ศัตรูถูกเผาไหม้ unit.mace.description = ยิงเปลวไฟเผาไหม้ใส่ศัตรูที่อยู่ใกล้เคียง
unit.fortress.description = ยิงปืนใหญ่พิสัยไกลไปที่เป้าหมายพื้นดิน unit.fortress.description = ยิงปืนใหญ่พิสัยไกลไปที่เป้าหมายพื้นดิน
unit.scepter.description = ยิงกระสุนชาร์จใส่ศัตรูใกล้เคียงทั้งหมด กระสุนจะระเบิดออกเป็นพลังงานสายฟ้า สร้างความเสียหายแก่ป้อมปืนที่อยู่หลังกำแพ unit.scepter.description = ยิงกระสุนชาร์จใส่ศัตรูใกล้เคียงทั้งหมด กระสุนจะระเบิดออกเป็นพลังงานสายฟ้า สร้างความเสียหายแก่ยูนิตรอบข้า
unit.reign.description = ยิงกระสุนเจาะทะลุขนาดใหญ่ใส่ศัตรูที่อยู่ใกล้เคียง กระสุนสามารถกระจายตัวไปโจมตีป้อมปืนที่หลบอยู่หลังกำแพงได้ unit.reign.description = ยิงกระสุนเจาะทะลุขนาดใหญ่ใส่ศัตรูที่อยู่ใกล้เคียง กระสุนสามารถกระจายตัวไปโจมตีป้อมปืนที่หลบอยู่หลังกำแพงได้
unit.nova.description = ยิงเลเซอร์ที่สร้างความเสียหายให้กับศัตรูและซ่อมแซมสิ่งก่อสร้างของ\nพวกพ้อง สามารถบินได้ unit.nova.description = ยิงเลเซอร์ที่สร้างความเสียหายให้กับศัตรูและซ่อมแซมสิ่งก่อสร้างของ\nพวกพ้อง สามารถบินได้
unit.pulsar.description = ยิงสายฟ้าที่สร้างความเสียหายให้กับศัตรูและซ่อมแซมสิ่งก่อสร้างของ\nพวกพ้อง สามารถบินได้ unit.pulsar.description = ยิงสายฟ้าที่สร้างความเสียหายให้กับศัตรูและซ่อมแซมสิ่งก่อสร้างของ\nพวกพ้อง สามารถบินได้
unit.quasar.description = ยิงลำแสงเลเซอร์เจาะทะลุที่สร้างความเสียหายให้กับศัตรูและซ่อมแซม\nสิ่งก่อสร้างของพวกพ้อง มีโล่พลังงานเพื่อป้องกันร่างกายอันบอบบาง\nสามารถบินได้ unit.quasar.description = ยิงลำแสงเลเซอร์เจาะทะลุที่สร้างความเสียหายให้กับศัตรูและซ่อมแซม\nสิ่งก่อสร้างของพวกพ้อง มีโล่พลังงานเพื่อป้องกันร่างกายอันบอบบาง\nสามารถบินได้
unit.vela.description = ยิงลำแสงเลเซอร์ต่อเนื่องขนาดใหญ่ที่สร้างความเสียหายให้กับศัตรู ทำให้เกิดไฟไหม้ และซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nสามารถบินได้ unit.vela.description = ยิงลำแสงเลเซอร์ต่อเนื่องขนาดใหญ่ที่สร้างความเสียหายให้กับศัตรู ทำให้เกิดไฟไหม้ และซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nสามารถบินได้
unit.corvus.description = ยิงลำแสงเลเซอร์ระเบิดขนาดใหญ่ที่สร้างความเสียหายอย่างหนักให้กับศัตรู\nและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง สามารถเหยียบข้ามกำแพงได้ unit.corvus.description = ยิงลำแสงเลเซอร์พลังงานขนาดใหญ่ที่สร้างความเสียหายอย่างหนัก\nให้กับศัตรูและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง สามารถเหยียบข้ามกำแพงได้
unit.crawler.description = วิ่งเข้าหาศัตรูแล้วระเบิดตัวเอง ทำให้เกิดระเบิดขนาดใหญ่ unit.crawler.description = วิ่งเข้าหาศัตรูแล้วระเบิดตัวเอง ทำให้เกิดระเบิดขนาดใหญ่
unit.atrax.description = ยิงลูกแก้วแร่หลอมใส่เป้าหมายพื้นดิน ทำให้ศัตรูถูกเผาไหม้ สามารถเหยียบข้ามกำแพงได้ unit.atrax.description = ยิงลูกแก้วแร่หลอมใส่เป้าหมายพื้นดิน ทำให้ศัตรูถูกเผาไหม้ สามารถเหยียบข้ามกำแพงได้
unit.spiroct.description = ยิงเลเซอร์ทอนกำลังใส่ศัตรู ซ่อมแซมตัวเองไปในตัว สามารถเหยียบข้ามกำแพงได้ unit.spiroct.description = ยิงเลเซอร์ทอนกำลังใส่ศัตรู ซ่อมแซมตัวเองไปในตัว สามารถเหยียบข้ามกำแพงได้
@@ -1626,10 +1630,10 @@ unit.omura.description = ยิงลำแสงปืนเรลกันเ
unit.alpha.description = ปกป้องแกนกลางชาร์ดจากศัตรู สร้างสิ่งต่างๆ unit.alpha.description = ปกป้องแกนกลางชาร์ดจากศัตรู สร้างสิ่งต่างๆ
unit.beta.description = ปกป้องแกนกลางฟาวน์เดชั่นจากศัตรู สร้างสิ่งต่างๆ unit.beta.description = ปกป้องแกนกลางฟาวน์เดชั่นจากศัตรู สร้างสิ่งต่างๆ
unit.gamma.description = ปกป้องแกนกลางนิวเคลียสจากศัตรู สร้างสิ่งต่างๆ unit.gamma.description = ปกป้องแกนกลางนิวเคลียสจากศัตรู สร้างสิ่งต่างๆ
unit.retusa.description = วางทุ่นระเบิดระยะใกล้ และซ่อมแซมยูนิตพวกพ้องที่อยู่ใกล้เคียง unit.retusa.description = ยิงตอร์ปิโดติดตามตัวใส่ศัตรูที่อยู่ใกล้เคียง และซ่อมแซมยูนิตพวกพ้องที่อยู่ใกล้เคียง
unit.oxynoe.description = ยิงเปลวไฟเผาไหม้ใส่ศัตรูที่อยู่ใกล้เคียงและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nทำลายกระสุนที่กำลังเข้ามาด้วยปืนป้องกันจุด\nให้สถานะ[accent]โอเวอร์คล็อก[]แก่พวกพ้องรอบข้าง ทำให้ยิงเร็วและแรงขึ้น unit.oxynoe.description = ยิงเปลวไฟเผาไหม้ใส่ศัตรูที่อยู่ใกล้เคียงและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nทำลายกระสุนที่กำลังเข้ามาด้วยปืนป้องกันจุด\nให้สถานะ[accent]โอเวอร์คล็อก[]แก่พวกพ้องรอบข้าง ทำให้ยิงเร็วและแรงขึ้น
unit.cyerce.description = ยิงขีปนาวุธพลาสม่าติดตามตัวเป็นกระจุกระเบิดใส่ศัตรู\nซ่อมแซมยูนิตพวกพ้องที่อยู่ใกล้เคียงด้วยปืนซ่อมแซม unit.cyerce.description = ยิงขีปนาวุธพลาสม่าติดตามตัวเป็นกระจุกระเบิดใส่ศัตรู\nซ่อมแซมยูนิตพวกพ้องที่อยู่ใกล้เคียงด้วยปืนซ่อมแซม
unit.aegires.description = ช็อตทุกสิ่งก่อสร้างและยูนิตศัตรูที่เข้ามาในสนามพลังงานของมัน\nซ่อมแซมสิ่งก่อสร้างและยูนิตพวกพ้อง unit.aegires.description = ช็อตทุกสิ่งก่อสร้างและยูนิตศัตรูที่เข้ามาในสนามพลังงานของมัน\nด้วยสายฟ้าฟาด ซ่อมแซมสิ่งก่อสร้างและยูนิตพวกพ้อง
unit.navanax.description = ยิงลูกระเบิดคลื่นชีพจรแม่เหล็กขนาดใหญ่ สร้างความเสียหายอย่างหนักให้กับเครือข่ายพลังงานศัตรู\nและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nหลอมละลายศัตรูที่อยู่ใกล้เคียงด้วยป้อมปืนเลเซอร์อัตโนมัติสี่ป้อม unit.navanax.description = ยิงลูกระเบิดคลื่นชีพจรแม่เหล็กขนาดใหญ่ สร้างความเสียหายอย่างหนักให้กับเครือข่ายพลังงานศัตรู\nและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nหลอมละลายศัตรูที่อยู่ใกล้เคียงด้วยป้อมปืนเลเซอร์อัตโนมัติสี่ป้อม
lst.read = อ่านเลขจากเซลล์ความจำที่เชื่อมต่อไว้ lst.read = อ่านเลขจากเซลล์ความจำที่เชื่อมต่อไว้
@@ -1751,16 +1755,16 @@ radar.output = ตัวแปรของยูนิตที่มองห
unitradar.target = ตัวกรองในการหายูนิต unitradar.target = ตัวกรองในการหายูนิต
unitradar.and = ตัวกรองเพิ่มเติม unitradar.and = ตัวกรองเพิ่มเติม
unitradar.order = เรียงลำดับคำสั่ง\n0 เพื่อย้อนกลับ unitradar.order = เรียงลำดับคำสั่ง\n0 เพื่อเรียงย้อนกลับ
unitradar.sort = เมตริกเพื่อจัดเรียงผลลัพย์ตาม unitradar.sort = เมตริกเพื่อจัดเรียงผลลัพย์ตาม
unitradar.output = ตัวแปรของยูนิตที่มองหา unitradar.output = ตัวแปรของยูนิตที่มองหา
control.of = สิ่งก่อสร้างให้ควบคุม control.of = สิ่งก่อสร้างให้ควบคุม
control.unit = ยูนิต/สิ่งก่อสร้างที่จะเล็ง control.unit = ยูนิต/สิ่งก่อสร้างที่จะเล็ง
control.shoot = ว่าจะยิงหรือเปล่า control.shoot = ว่าจะยิงหรือไม่
unitlocate.enemy = ว่าจะหาสิ่งก่อสร้างศัตรูหรือไม่ unitlocate.enemy = ว่าจะหาสิ่งก่อสร้างศัตรูหรือไม่
unitlocate.found = ตัวแปรว่าหาเจอหรือไม่\nจะส่งกลับว่า true หากเจอสิ่งก่อสร้าง unitlocate.found = ตัวแปรว่าพบเจอหรือไม่\nจะส่งกลับว่า true หากเจอสิ่งก่อสร้าง
unitlocate.building = ตัวแปรสิ่งก่อสร้างที่มองหา unitlocate.building = ตัวแปรสิ่งก่อสร้างที่มองหา
unitlocate.outx = ตัวแปรพิกัด X unitlocate.outx = ตัวแปรพิกัด X
unitlocate.outy = ตัวแปรพิกัด Y unitlocate.outy = ตัวแปรพิกัด Y

Binary file not shown.

BIN
core/assets/music/boss1.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
core/assets/music/boss2.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
core/assets/music/game1.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
core/assets/music/game2.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
core/assets/music/game3.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
core/assets/music/game4.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
core/assets/music/game5.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
core/assets/music/game6.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
core/assets/music/game7.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
core/assets/music/game8.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
core/assets/music/game9.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
core/assets/music/land.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
core/assets/music/menu.ogg Normal file

Binary file not shown.

View File

@@ -191,6 +191,7 @@ const PlayEvent = Packages.mindustry.game.EventType.PlayEvent
const DisposeEvent = Packages.mindustry.game.EventType.DisposeEvent const DisposeEvent = Packages.mindustry.game.EventType.DisposeEvent
const ServerLoadEvent = Packages.mindustry.game.EventType.ServerLoadEvent const ServerLoadEvent = Packages.mindustry.game.EventType.ServerLoadEvent
const ClientCreateEvent = Packages.mindustry.game.EventType.ClientCreateEvent const ClientCreateEvent = Packages.mindustry.game.EventType.ClientCreateEvent
const SaveWriteEvent = Packages.mindustry.game.EventType.SaveWriteEvent
const SaveLoadEvent = Packages.mindustry.game.EventType.SaveLoadEvent const SaveLoadEvent = Packages.mindustry.game.EventType.SaveLoadEvent
const MapPublishEvent = Packages.mindustry.game.EventType.MapPublishEvent const MapPublishEvent = Packages.mindustry.game.EventType.MapPublishEvent
const MapMakeEvent = Packages.mindustry.game.EventType.MapMakeEvent const MapMakeEvent = Packages.mindustry.game.EventType.MapMakeEvent

View File

@@ -132,6 +132,8 @@ public class Vars implements Loadable{
Color.valueOf("4b5ef1"), Color.valueOf("4b5ef1"),
Color.valueOf("2cabfe"), Color.valueOf("2cabfe"),
}; };
/** maximum TCP packet size */
public static final int maxTcpSize = 900;
/** default server port */ /** default server port */
public static final int port = 6567; public static final int port = 6567;
/** multicast discovery port.*/ /** multicast discovery port.*/
@@ -199,6 +201,8 @@ public class Vars implements Loadable{
public static final String saveExtension = "msav"; public static final String saveExtension = "msav";
/** schematic file extension */ /** schematic file extension */
public static final String schematicExtension = "msch"; public static final String schematicExtension = "msch";
/** path to the java executable */
public static String javaPath;
/** list of all locales that can be switched to */ /** list of all locales that can be switched to */
public static Locale[] locales; public static Locale[] locales;
@@ -293,6 +297,10 @@ public class Vars implements Loadable{
pathfinder = new Pathfinder(); pathfinder = new Pathfinder();
bases = new BaseRegistry(); bases = new BaseRegistry();
constants = new GlobalConstants(); constants = new GlobalConstants();
javaPath =
new Fi(OS.prop("java.home")).child("bin/java").exists() ? new Fi(OS.prop("java.home")).child("bin/java").absolutePath() :
Core.files.local("jre/bin/java").exists() ? Core.files.local("jre/bin/java").absolutePath() :
"java";
state = new GameState(); state = new GameState();

View File

@@ -28,11 +28,11 @@ public class StatusEffects implements ContentList{
init(() -> { init(() -> {
opposite(wet, freezing); opposite(wet, freezing);
affinity(tarred, ((unit, result, time) -> { affinity(tarred, (unit, result, time) -> {
unit.damagePierce(transitionDamage); unit.damagePierce(transitionDamage);
Fx.burning.at(unit.x + Mathf.range(unit.bounds() / 2f), unit.y + Mathf.range(unit.bounds() / 2f)); Fx.burning.at(unit.x + Mathf.range(unit.bounds() / 2f), unit.y + Mathf.range(unit.bounds() / 2f));
result.set(burning, Math.min(time + result.time, 300f)); result.set(burning, Math.min(time + result.time, 300f));
})); });
}); });
}}; }};
@@ -46,9 +46,9 @@ public class StatusEffects implements ContentList{
init(() -> { init(() -> {
opposite(melting, burning); opposite(melting, burning);
affinity(blasted, ((unit, result, time) -> { affinity(blasted, (unit, result, time) -> {
unit.damagePierce(transitionDamage); unit.damagePierce(transitionDamage);
})); });
}); });
}}; }};

View File

@@ -187,15 +187,15 @@ public class NetClient implements ApplicationListener{
effect(effect, x, y, rotation, color); effect(effect, x, y, rotation, color);
} }
//called on all clients
@Remote(targets = Loc.server, variants = Variant.both) @Remote(targets = Loc.server, variants = Variant.both)
public static void sendMessage(String message, String sender, Player playersender){ public static void sendMessage(String message, @Nullable String unformatted, @Nullable Player playersender){
if(Vars.ui != null){ if(Vars.ui != null){
Vars.ui.chatfrag.addMessage(message, sender); Vars.ui.chatfrag.addMessage(message);
} }
if(playersender != null){ //display raw unformatted text above player head
playersender.lastText(message); if(playersender != null && unformatted != null){
playersender.lastText(unformatted);
playersender.textFadeTime(1f); playersender.textFadeTime(1f);
} }
} }
@@ -204,7 +204,7 @@ public class NetClient implements ApplicationListener{
@Remote(called = Loc.server, targets = Loc.server) @Remote(called = Loc.server, targets = Loc.server)
public static void sendMessage(String message){ public static void sendMessage(String message){
if(Vars.ui != null){ if(Vars.ui != null){
Vars.ui.chatfrag.addMessage(message, null); Vars.ui.chatfrag.addMessage(message);
} }
} }
@@ -240,7 +240,7 @@ public class NetClient implements ApplicationListener{
//special case; graphical server needs to see its message //special case; graphical server needs to see its message
if(!headless){ if(!headless){
sendMessage(message, colorizeName(player.id, player.name), player); sendMessage(netServer.chatFormatter.format(player, message), message, player);
} }
//server console logging //server console logging
@@ -248,7 +248,7 @@ public class NetClient implements ApplicationListener{
//invoke event for all clients but also locally //invoke event for all clients but also locally
//this is required so other clients get the correct name even if they don't know who's sending it yet //this is required so other clients get the correct name even if they don't know who's sending it yet
Call.sendMessage(message, colorizeName(player.id(), player.name), player); Call.sendMessage(netServer.chatFormatter.format(player, message), message, player);
}else{ }else{
//a command was sent, now get the output //a command was sent, now get the output
@@ -284,12 +284,6 @@ public class NetClient implements ApplicationListener{
} }
} }
public static String colorizeName(int id, String name){
Player player = Groups.player.getByID(id);
if(name == null || player == null) return null;
return "[#" + player.color().toString().toUpperCase() + "]" + name;
}
@Remote(called = Loc.client, variants = Variant.one) @Remote(called = Loc.client, variants = Variant.one)
public static void connect(String ip, int port){ public static void connect(String ip, int port){
if(!steam && ip.startsWith("steam:")) return; if(!steam && ip.startsWith("steam:")) return;

View File

@@ -64,6 +64,8 @@ public class NetServer implements ApplicationListener{
return state.rules.defaultTeam; return state.rules.defaultTeam;
}; };
/** Converts a message + NULLABLE player sender into a single string. Override for custom prefixes/suffixes. */
public ChatFormatter chatFormatter = (player, message) -> player == null ? message : "[coral][[" + player.coloredName() + "[coral]]:[white] " + message;
private boolean closing = false; private boolean closing = false;
private Interval timer = new Interval(); private Interval timer = new Interval();
@@ -293,20 +295,22 @@ public class NetServer implements ApplicationListener{
clientCommands.<Player>register("t", "<message...>", "Send a message only to your teammates.", (args, player) -> { clientCommands.<Player>register("t", "<message...>", "Send a message only to your teammates.", (args, player) -> {
String message = admins.filterMessage(player, args[0]); String message = admins.filterMessage(player, args[0]);
if(message != null){ if(message != null){
Groups.player.each(p -> p.team() == player.team(), o -> o.sendMessage(message, player, "[#" + player.team().color.toString() + "]<T>" + NetClient.colorizeName(player.id(), player.name))); String raw = "[#" + player.team().color.toString() + "]<T> " + chatFormatter.format(player, message);
Groups.player.each(p -> p.team() == player.team(), o -> o.sendMessage(raw, player, message));
} }
}); });
clientCommands.<Player>register("a", "<message...>", "Send a message only to admins.", (args, player) -> { clientCommands.<Player>register("a", "<message...>", "Send a message only to admins.", (args, player) -> {
if(!player.admin){ if(!player.admin){
player.sendMessage("[scarlet]You must be admin to use this command."); player.sendMessage("[scarlet]You must be an admin to use this command.");
return; return;
} }
Groups.player.each(Player::admin, a -> a.sendMessage(args[0], player, "[#" + Pal.adminChat.toString() + "]<A>" + NetClient.colorizeName(player.id, player.name))); String raw = "[#" + Pal.adminChat.toString() + "]<A> " + chatFormatter.format(player, args[0]);
Groups.player.each(Player::admin, a -> a.sendMessage(raw, player, args[0]));
}); });
//duration of a a kick in seconds //duration of a kick in seconds
int kickDuration = 60 * 60; int kickDuration = 60 * 60;
//voting round duration in seconds //voting round duration in seconds
float voteDuration = 0.5f * 60; float voteDuration = 0.5f * 60;
@@ -981,4 +985,9 @@ public class NetServer implements ApplicationListener{
public interface TeamAssigner{ public interface TeamAssigner{
Team assign(Player player, Iterable<Player> players); Team assign(Player player, Iterable<Player> players);
} }
public interface ChatFormatter{
/** @return text to be placed before player name */
String format(@Nullable Player player, String message);
}
} }

View File

@@ -314,6 +314,7 @@ public class Renderer implements ApplicationListener{
Draw.draw(Layer.overlayUI, overlays::drawTop); Draw.draw(Layer.overlayUI, overlays::drawTop);
Draw.draw(Layer.space, this::drawLanding); Draw.draw(Layer.space, this::drawLanding);
Events.fire(Trigger.drawOver);
blocks.drawBlocks(); blocks.drawBlocks();
Groups.draw.draw(Drawc::draw); Groups.draw.draw(Drawc::draw);

View File

@@ -108,7 +108,7 @@ public class Damage{
furthest = null; furthest = null;
boolean found = world.raycast(b.tileX(), b.tileY(), World.toTile(b.x + Tmp.v1.x), World.toTile(b.y + Tmp.v1.y), boolean found = world.raycast(b.tileX(), b.tileY(), World.toTile(b.x + Tmp.v1.x), World.toTile(b.y + Tmp.v1.y),
(x, y) -> (furthest = world.tile(x, y)) != null && furthest.team() != b.team && furthest.block().absorbLasers); (x, y) -> (furthest = world.tile(x, y)) != null && furthest.team() != b.team && (furthest.build != null && furthest.build.absorbLasers()));
return found && furthest != null ? Math.max(6f, b.dst(furthest.worldx(), furthest.worldy())) : length; return found && furthest != null ? Math.max(6f, b.dst(furthest.worldx(), furthest.worldy())) : length;
} }

View File

@@ -53,7 +53,7 @@ public class Lightning{
world.raycastEach(World.toTile(from.getX()), World.toTile(from.getY()), World.toTile(to.getX()), World.toTile(to.getY()), (wx, wy) -> { world.raycastEach(World.toTile(from.getX()), World.toTile(from.getY()), World.toTile(to.getX()), World.toTile(to.getY()), (wx, wy) -> {
Tile tile = world.tile(wx, wy); Tile tile = world.tile(wx, wy);
if(tile != null && tile.block().insulated && tile.team() != team){ if(tile != null && (tile.build != null && tile.build.isInsulated()) && tile.team() != team){
bhit = true; bhit = true;
//snap it instead of removing //snap it instead of removing
lines.get(lines.size - 1).set(wx * tilesize, wy * tilesize); lines.get(lines.size - 1).set(wx * tilesize, wy * tilesize);

View File

@@ -1241,6 +1241,14 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
return amount; return amount;
} }
public boolean absorbLasers(){
return block.absorbLasers;
}
public boolean isInsulated(){
return block.insulated;
}
public boolean collide(Bullet other){ public boolean collide(Bullet other){
return true; return true;
} }

View File

@@ -9,7 +9,6 @@ import arc.util.*;
import arc.util.pooling.*; import arc.util.pooling.*;
import mindustry.annotations.Annotations.*; import mindustry.annotations.Annotations.*;
import mindustry.content.*; import mindustry.content.*;
import mindustry.core.*;
import mindustry.entities.units.*; import mindustry.entities.units.*;
import mindustry.game.EventType.*; import mindustry.game.EventType.*;
import mindustry.game.*; import mindustry.game.*;
@@ -310,10 +309,15 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
Draw.z(z); Draw.z(z);
} }
/** @return name with a markup color prefix */
String coloredName(){
return "[#" + color.toString().toUpperCase() + "]" + name;
}
void sendMessage(String text){ void sendMessage(String text){
if(isLocal()){ if(isLocal()){
if(ui != null){ if(ui != null){
ui.chatfrag.addMessage(text, null); ui.chatfrag.addMessage(text);
} }
}else{ }else{
Call.sendMessage(con, text, null, null); Call.sendMessage(con, text, null, null);
@@ -321,16 +325,16 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
} }
void sendMessage(String text, Player from){ void sendMessage(String text, Player from){
sendMessage(text, from, NetClient.colorizeName(from.id(), from.name)); sendMessage(text, from, null);
} }
void sendMessage(String text, Player from, String fromName){ void sendMessage(String text, Player from, String unformatted){
if(isLocal()){ if(isLocal()){
if(ui != null){ if(ui != null){
ui.chatfrag.addMessage(text, fromName); ui.chatfrag.addMessage(text);
} }
}else{ }else{
Call.sendMessage(con, text, fromName, from); Call.sendMessage(con, text, unformatted, from);
} }
} }

View File

@@ -88,7 +88,7 @@ abstract class WaterMoveComp implements Posc, Velc, Hitboxc, Flyingc, Unitc{
@Replace @Replace
public float floorSpeedMultiplier(){ public float floorSpeedMultiplier(){
Floor on = isFlying() ? Blocks.air.asFloor() : floorOn(); Floor on = isFlying() ? Blocks.air.asFloor() : floorOn();
return (on.isDeep() ? 1.3f : 1f) * speedMultiplier; return (on.shallow ? 1f : 1.3f) * speedMultiplier;
} }
public boolean onLiquid(){ public boolean onLiquid(){

View File

@@ -33,6 +33,7 @@ public class EventType{
socketConfigChanged, socketConfigChanged,
update, update,
draw, draw,
drawOver,
preDraw, preDraw,
postDraw, postDraw,
uiDrawBegin, uiDrawBegin,
@@ -50,6 +51,7 @@ public class EventType{
public static class ResizeEvent{} public static class ResizeEvent{}
public static class MapMakeEvent{} public static class MapMakeEvent{}
public static class MapPublishEvent{} public static class MapPublishEvent{}
public static class SaveWriteEvent{}
public static class SaveLoadEvent{} public static class SaveLoadEvent{}
public static class ClientCreateEvent{} public static class ClientCreateEvent{}
public static class ServerLoadEvent{} public static class ServerLoadEvent{}
@@ -503,7 +505,7 @@ public class EventType{
this.player = player; this.player = player;
} }
} }
public static class PlayerBanEvent{ public static class PlayerBanEvent{
@Nullable @Nullable
public final Player player; public final Player player;
@@ -514,7 +516,7 @@ public class EventType{
this.uuid = uuid; this.uuid = uuid;
} }
} }
public static class PlayerUnbanEvent{ public static class PlayerUnbanEvent{
@Nullable @Nullable
public final Player player; public final Player player;
@@ -525,7 +527,7 @@ public class EventType{
this.uuid = uuid; this.uuid = uuid;
} }
} }
public static class PlayerIpBanEvent{ public static class PlayerIpBanEvent{
public final String ip; public final String ip;
@@ -533,7 +535,7 @@ public class EventType{
this.ip = ip; this.ip = ip;
} }
} }
public static class PlayerIpUnbanEvent{ public static class PlayerIpUnbanEvent{
public final String ip; public final String ip;
@@ -541,6 +543,5 @@ public class EventType{
this.ip = ip; this.ip = ip;
} }
} }
}
}

View File

@@ -113,12 +113,15 @@ public class SaveIO{
public static void write(OutputStream os, StringMap tags){ public static void write(OutputStream os, StringMap tags){
try(DataOutputStream stream = new DataOutputStream(os)){ try(DataOutputStream stream = new DataOutputStream(os)){
Events.fire(new SaveWriteEvent());
SaveVersion ver = getVersion();
stream.write(header); stream.write(header);
stream.writeInt(getVersion().version); stream.writeInt(ver.version);
if(tags == null){ if(tags == null){
getVersion().write(stream); ver.write(stream);
}else{ }else{
getVersion().write(stream, tags); ver.write(stream, tags);
} }
}catch(Throwable e){ }catch(Throwable e){
throw new RuntimeException(e); throw new RuntimeException(e);

View File

@@ -327,7 +327,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
} }
} }
boolean naval = (float)waters / total >= 0.15f; boolean naval = (float)waters / total >= 0.19f;
//create water pathway if the map is flooded //create water pathway if the map is flooded
if(naval){ if(naval){
@@ -345,11 +345,11 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
Vec3 v = sector.rect.project(x, y); Vec3 v = sector.rect.project(x, y);
float rr = Simplex.noise2d(sector.id, (float)2, 0.6f, 1f / 7f, x, y) * 0.1f; float rr = Simplex.noise2d(sector.id, (float)2, 0.6f, 1f / 7f, x, y) * 0.1f;
float value = Ridged.noise3d(2, v.x, v.y, v.z, 1, 1f / 53f) + rr - rawHeight(v) * 0f; float value = Ridged.noise3d(2, v.x, v.y, v.z, 1, 1f / 55f) + rr - rawHeight(v) * 0f;
float rrscl = rr * 44 - 2; float rrscl = rr * 44 - 2;
if(value > 0.12f && !Mathf.within(x, y, fspawn.x, fspawn.y, 12 + rrscl)){ if(value > 0.17f && !Mathf.within(x, y, fspawn.x, fspawn.y, 12 + rrscl)){
boolean deep = value > 0.12f + 0.1f && !Mathf.within(x, y, fspawn.x, fspawn.y, 15 + rrscl); boolean deep = value > 0.17f + 0.1f && !Mathf.within(x, y, fspawn.x, fspawn.y, 15 + rrscl);
boolean spore = floor != Blocks.sand && floor != Blocks.salt; boolean spore = floor != Blocks.sand && floor != Blocks.salt;
//do not place rivers on ice, they're frozen //do not place rivers on ice, they're frozen
//ignore pre-existing liquids //ignore pre-existing liquids
@@ -407,7 +407,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
} }
} }
floor = floor == Blocks.water ? Blocks.deepwater : Blocks.deepTaintedWater; floor = floor == Blocks.water ? Blocks.deepwater : Blocks.taintedWater;
} }
}); });
} }

View File

@@ -107,8 +107,8 @@ public class BeControl{
download(updateUrl, file, i -> length[0] = i, v -> progress[0] = v, () -> cancel[0], () -> { download(updateUrl, file, i -> length[0] = i, v -> progress[0] = v, () -> cancel[0], () -> {
try{ try{
Runtime.getRuntime().exec(OS.isMac ? Runtime.getRuntime().exec(OS.isMac ?
new String[]{"java", "-XstartOnFirstThread", "-DlastBuild=" + Version.build, "-Dberestart", "-Dbecopy=" + fileDest.absolutePath(), "-jar", file.absolutePath()} : new String[]{javaPath, "-XstartOnFirstThread", "-DlastBuild=" + Version.build, "-Dberestart", "-Dbecopy=" + fileDest.absolutePath(), "-jar", file.absolutePath()} :
new String[]{"java", "-DlastBuild=" + Version.build, "-Dberestart", "-Dbecopy=" + fileDest.absolutePath(), "-jar", file.absolutePath()} new String[]{javaPath, "-DlastBuild=" + Version.build, "-Dberestart", "-Dbecopy=" + fileDest.absolutePath(), "-jar", file.absolutePath()}
); );
System.exit(0); System.exit(0);
}catch(IOException e){ }catch(IOException e){

View File

@@ -90,7 +90,7 @@ public abstract class NetConnection{
cid = begin.id; cid = begin.id;
while(stream.stream.available() > 0){ while(stream.stream.available() > 0){
byte[] bytes = new byte[Math.min(512, stream.stream.available())]; byte[] bytes = new byte[Math.min(maxTcpSize, stream.stream.available())];
stream.stream.read(bytes); stream.stream.read(bytes);
StreamChunk chunk = new StreamChunk(); StreamChunk chunk = new StreamChunk();

View File

@@ -200,7 +200,7 @@ public class Weapon implements Cloneable{
boolean can = unit.canShoot(); boolean can = unit.canShoot();
float lastReload = mount.reload; float lastReload = mount.reload;
mount.reload = Math.max(mount.reload - Time.delta * unit.reloadMultiplier, 0); mount.reload = Math.max(mount.reload - Time.delta * unit.reloadMultiplier, 0);
mount.recoil = Math.max(mount.recoil - (Time.delta * recoil * unit.reloadMultiplier) / recoilTime, 0); mount.recoil = Mathf.approachDelta(mount.recoil, 0, (Math.abs(recoil) * unit.reloadMultiplier) / recoilTime);
//rotate if applicable //rotate if applicable
if(rotate && (mount.rotate || mount.shoot) && can){ if(rotate && (mount.rotate || mount.shoot) && can){

View File

@@ -138,8 +138,10 @@ public class Bar extends Element{
GlyphLayout lay = Pools.obtain(GlyphLayout.class, GlyphLayout::new); GlyphLayout lay = Pools.obtain(GlyphLayout.class, GlyphLayout::new);
lay.setText(font, name); lay.setText(font, name);
font.setColor(1f, 1f, 1f, parentAlpha); font.setColor(1f, 1f, 1f, 1f);
font.draw(name, x + width / 2f - lay.width / 2f, y + height / 2f + lay.height / 2f + 1); font.getCache().clear();
font.getCache().addText(name, x + width / 2f - lay.width / 2f, y + height / 2f + lay.height / 2f + 1);
font.getCache().draw(parentAlpha);
Pools.free(lay); Pools.free(lay);
} }

View File

@@ -37,6 +37,7 @@ public class Minimap extends Table{
Draw.rect(renderer.minimap.getRegion(), x + width / 2f, y + height / 2f, width, height); Draw.rect(renderer.minimap.getRegion(), x + width / 2f, y + height / 2f, width, height);
if(renderer.minimap.getTexture() != null){ if(renderer.minimap.getTexture() != null){
Draw.alpha(parentAlpha);
renderer.minimap.drawEntities(x, y, width, height, 0.75f, false); renderer.minimap.drawEntities(x, y, width, height, 0.75f, false);
} }

View File

@@ -23,7 +23,7 @@ import static mindustry.Vars.*;
public class ChatFragment extends Table{ public class ChatFragment extends Table{
private static final int messagesShown = 10; private static final int messagesShown = 10;
private Seq<ChatMessage> messages = new Seq<>(); private Seq<String> messages = new Seq<>();
private float fadetime; private float fadetime;
private boolean shown = false; private boolean shown = false;
private TextField chatfield; private TextField chatfield;
@@ -144,13 +144,13 @@ public class ChatFragment extends Table{
float theight = offsety + spacing + getMarginBottom() + scene.marginBottom; float theight = offsety + spacing + getMarginBottom() + scene.marginBottom;
for(int i = scrollPos; i < messages.size && i < messagesShown + scrollPos && (i < fadetime || shown); i++){ for(int i = scrollPos; i < messages.size && i < messagesShown + scrollPos && (i < fadetime || shown); i++){
layout.setText(font, messages.get(i).formattedMessage, Color.white, textWidth, Align.bottomLeft, true); layout.setText(font, messages.get(i), Color.white, textWidth, Align.bottomLeft, true);
theight += layout.height + textspacing; theight += layout.height + textspacing;
if(i - scrollPos == 0) theight -= textspacing + 1; if(i - scrollPos == 0) theight -= textspacing + 1;
font.getCache().clear(); font.getCache().clear();
font.getCache().setColor(Color.white); font.getCache().setColor(Color.white);
font.getCache().addText(messages.get(i).formattedMessage, fontoffsetx + offsetx, offsety + theight, textWidth, Align.bottomLeft, true); font.getCache().addText(messages.get(i), fontoffsetx + offsetx, offsety + theight, textWidth, Align.bottomLeft, true);
if(!shown && fadetime - i < 1f && fadetime - i >= 0f){ if(!shown && fadetime - i < 1f && fadetime - i >= 0f){
font.getCache().setAlphas((fadetime - i) * opacity); font.getCache().setAlphas((fadetime - i) * opacity);
@@ -257,9 +257,9 @@ public class ChatFragment extends Table{
return shown; return shown;
} }
public void addMessage(String message, String sender){ public void addMessage(String message){
if(sender == null && message == null) return; if(message == null) return;
messages.insert(0, new ChatMessage(message, sender)); messages.insert(0, message);
fadetime += 1f; fadetime += 1f;
fadetime = Math.min(fadetime, messagesShown) + 1f; fadetime = Math.min(fadetime, messagesShown) + 1f;
@@ -267,22 +267,6 @@ public class ChatFragment extends Table{
if(scrollPos > 0) scrollPos++; if(scrollPos > 0) scrollPos++;
} }
private static class ChatMessage{
public final String sender;
public final String message;
public final String formattedMessage;
public ChatMessage(String message, String sender){
this.message = message;
this.sender = sender;
if(sender == null){ //no sender, this is a server message?
formattedMessage = message == null ? "" : message;
}else{
formattedMessage = "[coral][[" + sender + "[coral]]:[white] " + message;
}
}
}
private enum ChatMode{ private enum ChatMode{
normal(""), normal(""),
team("/t"), team("/t"),

View File

@@ -667,7 +667,7 @@ public class HudFragment extends Fragment{
float stroke = width * 0.35f; float stroke = width * 0.35f;
float bh = height/2f; float bh = height/2f;
Draw.color(color); Draw.color(color, parentAlpha);
float f1 = Math.min(fract * 2f, 1f), f2 = (fract - 0.5f) * 2f; float f1 = Math.min(fract * 2f, 1f), f2 = (fract - 0.5f) * 2f;
@@ -703,10 +703,10 @@ public class HudFragment extends Fragment{
new Element(){ new Element(){
@Override @Override
public void draw(){ public void draw(){
Draw.color(Pal.darkerGray); Draw.color(Pal.darkerGray, parentAlpha);
Fill.poly(x + width/2f, y + height/2f, 6, height / Mathf.sqrt3); Fill.poly(x + width/2f, y + height/2f, 6, height / Mathf.sqrt3);
Draw.reset(); Draw.reset();
Drawf.shadow(x + width/2f, y + height/2f, height * 1.13f); Drawf.shadow(x + width/2f, y + height/2f, height * 1.13f, parentAlpha);
} }
}, },
new Table(t -> { new Table(t -> {

View File

@@ -10,6 +10,7 @@ import arc.util.*;
import arc.util.io.*; import arc.util.io.*;
import mindustry.annotations.Annotations.*; import mindustry.annotations.Annotations.*;
import mindustry.content.*; import mindustry.content.*;
import mindustry.entities.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.graphics.*; import mindustry.graphics.*;
import mindustry.logic.*; import mindustry.logic.*;
@@ -31,13 +32,16 @@ public class ForceProjector extends Block{
public float cooldownNormal = 1.75f; public float cooldownNormal = 1.75f;
public float cooldownLiquid = 1.5f; public float cooldownLiquid = 1.5f;
public float cooldownBrokenBase = 0.35f; public float cooldownBrokenBase = 0.35f;
public Effect absorbEffect = Fx.absorb;
public Effect shieldBreakEffect = Fx.shieldBreak;
public @Load("@-top") TextureRegion topRegion; public @Load("@-top") TextureRegion topRegion;
static ForceBuild paramEntity; static ForceBuild paramEntity;
static Effect paramEffect;
static final Cons<Bullet> shieldConsumer = trait -> { static final Cons<Bullet> shieldConsumer = trait -> {
if(trait.team != paramEntity.team && trait.type.absorbable && Intersector.isInsideHexagon(paramEntity.x, paramEntity.y, paramEntity.realRadius() * 2f, trait.x(), trait.y())){ if(trait.team != paramEntity.team && trait.type.absorbable && Intersector.isInsideHexagon(paramEntity.x, paramEntity.y, paramEntity.realRadius() * 2f, trait.x(), trait.y())){
trait.absorb(); trait.absorb();
Fx.absorb.at(trait); paramEffect.at(trait);
paramEntity.hit = 1f; paramEntity.hit = 1f;
paramEntity.buildup += trait.damage(); paramEntity.buildup += trait.damage();
} }
@@ -154,7 +158,7 @@ public class ForceProjector extends Block{
if(buildup >= shieldHealth + phaseShieldBoost * phaseHeat && !broken){ if(buildup >= shieldHealth + phaseShieldBoost * phaseHeat && !broken){
broken = true; broken = true;
buildup = shieldHealth; buildup = shieldHealth;
Fx.shieldBreak.at(x, y, realRadius(), team.color); shieldBreakEffect.at(x, y, realRadius(), team.color);
} }
if(hit > 0f){ if(hit > 0f){
@@ -165,6 +169,7 @@ public class ForceProjector extends Block{
if(realRadius > 0 && !broken){ if(realRadius > 0 && !broken){
paramEntity = this; paramEntity = this;
paramEffect = absorbEffect;
Groups.bullet.intersect(x - realRadius, y - realRadius, realRadius * 2f, realRadius * 2f, shieldConsumer); Groups.bullet.intersect(x - realRadius, y - realRadius, realRadius * 2f, realRadius * 2f, shieldConsumer);
} }
} }

View File

@@ -69,13 +69,8 @@ public class OverflowGate extends Block{
}else if(bc && !ac){ }else if(bc && !ac){
to = b; to = b;
}else{ }else{
if(rotation == 0){ to = (rotation & (1 << from)) == 0 ? a : b;
to = a; if(flip) rotation ^= (1 << from);
if(flip) rotation =1;
}else{
to = b;
if(flip) rotation = 0;
}
} }
} }

View File

@@ -114,13 +114,8 @@ public class Sorter extends Block{
}else if(!bc){ }else if(!bc){
return null; return null;
}else{ }else{
if(rotation == 0){ to = (rotation & (1 << dir)) == 0 ? a : b;
to = a; if(flip) rotation ^= (1 << dir);
if(flip) this.rotation = (byte)1;
}else{
to = b;
if(flip) this.rotation = (byte)0;
}
} }
} }

View File

@@ -349,7 +349,7 @@ public class PowerNode extends PowerBlock{
public static boolean insulated(int x, int y, int x2, int y2){ public static boolean insulated(int x, int y, int x2, int y2){
return world.raycast(x, y, x2, y2, (wx, wy) -> { return world.raycast(x, y, x2, y2, (wx, wy) -> {
Building tile = world.build(wx, wy); Building tile = world.build(wx, wy);
return tile != null && tile.block.insulated; return tile != null && tile.isInsulated();
}); });
} }

View File

@@ -0,0 +1 @@
Un tower-defense ouvert, axé sur la gestion des ressources.

View File

@@ -0,0 +1,51 @@
Taretlerinize cephane göndermek için ayrıntılı yol zincirleri oluşturun, yapı yapmak için materyaller üretin, ve yapılarınızı dalgalar halinde gelen düşmanlardan koruyun. Cross-platform çok oyunculu oyunlarda arkadaşlarınızla oynayın, ya da takım-bazlı PvP maçlarında onlara meydan okuyun.
<h2>Oynanış Özellikleri</h2>
- Geniş kapsamlı materyaller oluşturmak için üretim bloklarını kullanın
- Yapılarınızı dalgalar halindeki düşmanlardan koruyun
- Cross-platform çok oyunculu oyunlarda arkadaşlarınızla oynayın, ya da takım-bazlı PvP maçlarında onlara meydan okuyun
- Sıvıları yönetin ve ortaya çıkan zorluklarla mücadele edin, ateş kaçakları ya da düşman uçak baskınları gibi
- İsteğe bağlı soğutucu ve yağlayıcı sağlayarak üretimden en iyi şekilde yararlanın
- Üssünüzün otomatik kontrolü veya düşman üslerine saldırı için geniş çaplı birimler üretin
<h2>Mücadele</h2>
- Serpulo gezegenini 250'den fazla rastgele oluşmuş ve 16 elle-yapılmış sektörü kontrol ederek ele geçirin
- Diğer sektörlerde oynarken kaynak üretmek için arazi ele geçirin ve fabrikalar kurun
- Ardarda gelen saldırılardan üssünüzü koruyun
- Kalkış-rampaları aracılığıyla sektörler arasında kaynak dağıtımını koordine edin
- Daha da yol katetmek için blok araştırın
- Görevleri beraber tamamlamak için arkadaşlarınızı davet edin
- 130+ teknoloji bloğu
- 33 farklı drone, robot, ve gemi
<h2>Oyun modları</h2>
- <b>Hayatta Kalma</b>: Kule-savunma temelli oynanışta düşmanlara karşı savunmak için taretler kurun. Mümkün olduğunca uzun süre hayatta kalın, isteğe bağlı araştırmalar için toplanan kaynaklarınızı kullanmak üzere çekirdeğiniz ile kalkış gerçekleştirerek. Üssünüzü aralıklı hava saldırıları için hazırlayın.
- <b>Saldırı</b>: Düşman çekirdeklerini yok etmek için birim fabrikaları üretin ve aynı zamanda üssünüzü düşman dalgalarından savunun. Hedefinizde size yoldaş olmaları için çeşitli saldırgan ve dost birimler üretin. İsteğe bağlı savunma yapıları üreten yapay zekayı aktifleştirip farklı bir zorluk deneyin.
- <b>PvP</b>: 4'e kadar farklı takım içerisinde diğer oyuncuların çekirdeklerini yok etmeye çalışın. Birimler üretin, ya da diğer üslere kendiniz saldırın.
- <b>Sandbox</b>: Düşman tehlikesi olmadan sonsuz kaynaklarla oynayın. Tasarımları denemek için sandbox-özel eşya ve sıvı kaynak bloklarını kullanın, ve isteğe bağlı düşman çağırın.
<h2>Özel Oyunlar &amp; Cross-Platform Çok Oyunculu</h2>
- Mücadele'ye ek olarak özel oyunlar için 16 harita daha
- Co-op, PvP ya da Sandbox oynayın.
- Herkese açık bir sunucuya katılın, ya da kendi özel oyununuza arkadaşlarınızı davet edin.
- Özelleştirilebilir oyun kuralları: Blok değerlerini, düşman özelliklerini, başlangıç eşyalarını, dalga zamanlamasını ve daha fazlasını özelleştirin
- Karışık oyun modları: PvP ve PvE oyun modlarını bir araya getirin
<h2>Özel Harita Düzenleyicisi</h2>
- Bir düzenleyici kullanıcı arayüzü ile kendi arazinizi çizin
- Oyun içinde yapılarınızı önizleyin
- Ayarlanabilir araçlar: Her aracın çalışışını değiştirin
- Güçlü oluşum sistemi, arazinin prosedürel manipülasyonu için birçok farklı filtre türü ile
- Haritalarınıza ses, bozulma, yumuşatma, erozyon, simetri, maden üretimi ve rastgele arazi ekleyin
- Cevher oluşumunun yanı sıra nehir ve kaynakların yerleştirilmesini rastgele hale getirin ve yapılandırın
- Düşman dalgalarını özelleştirin
- Temel harita kurallarını özelleştirin
- 80'den fazla blok

View File

@@ -0,0 +1 @@
Fabrika-temelli bir sandbox kule savunma oyunu.

View File

@@ -0,0 +1 @@
Fabrika-temelli bir sandbox kule savunma oyunu.

View File

@@ -0,0 +1 @@
Mindustry

View File

@@ -24,7 +24,7 @@
"NEW_ACHIEVEMENT_20_14_NAME" "Surcharge" "NEW_ACHIEVEMENT_20_14_NAME" "Surcharge"
"NEW_ACHIEVEMENT_20_14_DESC" "Toucher un ennemi couvert d'eau avec un tir électrique." "NEW_ACHIEVEMENT_20_14_DESC" "Toucher un ennemi couvert d'eau avec un tir électrique."
"NEW_ACHIEVEMENT_20_15_NAME" "Déflexion" "NEW_ACHIEVEMENT_20_15_NAME" "Déflexion"
"NEW_ACHIEVEMENT_20_15_DESC" "Détruire une unité avec la reflexion de ses propres balles." "NEW_ACHIEVEMENT_20_15_DESC" "Détruire une unité avec la réflexion de ses propres balles."
"NEW_ACHIEVEMENT_20_17_NAME" "Une Grave Erreur" "NEW_ACHIEVEMENT_20_17_NAME" "Une Grave Erreur"
"NEW_ACHIEVEMENT_20_17_DESC" "Rechercher le Routeur." "NEW_ACHIEVEMENT_20_17_DESC" "Rechercher le Routeur."
"NEW_ACHIEVEMENT_20_18_NAME" "Créer" "NEW_ACHIEVEMENT_20_18_NAME" "Créer"
@@ -34,7 +34,7 @@
"NEW_ACHIEVEMENT_20_20_NAME" "Un Désastre Spectaculaire" "NEW_ACHIEVEMENT_20_20_NAME" "Un Désastre Spectaculaire"
"NEW_ACHIEVEMENT_20_20_DESC" "Provoquer l'explosion d'un Réacteur à Thorium en le faisant surchauffer." "NEW_ACHIEVEMENT_20_20_DESC" "Provoquer l'explosion d'un Réacteur à Thorium en le faisant surchauffer."
"NEW_ACHIEVEMENT_20_21_NAME" "Cartographe" "NEW_ACHIEVEMENT_20_21_NAME" "Cartographe"
"NEW_ACHIEVEMENT_20_21_DESC" "Créer une nouvelle carte 10 fois." "NEW_ACHIEVEMENT_20_21_DESC" "Créer 10 nouvelles cartes."
"NEW_ACHIEVEMENT_20_22_NAME" "Navigateur" "NEW_ACHIEVEMENT_20_22_NAME" "Navigateur"
"NEW_ACHIEVEMENT_20_22_DESC" "Télécharger une carte sur le Workshop." "NEW_ACHIEVEMENT_20_22_DESC" "Télécharger une carte sur le Workshop."
"NEW_ACHIEVEMENT_20_23_NAME" "Créateur" "NEW_ACHIEVEMENT_20_23_NAME" "Créateur"
@@ -82,7 +82,7 @@
"NEW_ACHIEVEMENT_21_19_NAME" "Efficacité" "NEW_ACHIEVEMENT_21_19_NAME" "Efficacité"
"NEW_ACHIEVEMENT_21_19_DESC" "Refroidir une tourelle avec de l'eau ou du liquide cryogénique." "NEW_ACHIEVEMENT_21_19_DESC" "Refroidir une tourelle avec de l'eau ou du liquide cryogénique."
"NEW_ACHIEVEMENT_21_20_NAME" "Mode Classique" "NEW_ACHIEVEMENT_21_20_NAME" "Mode Classique"
"NEW_ACHIEVEMENT_21_20_DESC" "Activer la pixelisation." "NEW_ACHIEVEMENT_21_20_DESC" "Activer la pixellisation."
"NEW_ACHIEVEMENT_21_21_NAME" "Érudit" "NEW_ACHIEVEMENT_21_21_NAME" "Érudit"
"NEW_ACHIEVEMENT_21_21_DESC" "Ouvrir le Wiki depuis le jeu." "NEW_ACHIEVEMENT_21_21_DESC" "Ouvrir le Wiki depuis le jeu."
"NEW_ACHIEVEMENT_21_22_NAME" "Avantage" "NEW_ACHIEVEMENT_21_22_NAME" "Avantage"
@@ -90,9 +90,9 @@
"NEW_ACHIEVEMENT_21_23_NAME" "Allumage" "NEW_ACHIEVEMENT_21_23_NAME" "Allumage"
"NEW_ACHIEVEMENT_21_23_DESC" "Lancer un Réacteur à Impact." "NEW_ACHIEVEMENT_21_23_DESC" "Lancer un Réacteur à Impact."
"NEW_ACHIEVEMENT_21_24_NAME" "Accélération" "NEW_ACHIEVEMENT_21_24_NAME" "Accélération"
"NEW_ACHIEVEMENT_21_24_DESC" "Activater l'Accélérateur Interplanétaire." "NEW_ACHIEVEMENT_21_24_DESC" "Activer l'Accélérateur Interplanétaire."
"NEW_ACHIEVEMENT_21_25_NAME" "La Spirale" "NEW_ACHIEVEMENT_21_25_NAME" "La Spirale"
"NEW_ACHIEVEMENT_21_25_DESC" "Round and round it goes..." "NEW_ACHIEVEMENT_21_25_DESC" "Tourner en rond, ça va ..."
"NEW_ACHIEVEMENT_21_26_NAME" "Escalade" "NEW_ACHIEVEMENT_21_26_NAME" "Escalade"
"NEW_ACHIEVEMENT_21_26_DESC" "Construire une unité de niveau 5." "NEW_ACHIEVEMENT_21_26_DESC" "Construire une unité de niveau 5."
"NEW_ACHIEVEMENT_21_27_NAME" "Architecte" "NEW_ACHIEVEMENT_21_27_NAME" "Architecte"
@@ -110,6 +110,6 @@
"NEW_ACHIEVEMENT_26_1_NAME" "Victoire Assurée" "NEW_ACHIEVEMENT_26_1_NAME" "Victoire Assurée"
"NEW_ACHIEVEMENT_26_1_DESC" "Capturer un secteur pendant que vous jouez dans un autre." "NEW_ACHIEVEMENT_26_1_DESC" "Capturer un secteur pendant que vous jouez dans un autre."
"NEW_ACHIEVEMENT_26_2_NAME" "Petit Empire" "NEW_ACHIEVEMENT_26_2_NAME" "Petit Empire"
"NEW_ACHIEVEMENT_26_2_DESC" "Contrôller 10 secteurs à la fois." "NEW_ACHIEVEMENT_26_2_DESC" "Contrôler 10 secteurs à la fois."
} }
} }

View File

@@ -1,60 +1,65 @@
Créez des chaînes d'approvisionnement complexes pour alimenter vos tourelles en munitions, produisez des matériaux à utiliser pour vos constructions et protégez vos structures des vagues d'ennemis. Jouez avec vos amis dans des parties multijoueurs cross-plateformes en co-op ou défiez-les lors de matchs PvP en équipe.
[img]{STEAM_APP_IMAGE}/extras/ezgif-4-0e70c282f775.gif[/img] [img]{STEAM_APP_IMAGE}/extras/ezgif-4-0e70c282f775.gif[/img]
[h2]Gameplay[/h2] [h2]Caractéristiques du jeu[/h2]
[list] [list]
[*] Créez des foreuses et des convoyeurs pour récolter et transporter les resources jusqu'à votre Noyau. [*] Créez des foreuses et des convoyeurs pour récolter et transporter les resources jusqu'à votre Noyau.
[*] Utilisez les blocs de production avancés pour créer des ressources plus complexes. [*] Utilisez les usines de production avancés pour créer des ressources plus complexes.
[*] Défendez vos structures contre les vagues d'ennemis.
[*] Construisez des drones pour miner automatiquement les ressources, pour vous assistez dans la construction ou encore pour défendre votre base. [*] Construisez des drones pour miner automatiquement les ressources, pour vous assistez dans la construction ou encore pour défendre votre base.
[*] Gérez l'acheminent des liquides et combattez les incendies. [*] Gérez l'acheminent des liquides et combattez les incendies des raids d'avions ennemis.
[*] Boostez la production en approvisionnant vos blocs de défense et de production avec des liquides de refroidissement et des lubrifiants optionnels. [*] Boostez la production en approvisionnant vos blocs de défense et de production avec des liquides de refroidissement et des lubrifiants optionnels.
[*] Produisez une grande variété d'unités pour la gestion automatique de votre base ou l'assaut des bases ennemies.
[/list] [/list]
[img]{STEAM_APP_IMAGE}/extras/ezgif-1-8679abe089cd.gif[/img]
[h2]Campagne[/h2] [h2]Campagne[/h2]
[list] [list]
[*] Avancez à travers les 12 zones rejouables de la campagne. [*] Partez à la conquête de la planète Serpulo en progressant dans plus de 250 secteurs générés de manière procédurale et sur 16 cartes créées à la main.
[*] Récoltez and accumulez les resources. [*] Capturez des territoires et installez des usines pour produire des ressources pendant que vous jouez dans d'autres secteurs.
[*] Recherchez de nouveaux blocs et faites progresser les technologies à votre disposition. [*] Défendez vos secteurs contre les invasions périodiques.
[*] Missions et objectifs variés. [*] Coordonner la distribution des ressources entre les secteurs via des rampes de lancement.
[*] Invitez vos amis pour terminer les missions ensemble. [*] Recherchez de nouveaux blocs pour alimenter votre progression.
[*] 120+ blocs technologiques à maîtriser. [*] Invitez vos amis à accomplir des missions ensemble.
[*] 19 types de drones, mechs et vaisseaux. [*] Plus de 130 blocs technologiques à maîtriser.
[*] 50+ succès à débloquer. [*] 33 types différents de drones, de mechs et de vaisseaux.
[*] Plus de 50 succés à accomplir.
[/list] [/list]
[h2]Modes de jeu[/h2] [h2]Modes de jeu[/h2]
[list] [list]
[*] [b]Survie[/b]: Construisez des tourelles pour défendre votre base des ennemis dans un style de jeu inspiré des tower-defense. Survivez aussi longtemps que possible, avant de faire décoller votre noyau. Utilisez les ressources récoltées pour débloquer de nouvelles technologies. Préparez votre base pour les attaques de puissants boss aériens. [*] [b]Survie[/b]: Construisez des tourelles pour défendre votre base des ennemis dans un style de jeu inspiré des tower-defense. Survivez aussi longtemps que possible, avant de faire décoller votre noyau. Utilisez les ressources récoltées pour débloquer de nouvelles technologies. Préparez votre base pour les attaques de puissants boss aériens.
[*] [b]Attaque[/b]: Construisez des usines et produisez des unités pour détruire les noyaux ennemis, tout en défendant votre base contre les vagues d'attaque. Créez une grande variété d'unités offensives et de support pour vous aider dans vos objectifs. [*] [b]Attaque[/b]: Construisez des usines et produisez des unités pour détruire les noyaux ennemis, tout en défendant votre base contre les vagues d'attaque. Créez une grande variété d'unités offensives et de soutien pour vous aider dans vos objectifs.
[*] [b]PvP[/b]: Affrontez d'autres joueurs. Constituez jusqu'à 4 équipes différentes et tentez de détruire les noyaux adverses. Créez des unités d'assaut ou attaquez directement les autres bases avec vos mechs. [*] [b]PvP[/b]: Affrontez d'autres joueurs. Constituez jusqu'à 4 équipes différentes et tentez de détruire les noyaux adverses. Créez des unités d'assaut ou attaquez directement les autres bases avec vos mechs.
[*] [b]Bac à sable[/b]: Jouez avec des ressources infinies et aucune menace ennemie. Utilisez des objets et des blocs spécifiques à ce mode de jeu tels que les sources de liquides. Testez vos designs et faites apparaître les ennemis à la demande. [*] [b]Bac à sable[/b]: Jouez avec des ressources infinies et sans menace ennemie. Utilisez des objets et des blocs spécifiques à ce mode de jeu tels que les sources de liquides. Testez vos designs et faites apparaître les ennemis à la demande.
[/list] [/list]
[img]{STEAM_APP_IMAGE}/extras/2020-11-30_10-46-02.gif[/img]
[h2]Parties Multijoueurs Cross-Platformes Personnalisées[/h2] [h2]Parties Multijoueurs Cross-Platformes Personnalisées[/h2]
[list] [list]
[*] 12 cartes supplémentaires pour vos parties personnalisées en plus des cartes de la campagne. [*] 16 cartes supplémentaires pour vos parties personnalisées en plus des cartes de la campagne.
[*] Jouez en Co-op, en PvP ou en mode Bac à sable. [*] Jouez en Co-op, en PvP ou en mode Bac à sable.
[*] Rejoignez un serveur dédié public, ou invitez vos amis dans vos propres sessions privées. [*] Rejoignez un serveur dédié public, ou invitez vos amis dans vos propres sessions privées.
[*] Personnalisez les règles de jeu: changez les coûts des blocs, les stats des ennemis, les ressources de départs, le timing des vagues... [*] Règles de jeu personnalisables: Modifiez le coût des blocs, les statistiques des ennemis, les objets de départ, le timing des vagues, etc...
[*] Mixez les modes de jeux: combinez PvP et PvE dans la même partie. [*] Mixez les modes de jeux: combinez PvP et PvE dans la même partie.
[/list] [/list]
[h2]Éditeur de carte[/h2] [h2]Éditeur de cartes personnalisées[/h2]
[list] [list]
[*] Peignez le terrain grâce à une interface d'édition. [*] Peignez le terrain grâce à une interface d'édition.
[*] Éditez and prévisualisez les structures en jeu. [*] Éditez et prévisualisez les structures en jeu.
[*] Outils d'édition configurables: choisissez comment chaque outil fonctionne. [*] Outils d'édition configurables: choisissez comment chaque outil fonctionne.
[*] Générateur de carte puissant, disposant d'un grand nombre de filtres permettant la manipulation procédurale du terrain. [*] Générateur de carte puissant, disposant d'un grand nombre de filtres permettant la manipulation procédurale du terrain.
[*] Appliquez les effets bruit, distortion, lissage, erosion, symétrie, génération de minerais et terrain aléatoire. [*] Appliquez les effets bruit, distorsion, lissage, érosion, symétrie, génération de minerais et terrain aléatoire.
[*] Randomisez et configurez la génération des minerais ainsi que le placement des rivières et des tuiles de ressources. [*] Randomisez et configurez la génération des minerais ainsi que le placement des rivières et des tuiles de ressources.
[*] Configurez la disposition des vagues d'ennemis. [*] Configurez la disposition des vagues d'ennemis.
[*] Partagez vos cartes sur le Workshop Steam. [*] Partagez vos cartes sur le Workshop Steam.
[*] Personnalisez les règles de base de vos cartes. [*] Personnalisez les règles de base de vos cartes.
[*] 75+ blocs environnementaux différents. [*] Utilisez plus de 80 blocs environnementaux différents.
[/list] [/list]

View File

@@ -0,0 +1,115 @@
"lang"
{
"Language" "turkish"
"Tokens"
{
"NEW_ACHIEVEMENT_20_1_NAME" "Yok Edici"
"NEW_ACHIEVEMENT_20_1_DESC" "1000 düşman birliği yok et."
"NEW_ACHIEVEMENT_20_2_NAME" "Temizlik"
"NEW_ACHIEVEMENT_20_2_DESC" "100,000 düşman birliği yok et."
"NEW_ACHIEVEMENT_20_5_NAME" "Sonsuz Mal"
"NEW_ACHIEVEMENT_20_5_DESC" "Toplam 100,000 eşya fırlat."
"NEW_ACHIEVEMENT_20_6_NAME" "Fatih"
"NEW_ACHIEVEMENT_20_6_DESC" "10 saldırı-modu savaşı kazan."
"NEW_ACHIEVEMENT_20_7_NAME" "Şampiyon"
"NEW_ACHIEVEMENT_20_7_DESC" "10 çok oyunculu PvP maçı kazan."
"NEW_ACHIEVEMENT_20_8_NAME" "Yıldırım"
"NEW_ACHIEVEMENT_20_8_DESC" "5 ya da daha az dalgada düşman çekirdeğini yok et."
"NEW_ACHIEVEMENT_20_9_NAME" "Çekirdek Yağmuru"
"NEW_ACHIEVEMENT_20_9_DESC" "Çekirdeğini 10 defa fırlat."
"NEW_ACHIEVEMENT_20_10_NAME" "İnatçı"
"NEW_ACHIEVEMENT_20_10_DESC" "100 dalga boyunca hayatta kal."
"NEW_ACHIEVEMENT_20_12_NAME" "Araştırmacı"
"NEW_ACHIEVEMENT_20_12_DESC" "Her şeyi araştır."
"NEW_ACHIEVEMENT_20_14_NAME" "Aşırı Yüklenme"
"NEW_ACHIEVEMENT_20_14_DESC" "Su ile kaplanmış bir düşmana elektrik ile saldır."
"NEW_ACHIEVEMENT_20_15_NAME" "Saptırma"
"NEW_ACHIEVEMENT_20_15_DESC" "Bir birliği kendi mermisini sektirerek yok et."
"NEW_ACHIEVEMENT_20_17_NAME" "Büyük Bir Hata"
"NEW_ACHIEVEMENT_20_17_DESC" "Yönlendirici bloğunu araştır."
"NEW_ACHIEVEMENT_20_18_NAME" "Oluştur"
"NEW_ACHIEVEMENT_20_18_DESC" "10,000 blok yerleştir."
"NEW_ACHIEVEMENT_20_19_NAME" "Yok Et"
"NEW_ACHIEVEMENT_20_19_DESC" "1,000 düşman bloğu yok et."
"NEW_ACHIEVEMENT_20_20_NAME" "Büyük Bir Felaket"
"NEW_ACHIEVEMENT_20_20_DESC" "Bir Toryum reaktörünün aşırı ısınıp patlamasına sebep ol."
"NEW_ACHIEVEMENT_20_21_NAME" "Haritacı"
"NEW_ACHIEVEMENT_20_21_DESC" "10 tane yeni harita oluştur."
"NEW_ACHIEVEMENT_20_22_NAME" "Tarayıcı"
"NEW_ACHIEVEMENT_20_22_DESC" "Atölye'den bir harita indir."
"NEW_ACHIEVEMENT_20_23_NAME" "Oluşturucu"
"NEW_ACHIEVEMENT_20_23_DESC" "Atölye'de bir harita yayınla."
"NEW_ACHIEVEMENT_20_24_NAME" "Katil"
"NEW_ACHIEVEMENT_20_24_DESC" "Bir gardiyan alt et."
"NEW_ACHIEVEMENT_20_25_NAME" "Kaşif"
"NEW_ACHIEVEMENT_20_25_DESC" "Mücadele'de bütün noktaları keşfet."
"NEW_ACHIEVEMENT_20_29_NAME" "Materyal II"
"NEW_ACHIEVEMENT_20_29_DESC" "Toryum'un kilidini aç."
"NEW_ACHIEVEMENT_20_31_NAME" "Materyal I"
"NEW_ACHIEVEMENT_20_31_DESC" "Titanyum'un kilidini aç."
"NEW_ACHIEVEMENT_21_0_NAME" "Kamikaze"
"NEW_ACHIEVEMENT_21_0_DESC" "Robotunu patlayıcı materyallerle doldur ve öl."
"NEW_ACHIEVEMENT_21_1_NAME" "Başlıyor"
"NEW_ACHIEVEMENT_21_1_DESC" "Bir kara birimi fabrikası kur."
"NEW_ACHIEVEMENT_21_2_NAME" "Direkt Saldırı"
"NEW_ACHIEVEMENT_21_2_DESC" "Komut Merkezi'ni kullanarak Saldırı komudunu ver."
"NEW_ACHIEVEMENT_21_3_NAME" "Sürü"
"NEW_ACHIEVEMENT_21_3_DESC" "Aynı anda 100 adet birliğe sahip ol."
"NEW_ACHIEVEMENT_21_4_NAME" "Hava Sürüsü"
"NEW_ACHIEVEMENT_21_4_DESC" "Aynı anda 10 adet Poly birliğine sahip ol."
"NEW_ACHIEVEMENT_21_5_NAME" "Robot Bilimcisi"
"NEW_ACHIEVEMENT_21_5_DESC" "Tüm türden birlikleri üret."
"NEW_ACHIEVEMENT_21_6_NAME" "Birlik"
"NEW_ACHIEVEMENT_21_6_DESC" "1000 adet birlik üret."
"NEW_ACHIEVEMENT_21_9_NAME" "Dinlemeliydin"
"NEW_ACHIEVEMENT_21_9_DESC" "İniş noktasında öl."
"NEW_ACHIEVEMENT_21_10_NAME" "Onun İçin Su Birlikleri Var"
"NEW_ACHIEVEMENT_21_10_DESC" "Boğul."
"NEW_ACHIEVEMENT_21_11_NAME" "Toplayıcı"
"NEW_ACHIEVEMENT_21_11_DESC" "Çekirdeği tüm türlerden materyallerle tamamen doldur."
"NEW_ACHIEVEMENT_21_12_NAME" "Kalabalık"
"NEW_ACHIEVEMENT_21_12_DESC" "10 oyunculu bir sunucu yönet."
"NEW_ACHIEVEMENT_21_13_NAME" "Yenilmez"
"NEW_ACHIEVEMENT_21_13_DESC" "Meltdown, Spectre and Foreshadow üret."
"NEW_ACHIEVEMENT_21_14_NAME" "Kalkış"
"NEW_ACHIEVEMENT_21_14_DESC" "Kalkış Pisti'ni kullan."
"NEW_ACHIEVEMENT_21_16_NAME" "Saçmalık"
"NEW_ACHIEVEMENT_21_16_DESC" "Yan yana 2 yönlendirici inşa et."
"NEW_ACHIEVEMENT_21_17_NAME" "Yalnız Gardiyan"
"NEW_ACHIEVEMENT_21_17_DESC" "Herhangi bir noktada blok koymadan 10 dalga hayatta kal."
"NEW_ACHIEVEMENT_21_18_NAME" "Yak"
"NEW_ACHIEVEMENT_21_18_DESC" "Herhangi bir tarette Pirratit kullan."
"NEW_ACHIEVEMENT_21_19_NAME" "Etkililik"
"NEW_ACHIEVEMENT_21_19_DESC" "Bir tareti su veya kriyosıvı ile soğut."
"NEW_ACHIEVEMENT_21_20_NAME" "Klasik Mod"
"NEW_ACHIEVEMENT_21_20_DESC" "Pikselleştirmeyi aç."
"NEW_ACHIEVEMENT_21_21_NAME" "Eğitilmiş"
"NEW_ACHIEVEMENT_21_21_DESC" "Oyun içinden Viki'yi aç."
"NEW_ACHIEVEMENT_21_22_NAME" "İyi Başlangıç"
"NEW_ACHIEVEMENT_21_22_DESC" "10,000 veya daha fazla materyal ile ayarlanmış bir şekilde başla."
"NEW_ACHIEVEMENT_21_23_NAME" "Yakıcı"
"NEW_ACHIEVEMENT_21_23_DESC" "Bir Patlama Reaktörüne güç ver."
"NEW_ACHIEVEMENT_21_24_NAME" "Yükseliş"
"NEW_ACHIEVEMENT_21_24_DESC" "Gezegenler Arası Hızlandırıcı'yı aç."
"NEW_ACHIEVEMENT_21_25_NAME" "Spiral"
"NEW_ACHIEVEMENT_21_25_DESC" "Dönüp dolaşıyor..."
"NEW_ACHIEVEMENT_21_26_NAME" "Pahalanma"
"NEW_ACHIEVEMENT_21_26_DESC" "Bir 5. Seviye birlik üret."
"NEW_ACHIEVEMENT_21_27_NAME" "Mimar"
"NEW_ACHIEVEMENT_21_27_DESC" "20 şema oluştur."
"NEW_ACHIEVEMENT_21_28_NAME" "Küresel Hüküm"
"NEW_ACHIEVEMENT_21_28_DESC" "Serpulo'daki her noktayı ele geçir."
"NEW_ACHIEVEMENT_21_29_NAME" "Hava İkmali"
"NEW_ACHIEVEMENT_21_29_DESC" "Bir Oct birliği ile bir T5 birliği taşı."
"NEW_ACHIEVEMENT_21_30_NAME" "Nihai Form"
"NEW_ACHIEVEMENT_21_30_DESC" "Onlara katıl."
"NEW_ACHIEVEMENT_21_31_NAME" "Üretim I"
"NEW_ACHIEVEMENT_21_31_DESC" "Mücadelede 5,000 eşya/dk hızında üretime ulaş."
"NEW_ACHIEVEMENT_26_0_NAME" "Üretim II"
"NEW_ACHIEVEMENT_26_0_DESC" "Mücadelede 50,000 eşya/dk hızında üretime ulaş."
"NEW_ACHIEVEMENT_26_1_NAME" "Emin Zafer"
"NEW_ACHIEVEMENT_26_1_DESC" "Bir sektörü farklı bir sektörde oynarken ele geçir."
"NEW_ACHIEVEMENT_26_2_NAME" "Ufak İmparatorluk"
"NEW_ACHIEVEMENT_26_2_DESC" "Aynı anda 10 sektör kontrol et."
}
}

View File

@@ -0,0 +1,65 @@
[img]{STEAM_APP_IMAGE}/extras/ezgif-4-0e70c282f775.gif[/img]
[h2]Gameplay[/h2]
[list]
[*] Taretlerinize cephane göndermek için ayrıntılı yol zincirleri oluşturun ve yapı yapmak için materyaller üretin
[*] Geniş kapsamlı materyaller oluşturmak için üretim bloklarını kullanın
[*] Yapılarınızı dalgalar halindeki düşmanlardan koruyun
[*] Cross-platform çok oyunculu co-op oyunlarda arkadaşlarınızla oynayın, ya da takım-bazlı PvP maçlarında onlara meydan okuyun
[*] Sıvıları yönetin ve ortaya çıkan zorluklarla mücadele edin, ateş kaçakları ya da düşman uçak baskınları gibi
[*] İsteğe bağlı soğutucu ve yağlayıcı sağlayarak üretimden en iyi şekilde yararlanın
[*] Üssünüzün otomatik kontrolü veya düşman üslerine saldırı için geniş çaplı birimler üretin
[/list]
[img]{STEAM_APP_IMAGE}/extras/ezgif-1-8679abe089cd.gif[/img]
[h2]Campaign[/h2]
[list]
[*] Serpulo gezegenini 250'den fazla rastgele oluşmuş ve 16 elle-yapılmış sektörü kontrol ederek ele geçirin
[*] Diğer sektörlerde oynarken kaynak üretmek için arazi ele geçirin ve fabrikalar kurun
[*] Ardarda gelen saldırılardan üssünüzü koruyun
[*] Kalkış-rampaları aracılığıyla sektörler arasında kaynak dağıtımını koordine edin
[*] Daha da yol katetmek için blok araştırın
[*] Invite your friends to complete missions together
[*] Görevleri beraber tamamlamak için arkadaşlarınızı davet edin
[*] 33 farklı drone, robot, ve gemi
[*] 50'den fazla tamamlanmayı bekleyen başarım
[/list]
[h2]Gamemodes[/h2]
[list]
[*] [b]Hayatta Kalma[/b]: Kule-savunma temelli oynanışta düşmanlara karşı savunmak için taretler kurun. Mümkün olduğunca uzun süre hayatta kalın, isteğe bağlı araştırmalar için toplanan kaynaklarınızı kullanmak üzere çekirdeğiniz ile kalkış gerçekleştirerek. Üssünüzü aralıklı hava saldırıları için hazırlayın.
[*] [b]Saldırı[/b]: Düşman çekirdeklerini yok etmek için birim fabrikaları üretin ve aynı zamanda üssünüzü düşman dalgalarından savunun. Hedefinizde size yoldaş olmaları için çeşitli saldırgan ve dost birimler üretin. İsteğe bağlı savunma yapıları üreten yapay zekayı aktifleştirip farklı bir zorluk deneyin.
[*] [b]PvP[/b]: 4'e kadar farklı takım içerisinde diğer oyuncuların çekirdeklerini yok etmeye çalışın. Birimler üretin, ya da diğer üslere kendiniz saldırın.
[*] [b]Sandbox[/b]: Düşman tehlikesi olmadan sonsuz kaynaklarla oynayın. Tasarımları denemek için sandbox-özel eşya ve sıvı kaynak bloklarını kullanın, ve isteğe bağlı düşman çağırın.
[/list]
[img]{STEAM_APP_IMAGE}/extras/2020-11-30_10-46-02.gif[/img]
[h2]Özel Oyunlar & Cross-Platform Çok Oyunculu[/h2]
[list]
[*] Mücadele'ye ek olarak özel oyunlar için 16 harita daha
[*] Co-op, PvP ya da Sandbox oynayın
[*] Herkese açık bir sunucuya katılın, ya da kendi özel oyununuza arkadaşlarınızı davet edin
[*] Özelleştirilebilir oyun kuralları: Blok değerlerini, düşman özelliklerini, başlangıç eşyalarını, dalga zamanlamasını ve daha fazlasını özelleştirin
[*] Karışık oyun modları: PvP ve PvE oyun modlarını bir araya getirin
[/list]
[h2]Custom Map Editor[/h2]
[list]
[*] Bir düzenleyici kullanıcı arayüzü ile kendi arazinizi çizin
[*] Oyun içinde yapılarınızı önizleyin
[*] Ayarlanabilir araçlar: Her aracın çalışışını değiştirin
[*] Güçlü oluşum sistemi, arazinin prosedürel manipülasyonu için birçok farklı filtre türü ile
[*] Haritalarınıza ses, bozulma, yumuşatma, erozyon, simetri, maden üretimi ve rastgele arazi ekleyin
[*] Cevher oluşumunun yanı sıra nehir ve kaynakların yerleştirilmesini rastgele hale getirin ve yapılandırın
[*] Düşman dalgalarını özelleştirin
[*] Steam Workshop'da haritalarınızı paylaşın
[*] Temel harita kurallarını özelleştirin
[*] 80'den fazla blok kullanın
[/list]

View File

@@ -0,0 +1 @@
Kaynak yönetimine odaklanan açık uçlu bir kule savunma oyunu.

View File

@@ -24,4 +24,4 @@ android.useAndroidX=true
#used for slow jitpack builds; TODO see if this actually works #used for slow jitpack builds; TODO see if this actually works
org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.socketTimeout=100000
org.gradle.internal.http.connectionTimeout=100000 org.gradle.internal.http.connectionTimeout=100000
archash=ea2d4b8455a8502eeea80795cd2b6d10d8dfe21c archash=fd0ca91e700653d5565e13d8ea5fea87378b022e

View File

@@ -6,4 +6,4 @@ before_install:
- jshell --version - jshell --version
install: install:
- ./gradlew publishToMavenLocal - ./gradlew publishToMavenLocal
- sed -i 's/ --illegal-access=permit//' gradle.properties #remove extra flags after compilation - echo -n > gradle.properties #zero out gradle.properties

View File

@@ -79,6 +79,9 @@ public class ServerControl implements ApplicationListener{
} }
logger = (level1, text) -> { logger = (level1, text) -> {
//err has red text instead of reset.
if(level1 == LogLevel.err) text = text.replace(reset, lightRed + bold);
String result = bold + lightBlack + "[" + dateTime.format(LocalDateTime.now()) + "] " + reset + format(tags[level1.ordinal()] + " " + text + "&fr"); String result = bold + lightBlack + "[" + dateTime.format(LocalDateTime.now()) + "] " + reset + format(tags[level1.ordinal()] + " " + text + "&fr");
System.out.println(result); System.out.println(result);

View File

@@ -113,10 +113,10 @@
}, },
{ {
"name": "NukeDustry", "name": "NukeDustry",
"address": ["nukedustry.tk", "nukedustry.tk:6568"] "address": ["nukedustry.tk:7777", "nukedustry.tk:8888"]
}, },
{ {
"name": "MindustryBR", "name": "MindustryBR",
"address": ["mindustryptbr.ddns.net", "mindustryptbr.myddns.me", "mindustryptbr.myddns.me:6566"] "address": ["mindustryptbr.ddns.net", "mindustryptbr.myddns.me"]
} }
] ]

View File

@@ -50,5 +50,9 @@
{ {
"name": "Shiza Minigames", "name": "Shiza Minigames",
"address": ["shizashizashiza.ml"] "address": ["shizashizashiza.ml"]
},
{
"name": "devass.su",
"address": ["185.22.152.66"]
} }
] ]