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
+1 -1
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.beta.description = Defends the Foundation 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.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.
+13 -13
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.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.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks.
item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage.
item.graphite.description = Mineralized carbon, used for ammunition and electrical components.
item.sand.description = A common material that is used extensively in smelting, both in alloying and as a flux.
item.coal.description = Fossilized plant matter, formed long before the seeding event. Used extensively for fuel and resource production.
item.titanium.description = A rare super-light metal used extensively in liquid transportation, drills and aircraft.
item.thorium.description = A dense, radioactive metal used as structural support and nuclear fuel.
item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals.
item.silicon.description = An extremely useful semiconductor. Applications in solar panels, complex electronics and homing turret ammunition.
item.plastanium.description = A light, ductile material used in advanced aircraft and fragmentation ammunition.
item.phase-fabric.description = A near-weightless substance used in advanced electronics and self-repairing technology.
item.surge-alloy.description = An advanced alloy with unique electrical properties.
item.copper.description = Ang pinaka basic na struktural materyal. Malawakang ginagamit sa lahat ng types ng 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 = Ito ay matigas na glass compound. Malawakang ginagamit sa distribution ng likido at pag imbakan.
item.graphite.description = Mineralized carbon, Malawakang ginagamit sa ammunisyon at sa mga bahagi ng electrisidad.
item.sand.description = Ang karaniwang materyal na malawakang ginagamit sa smelting, pareho sa alloying at bilang flux
item.coal.description =Ang karaniwang materyal na malawakang ginagamit sa smelting, pareho sa alloying at bilang flux
item.titanium.description = Ang bihira hanapin at magaan na metal. Malawaking ginagamit sa transportasyon ng likido, mga drills at aircraft.
item.thorium.description = Ito ay malagong, radioactive metal ginagamit para sa supporta sa istraktura at nuklear fuel.
item.scrap.description = Galing sa mga matatanda at natirang struktura at units. Naglalaman ng ibat ibang metals.
item.silicon.description = Ang nakakatulong na semiconductor. Aplikasyon sa solar panels, Komplikadong electronika at homing turret ammunisyon.
item.plastanium.description = Ito ay magaan, malagkit na materyal ginamit sa advanced aircraft at fragmentation ammunisyon.
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 = 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.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.
+7 -2
View File
@@ -122,7 +122,7 @@ committingchanges = Validation des modifications
done = Fait
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.none = [lightgray]Aucun Mod trouvé !
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}
steam.error = Échec d'initialisation des services Steam.\nErreur : {0}
editor.cliffs = De murs à falaises
editor.brush = Pinceau
editor.openin = Ouvrir dans l'éditeur
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.newmap = Nouvelle carte
editor.center = Centrer
editor.search = Recherche de cartes...
editor.filters = Filtrer les cartes
editor.showAll = Afficher les cartes par défaut
workshop = Steam Workshop
waves.title = Vagues
waves.remove = Supprimer
@@ -1133,6 +1137,7 @@ block.sand-boulder.name = Bloc de Sable
block.basalt-boulder.name = Rocher de Basalte
block.grass.name = Herbe
block.molten-slag.name = Scories
block.pooled-cryofluid.name = Cryofluide
block.space.name = Espace
block.salt.name = 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.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.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.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.
+6 -2
View File
@@ -122,7 +122,7 @@ committingchanges = 変更を適応中
done = 完了
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.none = [lightgray]Modが見つかりませんでした!
mods.guide = Mod作成ガイド
@@ -379,6 +379,9 @@ editor.ingame = ゲーム内で編集する
editor.publish.workshop = ワークショップで公開
editor.newmap = 新しいマップ
editor.center = 中心
editor.search = マップを検索...
editor.filters = マップをフィルターする
editor.showAll = デフォルトマップを表示
workshop = ワークショップ
waves.title = ウェーブ
waves.remove = 削除
@@ -1134,6 +1137,7 @@ block.sand-boulder.name = 巨大な礫
block.basalt-boulder.name = 玄武岩の礫
block.grass.name =
block.molten-slag.name = スラグ
block.pooled-cryofluid.name = 冷却水
block.space.name = Space
block.salt.name = 岩塩氷河
block.salt-wall.name = 塩の壁
@@ -1615,7 +1619,7 @@ unit.omura.description = 敵に長距離かつ貫通性能を持つレールガ
unit.alpha.description = シャードコアを敵から守ります。\n建造物を建築します。
unit.beta.description = ファンデーションコアを敵から守ります。\n建造物を建築します。
unit.gamma.description = ニュークリアスコアを敵から守ります。\n建造物を建築します。
unit.retusa.description = 接地雷を配置します。\n味方ユニットを修復します。
unit.retusa.description = くの敵に追尾魚雷を発射します。\n味方ユニットを修復します。
unit.oxynoe.description = 建造物修復火炎放射を発射します。敵にはダメージを与えます。\n地点防空タレットによって敵の弾丸を撃ち落とします。
unit.cyerce.description = 敵に追尾クラスターミサイルを発射します。\n味方ユニットを修復します。
unit.aegires.description = エネルギーフィールド内の全ての敵ユニットと建造物には電撃を放ち、全ての味方ユニットには修復効果を与えます。
+1 -1
View File
@@ -904,7 +904,7 @@ category.view.name = Wyświetl
category.multiplayer.name = Wielu graczy
category.blocks.name = Wybierz Blok
command.attack = Atakuj
command.rally = Zbierz
command.rally = Zbiórka
command.retreat = Wycofaj
command.idle = Nieaktywny
placement.blockselectkeys = \n[lightgray]Klawisz: [{0},
+17 -7
View File
@@ -121,7 +121,7 @@ committingchanges = Внесение изменений
done = Готово
feature.unsupported = Ваше устройство не поддерживает эту возможность.
mods.initfailed = [red]⚠[] Не удалось инициализировать предыдущий запуск Mindustry. Это могло быть вызвано неисправными модификациями.\n\nЧтобы предотвратить зацикленные вылеты игры, [red]все модификации были отключены.[]\n\nЧтобы отключить эту функцию, выключите её в [accent]Настройки->Игра->Отключение модификаций после вылета при запуске[].
mods.initfailed = [red]⚠[] Не удалось инициализировать предыдущий запуск Mindustry. Это могло быть вызвано неисправными модификациями.\n\nЧтобы предотвратить зацикленные вылеты игры, [red]все модификации были отключены.[]
mods = Модификации
mods.none = [lightgray]Модификации не найдены!
mods.guide = Руководство по модификациям
@@ -168,6 +168,7 @@ launchcore = Запуск ядра
filename = Имя файла:
unlocked = Новый контент разблокирован!
available = Доступно новое исследование!
unlock.incampaign = < Разблокируйте в кампании для подробностей >
completed = [accent]Завершено
techtree = Дерево\n технологий
research.legacy = Найдены данные исследований из [accent]5.0[].\nХотите [accent]загрузить эти данные[], или [accent]отказаться от них[] и перезапустить исследования в новой кампании (рекомендуется)?
@@ -315,7 +316,7 @@ data.invalid = Эти игровые данные являются недейс
data.import.confirm = Импорт внешних данных сотрёт[scarlet] все[] ваши игровые данные.\n[accent]Это не может быть отменено![]\n\nКак только данные импортированы, ваша игра немедленно закроется.
quit.confirm = Вы уверены, что хотите выйти?
loading = [accent]Загрузка…
reloading = [accent]Перезагрузка модификаций…
downloading = [accent]Скачивание...
saving = [accent]Сохранение…
respawn = [accent][[{0}][] для возрождения из ядра
cancelbuilding = [accent][[{0}][] для очистки плана
@@ -343,9 +344,9 @@ custom = Пользовательская
builtin = Встроенная
map.delete.confirm = Вы действительно хотите удалить эту карту? Это действие не может быть отменено!
map.random = [accent]Случайная карта
map.nospawn = Эта карта не имеет ни одного ядра, в котором игрок может появиться! Добавьте [accent]оранжевое[] ядро на эту карту в редакторе.
map.nospawn = Эта карта не имеет ни одного ядра, в котором игрок может появиться! Добавьте [#{0}]{1}[] ядро на эту карту в редакторе.
map.nospawn.pvp = У этой карты нет вражеских ядер, в которых игрок может появиться! Добавьте [scarlet]не оранжевое[] ядро на эту карту в редакторе.
map.nospawn.attack = У этой карты нет вражеских ядер для атаки игроком! Добавьте [scarlet]красное[] ядро на эту карту в редакторе.
map.nospawn.attack = У этой карты нет вражеских ядер для атаки игроком! Добавьте [#{0}]{1}[] ядро на эту карту в редакторе.
map.invalid = Ошибка загрузки карты: повреждённый или недопустимый файл карты.
workshop.update = Обновить содержимое
workshop.error = Ошибка загрузки информации из Мастерской: {0}
@@ -375,6 +376,9 @@ editor.ingame = Редактировать в игре
editor.publish.workshop = Опубликовать в Мастерской
editor.newmap = Новая карта
editor.center = Центрировать
editor.search = Поиск карт...
editor.filters = Фильтры
editor.showAll = Показать карты по умолчанию
workshop = Мастерская
waves.title = Волны
waves.remove = Удалить
@@ -383,6 +387,7 @@ waves.waves = волна(ы)
waves.perspawn = за появление
waves.shields = ед. щита/волну
waves.to = до
waves.max = максимум единиц
waves.guardian = Страж
waves.preview = Предварительный просмотр
waves.edit = Редактировать…
@@ -843,13 +848,13 @@ category.items = Предметы
category.crafting = Ввод/вывод
category.function = Действие
category.optional = Дополнительные улучшения
setting.skipcoreanimation.name = Пропускать анимацию запуска/приземления ядра
setting.landscape.name = Только альбомный (горизонтальный) режим
setting.shadows.name = Тени
setting.blockreplace.name = Автоматическая замена блоков
setting.linear.name = Линейная фильтрация
setting.hints.name = Подсказки
setting.logichints.name = Подсказки для логики
setting.flow.name = Показывать скорость потока ресурсов
setting.backgroundpause.name = Фоновая пауза
setting.buildautopause.name = Автоматическая приостановка строительства
setting.doubletapmine.name = Добыча руды двойным нажатием
@@ -1113,13 +1118,13 @@ unit.reign.name = Власть
unit.vela.name = Парус
unit.corvus.name = Ворон
block.resupply-point.name = Пункт снабжения
block.parallax.name = Параллакс
block.cliff.name = Скала
block.sand-boulder.name = Песчаный валун
block.basalt-boulder.name = Базальтовый валун
block.grass.name = Трава
block.molten-slag.name = Шлак
block.pooled-cryofluid.name = Криогенная жидкость
block.space.name = Космос
block.salt.name = Соль
block.salt-wall.name = Соляная стена
@@ -1366,6 +1371,7 @@ hint.placeTurret = Установите \uf861 [accent]Турели[] для з
hint.breaking = Выделите блоки в рамку [accent]правой кнопкой мыши[], чтобы разобрать их.
hint.breaking.mobile = Активируйте \ue817 [accent]молоток[] в правом нижнем углу и нажимайте на блоки, чтобы разобрать их. Удерживайте палец в течение секунды и переместите, чтобы разобрать выделением.
hint.blockInfo = Для просмотра информации о блоке, выберите его в [accent]меню строительства[], затем нажмите на кнопку [accent][[?][] справа.
hint.derelict = [accent]Покинутые[] постройки - это остатки старых баз, которые больше не функционируют.\n\nОни могут быть [accent]разобраны[] для получения ресурсов.
hint.research = Используйте кнопку \ue875 [accent]Исследований[], чтобы исследовать новые технологии.
hint.research.mobile = Используйте кнопку \ue875 [accent]Исследований[] в \ue88c [accent]Меню[], чтобы исследовать новые технологии.
hint.unitControl = Зажмите [accent][[Л-Ctrl][] и [accent]нажмите левую кнопку мыши[], чтобы контролировать дружественные единицы и турели.
@@ -1418,7 +1424,6 @@ liquid.slag.description = Может быть переработан в разд
liquid.oil.description = Используется в производстве продвинутых материалов и как зажигательный боеприпас.
liquid.cryofluid.description = Используется в качестве охлаждающей жидкости для реакторов, турелей и фабрик.
block.resupply-point.description = Снаряжает медными боеприпасами ближайшие боевые единицы. Не совместим с единицами, требующими питания от батареи.
block.armored-conveyor.description = Перемещает предметы вперёд. Не принимает вход по бокам.
block.illuminator.description = Излучает свет.
block.message.description = Сохраняет сообщение для связи между союзниками.
@@ -1598,6 +1603,11 @@ unit.omura.description = Стреляет дальнобойным пробив
unit.alpha.description = Защищает ядро «Осколок» от врагов. Основная строительная единица.
unit.beta.description = Защищает ядро «Штаб» от врагов. Основная строительная единица.
unit.gamma.description = Защищает ядро «Атом» от врагов. Основная строительная единица.
unit.retusa.description = Запускает самонаводящиеся торпеды в ближайших противников. Ремонтирует союзные единицы.
unit.oxynoe.description = Стреляет потоками пламени, которые восстанавливают союзные постройки и наносят урон врагам. Разрушает ближайшие вражеские снаряды с помощью турели точечной защиты.
unit.cyerce.description = Стреляет по врагам скоплениями ракет. Ремонтирует союзные единицы.
unit.aegires.description = Оглушает все вражеские единицы и постройки, которые попадают в его энергетическое поле. Ремонтирует всех союзников.
unit.navanax.description = Запускает взрывные ЭМИ-снаряды, которые наносят значительный урон силовым узлам противника и ремонтируют союзные постройки. Плавит ближайших врагов с помощью 4 автономных лазерных турелей.
lst.read = Считывает число из соединённой ячейки памяти.
lst.write = Записывает число в соединённую ячейку памяти.
File diff suppressed because it is too large Load Diff
+39 -35
View File
@@ -37,7 +37,7 @@ load.scripts = สคริปต์
be.update = เวอร์ชั่นรุ่นพัฒนาล่าสุดออกแล้ว:
be.update.confirm = ดาวน์โหลดเวอร์ชั่นใหม่แล้วรีสตาร์ทเลยไหม?
be.updating = กำลังอัปเดต...
be.ignore = กเลิก
be.ignore = เพิกเฉ
be.noupdates = ไม่พบอัปเดตใหม่
be.check = ตรวจหาอัปเดตใหม่
@@ -122,7 +122,7 @@ committingchanges = กำลังทำการเปลี่ยนแปล
done = เรียบร้อย
feature.unsupported = อุปกรณ์ของคุณไม่รองรับฟีเจอร์นี้
mods.initfailed = [red]⚠[] ไม่สามารถเปิดเกม Mindustry ได้ อาจเกิดจากม็อดที่ทำงานผิดปกติ\n\nเพื่อป้องกันการแครชต่อเนื่อง [red]ม็อดทั้งหมดได้ปิดตัวลง[]\n\nหากต้องการปิดฟีเจอร์นี้ ปิดได้ที่ [accent]ตั้งค่า->เกม->ปิดม็อดเมื่อเกมขัดข้อง[]
mods.initfailed = [red]⚠[] ไม่สามารถเปิดเกม Mindustry ได้ อาจเกิดจากม็อดที่ทำงานผิดปกติ\n\nเพื่อป้องกันการแครชต่อเนื่อง [red]ม็อดทั้งหมดได้ปิดตัวลง[]
mods = ม็อด
mods.none = [lightgray]ไม่พบม็อด!
mods.guide = คู่มือการทำม็อด
@@ -152,7 +152,7 @@ mod.reloadrequired = [scarlet]จำเป็นต้องรีโหลด
mod.import = นำเข้าม็อด
mod.import.file = นำเข้าไฟล์
mod.import.github = นำเข้าม็อดจาก Github
mod.jarwarn = [scarlet]ม็อดไฟล์ JAR นั้นค่อนข้างไม่ปลอดภัย[]\nกรุณาเช็ให้แน่ใจว่าคุณนำเข้าม็อดนี้จะแหล่งที่เชื่อถือได้!
mod.jarwarn = [scarlet]ม็อดไฟล์ JAR นั้นค่อนข้างไม่ปลอดภัย[]\nกรุณาเช็ให้แน่ใจว่าคุณนำเข้าม็อดนี้จะแหล่งที่เชื่อถือได้!
mod.item.remove = ไอเท็มนี้เป็นส่วนหนึ่งของม็อด [accent]'{0}'[] หากต้องการนำออก กรุณาถอนการติดตั้งม็อดนั้น
mod.remove.confirm = ม็อดนี้จะถูกลบ
mod.author = [lightgray]ผู้สร้าง:[] {0}
@@ -201,7 +201,7 @@ server.kicked.customClient = เซิร์ฟเวอร์นี้ไม่
server.kicked.gameover = จบเกม!
server.kicked.serverRestarting = เซิร์ฟเวอร์กำลังเริ่มใหม่
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 ของฉัน" จากเครื่องของโฮสต์
hostserver = โฮสต์เกมผู้เล่นหลายคน
invitefriends = ชวนเพื่อน
@@ -229,7 +229,7 @@ trace = แกะรอยผู้เล่น
trace.playername = ชื่อผู้เล่น: [accent]{0}
trace.ip = IP: [accent]{0}
trace.id = ID: [accent]{0}
trace.mobile = ไคลเอนต์โมบาย: [accent]{0}
trace.mobile = ไคลเอนต์โทรศัพท์: [accent]{0}
trace.modclient = ไคลเอนต์ปรับแต่ง: [accent]{0}
trace.times.joined = เวลาเข้า: [accent]{0}
trace.times.kicked = เวลาโดนเตะ: [accent]{0}
@@ -343,7 +343,7 @@ loadimage = โหลดรูป
saveimage = เซฟรูป
unknown = ไม่ทราบ
custom = กำหนดเอง
builtin = ติดตัว
builtin = ค่าเริ่มต้น
map.delete.confirm = คุณแน่ใจหรือว่าจะลบแมพนี้? การกระทำครั้งนี้ไม่สามารถย้อนกลับได้!
map.random = [accent]สุ่มแมพ
map.nospawn = แมพนี้ไม่มีแกนกลางให้ผู้เล่นเกิด! กรุณาใส่แกนกลาง[#{0}]{1}[] ลงในตัวแก้ไข
@@ -379,6 +379,9 @@ editor.ingame = แก้ไขในเกม
editor.publish.workshop = เผยแพร่บนเวิร์กช็อป
editor.newmap = แมพใหม่
editor.center = ศูนย์กลางแมพ
editor.search = ค้นหาแมพ...
editor.filters = ตัวกรองแมพ
editor.showAll = แสดงแมพค่าเริ่มต้น
workshop = เวิร์กช็อป
waves.title = คลื่น
waves.remove = ลบ
@@ -432,8 +435,8 @@ editor.loadmap = โหลดแมพ
editor.savemap = เซฟแมพ
editor.saved = เซฟเรียบร้อย!
editor.save.noname = แมพของคุณไม่มีชื่อ! สามารถตั้งชื่อได้ในเมนู 'ข้อมูลแมพ'
editor.save.overwrite = แมพของคุณไปทับกับแมพติดตัว! เปลี่ยนชื่อได้ในเมนู 'ข้อมูลแมพ'
editor.import.exists = [scarlet]ไม่สามารถนำเข้าได้:[] มีแมพติดตัวที่ชื่อ '{0}' อยู่แล้ว!
editor.save.overwrite = แมพของคุณไปทับกับแมพค่าเริ่มต้น! เปลี่ยนชื่อได้ในเมนู 'ข้อมูลแมพ'
editor.import.exists = [scarlet]ไม่สามารถนำเข้าได้:[] มีแมพค่าเริ่มต้นที่ชื่อ '{0}' อยู่แล้ว!
editor.import = นำเข้า...
editor.importmap = นำเข้าแมพ
editor.importmap.description = นำเข้าแมพที่มีอยู่แล้ว
@@ -560,8 +563,8 @@ guardian = ผู้พิทักษ์
connectfail = [crimson]การเชื่อมต่อผิดพลาด:\n\n[accent]{0}
error.unreachable = เซิร์ฟเวอร์ไม่สามารถเข้าถึงได้\nแน่ใจหรือว่าที่อยู่เขียนถูกต้อง?
error.invalidaddress = ที่อยู่ไม่ถูกต้อง
error.timedout = Timed out!\nเช็ให้แน่ใจว่า port forwarding ของโฮสต์เปิดอยู่และที่อยู่นั้นถูกต้อง!
error.mismatch = Packet error:\nอาจเกิดจากเวอร์ชั่นของ ไคลเอนต์/เซิร์ฟเวอร์ ไม่ตรงกัน\nเช็ให้แน่ใจว่าคุณและโฮสต์ใช้ Mindustry เวอร์ชั่นล่าสุด!
error.timedout = Timed out!\nเช็ให้แน่ใจว่า port forwarding ของโฮสต์เปิดอยู่และที่อยู่นั้นถูกต้อง!
error.mismatch = Packet error:\nอาจเกิดจากเวอร์ชั่นของ ไคลเอนต์/เซิร์ฟเวอร์ ไม่ตรงกัน\nเช็ให้แน่ใจว่าคุณและโฮสต์ใช้ Mindustry เวอร์ชั่นล่าสุด!
error.alreadyconnected = เชื่อมต่ออยู่แล้ว
error.mapnotfound = ไม่พบไฟล์แมพ
error.io = Network I/O error
@@ -624,7 +627,7 @@ sector.stainedMountains.name = ภูเขาหลากสี
sector.desolateRift.name = เดโซเลต ริฟต์
sector.nuclearComplex.name = ฐานผลิตนิวเคลียร์
sector.overgrowth.name = โอเวอร์โกรว์ด
sector.tarFields.name = ผืนแผ่นแห่งน้ำมัน
sector.tarFields.name = ราบลุ่มน้ำมัน
sector.saltFlats.name = ที่ราบเกลือ
sector.fungalPass.name = ทางผ่านฟังกัล
sector.biomassFacility.name = แหล่งสังเคราะห์ชีวมวล
@@ -634,21 +637,21 @@ sector.planetaryTerminal.name = ท่าปล่อยจรวดอวกา
sector.coastline.name = แนวชายฝั่ง
sector.navalFortress.name = ปราการแห่งวารี
sector.groundZero.description = ที่ที่ดีที่สุดในการเริ่มต้นอีกครั้ง ศัตรูน้อย ทรัพยากรน้อย\nเก็บ[accent]ตะกั่ว[]และ[accent]ทองแดง[]ให้ได้มากที่สุด\nแล้วลุยต่อ
sector.frozenForest.description = แม้แต่ที่นี่ ณ ที่ที่อยู่ใกล้ภูเขา [accent]สปอร์[]ก็ยังแพร่มาถึงที่นี่\nอากาศอันแสนเย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป\n\nเริ่มต้นการใช้ไฟฟ้า สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้\nเรียนรู้ที่จะใช้เครื่องซ่อมแซม
sector.groundZero.description = ที่ที่ดีที่สุดในการเริ่มต้นอีกครั้ง ศัตรูน้อย ทรัพยากรน้อย\nเก็บ[accent]ตะกั่ว[]และ[orange]ทองแดง[]ให้ได้มากที่สุด\nแล้วลุยต่อ
sector.frozenForest.description = แม้แต่ที่นี่ ณ ที่ที่อยู่ใกล้ภูเขา [accent]สปอร์[]ก็ยังแพร่มาถึงที่นี่ อากาศอันแสนเย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป\n\nเริ่มต้นการใช้ไฟฟ้า สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้ เรียนรู้ที่จะใช้เครื่องซ่อมแซม
sector.saltFlats.description = ณ ขอบของทะเลทราย เป็นที่ตั้งของที่ราบเกลือ สามารถพบทรัพยากรบางอย่างได้ที่นี่\n\nศัตรูได้ตั้งฐานเก็บทรัพยากรไว้ที่นี่ ทำลายแกนกลางของพวกมัน อย่าให้มีอะไรเหลือ
sector.craters.description = มีน้ำขังอยู่ในหลุมอุกกาบาศแห่งนี้ เป็นอนุสรณ์สถานของสงครามเก่าแก่\nยึดพื้นที่นี่มา เก็บทราย เผา[accent]กระจกเมต้า[]\nปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและเครื่องขุดเจาะ
sector.ruinousShores.description = ถัดมาจากทะเลทราย เป็นที่ตั้งของชายฝั่ง ที่ครั้งก่อน เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง\nซึ่งทุกทำลายไปซะส่วนใหญ่แล้ว มีเหลือแค่ระบบการป้องกันพื้นฐาน\nทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก\n\nทำการขยายการสำรวจต่อไป ค้นพบกับเทคโนโลยีอีกครั้ง
sector.stainedMountains.description = เข้าลึกไปในพื้นที่ จะพบกับภูเขา ซึ่งยังไม่ถูกสปอร์แตะต้อง\nขุด[accent]ไทเทเนี่ยม[]ที่อุดมสมบูรณ์ในพื้นที่นี้ เรียนรู้ที่จะใช้มัน\n\nมีศัตรูปรากฏตัวมากขึ้นในบริเวณนี้ อย่าปล่อยให้พวกมันส่งยูนิตที่แข็งแกร่งที่สุดออกมา
sector.overgrowth.description = พื้นที่นี้ถูกปกคลุมไปด้วยพืช เข้าใกล้กับแหล่งกำเนิดของสปอร์\nศัตรูได้ตั้งฐานเฝ้าระวังไว้ที่นี่ สร้างยูนิตเมส ทำลายฐานทิ้งซะ\nวิจัย[accent]เครื่องพัฒนารุ่นยกกำลัง[]เพื่อผลิตยูนิตขนาดที่ใหญ่ขึ้น
sector.tarFields.description = แนวชานขอบของแหล่งผลิตน้ำมัน อยู่ระหว่างภูเขาและทะเลทราย เป็นหนึ่งในพื้นที่ที่มีแหล่งน้ำมันดินที่ใช้งานได้\nแม้ว่าจะถูกทิ้งร้าง พื้นที่นี้ยังคงมีฐานทัพของศัตรูอยู่ใกล้ๆ อย่าประมาทกับพวกมัน\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้
sector.desolateRift.description = เป็นพื้นที่ที่อันตรายมาก ทรัพยากรมากมาย แต่พื้นที่คับแคบ\nความเสี่ยงการโดนทำลายล้างสูง ออกไปจากที่นี่ให้เร็วที่สุด\nอย่าถูกหลอกโดยระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ
sector.nuclearComplex.description = สถานที่ผลิตและแปรรูปทอเรี่ยมเก่า ถูกทำลายไม่เหลือสิ้น\nวิจัยทอเรี่ยมและวิธีการใช้มัน\n\nศัตรูในบริเวณนี้มีจำนวนมาก คอยตรวจตราหาผู้บุกรุกอยู่ตลอดเวลา
sector.craters.description = มีน้ำขังอยู่ในหลุมอุกกาบาศแห่งนี้ เป็นอนุสรณ์สถานของสงครามเก่าแก่ ยึดพื้นที่นี่มา เก็บทราย เผา[white]กระจกเมต้า[] ปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและเครื่องขุดเจาะ
sector.ruinousShores.description = ถัดมาจากทะเลทราย เป็นที่ตั้งของชายฝั่ง ที่ครั้งก่อน เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง ซึ่งทุกทำลายไปซะส่วนใหญ่แล้ว มีเหลือแค่ระบบการป้องกันพื้นฐาน ทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก\n\nทำการขยายการสำรวจต่อไป ค้นพบกับเทคโนโลยีอีกครั้ง
sector.stainedMountains.description = เข้าลึกไปในพื้นที่ จะพบกับภูเขา ซึ่งยังไม่ถูกสปอร์แตะต้อง\nขุด[sky]ไทเทเนี่ยม[]ที่อุดมสมบูรณ์ในพื้นที่นี้ เรียนรู้ที่จะใช้มัน\n\nมีศัตรูปรากฏตัวมากขึ้นในบริเวณนี้ อย่าปล่อยให้พวกมันส่งยูนิตที่แข็งแกร่งที่สุดออกมา
sector.overgrowth.description = พื้นที่แห่งนี้ถูกปกคลุมไปด้วยพืชรกร้าง เริ่มเข้าใกล้กับแหล่งกำเนิดของสปอร์\nศัตรูได้ตั้งฐานเฝ้าระวังไว้ที่นี่ สร้างยูนิตเมส ทำลายฐานทิ้งซะ\nวิจัย[accent]เครื่องพัฒนารุ่นยกกำลัง[]เพื่อผลิตยูนิตขนาดที่ใหญ่ขึ้น
sector.tarFields.description = แนวชานขอบของแหล่งผลิตน้ำมัน อยู่ระหว่างภูเขาและทะเลทราย เป็นหนึ่งในพื้นที่ที่มีแหล่งน้ำมันดินที่ใช้งานได้\nแม้ว่าจะถูกทิ้งร้าง พื้นที่นี้ยังคงมีฐานทัพของศัตรูอยู่ใกล้ๆ อย่าประมาทกับพวกมัน\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้[]
sector.desolateRift.description = เป็นพื้นที่ที่อันตรายมาก ทรัพยากรมากมาย แต่พื้นที่คับแคบ ความเสี่ยงการโดนทำลายล้างสูง ออกไปจากที่นี่ให้เร็วที่สุด อย่าถูกหลอกโดยระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ
sector.nuclearComplex.description = สถานที่ผลิตและแปรรูป[pink]ทอเรี่ยม[]เก่า ถูกทำลายไม่เหลือสิ้น\nวิจัยทอเรี่ยมและวิธีการใช้มัน\n\nศัตรูในบริเวณนี้มีจำนวนมาก คอยตรวจตราหาผู้บุกรุกอยู่ตลอดเวลา
sector.fungalPass.description = ทางผ่านระหว่างพื้นที่สูงและต่ำของภูเขา พื้นที่นี้เต็มไปด้วยสปอร์ ฐานลาดตระเวนขนาดเล็กของศัตรูตั้งอยู่ที่นี่\nทำลายมันซะ\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.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ผลิตยูนิตเรือ กวาดล้างศัตรูให้เร็วที่สุด วิจัยสิ่งประดิษฐ์นั่น
status.burning.name = เผาไหม้
@@ -740,7 +743,7 @@ stat.maxunits = จำนวนยูนิตสูงสุด
stat.armor = เกราะ
stat.health = พลังชีวิต
stat.buildtime = เวลาในการสร้าง
stat.maxconsecutive = ติดต่อกันสูงสุด
stat.maxconsecutive = ติดต่อกันได้สูงสุด
stat.buildcost = ใช้
stat.inaccuracy = ความคลาดเคลื่อน
stat.shots = นัด
@@ -920,7 +923,7 @@ setting.showweather.name = แสดงแกรฟฟิกสภาพอา
public.confirm = คุณต้องการให้เกมของคุณเปิดเป็นสาธารณะหรือไม่?\n[accent]ทุกคนจะสามารถเข้าร่วมเกมของคุณได้\n[lightgray]คุณสามารถเปลี่ยนการตั้งค่านี้ได้ที่ ตั้งค่า->เกม->การมองเห็นเซิร์ฟเวอร์สาธารณะ
public.confirm.really = หากคุณอยากเล่นกับเล่นกับเพื่อน ใช้[green]ชวนเพื่อน[]ดีกว่า แทนที่จะใช้[scarlet]เซิร์ฟเวอร์สาธารณะ[]!\nคุณแน่ใจนะว่าจะเปลี่ยนเกมคุณเป็น[scarlet]สาธารณะ[]?
public.beta = เกมเวอร์ชั่นเบต้าไม่สามารถเปิดเซิร์ฟเวอร์สาธารณะได้
uiscale.reset = อัตราขนาดของ UI ได้มีการเปลี่ยนแปลง\nกด "โอเค" เพื่อยืนยันขนาด UI นี้\n[scarlet]จะเปลี่ยนกลับไปเป็นแบบเดิมและออกในอีก[accent] {0}[] วินาที...
uiscale.reset = อัตราขนาดของ UI ได้มีการเปลี่ยนแปลง\nกด "โอเค" เพื่อยืนยันขนาด UI นี้\n[scarlet]จะเปลี่ยนกลับไปเป็นขนาดเดิมและออกในอีก[accent] {0}[] วินาที...
uiscale.cancel = ยกเลิกและออก
setting.bloom.name = บลูม
keybind.title = ตั้งค่าปุ่ม
@@ -1130,6 +1133,7 @@ block.sand-boulder.name = ก้อนหินทราย
block.basalt-boulder.name = ก้อนบะซอลต์
block.grass.name = หญ้า
block.molten-slag.name = แร่หลอมละลาย
block.pooled-cryofluid.name = สารหล่อเย็น
block.space.name = อวกาศ
block.salt.name = เกลือ
block.salt-wall.name = กำแพงเกลือ
@@ -1298,7 +1302,7 @@ block.thorium-reactor.name = เตาปฏิกรณ์ทอเรี่ย
block.mass-driver.name = เครื่องโอนถ่ายมวล
block.blast-drill.name = เครื่องขุดแอร์บลาสต์
block.thermal-pump.name = ปั๊มความร้อน
block.thermal-generator.name = เครื่องกำเนิดไฟฟ้าจากความร้อน
block.thermal-generator.name = เครื่องกำเนิดไฟฟ้าพลังอัคคี
block.alloy-smelter.name = เครื่องหลอมอัลลอย
block.mender.name = เครื่องซ่อมแซม
block.mend-projector.name = เครื่องฉายซ่อมแซม
@@ -1532,8 +1536,8 @@ block.thorium-reactor.description = ผลิตพลังงานจำน
block.thorium-reactor.details = เตาปฏิกรที่เป็นดาบสองคม ผลิตพลังงานได้มหาศาลขึ้นอยู่จำนวนทอเรี่ยม แต่จะระเบิดอย่างรุนแรงเช่นกันหากขาดสารหล่อเย็น ควรมั่นใจเรื่องทรัพยากรก่อนใช้เตาปฎิกรนี้
block.impact-reactor.description = สามารถผลิตไฟฟ้าได้จำนวนมหาศาลที่ประสิทธิภาพสูงสุด จำเป็นต้องใช้พลังงานจำนวนมากในการสตาร์ทเครื่อง
block.mechanical-drill.description = เมื่อวางบนพื้นแร่ จะขุดแร่นั้นและส่งออกมาอย่างช้าๆ\nไปเรื่อยๆ ไม่มีที่สิ้นสุด ขุดได้แค่ทรัพยากรพื้นฐาน
block.pneumatic-drill.description = เครื่องขุดที่ได้รับการปรับปรุง สามารถขุด[accent]ไทเทเนี่ยม[]ได้ ขุดได้เร็วกว่าเครื่องขุดเชิงกล
block.laser-drill.description = ขุดได้เร็วขึ้นด้วยเทคโนโลยีเลเซอร์ แต่ต้องใช้พลังงาน\nสามารถขุด[accent]ทอเรี่ยม[]ได้
block.pneumatic-drill.description = เครื่องขุดที่ได้รับการปรับปรุง สามารถขุด[sky]ไทเทเนี่ยม[]ได้ ขุดได้เร็วกว่าเครื่องขุดเชิงกล
block.laser-drill.description = ขุดได้เร็วขึ้นด้วยเทคโนโลยีเลเซอร์ แต่ต้องใช้พลังงาน\nสามารถขุด[pink]ทอเรี่ยม[]ได้
block.blast-drill.description = เครื่องขุดขั้นสุดยอด ใช้พลังงานจำนวนมาก
block.water-extractor.description = ขุดน้ำบาดาลจากใต้พื้นดิน ใช้ในพื้นที่ที่ไม่มีน้ำบนดินให้ใช้
block.cultivator.description = รวบรวมสปอร์ในชั้นบรรยากาศมาสกัดเป็นกระเปาะสปอร์สำหรับ\nอุตสาหกรรม
@@ -1594,15 +1598,15 @@ block.repair-turret.description = ซ่อมแซมยูนิตที่
block.payload-propulsion-tower.description = บล็อกขนส่งสิ่งบรรทุกทางไกล\nยิงสิ่งบรรทุกไปยังหอเคลื่อนย้ายสิ่งบรรทุกอีกเครื่องที่เชื่อมต่อไว้
unit.dagger.description = ยิงกระสุนธรรมดาใส่ศัตรูที่อยู่ใกล้เคียง
unit.mace.description = ยิงเปลวไฟใส่ศัตรูที่อยู่ใกล้เคียง ทำให้ศัตรูถูกเผาไหม้
unit.mace.description = ยิงเปลวไฟเผาไหม้ใส่ศัตรูที่อยู่ใกล้เคียง
unit.fortress.description = ยิงปืนใหญ่พิสัยไกลไปที่เป้าหมายพื้นดิน
unit.scepter.description = ยิงกระสุนชาร์จใส่ศัตรูใกล้เคียงทั้งหมด กระสุนจะระเบิดออกเป็นพลังงานสายฟ้า สร้างความเสียหายแก่ป้อมปืนที่อยู่หลังกำแพ
unit.scepter.description = ยิงกระสุนชาร์จใส่ศัตรูใกล้เคียงทั้งหมด กระสุนจะระเบิดออกเป็นพลังงานสายฟ้า สร้างความเสียหายแก่ยูนิตรอบข้า
unit.reign.description = ยิงกระสุนเจาะทะลุขนาดใหญ่ใส่ศัตรูที่อยู่ใกล้เคียง กระสุนสามารถกระจายตัวไปโจมตีป้อมปืนที่หลบอยู่หลังกำแพงได้
unit.nova.description = ยิงเลเซอร์ที่สร้างความเสียหายให้กับศัตรูและซ่อมแซมสิ่งก่อสร้างของ\nพวกพ้อง สามารถบินได้
unit.pulsar.description = ยิงสายฟ้าที่สร้างความเสียหายให้กับศัตรูและซ่อมแซมสิ่งก่อสร้างของ\nพวกพ้อง สามารถบินได้
unit.quasar.description = ยิงลำแสงเลเซอร์เจาะทะลุที่สร้างความเสียหายให้กับศัตรูและซ่อมแซม\nสิ่งก่อสร้างของพวกพ้อง มีโล่พลังงานเพื่อป้องกันร่างกายอันบอบบาง\nสามารถบินได้
unit.vela.description = ยิงลำแสงเลเซอร์ต่อเนื่องขนาดใหญ่ที่สร้างความเสียหายให้กับศัตรู ทำให้เกิดไฟไหม้ และซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nสามารถบินได้
unit.corvus.description = ยิงลำแสงเลเซอร์ระเบิดขนาดใหญ่ที่สร้างความเสียหายอย่างหนักให้กับศัตรู\nและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง สามารถเหยียบข้ามกำแพงได้
unit.corvus.description = ยิงลำแสงเลเซอร์พลังงานขนาดใหญ่ที่สร้างความเสียหายอย่างหนัก\nให้กับศัตรูและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง สามารถเหยียบข้ามกำแพงได้
unit.crawler.description = วิ่งเข้าหาศัตรูแล้วระเบิดตัวเอง ทำให้เกิดระเบิดขนาดใหญ่
unit.atrax.description = ยิงลูกแก้วแร่หลอมใส่เป้าหมายพื้นดิน ทำให้ศัตรูถูกเผาไหม้ สามารถเหยียบข้ามกำแพงได้
unit.spiroct.description = ยิงเลเซอร์ทอนกำลังใส่ศัตรู ซ่อมแซมตัวเองไปในตัว สามารถเหยียบข้ามกำแพงได้
@@ -1626,10 +1630,10 @@ unit.omura.description = ยิงลำแสงปืนเรลกันเ
unit.alpha.description = ปกป้องแกนกลางชาร์ดจากศัตรู สร้างสิ่งต่างๆ
unit.beta.description = ปกป้องแกนกลางฟาวน์เดชั่นจากศัตรู สร้างสิ่งต่างๆ
unit.gamma.description = ปกป้องแกนกลางนิวเคลียสจากศัตรู สร้างสิ่งต่างๆ
unit.retusa.description = วางทุ่นระเบิดระยะใกล้ และซ่อมแซมยูนิตพวกพ้องที่อยู่ใกล้เคียง
unit.retusa.description = ยิงตอร์ปิโดติดตามตัวใส่ศัตรูที่อยู่ใกล้เคียง และซ่อมแซมยูนิตพวกพ้องที่อยู่ใกล้เคียง
unit.oxynoe.description = ยิงเปลวไฟเผาไหม้ใส่ศัตรูที่อยู่ใกล้เคียงและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nทำลายกระสุนที่กำลังเข้ามาด้วยปืนป้องกันจุด\nให้สถานะ[accent]โอเวอร์คล็อก[]แก่พวกพ้องรอบข้าง ทำให้ยิงเร็วและแรงขึ้น
unit.cyerce.description = ยิงขีปนาวุธพลาสม่าติดตามตัวเป็นกระจุกระเบิดใส่ศัตรู\nซ่อมแซมยูนิตพวกพ้องที่อยู่ใกล้เคียงด้วยปืนซ่อมแซม
unit.aegires.description = ช็อตทุกสิ่งก่อสร้างและยูนิตศัตรูที่เข้ามาในสนามพลังงานของมัน\nซ่อมแซมสิ่งก่อสร้างและยูนิตพวกพ้อง
unit.aegires.description = ช็อตทุกสิ่งก่อสร้างและยูนิตศัตรูที่เข้ามาในสนามพลังงานของมัน\nด้วยสายฟ้าฟาด ซ่อมแซมสิ่งก่อสร้างและยูนิตพวกพ้อง
unit.navanax.description = ยิงลูกระเบิดคลื่นชีพจรแม่เหล็กขนาดใหญ่ สร้างความเสียหายอย่างหนักให้กับเครือข่ายพลังงานศัตรู\nและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nหลอมละลายศัตรูที่อยู่ใกล้เคียงด้วยป้อมปืนเลเซอร์อัตโนมัติสี่ป้อม
lst.read = อ่านเลขจากเซลล์ความจำที่เชื่อมต่อไว้
@@ -1751,16 +1755,16 @@ radar.output = ตัวแปรของยูนิตที่มองห
unitradar.target = ตัวกรองในการหายูนิต
unitradar.and = ตัวกรองเพิ่มเติม
unitradar.order = เรียงลำดับคำสั่ง\n0 เพื่อย้อนกลับ
unitradar.order = เรียงลำดับคำสั่ง\n0 เพื่อเรียงย้อนกลับ
unitradar.sort = เมตริกเพื่อจัดเรียงผลลัพย์ตาม
unitradar.output = ตัวแปรของยูนิตที่มองหา
control.of = สิ่งก่อสร้างให้ควบคุม
control.unit = ยูนิต/สิ่งก่อสร้างที่จะเล็ง
control.shoot = ว่าจะยิงหรือเปล่า
control.shoot = ว่าจะยิงหรือไม่
unitlocate.enemy = ว่าจะหาสิ่งก่อสร้างศัตรูหรือไม่
unitlocate.found = ตัวแปรว่าหาเจอหรือไม่\nจะส่งกลับว่า true หากเจอสิ่งก่อสร้าง
unitlocate.found = ตัวแปรว่าพบเจอหรือไม่\nจะส่งกลับว่า true หากเจอสิ่งก่อสร้าง
unitlocate.building = ตัวแปรสิ่งก่อสร้างที่มองหา
unitlocate.outx = ตัวแปรพิกัด X
unitlocate.outy = ตัวแปรพิกัด Y
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
View File
@@ -191,6 +191,7 @@ const PlayEvent = Packages.mindustry.game.EventType.PlayEvent
const DisposeEvent = Packages.mindustry.game.EventType.DisposeEvent
const ServerLoadEvent = Packages.mindustry.game.EventType.ServerLoadEvent
const ClientCreateEvent = Packages.mindustry.game.EventType.ClientCreateEvent
const SaveWriteEvent = Packages.mindustry.game.EventType.SaveWriteEvent
const SaveLoadEvent = Packages.mindustry.game.EventType.SaveLoadEvent
const MapPublishEvent = Packages.mindustry.game.EventType.MapPublishEvent
const MapMakeEvent = Packages.mindustry.game.EventType.MapMakeEvent
+8
View File
@@ -132,6 +132,8 @@ public class Vars implements Loadable{
Color.valueOf("4b5ef1"),
Color.valueOf("2cabfe"),
};
/** maximum TCP packet size */
public static final int maxTcpSize = 900;
/** default server port */
public static final int port = 6567;
/** multicast discovery port.*/
@@ -199,6 +201,8 @@ public class Vars implements Loadable{
public static final String saveExtension = "msav";
/** schematic file extension */
public static final String schematicExtension = "msch";
/** path to the java executable */
public static String javaPath;
/** list of all locales that can be switched to */
public static Locale[] locales;
@@ -293,6 +297,10 @@ public class Vars implements Loadable{
pathfinder = new Pathfinder();
bases = new BaseRegistry();
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();
@@ -28,11 +28,11 @@ public class StatusEffects implements ContentList{
init(() -> {
opposite(wet, freezing);
affinity(tarred, ((unit, result, time) -> {
affinity(tarred, (unit, result, time) -> {
unit.damagePierce(transitionDamage);
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));
}));
});
});
}};
@@ -46,9 +46,9 @@ public class StatusEffects implements ContentList{
init(() -> {
opposite(melting, burning);
affinity(blasted, ((unit, result, time) -> {
affinity(blasted, (unit, result, time) -> {
unit.damagePierce(transitionDamage);
}));
});
});
}};
+8 -14
View File
@@ -187,15 +187,15 @@ public class NetClient implements ApplicationListener{
effect(effect, x, y, rotation, color);
}
//called on all clients
@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){
Vars.ui.chatfrag.addMessage(message, sender);
Vars.ui.chatfrag.addMessage(message);
}
if(playersender != null){
playersender.lastText(message);
//display raw unformatted text above player head
if(playersender != null && unformatted != null){
playersender.lastText(unformatted);
playersender.textFadeTime(1f);
}
}
@@ -204,7 +204,7 @@ public class NetClient implements ApplicationListener{
@Remote(called = Loc.server, targets = Loc.server)
public static void sendMessage(String message){
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
if(!headless){
sendMessage(message, colorizeName(player.id, player.name), player);
sendMessage(netServer.chatFormatter.format(player, message), message, player);
}
//server console logging
@@ -248,7 +248,7 @@ public class NetClient implements ApplicationListener{
//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
Call.sendMessage(message, colorizeName(player.id(), player.name), player);
Call.sendMessage(netServer.chatFormatter.format(player, message), message, player);
}else{
//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)
public static void connect(String ip, int port){
if(!steam && ip.startsWith("steam:")) return;
+13 -4
View File
@@ -64,6 +64,8 @@ public class NetServer implements ApplicationListener{
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 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) -> {
String message = admins.filterMessage(player, args[0]);
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) -> {
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;
}
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;
//voting round duration in seconds
float voteDuration = 0.5f * 60;
@@ -981,4 +985,9 @@ public class NetServer implements ApplicationListener{
public interface TeamAssigner{
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);
}
}
+1
View File
@@ -314,6 +314,7 @@ public class Renderer implements ApplicationListener{
Draw.draw(Layer.overlayUI, overlays::drawTop);
Draw.draw(Layer.space, this::drawLanding);
Events.fire(Trigger.drawOver);
blocks.drawBlocks();
Groups.draw.draw(Drawc::draw);
+1 -1
View File
@@ -108,7 +108,7 @@ public class Damage{
furthest = null;
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;
}
+1 -1
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) -> {
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;
//snap it instead of removing
lines.get(lines.size - 1).set(wx * tilesize, wy * tilesize);
@@ -1241,6 +1241,14 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
return amount;
}
public boolean absorbLasers(){
return block.absorbLasers;
}
public boolean isInsulated(){
return block.insulated;
}
public boolean collide(Bullet other){
return true;
}
@@ -9,7 +9,6 @@ import arc.util.*;
import arc.util.pooling.*;
import mindustry.annotations.Annotations.*;
import mindustry.content.*;
import mindustry.core.*;
import mindustry.entities.units.*;
import mindustry.game.EventType.*;
import mindustry.game.*;
@@ -310,10 +309,15 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
Draw.z(z);
}
/** @return name with a markup color prefix */
String coloredName(){
return "[#" + color.toString().toUpperCase() + "]" + name;
}
void sendMessage(String text){
if(isLocal()){
if(ui != null){
ui.chatfrag.addMessage(text, null);
ui.chatfrag.addMessage(text);
}
}else{
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){
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(ui != null){
ui.chatfrag.addMessage(text, fromName);
ui.chatfrag.addMessage(text);
}
}else{
Call.sendMessage(con, text, fromName, from);
Call.sendMessage(con, text, unformatted, from);
}
}
@@ -88,7 +88,7 @@ abstract class WaterMoveComp implements Posc, Velc, Hitboxc, Flyingc, Unitc{
@Replace
public float floorSpeedMultiplier(){
Floor on = isFlying() ? Blocks.air.asFloor() : floorOn();
return (on.isDeep() ? 1.3f : 1f) * speedMultiplier;
return (on.shallow ? 1f : 1.3f) * speedMultiplier;
}
public boolean onLiquid(){
+7 -6
View File
@@ -33,6 +33,7 @@ public class EventType{
socketConfigChanged,
update,
draw,
drawOver,
preDraw,
postDraw,
uiDrawBegin,
@@ -50,6 +51,7 @@ public class EventType{
public static class ResizeEvent{}
public static class MapMakeEvent{}
public static class MapPublishEvent{}
public static class SaveWriteEvent{}
public static class SaveLoadEvent{}
public static class ClientCreateEvent{}
public static class ServerLoadEvent{}
@@ -503,7 +505,7 @@ public class EventType{
this.player = player;
}
}
public static class PlayerBanEvent{
@Nullable
public final Player player;
@@ -514,7 +516,7 @@ public class EventType{
this.uuid = uuid;
}
}
public static class PlayerUnbanEvent{
@Nullable
public final Player player;
@@ -525,7 +527,7 @@ public class EventType{
this.uuid = uuid;
}
}
public static class PlayerIpBanEvent{
public final String ip;
@@ -533,7 +535,7 @@ public class EventType{
this.ip = ip;
}
}
public static class PlayerIpUnbanEvent{
public final String ip;
@@ -541,6 +543,5 @@ public class EventType{
this.ip = ip;
}
}
}
}
+6 -3
View File
@@ -113,12 +113,15 @@ public class SaveIO{
public static void write(OutputStream os, StringMap tags){
try(DataOutputStream stream = new DataOutputStream(os)){
Events.fire(new SaveWriteEvent());
SaveVersion ver = getVersion();
stream.write(header);
stream.writeInt(getVersion().version);
stream.writeInt(ver.version);
if(tags == null){
getVersion().write(stream);
ver.write(stream);
}else{
getVersion().write(stream, tags);
ver.write(stream, tags);
}
}catch(Throwable e){
throw new RuntimeException(e);
@@ -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
if(naval){
@@ -345,11 +345,11 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
Vec3 v = sector.rect.project(x, y);
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;
if(value > 0.12f && !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);
if(value > 0.17f && !Mathf.within(x, y, fspawn.x, fspawn.y, 12 + 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;
//do not place rivers on ice, they're frozen
//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;
}
});
}
+2 -2
View File
@@ -107,8 +107,8 @@ public class BeControl{
download(updateUrl, file, i -> length[0] = i, v -> progress[0] = v, () -> cancel[0], () -> {
try{
Runtime.getRuntime().exec(OS.isMac ?
new String[]{"java", "-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, "-XstartOnFirstThread", "-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);
}catch(IOException e){
+1 -1
View File
@@ -90,7 +90,7 @@ public abstract class NetConnection{
cid = begin.id;
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);
StreamChunk chunk = new StreamChunk();
+1 -1
View File
@@ -200,7 +200,7 @@ public class Weapon implements Cloneable{
boolean can = unit.canShoot();
float lastReload = mount.reload;
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
if(rotate && (mount.rotate || mount.shoot) && can){
+4 -2
View File
@@ -138,8 +138,10 @@ public class Bar extends Element{
GlyphLayout lay = Pools.obtain(GlyphLayout.class, GlyphLayout::new);
lay.setText(font, name);
font.setColor(1f, 1f, 1f, parentAlpha);
font.draw(name, x + width / 2f - lay.width / 2f, y + height / 2f + lay.height / 2f + 1);
font.setColor(1f, 1f, 1f, 1f);
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);
}
+1
View File
@@ -37,6 +37,7 @@ public class Minimap extends Table{
Draw.rect(renderer.minimap.getRegion(), x + width / 2f, y + height / 2f, width, height);
if(renderer.minimap.getTexture() != null){
Draw.alpha(parentAlpha);
renderer.minimap.drawEntities(x, y, width, height, 0.75f, false);
}
@@ -23,7 +23,7 @@ import static mindustry.Vars.*;
public class ChatFragment extends Table{
private static final int messagesShown = 10;
private Seq<ChatMessage> messages = new Seq<>();
private Seq<String> messages = new Seq<>();
private float fadetime;
private boolean shown = false;
private TextField chatfield;
@@ -144,13 +144,13 @@ public class ChatFragment extends Table{
float theight = offsety + spacing + getMarginBottom() + scene.marginBottom;
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;
if(i - scrollPos == 0) theight -= textspacing + 1;
font.getCache().clear();
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){
font.getCache().setAlphas((fadetime - i) * opacity);
@@ -257,9 +257,9 @@ public class ChatFragment extends Table{
return shown;
}
public void addMessage(String message, String sender){
if(sender == null && message == null) return;
messages.insert(0, new ChatMessage(message, sender));
public void addMessage(String message){
if(message == null) return;
messages.insert(0, message);
fadetime += 1f;
fadetime = Math.min(fadetime, messagesShown) + 1f;
@@ -267,22 +267,6 @@ public class ChatFragment extends Table{
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{
normal(""),
team("/t"),
@@ -667,7 +667,7 @@ public class HudFragment extends Fragment{
float stroke = width * 0.35f;
float bh = height/2f;
Draw.color(color);
Draw.color(color, parentAlpha);
float f1 = Math.min(fract * 2f, 1f), f2 = (fract - 0.5f) * 2f;
@@ -703,10 +703,10 @@ public class HudFragment extends Fragment{
new Element(){
@Override
public void draw(){
Draw.color(Pal.darkerGray);
Draw.color(Pal.darkerGray, parentAlpha);
Fill.poly(x + width/2f, y + height/2f, 6, height / Mathf.sqrt3);
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 -> {
@@ -10,6 +10,7 @@ import arc.util.*;
import arc.util.io.*;
import mindustry.annotations.Annotations.*;
import mindustry.content.*;
import mindustry.entities.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.logic.*;
@@ -31,13 +32,16 @@ public class ForceProjector extends Block{
public float cooldownNormal = 1.75f;
public float cooldownLiquid = 1.5f;
public float cooldownBrokenBase = 0.35f;
public Effect absorbEffect = Fx.absorb;
public Effect shieldBreakEffect = Fx.shieldBreak;
public @Load("@-top") TextureRegion topRegion;
static ForceBuild paramEntity;
static Effect paramEffect;
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())){
trait.absorb();
Fx.absorb.at(trait);
paramEffect.at(trait);
paramEntity.hit = 1f;
paramEntity.buildup += trait.damage();
}
@@ -154,7 +158,7 @@ public class ForceProjector extends Block{
if(buildup >= shieldHealth + phaseShieldBoost * phaseHeat && !broken){
broken = true;
buildup = shieldHealth;
Fx.shieldBreak.at(x, y, realRadius(), team.color);
shieldBreakEffect.at(x, y, realRadius(), team.color);
}
if(hit > 0f){
@@ -165,6 +169,7 @@ public class ForceProjector extends Block{
if(realRadius > 0 && !broken){
paramEntity = this;
paramEffect = absorbEffect;
Groups.bullet.intersect(x - realRadius, y - realRadius, realRadius * 2f, realRadius * 2f, shieldConsumer);
}
}
@@ -69,13 +69,8 @@ public class OverflowGate extends Block{
}else if(bc && !ac){
to = b;
}else{
if(rotation == 0){
to = a;
if(flip) rotation =1;
}else{
to = b;
if(flip) rotation = 0;
}
to = (rotation & (1 << from)) == 0 ? a : b;
if(flip) rotation ^= (1 << from);
}
}
@@ -114,13 +114,8 @@ public class Sorter extends Block{
}else if(!bc){
return null;
}else{
if(rotation == 0){
to = a;
if(flip) this.rotation = (byte)1;
}else{
to = b;
if(flip) this.rotation = (byte)0;
}
to = (rotation & (1 << dir)) == 0 ? a : b;
if(flip) rotation ^= (1 << dir);
}
}
@@ -349,7 +349,7 @@ public class PowerNode extends PowerBlock{
public static boolean insulated(int x, int y, int x2, int y2){
return world.raycast(x, y, x2, y2, (wx, wy) -> {
Building tile = world.build(wx, wy);
return tile != null && tile.block.insulated;
return tile != null && tile.isInsulated();
});
}