diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index b64e8feca4..0050093ad9 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -47,7 +47,7 @@ jobs: git clone --depth=1 --branch=master https://github.com/Anuken/MindustryBuilds ../MindustryBuilds cd ../MindustryBuilds echo "Updating version to ${RELEASE_VERSION:1}" - echo versionName=6-fdroid-${RELEASE_VERSION:1}$'\n'versionCode=${GITHUB_RUN_NUMBER} > version_fdroid.txt + echo versionName=7-fdroid-${RELEASE_VERSION:1}$'\n'versionCode=${GITHUB_RUN_NUMBER} > version_fdroid.txt git add . git commit -m "Updating to build ${RELEASE_VERSION:1}" git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/MindustryBuilds diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index 9af4f50c90..13405ba012 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -17,7 +17,6 @@ android:usesCleartextTraffic="true" android:appCategory="game" android:label="@string/app_name" - android:theme="@style/ArcTheme" android:fullBackupContent="@xml/backup_rules"> - - - diff --git a/android/res/values/styles.xml b/android/res/values/styles.xml deleted file mode 100644 index c37d2c6ed9..0000000000 --- a/android/res/values/styles.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/android/src/mindustry/android/AndroidLauncher.java b/android/src/mindustry/android/AndroidLauncher.java index fd0d2cbde7..b3ed4b782d 100644 --- a/android/src/mindustry/android/AndroidLauncher.java +++ b/android/src/mindustry/android/AndroidLauncher.java @@ -84,9 +84,9 @@ public class AndroidLauncher extends AndroidApplication{ try{ //try to load own class first loadedClass = findClass(name); - }catch(ClassNotFoundException e){ + }catch(ClassNotFoundException | NoClassDefFoundError e){ //use parent if not found - loadedClass = super.loadClass(name, resolve); + return parent.loadClass(name); } } diff --git a/annotations/src/main/java/mindustry/annotations/entity/EntityIO.java b/annotations/src/main/java/mindustry/annotations/entity/EntityIO.java index e1e42fe219..b4a05b1294 100644 --- a/annotations/src/main/java/mindustry/annotations/entity/EntityIO.java +++ b/annotations/src/main/java/mindustry/annotations/entity/EntityIO.java @@ -143,8 +143,8 @@ public class EntityIO{ if(sl) cont("if(!islocal)"); if(sf){ - //TODO + targetSuf may not give the right result, test it - st(field.name + lastSuf + " = this." + field.name + targetSuf); + //TODO adding + targetSuf to the assignment fixes units being interpolated incorrectly during physics, but makes interpolation snap instead. + st(field.name + lastSuf + " = this." + field.name); } io(field.type, "this." + (sf ? field.name + targetSuf : field.name) + " = "); diff --git a/build.gradle b/build.gradle index f93082e0fa..da167c0c54 100644 --- a/build.gradle +++ b/build.gradle @@ -13,10 +13,28 @@ buildscript{ google() maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" } maven{ url 'https://jitpack.io' } + + //fake repository to download my patched robovm jar from + ivy{ + url 'https://github.com/' + + patternLayout { + artifact '/[organisation]/[module]/raw/a-single-jar-file/[revision].jar' + } + + // This is required in Gradle 6.0+ as metadata file (ivy.xml) + // is mandatory. Docs linked below this code section + metadataSources { artifact() } + } } dependencies{ - classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.11' + //use local, patched robovm gradle plugin until my PR for gradle 7.0 support is merged + //https://github.com/Anuken/robovm/raw/a-single-jar-file/robovm-gradle-plugin-2.3.14-SNAPSHOT.jar + classpath "Anuken:robovm:robovm-gradle-plugin-2.3.14-SNAPSHOT" + //needed for plugin above + classpath "com.mobidevelop.robovm:robovm-dist-compiler:2.3.13" + classpath "com.github.Anuken.Arc:packer:$arcHash" classpath "com.github.Anuken.Arc:arc-core:$arcHash" } @@ -35,7 +53,7 @@ allprojects{ ext{ versionNumber = '7' - if(!project.hasProperty("versionModifier")) versionModifier = 'dev' + if(!project.hasProperty("versionModifier")) versionModifier = 'pre-alpha' if(!project.hasProperty("versionType")) versionType = 'official' appName = 'Mindustry' steamworksVersion = '0b86023401880bb5e586bc404bedbaae9b1f1c94' diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 3561a3f20c..3f72de910e 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1594,6 +1594,8 @@ lst.sensor = Get data from a building or unit. lst.set = Set a variable. lst.operation = Perform an operation on 1-2 variables. lst.end = Jump to the top of the instruction stack. +lst.wait = Wait a certain number of seconds. +lst.lookup = Look up a item/liquid/unit/block type by ID.\nTotal counts of each type can be accessed with:\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[] lst.jump = Conditionally jump to another statement. lst.unitbind = Bind to the next unit of a type, and store it in [accent]@unit[]. lst.unitcontrol = Control the currently bound unit. diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index dc70c9f685..4e08fe56a9 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -460,6 +460,7 @@ toolmode.drawteams = Teams zeichnen toolmode.drawteams.description = Zeichnet Teams statt Blöcke. filters.empty = [lightgray]Keine Filter! Füge einen mit dem unteren Knopf hinzu. + filter.distort = Verzerren filter.noise = Rauschen filter.enemyspawn = Gegnerischer Spawn Auswahl @@ -476,6 +477,7 @@ filter.clear = Löschen filter.option.ignore = Ignorieren filter.scatter = Streuen filter.terrain = Landschaft + filter.option.scale = Skalierung filter.option.chance = Wahrscheinlichkeit filter.option.mag = Größe @@ -490,6 +492,7 @@ filter.option.block = Block filter.option.floor = Boden filter.option.flooronto = Zielboden filter.option.target = Ziel +filter.option.replacement = Ersatz filter.option.wall = Wand filter.option.ore = Erz filter.option.floor2 = Sekundärer Boden @@ -675,6 +678,7 @@ unit.nobuild = [scarlet]Einheit kann nicht bauen! lastaccessed = [lightgray]Zuletzt konfiguriert: {0} block.unknown = [lightgray]??? +stat.showinmap = <öffne Spiel um zu zeigen> stat.description = Beschreibung stat.input = Eingang stat.output = Ausgang @@ -991,6 +995,7 @@ rules.waves = Wellen rules.attack = Angriff-Modus rules.buildai = KI kann bauen rules.corecapture = Kern nach Zerstörung einnehmen +rules.polygoncoreprotection = Polygonaler Kernschutz rules.enemyCheat = Unbegrenzte Ressourcen für die KI (Rotes Team) rules.blockhealthmultiplier = Block-Lebenspunkte-Multiplikator rules.blockdamagemultiplier = Block-Schaden-Multiplikator @@ -1161,6 +1166,7 @@ block.spore-cluster.name = Sporen-Cluster block.metal-floor.name = Metallboden 1 block.metal-floor-2.name = Metallboden 2 block.metal-floor-3.name = Metallboden 3 +block.metal-floor-4.name = Metallboden 4 block.metal-floor-5.name = Metallboden 5 block.metal-floor-damaged.name = beschädigter Metallboden block.dark-panel-1.name = Dunkles Panel 1 @@ -1585,6 +1591,8 @@ lst.sensor = Gibt Daten über einen Block oder eine Einheit wieder. lst.set = Setzt eine Variable fest. lst.operation = Verändert eine Variable. lst.end = Springt wieder nach oben. +lst.wait = Wartet eine bestimmte Zeit. +lst.lookup = Sucht ein Item, eine Flüssigkeit, eine Einheit oder einen Block.\nGesamtmengen von jeder Sache können mit \n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[]\nabgerufen werden. lst.jump = Falls die Bedingung erfüllt ist, wird woanders weitergemacht. lst.unitbind = Speichert eine Einheit einer Sorte als [accent]@unit[]. lst.unitcontrol = Steuert [accent]@unit[]. diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index 8989d9148c..d89400769f 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -64,9 +64,17 @@ schematic.shareworkshop = Partager sur le Steam Workshop schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Retourner le schéma schematic.saved = Schéma enregistré. schematic.delete.confirm = Ce schéma sera supprimé définitivement ! -schematic.rename = Renommer le Schéma +schematic.rename = Renommer le schéma schematic.info = {0}x{1}, {2} blocs schematic.disabled = [scarlet]Schémas désactivés ![]\nVous n'êtes pas autorisés à utiliser des schémas sur cette [accent]carte[] ou dans ce [accent]serveur. +schematic.tags = Mots clés: +schematic.edittags = Editer les mots-clés +schematic.addtag = Ajouter un mot-clé +schematic.texttag = Texte mot-clé +schematic.icontag = Icone mot-clé +schematic.renametag = Renommer le mot-clé +schematic.tagdelconfirm = Voulez-vous supprimer ce mot-clé définitivement ? +schematic.tagexists = Ce mot-clé existe déjà. stats = Statistiques stat.wave = Vagues vaincues : [accent] {0} @@ -306,7 +314,6 @@ data.exported = Données exportées. data.invalid = Ce ne sont pas des données de jeu valides. data.import.confirm = L'importation des données externes va effacer[scarlet] toutes[] vos données de jeu actuelles.\n[accent]Ceci ne pourra pas être annulé ![]\n\nUne fois les données importées, le jeu se fermera immédiatement. quit.confirm = Êtes-vous sûr de vouloir quitter ? -quit.confirm.tutorial = Êtes-vous sur de ce que vous faites ?\nLe tutoriel peut être repris dans [accent]Paramètres->Jeu->Refaire le Tutoriel.[] loading = [accent]Chargement... reloading = [accent]Rechargement des Mods... saving = [accent]Sauvegarde... @@ -453,6 +460,7 @@ toolmode.drawteams = Dessiner les équipes toolmode.drawteams.description = Change les équipes\nau lieu de blocs. filters.empty = [lightgray]Aucun filtre !\nAjoutez-en un avec les boutons ci-dessous. + filter.distort = Déformation filter.noise = Bruit filter.enemyspawn = Zone d'apparition ennemie @@ -469,6 +477,7 @@ filter.clear = Effacer filter.option.ignore = Ignorer filter.scatter = Disperser filter.terrain = Terrain + filter.option.scale = Échelle filter.option.chance = Chance filter.option.mag = Magnitude @@ -477,11 +486,13 @@ filter.option.circle-scale = Échelle circulaire filter.option.octaves = Octaves filter.option.falloff = Détachement filter.option.angle = Angle +filter.option.rotate = Rotation filter.option.amount = Quantité filter.option.block = Bloc filter.option.floor = Sol filter.option.flooronto = Sol ciblé filter.option.target = Cible +filter.option.replacement = Replacement filter.option.wall = Mur filter.option.ore = Minerai filter.option.floor2 = Sol secondaire @@ -498,6 +509,7 @@ load = Charger save = Sauvegarder fps = FPS: {0} ping = Ping: {0}ms +tps = TPS: {0} memory = Mem: {0}mb memory2 = Mem:\n {0}mb +\n {1}mb language.restart = Veuillez redémarrer votre jeu pour que le changement de langue prenne effet. @@ -530,7 +542,7 @@ launch.from = Décollage depuis : [accent]{0} launch.destination = Destination: {0} configure.invalid = La quantité doit être un nombre compris entre 0 et {0}. add = Ajouter -boss.health = Santé du Gardien +guardian = Gardien connectfail = [scarlet]Échec de la connexion au serveur : \n\n[accent]{0} error.unreachable = Serveur inaccessible.\nEst-ce que l'adresse est écrite correctement? @@ -574,6 +586,7 @@ sector.attacked = Secteur [accent]{0}[white] attaqué ! sector.lost = Secteur [accent]{0}[white] perdu ! #note: the missing space in the line below is intentional sector.captured = Sector [accent]{0}[white]capturé ! +sector.changeicon = Changer l'icone threat.low = Faible threat.medium = Normale @@ -621,20 +634,21 @@ sector.extractionOutpost.description = Un avant-poste éloigné, construit par l sector.impact0078.description = Ici reposent les vestiges d'un vaisseau de transport interstellaire, premier à être entré dans ce système.\n\nRécuperez et recherchez autant de technologies que possible dans cette épave. sector.planetaryTerminal.description = La cible finale.\n\nCette base côtière contient une structure capable de lancer des Noyaux sur les planètes voisines. Elle est extrêmement bien gardée.\n\nProduisez des unités navales, éliminez l’ennemi le plus rapidement possible et recherchez la structure de lancement. -status.burning.name = Brûle +status.burning.name = Brûlé status.freezing.name = Gelé -status.wet.name = Humide +status.wet.name = Humidifié status.muddy.name = Boueux status.melting.name = Fusion status.sapped.name = Sapé +status.electrified.name = Electrifié status.spore-slowed.name = Spore ralentie status.tarred.name = Goudronné -status.overclock.name = Overclocker +status.overclock.name = Surcadençage status.shocked.name = Étourdie status.blasted.name = Foudroyé -status.unmoving.name = Immobile +status.unmoving.name = Immobilisé -settings.language = Language +settings.language = Langage settings.data = Données du Jeu settings.reset = Valeurs par Défaut settings.rebind = Réattribuer @@ -655,6 +669,7 @@ settings.clearcampaignsaves.confirm = Êtes-vous sûr de vouloir supprimer toute paused = [accent]< Pause > clear = Effacer banned = [scarlet]Banni +unsupported.environment = [scarlet]Environnement non supporté yes = Oui no = Non info.title = Info @@ -664,6 +679,7 @@ unit.nobuild = [scarlet]Cette unité ne peut pas construire lastaccessed = [lightgray]Dernier accès : {0} block.unknown = [lightgray]??? +stat.showinmap = stat.description = Description stat.input = Ressource(s) requise(s) stat.output = Ressource(s) produite(s) @@ -693,6 +709,7 @@ stat.memorycapacity = Mémoire stat.basepowergeneration = Production d'énergie de Base stat.productiontime = Durée de production stat.repairtime = Durée de la réparation complète d'un Bloc +stat.repairspeed = Vitesse de réparation stat.weapons = Armes stat.bullet = Balles stat.speedincrease = Accélération @@ -737,14 +754,16 @@ stat.healthmultiplier = Multiplicateur de santé stat.speedmultiplier = Multiplicateur de vitesse stat.reloadmultiplier = Multiplicateur de rechargement stat.buildspeedmultiplier = Multiplicateur de vitesse de construction -stat.reactive = Reacts +stat.reactive = Réactions +stat.healing = Guérison ability.forcefield = Champ de Force ability.repairfield = Champ de Réparation -ability.statusfield = Champ d'Amélioration +ability.statusfield = Champ d'Amélioration {0} ability.unitspawn = Usine de {0} ability.shieldregenfield = Champ de régénération de bouclier ability.movelightning = Déplacement éclair +ability.energyfield = Champ d'énergie: [accent]{0}[] dégâts ~ [accent]{1}[] blocs / [accent]{2}[] cibles bar.drilltierreq = Meilleure Foreuse Requise bar.noresources = Ressources manquantes @@ -767,6 +786,7 @@ bar.power = Énergie bar.progress = Construction en cours bar.input = Entrée bar.output = Sortie +bar.strength = [stat]{0}[lightgray]x puissance units.processorcontrol = [lightgray]Contrôlé par un processeur. @@ -775,7 +795,7 @@ bullet.splashdamage = [stat]{0}[lightgray] dégâts de zone ~[stat] {1}[lightgra bullet.incendiary = [stat]incendiaire bullet.homing = [stat]autoguidé bullet.frag = [stat]fragmentation -bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage +bullet.lightning = [stat]{0}[lightgray]x foudre ~ [stat]{1}[lightgray] dégâts bullet.buildingdamage = [stat]{0}%[lightgray] des dégâts aux bâtiments bullet.knockback = [stat]{0}[lightgray] recul bullet.pierce = [stat]{0}[lightgray]x perforant @@ -804,6 +824,7 @@ unit.thousands = k unit.millions = mil unit.billions = Md unit.pershot = /tirs + category.purpose = Description category.general = Caractéristiques category.power = Énergie @@ -812,6 +833,7 @@ category.items = Objets category.crafting = Fabrication category.function = Fonction category.optional = Améliorations facultatives + setting.landscape.name = Verrouiller la rotation en mode paysage setting.shadows.name = Ombres setting.blockreplace.name = Suggestion automatique des Blocs @@ -875,23 +897,29 @@ setting.lasersopacity.name = Opacité des Connexions laser setting.bridgeopacity.name = Opacité des ponts setting.playerchat.name = Montrer les bulles de discussion des joueurs setting.showweather.name = Montrer les Effets météo +setting.bloom.name = Flou lumineux + public.confirm = Voulez-vous rendre votre partie publique ?\n[accent]N'importe qui pourra rejoindre vos parties.\n[lightgray]Ce paramètre peut être changé plus tard dans Paramètres->Jeu->Visibilité de la Partie Publique public.confirm.really = Si vous voulez jouer avec des amis, utilisez [green]Inviter un Ami[] Au lieu [scarlet]d'un Serveur Public[] !\nÊtes-vous sûrs de vouloir rendre votre partie [scarlet]publique[] ? public.beta = Notez que les versions bêta du jeu ne peuvent pas créer de salons publics. + uiscale.reset = L'échelle de l'interface a été modifiée.\nAppuyez sur "OK" pour confirmer.\n[scarlet]Rétablissement des anciens paramètres et fermeture du jeu dans [accent] {0}[] secondes... uiscale.cancel = Annuler & Quitter -setting.bloom.name = Flou lumineux -keybind.title = Paramètres des Touches du Clavier -keybinds.mobile = [scarlet]La plupart des touches de clavier ne sont pas fonctionnelles sur mobile. Seuls les mouvements basiques sont supportés. + category.general.name = Général category.view.name = Voir category.multiplayer.name = Multijoueur category.blocks.name = Sélection des blocs + command.attack = Attaquer command.rally = Rallier command.retreat = Retraite command.idle = Inactif + placement.blockselectkeys = \n[lightgray]Raccourci : [{0}, + +keybind.title = Paramètres des Touches du Clavier +keybinds.mobile = [scarlet]La plupart des touches de clavier ne sont pas fonctionnelles sur mobile. Seuls les mouvements basiques sont supportés. keybind.respawn.name = Réapparaître keybind.control.name = Contrôler une Unité keybind.clear_building.name = Réinitialiser les constructions @@ -954,7 +982,8 @@ keybind.chat_history_next.name = Descendre l'Historique du Tchat keybind.chat_scroll.name = Défilement du Tchat keybind.chat_mode.name = Changer le mode du Tchat keybind.drop_unit.name = Larguer une unité -keybind.zoom_minimap.name = Zoomer la Mini-carte +keybind.zoom_minimap.name = Zoomer la Mini-carte + mode.help.title = Description des modes de jeu mode.survival.name = Survie mode.survival.description = Le mode normal. Ressources limitées et vagues automatiques.\n[gray]Requiert des points d'apparition ennemis pour pouvoir jouer à ce mode. @@ -975,6 +1004,8 @@ rules.wavetimer = Compte à rebours des vagues rules.waves = Vagues rules.attack = Mode « Attaque » rules.buildai = Constructions de l'IA +rules.corecapture = Capture du Noyau lors de sa Destruction +rules.polygoncoreprotection = Protection du noyau polygonal rules.enemyCheat = Ressources infinies pour l'IA (équipe rouge) rules.blockhealthmultiplier = Multiplicateur de Santé des Blocs rules.blockdamagemultiplier = Multiplicateur de Dégât des Blocs @@ -1030,6 +1061,7 @@ item.blast-compound.name = Mélange Explosif item.pyratite.name = Pyratite item.metaglass.name = Verre Trempé item.scrap.name = Ferraille + liquid.water.name = Eau liquid.slag.name = Scories liquid.oil.name = Pétrole @@ -1061,6 +1093,11 @@ unit.minke.name = Minke unit.bryde.name = Bryde unit.sei.name = Sei unit.omura.name = Omura +unit.retusa.name = Retusa +unit.oxynoe.name = Oxynoe +unit.cyerce.name = Cyerce +unit.aegires.name = Aegires +unit.navanax.name = Navanax unit.alpha.name = Alpha unit.beta.name = Beta unit.gamma.name = Gamma @@ -1121,6 +1158,7 @@ block.sand-water.name = Eau avec fond de Sable block.darksand-water.name = Eau avec fond de Sable sombre block.char.name = Cendres block.dacite.name = Dacite +block.rhyolite.name = Rhyolite block.dacite-wall.name = Mur de Dacite block.dacite-boulder.name = Rocher de Dacite block.ice-snow.name = Neige et Glace @@ -1138,6 +1176,7 @@ block.spore-cluster.name = Grappes de Spores block.metal-floor.name = Sol métallique block.metal-floor-2.name = Sol métallique 2 block.metal-floor-3.name = Sol métallique 3 +block.metal-floor-4.name = Sol métallique 4 block.metal-floor-5.name = Sol métallique 5 block.metal-floor-damaged.name = Sol métallique endommagé block.dark-panel-1.name = Panneau sombre 1 @@ -1228,6 +1267,7 @@ block.solar-panel.name = Panneau Solaire block.solar-panel-large.name = Grand Panneau Solaire block.oil-extractor.name = Extracteur de Pétrole block.repair-point.name = Point de Réparation +block.repair-turret.name = Tourelle de réparation block.pulse-conduit.name = Conduit à Impulsion block.plated-conduit.name = Conduit Plaqué block.phase-conduit.name = Conduit Phasé @@ -1270,6 +1310,12 @@ block.exponential-reconstructor.name = Reconstructeur Exponentiel block.tetrative-reconstructor.name = Reconstructeur Tétratif block.payload-conveyor.name = Convoyeur de Masse block.payload-router.name = Routeur de Masse +block.duct.name = Conduit +block.duct-router.name = Routeur en Conduit +block.duct-bridge.name = Pont en Conduit +block.payload-propulsion-tower.name = Tour à propulsion de Charge utile +block.payload-void.name = Destructeur de Charge utile +block.payload-source.name = Source de Charge utile block.disassembler.name = Désassembleur block.silicon-crucible.name = Grande Fonderie de Silicium block.overdrive-dome.name = Dôme Accélérant @@ -1289,10 +1335,9 @@ block.memory-cell.name = Cellule de mémoire block.memory-bank.name = Banque de mémoire team.blue.name = bleu -team.crux.name = rouge -team.sharded.name = orange -team.orange.name = orange -team.derelict.name = abandonné +team.crux.name = crux +team.sharded.name = sharded +team.derelict.name = derelict team.green.name = vert team.purple.name = mauve @@ -1312,6 +1357,7 @@ hint.placeConveyor.mobile = Les Convoyeurs transportent les ressources des foreu hint.placeTurret = Placez des \uf861 [accent]Tourelles[] pour défendre votre base contre les ennemis.\n\nLes Tourelles nécessitent des munitions (dans ce cas, du \uf838Cuivre).\nUtilisez les convoyeurs et les foreuses pour les ravitailler. hint.breaking = Maintenez [accent]Clic-droit[] pour détruire des blocs. hint.breaking.mobile = Activez le \ue817 [accent]marteau[] en bas à droite Touchez pour détruire des blocs.\n\nRetenez votre doigt pendant une seconde et déplacez-le pour détruire les blocs dans la zone de sélection. +hint.blockInfo = Pour afficher les informations relatives à un bloc, il suffit de le sélectionner dans le [accent]menu de construction[], puis de cliquer sur le bouton [accent][[?][] à droite. hint.research = Utilisez le bouton \ue875 [accent]Recherche[] pour rechercher de nouvelles technologies. hint.research.mobile = Utilisez le bouton \ue875 [accent]Recherche[] dans le \ue88c [accent]Menu[] pour rechercher de nouvelles technologies. hint.unitControl = Retenez [accent][[Ctrl-gauche][] et [accent]cliquez[] pour contrôler une tourelle ou une unité alliée. @@ -1345,7 +1391,7 @@ item.graphite.description = Du carbone minéralisé utilisé pour les munitions item.sand.description = Un matériau commun, largement utilisé pour la fabrication de matériaux raffinés. item.coal.description = Un carburant commun et facile à obtenir. item.coal.details = De la matière végétale fossilisée, formée bien avant l’ensemencement de ce monde. Utilisation très répandue pour la production de carburant et de ressources. -item.titanium.description = Un métal rare et super-léger, largement utilisé dans le transport de liquides, dans les foreuses de haut niveau et dans l'aviation. +item.titanium.description = Un métal rare et super-léger, largement utilisé dans le transport de liquides, dans les foreuses de haut niveau et dans les usines. item.thorium.description = Un métal dense et radioactif, utilisé comme support structurel et comme carburant nucléaire. item.scrap.description = Il est utilisé dans les fours à fusion et les pulvériseurs, pour être raffiné en d'autres matériaux. item.scrap.details = Un mix de métaux provenant des restes de vieilles structures et d'unités. Il contient des traces de nombreux métaux différents. @@ -1566,7 +1612,7 @@ logic.nounitbuild = [red]Les unités contrôlées par des processeurs ne peuvent lenum.type = Type de bâtiment/unité.\nPar exemple, pour tout routeur, cela retournera [accent]@router[].\nPas en texte. lenum.shoot = Tire à une position donnée. lenum.shootp = Tire à une unité/bâtiment avec la prédiction de mouvement. -lenum.configure = La configuration d'un bâtiment. Par exemple, l'objet sélectionné dans un trieur. +lenum.config = La configuration d'un bâtiment. Par exemple, l'objet sélectionné dans un trieur. lenum.enabled = Retourne si le bloc est activé ou pas. laccess.color = La couleur d'un illuminateur. @@ -1574,6 +1620,7 @@ laccess.controller = Le contrôleur de l'Unité.\nSi l'Unité est contrôlée pa laccess.dead = Retourne si l'Unité/Bâtiment est morte/détruit ou plus valide. laccess.controlled = Retourne:\n[accent]@ctrlProcessor[] si le contrôleur de l'Unité est un processeur\n[accent]@ctrlPlayer[] si l'Unité/Bâtiment est contrôlé par un joueur\n[accent]@ctrlFormation[] si l'Unité est en formation\nSinon, retourne 0. laccess.commanded = [red]Obsolète! Cette commande sera supprimée.[]\nUtilisez [accent]controlled[] à la place. +laccess.progress = Progression de l'action, 0 à 1.\nRenvoie la progression de la production, du rechargement de la tourelle ou de la construction. graphicstype.clear = Remplit l’écran d’une couleur. graphicstype.color = Définit une couleur pour les prochaines opérations de dessin. @@ -1605,9 +1652,15 @@ lenum.min = Le minimum des 2 nombres. lenum.max = Le maximum des 2 nombres. lenum.angle = Angle d'un vecteur en degrés. lenum.len = Longueur d'un vecteur. + lenum.sin = Calcule le Sinus, en degrés. lenum.cos = Calcule le Cosinus, en degrés. lenum.tan = Calcule la Tangente, en degrés. + +lenum.asin = Arc sinus, en degrés. +lenum.acos = Arc cosinus, en degrés. +lenum.atan = Tangente de l'arc, en degrés. + #not a typo, look up 'range notation' lenum.rand = Nombre aléatoire dans la plage [0, valeur). lenum.log = Logarithme naturel (ln). @@ -1687,4 +1740,4 @@ lenum.boost = Active/Désactive le boost. #Added French translations lenum.floor = Retourne le plus grand nombre entier,\nqui est inférieur ou égal au nombre donné (12.5 -> 12). -lenum.ceil = Retourne le nombre entier le plus petit,\nsupérieur ou égal au nombre donné (12.5 -> 13). \ No newline at end of file +lenum.ceil = Retourne le nombre entier le plus petit,\nsupérieur ou égal au nombre donné (12.5 -> 13). diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index ea35607ec5..0296c5f792 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -314,7 +314,6 @@ data.exported = Data telah di ekspor. data.invalid = Data permainan ini tidak sah. data.import.confirm = Mengimpor data eksternal akan menghapus [scarlet] semua[] data yang tersimpan.\n[accent]Tidak dapat diundur lagi![]\n\nSetelah data diimpor, game akan segera ditutup. quit.confirm = Apakah Anda yakin ingin keluar? -quit.confirm.tutorial = Apakah Anda tahu apa yang dilakukan?\nTutorial dapat diulang di[accent] Pengaturan->Permainan->Ulang Tutorial.[] loading = [accent]Memuat... reloading = [accent]Memuat Ulang Mod... saving = [accent]Menyimpan... @@ -461,6 +460,7 @@ toolmode.drawteams = Gambar Tim toolmode.drawteams.description = Menggambar tim bukannya blok. filters.empty = [lightgray]Tidak ada filter! Tambahkan dengan tombol dibawah. + filter.distort = Kerusakkan filter.noise = Kebisingan filter.enemyspawn = Pilih Munculnya Musuh @@ -477,6 +477,7 @@ filter.clear = Bersih filter.option.ignore = Biarkan filter.scatter = Penebaran filter.terrain = Lahan + filter.option.scale = Ukuran filter.option.chance = Kemungkinan filter.option.mag = Tingkat @@ -485,11 +486,13 @@ filter.option.circle-scale = Ukuran Lingkaran filter.option.octaves = Oktaf filter.option.falloff = Kemerosotan filter.option.angle = Sudut +filter.option.rotate = Putar filter.option.amount = Jumlah filter.option.block = Blok filter.option.floor = Lantai filter.option.flooronto = Target Lantai filter.option.target = Target +filter.option.replacement = Pengganti filter.option.wall = Dinding filter.option.ore = Sumber Daya filter.option.floor2 = Lantai Sekunder @@ -506,6 +509,7 @@ load = Memuat save = Simpan fps = FPS: {0} ping = Ping: {0}ms +tps = TPS: {0} memory = Mem: {0}mb memory2 = Mem:\n {0}mb +\n {1}mb language.restart = Silahkan mengulang kembali permainan agar pengaturan bahasa berpengaruh. @@ -582,6 +586,7 @@ sector.attacked = Sektor [accent]{0}[white] sedang diserang! sector.lost = Sektor [accent]{0}[white] telah dihancurkan! #note: the missing space in the line below is intentional sector.captured = Sektor [accent]{0}[white]ditaklukkan! +sector.changeicon = Ubah Ikon threat.low = Rendah threat.medium = Sedang @@ -634,7 +639,7 @@ status.wet.name = Basah status.muddy.name = Berlumpur status.melting.name = Meleleh status.sapped.name = Melemahkan -status.electrified.name = Dialiri listrik +status.electrified.name = Dialiri Listrik status.spore-slowed.name = Spora Melambat status.tarred.name = Berminyak status.overclock.name = Melebihi Batas @@ -663,6 +668,7 @@ settings.clearcampaignsaves.confirm = Apakah Anda yakin ingin membersihkan semua paused = [accent]< Jeda > clear = Bersih banned = [scarlet]Dilarang +unsupported.environment = [scarlet]Ruang Lingkup Tidak Cocok yes = Ya no = Tidak info.title = Info @@ -672,6 +678,7 @@ unit.nobuild = [scarlet]Unit tidak dapat membangun lastaccessed = [lightgray]Terakhir Diakses: {0} block.unknown = [lightgray]??? +stat.showinmap = stat.description = Kegunaan stat.input = Masukan stat.output = Pengeluaran @@ -701,6 +708,7 @@ stat.memorycapacity = Kapasitas Memori stat.basepowergeneration = Basis Generasi Tenaga stat.productiontime = Waktu Produksi stat.repairtime = Waktu Memperbaiki Blok Penuh +stat.repairspeed = Kecepatan Memperbaiki stat.weapons = Senjata stat.bullet = Peluru stat.speedincrease = Tambahan Kecepatan @@ -745,7 +753,8 @@ stat.healthmultiplier = Penggandaan Darah stat.speedmultiplier = Penggandaan Kecepatan stat.reloadmultiplier = Penggandaan Isi Ulang stat.buildspeedmultiplier = Penggandaan Kecepatan Membangun -stat.reactive = Reaksi +stat.reactive = Reaktif +stat.healing = Menyembuhkan ability.forcefield = Bidang Kekuatan ability.repairfield = Bidang Perbaikan @@ -753,6 +762,7 @@ ability.statusfield = Bidang Status ability.unitspawn = {0} Pabrik ability.shieldregenfield = Bidang Regenerasi Perisai ability.movelightning = Pergerakan Petir +ability.energyfield = Bidang Tenaga: [accent]{0}[] kerusakan ~ [accent]{1}[] blok / [accent]{2}[] target bar.drilltierreq = Membutuhkan Bor yang Lebih Baik bar.noresources = Sumber Daya Tidak Ditemukan @@ -775,6 +785,7 @@ bar.power = Tenaga bar.progress = Perkembangan Pembangunan bar.input = Masukan bar.output = Keluaran +bar.strength = [stat]{0}[lightgray]x penguatan units.processorcontrol = [lightgray]Dikendalikan Prosesor @@ -984,6 +995,7 @@ rules.waves = Gelombang rules.attack = Mode Penyerangan rules.buildai = Bangunan A.I. rules.corecapture = Tangkap Inti Saat Kehancuran +rules.polygoncoreprotection = Poligon Pelindung Inti rules.enemyCheat = Sumber Daya A.I. Musuh (Tim Merah) Tak Terbatas rules.blockhealthmultiplier = Penggandaan Darah Blok rules.blockdamagemultiplier = Penggandaan Kekuatan Blok @@ -1039,6 +1051,7 @@ item.blast-compound.name = Senyawa Peledak item.pyratite.name = Pyratit item.metaglass.name = Metaglass item.scrap.name = Rongsokan + liquid.water.name = Air liquid.slag.name = Lava liquid.oil.name = Minyak @@ -1153,7 +1166,8 @@ block.spore-cluster.name = Kumpulan Spora block.metal-floor.name = Lantai Besi 1 block.metal-floor-2.name = Lantai Besi 2 block.metal-floor-3.name = Lantai Besi 3 -block.metal-floor-5.name = Lantai Besi 4 +block.metal-floor-4.name = Lantai Besi 4 +block.metal-floor-5.name = Lantai Besi 5 block.metal-floor-damaged.name = Lantai Besi Rusak block.dark-panel-1.name = Panel Gelap 1 block.dark-panel-2.name = Panel Gelap 2 @@ -1333,6 +1347,7 @@ hint.placeConveyor.mobile = Pengantar dapat memindahkan bahan dari bor ke blok y hint.placeTurret = Taruh \uf861 [accent]Menara[] untuk mempertahankan basismu daru musuh.\n\nTurret membutuhkan amunisi - yang satu ini, \uf838copper.\nGunakan pengantar dan bor untuk mengisinya. hint.breaking = [accent]Klik kanan[] dan tarik untuk menghancurkan blok. hint.breaking.mobile = Aktifkan \ue817 [accent]palu[] di kanan bawah dan tekan untuk menghancurkan blok.\n\nTahan jari kamu sebentar dan seret untuk menghancurkannya. +hint.blockInfo = Lihat informasi dari sebuah blok dengan memilihnya di [accent]menu bangun[], lalu pilih tombol [accent][[?][] di sebelah kanan. hint.research = Gunakan tombol \ue875 [accent]Riset[] untuk mempelajari teknologi baru. hint.research.mobile = Gunakan tombol \ue875 [accent]Riset[] di \ue88c [accent]Menu[] untuk mempelajari teknologi baru. hint.unitControl = Tahan [accent][[L-ctrl][] dan [accent]klik[] untuk mengendalikan unit atau turret teman. @@ -1595,6 +1610,7 @@ laccess.controller = Pengendali unit. Jika dikendalikan prosesor, mengembalikan laccess.dead = Menentukan apakah unit/bangunan itu hancur atau tidak ada lagi. laccess.controlled = Mengembalikan:\n[accent]@ctrlProcessor[] bila pengendali unit adalah prosesor\n[accent]@ctrlPlayer[] bila pengendali unit/bangunan adalah pemain\n[accent]@ctrlFormation[] bila unit dalam formasi\nSebaliknya, 0. laccess.commanded = [red]Kadaluarsa. Akan segera dihapus![]\nLebih baik gunakan [accent]controlled[]. +laccess.progress = Memeriksa hasil kemajuan, 0 sampai 1.\nMengembalikan hasil laju produksi, pengisian ulang menara atau pembangunan. graphicstype.clear = Mengisi tampilan dangan warna. graphicstype.color = Menentukan warna untuk operasi mengambar selanjutnya. @@ -1626,9 +1642,15 @@ lenum.min = Minimum dari dua angka. lenum.max = Maksimum dari dua angka. lenum.angle = Sudut vektor dalam derajat. lenum.len = Panjang vektor. + lenum.sin = Sinus, dalam derajat. lenum.cos = Kosinus, dalam derajat. lenum.tan = Tangen, dalam derajat. + +lenum.asin = Arc sinus, dalam derajat. +lenum.acos = Arc kosinus, dalam derajat. +lenum.atan = Arc tangen, dalam derajat. + #bukan typo, cari 'daerah hasil fungsi' lenum.rand = Angka Acak dalam jarak [0, value). lenum.log = Logaritma natural (ln). diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index 3a9f26652e..917ef699f4 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -15,8 +15,8 @@ link.wiki.description = 공식 Mindustry 위키 link.suggestions.description = 새 기능 제안하기 link.bug.description = 버그 제보하기 linkfail = 링크를 열지 못했습니다!\nURL이 클립보드에 복사되었습니다. -screenshot = 스크린 캡처가 {0} 에 저장되었습니다. -screenshot.invalid = 맵이 너무 커서 스크린 캡처에 사용될 메모리가 부족합니다. +screenshot = 스크린샷이 {0} 에 저장되었습니다. +screenshot.invalid = 맵이 너무 커서 스크린샷에 사용될 메모리가 부족합니다. gameover = 게임 오버 gameover.disconnect = 연결 끊기 gameover.pvp = [accent]{0}[] 팀이 승리했습니다! @@ -92,7 +92,7 @@ level.highscore = 최고 점수: [accent]{0} level.select = 맵 선택 level.mode = 게임 모드: coreattack = < 코어가 공격을 받고 있습니다! > -nearpoint = [[ [scarlet]즉시 적 소환구역에서 떠나십시오[] ]\n단계가 시작하는 순간 인근 건물들과 유닛들이 전멸합니다! +nearpoint = [[ [scarlet]즉시 적 소환구역에서 떠나십시오[] ]\n단계가 시작하는 순간 인근 건물들과 유닛들이 소멸합니다! database = 코어 데이터베이스 savegame = 게임 저장 loadgame = 게임 불러오기 @@ -100,7 +100,7 @@ joingame = 게임 참여 customgame = 사용자 지정 게임 newgame = 새 게임 none = < 없음 > -none.found = [lightgray]< 찾을 수 없음 > +none.found = [lightgray]< 없거나 찾을 수 없음 > minimap = 미니맵 position = 위치 close = 닫기 @@ -343,9 +343,9 @@ custom = 사용자 정의 builtin = 내장 map.delete.confirm = 정말로 이 맵을 삭제하시겠습니까? 이 명령은 취소할 수 없습니다! map.random = [accent]무작위 맵 -map.nospawn = 이 맵에 플레이어가 생성될 코어가 없습니다! 편집기에서 [accent]orange[] 코어를 맵에 추가하세요. -map.nospawn.pvp = 이 맵에는 적 플레이어가 생성될 코어가 없습니다! 편집기에서 [royal]orange 팀이 아닌[] 코어를 추가하세요. -map.nospawn.attack = 이 맵에는 플레이어가 공격할 수 있는 적의 코어가 없습니다! 에디터에서 [royal]빨간색[] 코어들을 맵에 추가하세요. +map.nospawn = 이 맵에 플레이어가 생성될 코어가 없습니다! 편집기에서 [accent]주황색[] 코어를 맵에 추가하세요. +map.nospawn.pvp = 이 맵에는 적 플레이어가 생성될 코어가 없습니다! 편집기에서 [royal]주황색 팀이 아닌[] 코어를 추가하세요. +map.nospawn.attack = 이 맵에는 플레이어가 공격할 수 있는 적 코어가 없습니다! 편집기에서 [royal]빨간색[] 코어들을 맵에 추가하세요. map.invalid = 맵 로드 오류: 맵 파일이 손상되었거나 잘못된 파일입니다. workshop.update = 아이템 업데이트 workshop.error = 창작마당 세부 사항을 가져오는 중 오류가 발생했습니다: {0} @@ -439,7 +439,7 @@ editor.saveimage = 지형 내보내기 editor.unsaved = [scarlet]변경사항을 저장하지 않았습니다![]\n정말로 나가시겠습니까? editor.resizemap = 맵 크기 조정 editor.mapname = 맵 이름: -editor.overwrite = [accept]경고!\n이것은 기존 맵을 덮어 씁니다. +editor.overwrite = [accept]경고!\n이 맵은 기존 맵을 덮어 씁니다. editor.overwrite.confirm = [scarlet]경고![] 이 이름을 가진 맵이 이미 있습니다. 덮어 쓰시겠습니까? editor.exists = 이 이름의 맵이 이미 존재합니다. editor.selectmap = 불러올 맵을 선택하세요: @@ -460,6 +460,7 @@ toolmode.drawteams = 팀 그리기 toolmode.drawteams.description = 블록 대신 선택한 팀으로 블록 팀을 그립니다. filters.empty = [lightgray]필터가 없습니다! 아래 버튼을 눌러 하나를 추가하세요. + filter.distort = 왜곡 filter.noise = 노이즈 filter.enemyspawn = 적 소환지점 선택 @@ -476,6 +477,7 @@ filter.clear = 초기화 filter.option.ignore = 무시 filter.scatter = 흩뿌리기 filter.terrain = 지형 + filter.option.scale = 크기 filter.option.chance = 배치 빈도 filter.option.mag = 크기 @@ -490,6 +492,7 @@ filter.option.block = 블록 filter.option.floor = 타일 filter.option.flooronto = 대상 타일 filter.option.target = 대상 +filter.option.replacement = 바꿔넣을 타일 filter.option.wall = 벽 filter.option.ore = 광물 filter.option.floor2 = 2번째 타일 @@ -512,7 +515,7 @@ memory2 = Mem:\n {0}mb +\n {1}mb language.restart = 언어 설정을 적용하려면 게임을 다시 시작하세요. settings = 설정 tutorial = 튜토리얼 -tutorial.retake = 튜토리얼을 다시 시작하기 +tutorial.retake = 튜토리얼 재시작하기 editor = 편집기 mapeditor = 맵 편집기 @@ -545,7 +548,7 @@ connectfail = [scarlet]연결 오류:\n\n[accent]{0} error.unreachable = 서버에 연결하지 못했습니다.\n서버 주소가 정확히 입력되었나요? error.invalidaddress = 잘못된 주소입니다. error.timedout = 시간 초과!\n서버에 포트 포워딩이 설정되어 있고 주소가 올바른지 확인하세요. -error.mismatch = 패킷 오류\n클라이언트/서버 버전이 일치하지 않습니다.\n접속하려는 서버가 최신 버전인지 확인하세요! +error.mismatch = 패킷 오류\n클라이언트와 서버 버전이 일치하지 않습니다.\n접속하려는 서버가 최신 버전인지 확인하세요! error.alreadyconnected = 이미 접속 중입니다. error.mapnotfound = 맵 파일을 찾을 수 없습니다! error.io = 네트워크 I/O 오류. @@ -570,7 +573,7 @@ sectors.resume = 재개 sectors.launch = 출격 sectors.select = 선택 sectors.nonelaunch = [lightgray]없음 (sun) -sectors.rename = 구역 이름 변경 +sectors.rename = 지역 이름 변경 sectors.enemybase = [scarlet]적 기지 sectors.vulnerable = [scarlet]취약함 sectors.underattack = [scarlet]공격받고 있습니다! [accent]{0}% 손상됨. @@ -630,16 +633,16 @@ sector.extractionOutpost.description = 적이 다른 지역에 자원을 보내 sector.impact0078.description = 이곳에는 시스템에 처음 진입한 우주 수송선의 잔해가 있습니다.\n\n우주선이 파괴된 잔해에서 최대한 많은 자원을 회수하고, 손상되지 않은 그들의 기술을 획득하세요. sector.planetaryTerminal.description = 이 행성에서의 마지막 전투를 준비하세요.\n\n적이 필사의 각오로 지키고 있는 이 해안 기지엔 우주에 코어를 발사할 수 있는 시설이 있습니다.\n\n해군을 생산하여 적을 신속하게 제거하고, 그들의 코어 발사 기술을 약탈하십시오.\n\n[royal] 건투를 빕니다.[] -status.burning.name = 방화 +status.burning.name = 불탐 status.freezing.name = 빙결 status.wet.name = 젖음 status.muddy.name = 질척해짐 status.melting.name = 융해 -status.sapped.name = 흡혈됨 +status.sapped.name = 피로 status.electrified.name = 과전류 status.spore-slowed.name = 포자감속 -status.tarred.name = 타르화 -status.overclock.name = 과부하 +status.tarred.name = 침유됨 +status.overclock.name = 가속화 status.shocked.name = 감전 status.blasted.name = 파열 status.unmoving.name = 멈춤 @@ -675,6 +678,7 @@ unit.nobuild = [scarlet]건설 불가 lastaccessed = [lightgray]마지막 접근: {0} block.unknown = [lightgray]??? +stat.showinmap = <맵을 먼저 불러와야 합니다> stat.description = 특성 stat.input = 입력 stat.output = 출력 @@ -722,16 +726,16 @@ stat.inaccuracy = 오차각 stat.shots = 발사 수 stat.reload = 초당 발사 수 stat.ammo = 탄약 -stat.shieldhealth = 보호막 체력 +stat.shieldhealth = 보호막 내구도 stat.cooldowntime = 쿨타임 stat.explosiveness = 폭발성 stat.basedeflectchance = 기본 반사 확률 -stat.lightningchance = 전격 확률 +stat.lightningchance = 전격 생성 확률 stat.lightningdamage = 전격 피해량 stat.flammability = 인화성 stat.radioactivity = 방사성 -stat.charge=과충전률 -stat.heatcapacity = 열 용량 +stat.charge = 과충전률 +stat.heatcapacity = 비열 stat.viscosity = 점성 stat.temperature = 온도 stat.speed = 속도 @@ -758,7 +762,7 @@ ability.statusfield = {0} 상태이상 필드 ability.unitspawn = {0} 공장 ability.shieldregenfield = 방어막 복구 필드 ability.movelightning = 가속 전격 -ability.energyfield = 에너지 필드: [accent]{1}[]타일 내 [accent]{2}[]개 목표물에게 [accent]{0}[]피해량 +ability.energyfield = 에너지 필드: [accent]{1}[]타일 내 [accent]{2}[]개 목표물에게 [accent]{0}[]피해량 bar.drilltierreq = 더 좋은 드릴 필요 bar.noresources = 자원 부족 @@ -786,7 +790,7 @@ bar.strength = [stat]{0}[lightgray]x 치료 속도 units.processorcontrol = [lightgray]프로세서 제어됨 bullet.damage = [stat]{0}[lightgray] 피해량 -bullet.splashdamage = [stat]{0}[lightgray] 범위 피해량 ~ [stat] {1}[lightgray] 타일 +bullet.splashdamage = [stat]{0}[lightgray] 범위 피해량 ~ [stat]{1}[lightgray] 타일 bullet.incendiary = [stat]방화 bullet.homing = [stat]유도 bullet.frag = [stat]파편 @@ -858,13 +862,13 @@ setting.difficulty.hard = 혼돈 setting.difficulty.insane = 박멸 setting.difficulty.name = 난이도: setting.screenshake.name = 화면 흔들림 -setting.effects.name = 효과 표시 +setting.effects.name = 입자 효과 표시 setting.destroyedblocks.name = 파괴된 블록 표시 setting.blockstatus.name = 블록 상태 표시 setting.conveyorpathfinding.name = 컨베이어 배치 길찾기 setting.sensitivity.name = 컨트롤러 감도 setting.saveinterval.name = 저장 간격 -setting.seconds = {0}초 +setting.seconds = {0} 초 setting.milliseconds = {0} 밀리초 setting.fullscreen.name = 전체 화면 setting.borderlesswindow.name = 테두리 없는 창 모드[lightgray] (재시작이 필요할 수 있습니다) @@ -972,14 +976,14 @@ keybind.drop_unit.name = 유닛 내려놓기 keybind.zoom_minimap.name = 미니맵 확대 mode.help.title = 모드 설명 mode.survival.name = 생존 -mode.survival.description = 기본 모드. 제한된 자원이 있으며, 단계가 자동으로 시작합니다.\n[gray]플레이하려면 맵에 적의 스폰지점이 필요합니다. +mode.survival.description = 기본 모드. 제한된 자원이 있으며, 단계가 자동으로 시작합니다.\n[gray]플레이하려면 맵에 적 스폰지점이 필요합니다. mode.sandbox.name = 샌드박스 mode.sandbox.description = 무한한 자원이 있으며, 시간 제한이 없습니다. mode.editor.name = 편집기 mode.pvp.name = PvP mode.pvp.description = 다른 플레이어와 현장에서 싸우십시오.\n[gray]플레이하려면 맵에 다른 색상의 코어가 2개 이상 있어야 합니다. mode.attack.name = 공격 -mode.attack.description = 적의 기지를 파괴하세요.\n[gray]플레이하려면 맵에 빨간색 코어가 필요합니다. +mode.attack.description = 적의 기지를 파괴하세요.\n[gray]플레이하려면 맵에 적 코어가 필요합니다. mode.custom = 사용자 정의 규칙 rules.infiniteresources = 무한 자원 @@ -991,15 +995,16 @@ rules.waves = 단계 rules.attack = 공격 모드 rules.buildai = AI 건설 rules.corecapture = 코어 파괴 시 점령 -rules.enemyCheat = 무한 AI (빨간팀) 자원 +rules.polygoncoreprotection = 다각형 코어 건설 금지구역 +rules.enemyCheat = 적Ai 무한자원 rules.blockhealthmultiplier = 블록 체력 배수 rules.blockdamagemultiplier = 블록 공격력 배수 -rules.unitbuildspeedmultiplier = 유닛 생산 속도 배수 +rules.unitbuildspeedmultiplier = 유닛 생산속도 배수 rules.unithealthmultiplier = 유닛 체력 배수 rules.unitdamagemultiplier = 유닛 공격력 배수 -rules.unitcapvariable = 코어 유닛 제한 추가 +rules.unitcapvariable = 코어 유닛제한 추가 rules.unitcap = 기본 유닛 제한 -rules.enemycorebuildradius = 적 코어 건설 금지구역 범위:[lightgray] (타일) +rules.enemycorebuildradius = 적 코어 건설금지구역 범위:[lightgray] (타일) rules.wavespacing = 단계 간격:[lightgray] (초) rules.buildcostmultiplier = 건설 비용 배수 rules.buildspeedmultiplier = 건설 속도 배수 @@ -1161,6 +1166,7 @@ block.spore-cluster.name = 포자낭 block.metal-floor.name = 금속제 바닥 block.metal-floor-2.name = 금속 타일 2 block.metal-floor-3.name = 금속 타일 3 +block.metal-floor-4.name = 금속 타일 4 block.metal-floor-5.name = 금속 타일 5 block.metal-floor-damaged.name = 손상된 금속 타일 block.dark-panel-1.name = 검은 패널 1 @@ -1303,7 +1309,7 @@ block.payload-source.name = 화물 공급기 block.disassembler.name = 광재 분해기 block.silicon-crucible.name = 실리콘 도가니 block.overdrive-dome.name = 대형 과부하 프로젝터 -#experimental, may be removed / 이 아래의 블록들은 테스트용 임시 블록들입니다. +#experimental, may be removed / 이 아래의 블록들은 테스트용 임시 블록들이였습니다. block.block-forge.name = 블록 제작대 block.block-loader.name = 블록 로더 block.block-unloader.name = 블록 언로더 @@ -1585,13 +1591,15 @@ lst.sensor = 건물 또는 유닛의 정보 얻기 lst.set = 변수 선언/할당하기 lst.operation = 1~2개의 변수로 연산하기 lst.end = 실행줄의 가장 위로 점프하기 +lst.wait = 일정 시간(초) 동안 대기 +lst.lookup = id를 통해 특정 유형의 아이템/액체/유닛/블록을 찾기\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[].\n로 각 타입의 총 갯수를 알 수 있습니다. lst.jump = 조건부로 다른 실행문으로 점프하기 lst.unitbind = type 옆에 있는 유닛을 지정하고, [accent]@unit[]에 저장하기 lst.unitcontrol = 현재 지정된 유닛을 조종하기 lst.unitradar = 현재 지정된 유닛 주변의 유닛 검색하기 lst.unitlocate = 특정 유형의 위치/건물을 지도상에서 찾기\n지정된 유닛이 필요합니다. -logic.nounitbuild = [red]유닛의 건물 로직은 여기서 허용되지 않습니다. +logic.nounitbuild = [red]유닛의 건설 로직은 여기서 허용되지 않습니다. lenum.type = 건물/유닛의 타입\n예로 분배기는 문자열이 아니라 [accent]@router[]를 반환합니다. lenum.shoot = 특정 위치에 발사 @@ -1721,7 +1729,7 @@ lenum.build = 구조물 건설 lenum.getblock = 특정 좌표의 빌딩과 블록을 반환합니다.\n위치는 유닛의 인지 범위 내여야 합니다.\n자연 지형은 [accent]@solid[]의 타입을 가집니다. lenum.within = 좌표 주변 유닛 발견 여부 lenum.boost = 이륙 시작/중단 -#1724 line matching / 줄 매칭 +#1730 line matching / 줄 매칭 #-------------비공식 번역------------- #팁, 패치 기록, 약간의 관련 드립을 넣는 곳입니다. 이미 쓰여진 줄이 있다면 \n\n를 입력한 다음 작성하고 끝에 깃허브 작성자 닉네임(또는 디스코드)을 적어주세요. @@ -1840,7 +1848,6 @@ block.pneumatic-drill.details = block.laser-drill.details = block.blast-drill.details = block.water-extractor.details = -block.cultivator.details = block.oil-extractor.details = block.vault.details = block.container.details = diff --git a/core/assets/bundles/bundle_ro.properties b/core/assets/bundles/bundle_ro.properties index 3bd19a7dca..71c94ec606 100644 --- a/core/assets/bundles/bundle_ro.properties +++ b/core/assets/bundles/bundle_ro.properties @@ -399,14 +399,12 @@ wavemode.health = viață editor.default = [lightgray] details = Detalii... -edit = Editare... +edit = Editează... editor.name = Nume: editor.spawn = Adaugă Unitate editor.removeunit = Înlătură Unitate editor.teams = Echipe editor.errorload = Eroare la încărcarea fișierului. -memory = Mem: {0}mb -memory2 = Mem:\n {0}mb +\n {1}mb editor.errorsave = Eroare la salvarea fișierului. editor.errorimage = Aceasta este o imagine, nu o hartă. editor.errorlegacy = Hartă aceasta este prea veche, și folosește un format învechit care nu mai este suportat. @@ -462,6 +460,7 @@ toolmode.drawteams = Desenează Echipe toolmode.drawteams.description = Desenează echipe în loc de blocuri. filters.empty = [lightgray]Fără filtre! Adaugă unul folosind butonul de mai jos. + filter.distort = Distorsionare filter.noise = Zgomot Vizual filter.enemyspawn = Selectare Punct de Lansare Inamic @@ -478,6 +477,7 @@ filter.clear = Curăță filter.option.ignore = Ignoră filter.scatter = Împrăștie filter.terrain = Teren + filter.option.scale = Scară filter.option.chance = Șansă filter.option.mag = Magnitudine @@ -492,6 +492,7 @@ filter.option.block = Bloc filter.option.floor = Podea filter.option.flooronto = Podea Țintă filter.option.target = Țintă +filter.option.replacement = Înlocuitor filter.option.wall = Perete filter.option.ore = Minereu filter.option.floor2 = Podea Secundară @@ -508,6 +509,8 @@ load = Încarcă save = Salvează fps = FPS: {0} tps = TPS: {0} +memory = Mem: {0}mb +memory2 = Mem:\n {0}mb +\n {1}mb ping = Ping: {0}ms language.restart = Repornește jocul pentru ca setările de limbă să aibă efect. settings = Setări @@ -675,6 +678,7 @@ unit.nobuild = [scarlet]Unitatea nu poate construi. lastaccessed = [lightgray]Ultima Accesare: {0} block.unknown = [lightgray]??? +stat.showinmap = stat.description = Utilizare stat.input = Necesită stat.output = Produce @@ -999,6 +1003,7 @@ rules.unithealthmultiplier = Multiplicatorul Vieții Unităților rules.unitdamagemultiplier = Multiplicatorul Deteriorării Unităților rules.unitcapvariable = Nucleele Contribuie la Limita Unităților rules.unitcap = Limita de Bază a Unităților +rules.polygoncoreprotection = Protecție Poligonală a Nucleului rules.enemycorebuildradius = Interzisă Construirea în Jurul Nucleului Inamic:[lightgray] (pătrate) rules.wavespacing = Spațiul Dintre Valuri:[lightgray] (sec) rules.buildcostmultiplier = Multiplicatorul Costului Construcției @@ -1161,7 +1166,8 @@ block.spore-cluster.name = Grup de Spori block.metal-floor.name = Podea de Metal 1 block.metal-floor-2.name = Podea de Metal 2 block.metal-floor-3.name = Podea de Metal 3 -block.metal-floor-5.name = Podea de Metal 4 +block.metal-floor-4.name = Podea de Metal 4 +block.metal-floor-5.name = Podea de Metal 5 block.metal-floor-damaged.name = Podea de Metal Deteriorată block.dark-panel-1.name = Panou Negru 1 block.dark-panel-2.name = Panou Negru 2 diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index 0213650caa..6162508307 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -67,6 +67,14 @@ schematic.delete.confirm = Эта схема будет поджарена Ис schematic.rename = Переименовать схему schematic.info = {0}x{1}, {2} блоков schematic.disabled = [scarlet]Схемы отключены[]\nНа этой [accent]карте[] или [accent]сервере[] запрещено использование схем. +schematic.tags = Теги: +schematic.edittags = Редактировать теги +schematic.addtag = Добавить тег +schematic.texttag = Текстовый тег +schematic.icontag = Символьный тег +schematic.renametag = Переименовать тег +schematic.tagdelconfirm = Полностью удалить этот тег? +schematic.tagexists = Такой тег уже существует. stats = Статистика stat.wave = Волн отражено:[accent] {0} @@ -306,7 +314,6 @@ data.exported = Данные экспортированы. data.invalid = Эти игровые данные являются недействительными. data.import.confirm = Импорт внешних данных сотрёт[scarlet] все[] ваши игровые данные.\n[accent]Это не может быть отменено![]\n\nКак только данные импортированы, ваша игра немедленно закроется. quit.confirm = Вы уверены, что хотите выйти? -quit.confirm.tutorial = Вы уверены, что знаете, что делаете?\nОбучение может быть повторно запущено через[accent] Настройки->Игра->Открыть обучение.[] loading = [accent]Загрузка… reloading = [accent]Перезагрузка модификаций… saving = [accent]Сохранение… @@ -453,6 +460,7 @@ toolmode.drawteams = Изменить команду блока toolmode.drawteams.description = Изменяет принадлежность\nблока к команде. filters.empty = [lightgray]Нет фильтров! Добавьте один при помощи кнопки ниже. + filter.distort = Искажение filter.noise = Шум filter.enemyspawn = Случайный выбор \nточек высадки @@ -469,6 +477,7 @@ filter.clear = Очистить filter.option.ignore = Игнорировать filter.scatter = Сеятель filter.terrain = Ландшафт + filter.option.scale = Масштаб фильтра filter.option.chance = Шанс filter.option.mag = Сила применения @@ -477,11 +486,13 @@ filter.option.circle-scale = Масштаб круга filter.option.octaves = Цикличность применения filter.option.falloff = Спад цикличности filter.option.angle = Угол +filter.option.rotate = Повернуть filter.option.amount = Количество filter.option.block = Блок filter.option.floor = Поверхность filter.option.flooronto = Целевая поверхность filter.option.target = Цель +filter.option.replacement = Замена filter.option.wall = Стена filter.option.ore = Руда filter.option.floor2 = Вторая поверхность @@ -498,6 +509,7 @@ load = Загрузить save = Сохранить fps = FPS: {0} ping = Пинг: {0}мс +tps = TPS: {0} memory = Mem: {0}mb memory2 = Mem:\n {0}mb +\n {1}mb language.restart = Перезагрузите игру, чтобы языковые настройки вступили в силу. @@ -530,7 +542,7 @@ launch.from = Запуск из: [accent]{0} launch.destination = Место назначения: {0} configure.invalid = Количество должно быть числом между 0 и {0}. add = Добавить… -boss.health = Прочность стража +guardian = Страж connectfail = [scarlet]Ошибка подключения:\n\n[accent]{0} error.unreachable = Сервер недоступен.\nВы уверены, что адрес введён корректно? @@ -574,6 +586,7 @@ sector.attacked = Сектор [accent]{0}[white] атакован! sector.lost = Сектор [accent]{0}[white] потерян! #note: the missing space in the line below is intentional (недостающий пробел управляется кодом) sector.captured = Сектор [accent]{0}[white]захвачен! +sector.changeicon = Изменить иконку threat.low = Низкая threat.medium = Средняя @@ -626,6 +639,7 @@ status.wet.name = Влага status.muddy.name = В грязи status.melting.name = Плавление status.sapped.name = Истощение +status.electrified.name = Электризация status.spore-slowed.name = Замедление спорами status.tarred.name = В нефти status.overclock.name = Разгон @@ -654,6 +668,7 @@ settings.clearcampaignsaves.confirm = Вы уверены, что хотите paused = [accent]< Пауза > clear = Очистить banned = [scarlet]Запрещено +unsupported.environment = [scarlet]Неподдерживаемые условия yes = Да no = Нет info.title = Информация @@ -663,13 +678,14 @@ unit.nobuild = [scarlet]Единица не может строить lastaccessed = [lightgray]Последняя конфигурация от {0} block.unknown = [lightgray]??? +stat.showinmap = <загрузите карту для отображения> stat.description = Назначение stat.input = Вход stat.output = Выход stat.booster = Ускоритель stat.tiles = Необходимые плитки -stat.affinities = Увеличение эффективности -stat.opposites = Уменьшение эффективности +stat.affinities = Множитель эффективности +stat.opposites = Противоположности stat.powercapacity = Вместимость энергии stat.powershot = Энергия/выстрел stat.damage = Урон @@ -691,7 +707,8 @@ stat.itemcapacity = Вместимость предметов stat.memorycapacity = Размер памяти stat.basepowergeneration = Базовая генерация энергии stat.productiontime = Время производства -stat.repairtime = Время полной регенерации +stat.repairtime = Время полного ремонта +stat.repairspeed = Скорость ремонта stat.weapons = Орудия stat.bullet = Снаряд stat.speedincrease = Увеличение скорости @@ -745,6 +762,7 @@ ability.statusfield = {0} Усиливающее поле ability.unitspawn = Завод единиц «{0}» ability.shieldregenfield = Поле восстановления щита ability.movelightning = Молнии при движении +ability.energyfield = Энергетическое поле: [accent]{0}[] урона ~ [accent]{1}[] блоков / [accent]{2}[] целей bar.drilltierreq = Требуется бур получше bar.noresources = Недостаточно ресурсов @@ -767,6 +785,7 @@ bar.power = Энергия bar.progress = Прогресс строительства bar.input = Ввод bar.output = Вывод +bar.strength = [stat]{0}[lightgray]x эффективность units.processorcontrol = [lightgray]Управляется процессором @@ -778,7 +797,7 @@ bullet.frag = [stat]осколочный bullet.lightning = [stat]{0}[lightgray]x молнии ~ [stat]{1}[lightgray] урона bullet.buildingdamage = [stat]{0}%[lightgray] урона по постройкам bullet.knockback = [stat]{0}[lightgray] отбрасывания -bullet.pierce = [stat]{0}[lightgray]x пробитие +bullet.pierce = [stat]{0}[lightgray]x пробития bullet.infinitepierce = [stat]бесконечное пробитие bullet.healpercent = [stat]{0}[lightgray]% ремонта bullet.multiplier = [stat]{0}[lightgray]x множитель боеприпасов @@ -975,6 +994,8 @@ rules.wavetimer = Интервал волн rules.waves = Волны rules.attack = Режим атаки rules.buildai = Строительство ИИ +rules.corecapture = Захват ядра после уничтожения +rules.polygoncoreprotection = Полигональная защита ядер rules.enemyCheat = Бесконечные ресурсы ИИ (красная команда) rules.blockhealthmultiplier = Множитель прочности блоков rules.blockdamagemultiplier = Множитель урона блоков @@ -1030,6 +1051,7 @@ item.blast-compound.name = Взрывчатая смесь item.pyratite.name = Пиротит item.metaglass.name = Метастекло item.scrap.name = Металлолом + liquid.water.name = Вода liquid.slag.name = Шлак liquid.oil.name = Нефть @@ -1061,6 +1083,11 @@ unit.minke.name = Минке unit.bryde.name = Брайд unit.sei.name = Сейвал unit.omura.name = Омура +unit.retusa.name = Ретуза +unit.oxynoe.name = Оксино +unit.cyerce.name = Цирс +unit.aegires.name = Эгирес +unit.navanax.name = Наванакс unit.alpha.name = Альфа unit.beta.name = Бета unit.gamma.name = Гамма @@ -1121,6 +1148,7 @@ block.sand-water.name = Песок с водой block.darksand-water.name = Тёмный песок с водой block.char.name = Выжженная земля block.dacite.name = Дацит +block.rhyolite.name = Риолит block.dacite-wall.name = Дацитовая стена block.dacite-boulder.name = Дацитовый валун block.ice-snow.name = Заснеженный лёд @@ -1138,7 +1166,8 @@ block.spore-cluster.name = Скопление спор block.metal-floor.name = Металлический пол 1 block.metal-floor-2.name = Металлический пол 2 block.metal-floor-3.name = Металлический пол 3 -block.metal-floor-5.name = Металлический пол 4 +block.metal-floor-4.name = Металлический пол 4 +block.metal-floor-5.name = Металлический пол 5 block.metal-floor-damaged.name = Повреждённый металлический пол block.dark-panel-1.name = Тёмная панель 1 block.dark-panel-2.name = Тёмная панель 2 @@ -1228,6 +1257,7 @@ block.solar-panel.name = Солнечная панель block.solar-panel-large.name = Большая солнечная панель block.oil-extractor.name = Нефтяная вышка block.repair-point.name = Ремонтный пункт +block.repair-turret.name = Ремонтная турель block.pulse-conduit.name = Импульсный трубопровод block.plated-conduit.name = Укреплённый трубопровод block.phase-conduit.name = Фазовый трубопровод @@ -1244,8 +1274,8 @@ block.thermal-generator.name = Термальный генератор block.alloy-smelter.name = Плавильня кинетического сплава block.mender.name = Регенератор block.mend-projector.name = Ремонтирующий проектор -block.surge-wall.name = Стена из кинетического сплава -block.surge-wall-large.name = Большая стена из кинетического сплава +block.surge-wall.name = Кинетическая стена +block.surge-wall-large.name = Большая кинетическая стена block.cyclone.name = Циклон block.fuse.name = Взрыватель block.shock-mine.name = Шоковая мина @@ -1270,6 +1300,12 @@ block.exponential-reconstructor.name = Экспоненциальный реко block.tetrative-reconstructor.name = Тетративный реконструктор block.payload-conveyor.name = Грузовой конвейер block.payload-router.name = Разгрузочный маршрутизатор +block.duct.name = Предметный канал +block.duct-router.name = Канальный маршрутизатор +block.duct-bridge.name = Канальный мост +block.payload-propulsion-tower.name = Грузовая катапульта +block.payload-void.name = Грузовой вакуум +block.payload-source.name = Грузовой источник block.disassembler.name = Разборщик block.silicon-crucible.name = Кремниевый тигель block.overdrive-dome.name = Сверхприводный купол @@ -1289,9 +1325,8 @@ block.memory-cell.name = Ячейка памяти block.memory-bank.name = Блок памяти team.blue.name = Синяя -team.crux.name = Красная -team.sharded.name = Оранжевая -team.orange.name = Оранжевая +team.crux.name = Агрессоры +team.sharded.name = Расколотые team.derelict.name = Покинутая team.green.name = Зелёная team.purple.name = Фиолетовая @@ -1302,7 +1337,7 @@ hint.zoom = [accent]Покрутите колесо мыши[] для прибл hint.mine = Приблизьтесь к \uf8c4 медной руде и [accent]нажмите[] на неё для ручной добычи. hint.desktopShoot = Используйте [accent][[Левую кнопку мыши][] для стрельбы. hint.depositItems = Чтобы перенести предметы, перетяните их с вашего корабля в ядро. -hint.respawn = Чтобы заново появиться в корабле нажмите [accent][[V][]. +hint.respawn = Чтобы заново появиться в корабле, нажмите [accent][[V][]. hint.respawn.mobile = Вы переключили управление единицей/структурой. Чтобы заново появиться в корабле, [accent]нажмите на аватар слева сверху.[] hint.desktopPause = Нажмите [accent][[Пробел][] для приостановки и возобновления игры. hint.placeDrill = Выберите в меню справа внизу вкладку \ue85e [accent]Добычи[], затем выберите \uf870 [accent]Бур[] и нажмите на медные вкрапления, чтобы разместить его. @@ -1312,6 +1347,7 @@ hint.placeConveyor.mobile = Конвейеры перемещают предме hint.placeTurret = Установите \uf861 [accent]Турели[] для защиты своей базы от врагов.\n\nТурелям требуются боеприпасы — в данном случае \uf838медные.\nИспользуйте конвейеры и буры для их подачи. hint.breaking = Выделите блоки в рамку [accent]правой кнопкой мыши[], чтобы разобрать их. hint.breaking.mobile = Активируйте \ue817 [accent]молоток[] в правом нижнем углу и нажимайте на блоки, чтобы разобрать их. Удерживайте палец в течение секунды и переместите, чтобы разобрать выделением. +hint.blockInfo = Для просмотра информации о блоке, выберите его в [accent]меню строительства[], затем нажмите на кнопку [accent][[?][] справа. hint.research = Используйте кнопку \ue875 [accent]Исследований[], чтобы исследовать новые технологии. hint.research.mobile = Используйте кнопку \ue875 [accent]Исследований[] в \ue88c [accent]Меню[], чтобы исследовать новые технологии. hint.unitControl = Зажмите [accent][[Л-Ctrl][] и [accent]нажмите левую кнопку мыши[], чтобы контролировать дружественные единицы и турели. @@ -1345,7 +1381,7 @@ item.graphite.description = Используется в электрически item.sand.description = Используется в производстве других обработанных материалов. item.coal.description = Используется как топливо и в производстве обработанных материалов. item.coal.details = Похоже, что это окаменевшее растительное вещество, образовавшееся задолго до Посева. -item.titanium.description = Широко используется в транспортировке жидкостей, бурах и авиации. +item.titanium.description = Широко используется в транспортировке жидкостей, бурах и фабриках. item.thorium.description = Используется в прочных постройках и как ядерное топливо. item.scrap.description = Используется в плавильнях и измельчителях для получения других материалов. item.scrap.details = Остатки старых построек и единиц. @@ -1566,7 +1602,7 @@ logic.nounitbuild = [red]Строительство с помощью проце lenum.type = Тип постройки/единицы. \nНапример, для маршрутизатора это будет [accent]@router[].\nНе строка. lenum.shoot = Стрельба в определённую позицию. lenum.shootp = Стрельба в единицу/постройку с расчётом скорости. -lenum.configure = Конфигурация постройки, например, предмет сортировки. +lenum.config = Конфигурация постройки, например, предмет сортировки. lenum.enabled = Включён ли блок. laccess.color = Цвет осветителя. @@ -1574,6 +1610,7 @@ laccess.controller = Командующий единицей. Если един laccess.dead = Является ли единица/постройка неработающей или несуществующей. laccess.controlled = Возвращает:\n[accent]@ctrlProcessor[] если единица управляется процессором\n[accent]@ctrlPlayer[] если единица/постройка управляется игроком\n[accent]@ctrlFormation[] если единица в строю\nВ противном случае — 0. laccess.commanded = [red]Устарело. Будет удалено![]\nВместо этого, используйте [accent]controlled[]. +laccess.progress = Прогресс действия от 0 до 1. Возвращает прогресс производства, перезарядку турели или прогресс постройки. graphicstype.clear = Заливка дисплея цветом. graphicstype.color = Установка цвета для следующих операций отрисовки. @@ -1605,9 +1642,15 @@ lenum.min = Минимальное из двух чисел. lenum.max = Максимальное из двух чисел. lenum.angle = Угол вектора в градусах. lenum.len = Длина вектора. + lenum.sin = Синус, в градусах. lenum.cos = Косинус, в градусах. lenum.tan = Тангенс, в градусах. + +lenum.asin = Арксинус, в градусах. +lenum.acos = Арккосинус, в градусах. +lenum.atan = Арктангенс, в градусах. + #это не ошибка, поищите 'обозначение диапазонов' lenum.rand = Случайное число в диапазоне [0, значение). lenum.log = Натуральный логарифм (ln). diff --git a/core/assets/bundles/bundle_th.properties b/core/assets/bundles/bundle_th.properties index 01b8310b19..f973f39a9a 100644 --- a/core/assets/bundles/bundle_th.properties +++ b/core/assets/bundles/bundle_th.properties @@ -1,78 +1,98 @@ credits.text = สร้างโดย [royal]Anuken[] - [sky]anukendev@gmail.com[] credits = เครดิต -contributors = ผู้แปลภาษาและผู้ช่วย -discord = เข้าร่วมเซิฟเวอร์ Discord ของ Mindustry สิ! -link.discord.description = เซิฟเวอร์ Discord อย่างเป็นทางการของ Mindustry -link.reddit.description = ซับเรดดิท (subreddit) ของ Mindustry -link.github.description = source code ของเกม -link.changelog.description = รายการที่อัปเดต +contributors = ผู้แปลภาษาและผู้ร่วมพัฒนา +discord = เข้าร่วมเซิร์ฟเวอร์ Discord ของ Mindustry สิ! +link.discord.description = พื้นที่พูดคุยอย่างเป็นทางการของ Mindustry +link.reddit.description = Subreddit ของ Mindustry +link.github.description = แหล่งโค้ดของเกม +link.changelog.description = รายการอัพเดต link.dev-builds.description = เวอร์ชั่นระหว่างพัฒนา (ไม่เสถียร) -link.trello.description = Trello board ทางการสำหรับฟีเจอร์ต่างๆที่วางแผนไว้ +link.trello.description = บอร์ด Trello อย่างเป็นทางการสำหรับฟีเจอร์ต่างๆ ที่วางแผนไว้ link.itch.io.description = หน้าเว็บ itch.io สำหรับดาวน์โหลดบน PC link.google-play.description = หน้า Google Play store ของเกม -link.f-droid.description = หน้าแคตาลอค F-Droid ของเกม -link.wiki.description = วิกิของ Mindustry อย่างเป็นทางการ -link.suggestions.description = เสนอฟีเจอร์ใหม่ -linkfail = ไม่สามารถเปิดลิ้งค์ได้\nคัดลอก URL ลงในคลิปบอร์ดแล้ว -screenshot = Screenshot บันทึกที่ {0} -screenshot.invalid = แมพใหญ่เกินไป, หน่วยความจำอาจจะไม่พอสำหรับ screenshot. +link.f-droid.description = หน้าแคตตาล็อก F-Droid ของเกม +link.wiki.description = วิกิอย่างเป็นทางการของ Mindustry +link.suggestions.description = นำเสนอฟีเจอร์ใหม่ +link.bug.description = เจอบัค? รายงานที่นี่! +linkfail = ไม่สามารถเปิดลิ้งค์ได้\nได้ทำการคัดลอก URL ลงในคลิปบอร์ดแล้ว +screenshot = ภาพหน้าจอได้บันทึกไปที่ {0} +screenshot.invalid = แมพใหญ่เกินไป หน่วยความจำอาจจะไม่พอสำหรับภาพหน้าจอ gameover = จบเกม -gameover.pvp = ทีมที่ชนะคือทีม[accent] {0}[]! +gameover.disconnect = ออก +gameover.pvp = ทีมที่ชนะคือทีม [accent]{0}[]! +gameover.waiting = [accent]กำลังรอแมพใหม่... highscore = [accent]คะแนนสูงสุดใหม่! -copied = คัดลอกแล้ว. -indev.popup = [accent]เวอร์ชั่น v6[] ณ ขณะนี้อยู่ในช่วง [accent]alpha[].\n[lightgray]นั้นหมายถึง:[]\n[scarlet]- เคมเปญไม่ยังเสร็จสมบูรณ์ []\n- เนื้อหาบางอย่างขาดหาย\n - [scarlet]AI ของยูนิต[] ส่วนใหญ่ทำงานได้แบบไม่สมบูรณ์\n- ยูนิตส่วนมากยังไม่เสร็จ\n- ที่อย่างที่เห็นอาจเปลี่ยนแปลงได้หรือลบออกโดยสิ้นเชิงในอนาคต\n\nแจ้งบัคหรือปัญหาที่พบเจอได้ที่ [accent]Github[]. +copied = คัดลอกแล้ว indev.notready = ส่วนนี้ของเกมยังไม่พร้อมให้ใช้งาน +indev.campaign = [accent]ยินดีด้วย! คุณได้มาถึงจุดจบของแคมเปญแล้ว![]\n\nนี่คือเท่าที่เนื้อเรื่องจะดำเนินต่อไปได้ ณ ตอนนี้ การเดินทางข้ามโลกจะเพิ่มมาในอนาคต load.sound = เสียง load.map = แมพ load.image = รูป load.content = เนื้อหา load.system = ระบบ -load.mod = มอด +load.mod = ม็อด load.scripts = สคริปต์ -be.update = เวอร์ชั้นล่าสุดออกแล้ว: +be.update = เวอร์ชั่นรุ่นพัฒนาล่าสุดออกแล้ว: be.update.confirm = ดาวน์โหลดเวอร์ชั่นใหม่แล้วรีสตาร์ทเลยไหม? -be.updating = กำลังอัปเดต... +be.updating = กำลังอัพเดต... be.ignore = ยกเลิก -be.noupdates = ไม่พบการอัปเดตใหม่. -be.check = ตรวจหาอัปเดตใหม่. +be.noupdates = ไม่พบอัพเดตใหม่ +be.check = ตรวจหาอัพเดตใหม่ + +mods.browser = ค้นหาม็อด +mods.browser.selected = เลือกแล้ว +mods.browser.add = ติดตั้ง +mods.browser.reinstall = ติดตั้งใหม่ +mods.github.open = แหล่ง +mods.browser.sortdate = เรียงตามล่าสุด +mods.browser.sortstars = เรียงตามคะแนนดาว schematic = แผนผัง -schematic.add = กำลังบันทึกแผนผัง... +schematic.add = บันทึกแผนผัง... schematics = แผนผัง -schematic.replace = มีแผนผังที่ใช้ชื่อนี้แล้ว. แทนที่เลยไหม? +schematic.replace = มีแผนผังที่ใช้ชื่อนี้แล้ว แทนที่เลยไหม? schematic.exists = มีแผนผังในชื่อนั้นอยู่แล้ว schematic.import = นำเข้าแผนผัง... schematic.exportfile = ส่งออกไฟล์ schematic.importfile = นำเข้าไฟล์ -schematic.browseworkshop = ค้นหาเวิร์กชอป +schematic.browseworkshop = ค้นหาในเวิร์กช็อป schematic.copy = คัดลอกไปที่คลิปบอร์ด schematic.copy.import = นำเข้าจากคลิปบอร์ด -schematic.shareworkshop = แชร์บนเวิร์กชอป +schematic.shareworkshop = แชร์บนเวิร์กช็อป schematic.flip = [accent][[{0}][]/[accent][[{1}][]: กลับแผนผัง -schematic.saved = บันทึกแผนผังแล้ว. +schematic.saved = บันทึกแผนผังแล้ว schematic.delete.confirm = แผนผังนี้จะถูกกำจัดให้หมดสิ้นโดยสิ้นเชิง -schematic.rename = เปลี่ยนชื่อของแผนผัง -schematic.info = {0}x{1}, {2} บล็อค -schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. +schematic.rename = เปลี่ยนชื่อแผนผัง +schematic.info = {0}x{1}, {2} บล็อก +schematic.disabled = [scarlet]การใช้แผนผังถูกปิดไว้[]\nคุณไม่สามารถใช้แผนผังได้ใน[accent]แมพ[]หรือ[accent]เซิร์ฟเวอร์นี้ +schematic.tags = แท็ก: +schematic.edittags = แก้ไขแท็ก +schematic.addtag = เพิ่มแท็ก +schematic.texttag = แท็กข้อความ +schematic.icontag = ไอคอนแท็ก +schematic.renametag = เปลี่ยนชื่อแท็ก +schematic.tagdelconfirm = จะลบแท็กนี้ทั้งหมดใช่ไหม? +schematic.tagexists = แท็กนี้มีอยู่แล้ว -stat.wave = จำนวนคลื่น(รอบ)ที่กำจัดได้:[accent] {0} -stat.enemiesDestroyed = จำนวนศัตรูที่ทำลายไปได้:[accent] {0} +stats = สถิติ +stat.wave = จำนวนคลื่นที่อยู่รอด:[accent] {0} +stat.enemiesDestroyed = จำนวนศัตรูที่ทำลาย:[accent] {0} stat.built = จำนวนสิ่งก่อสร้างที่สร้าง:[accent] {0} -stat.destroyed = จำนวนสิ่งก่อสร้างของศัตรูที่ทำลายไปได้:[accent] {0} -stat.deconstructed = จำนวนสิ่งก่อสร้างที่ถูกทำลายไป:[accent] {0} -stat.delivered = ทรัพยากรที่ส่งไปได้: +stat.destroyed = จำนวนสิ่งก่อสร้างที่ถูกทำลาย:[accent] {0} +stat.deconstructed = จำนวนสิ่งก่อสร้างที่ลบไป:[accent] {0} +stat.delivered = ทรัพยากรที่ส่งไป: stat.playtime = ระยะเวลาที่เล่นไป:[accent] {0} stat.rank = ระดับ: [accent]{0} -globalitems = [accent]ไอเท็มโกลบอล -map.delete = คุณแน่ใจหรือว่าจะลบแมพชื่อ "[accent]{0}[]"? -level.highscore = คะแนนสูงสุด: [accent]{0} +globalitems = [accent]ไอเท็มทั้งหมด +map.delete = คุณแน่ใจหรือว่าจะลบแมพ "[accent]{0}[]"? level.select = เลือกด่าน +level.highscore = คะแนนสูงสุด: [accent]{0} level.mode = เกมโหมด: -coreattack = < แกนกลางกำลังถูกโจมตี! > -nearpoint = [[ [scarlet]ออกจากดรอปพอยท์ด่วน IMMEDIATELY[] ]\nการทำลายล้างกำลังใกล้เข้ามา +coreattack = < แกนกลางถูกโจมตี! > +nearpoint = [[ [scarlet]ออกจากจุดเกิดด่วน![] ]\nการทำลายล้างกำลังใกล้เข้ามา database = ฐานข้อมูลหลัก savegame = เซฟเกม loadgame = โหลดเกม @@ -80,10 +100,11 @@ joingame = เข้าร่วมเกม customgame = เกมที่กำหนดเอง newgame = เริ่มเกมใหม่ none = <ไม่มี> +none.found = [lightgray]<ไม่เจออะไรเลย> minimap = มินิแมพ position = ตำแหน่ง close = ปิด -website = เว็ปไซต์ +website = เว็บไซต์ quit = ออก save.quit = เซฟแล้วออก maps = แมพ @@ -100,135 +121,150 @@ committingchanges = กำลังทำการเปลี่ยนแปล done = เรียบร้อย feature.unsupported = อุปกรณ์ของคุณไม่รองรับฟีเจอร์นี้ -mods.alphainfo = จำไว้ว่ามอดนั้นยังอยู่ในขั้น alpha และ[scarlet] อาจจะมีบัค[].\nโปรดรายงานปัญหาที่คุณพบใน Github ของ Mindustry หรือ ในเซิฟเวอร์ Discord -mods = มอด -mods.none = [lightgray]ไม่พบมอด! -mods.guide = คู่มือการทำมอด +mods.initfailed = [red]⚠[] ไม่สามารถเปิดเกม Mindustry ได้ อาจเกิดจากม็อดที่ทำงานผิดปกติ\n\nเพื่อป้องกันการแครชต่อเนื่อง [red]ม็อดทั้งหมดได้ปิดตัวลง[]\n\nหากต้องการปิดฟีเจอร์นี้ ปิดได้ที่ [accent]ตั้งค่า->เกม->ปิดม็อดเมื่อเกมขัดข้อง[] +mods = ม็อด +mods.none = [lightgray]ไม่พบม็อด! +mods.guide = คู่มือการทำม็อด mods.report = รายงานบัค -mods.openfolder = เปิดมอดโฟลเดอร์ +mods.openfolder = เปิดโฟลเดอร์ม็อด +mods.viewcontent = ดูเนื้อหาม็อด mods.reload = โหลดใหม่ -mods.reloadexit = เกมจะออกเพื่อจะโหลดมอด -mod.display = [gray]Mod:[orange] {0} +mods.reloadexit = เกมจะออกเพื่อที่จะรีโหลดม็อด +mod.installed = [[ติดตั้งแล้ว] +mod.display = [gray]ม็อด:[orange] {0} mod.enabled = [lightgray]เปิดใช้งาน mod.disabled = [scarlet]ปิดใช้งาน +mod.multiplayer.compatible = [gray]ใช้งานได้กับโหมดผู้เล่นหลายคน mod.disable = ปิดใช้งาน mod.content = เนื้อหา: -mod.delete.error = ไม่สามารถลบมอดได้. ไฟล์อาจอยู่ในระหว่างการใช้งาน. +mod.delete.error = ไม่สามารถลบม็อดออกได้ ไฟล์อาจอยู่ในระหว่างการใช้งาน mod.requiresversion = [scarlet]เวอร์ชั่นเกมขั้นต่ำที่ต้องการ: [accent]{0} mod.outdated = [scarlet]ไม่สามารถใช้ได้ในเวอร์ชั่น V6 (ไม่มี minGameVersion: 105) -mod.missingdependencies = [scarlet]dependencies หาย: {0} +mod.missingdependencies = [scarlet]ม็อดพึ่งพาขาดหาย: {0} mod.erroredcontent = [scarlet]เนื้อหาผิดพลาด -mod.errors = มีข้อผิดพลาดเกิดขึ้นระหว่าโหลดเนื้อหา -mod.noerrorplay = [scarlet]คุณมีมอดที่มีข้อผิดพลาด.[] กรุณาปิดมอดนั้นๆหรือแก้ไขข้อผิดพลาดก่อนที่จะเล่น -mod.nowdisabled = [scarlet]มอด '{0}' ไม่มี dependencies:[accent] {1}\n[lightgray]จำเป็นต้องโหลดมอดพวกนี้ก่อน\nมอดนี้จะถูกปิดใช้งานโดยอัตโนมัติ +mod.errors = มีข้อผิดพลาดเกิดขึ้นระหว่างโหลดเนื้อหา +mod.noerrorplay = [scarlet]คุณมีม็อดที่มีข้อผิดพลาด[] กรุณาปิดม็อดนั้นๆ หรือแก้ไขข้อผิดพลาดก่อนที่จะเล่น +mod.nowdisabled = [scarlet]ม็อด '{0}' ขาดม็อดพื่งพา:[accent] {1}\n[lightgray]จำเป็นต้องโหลดม็อดพวกนี้ก่อน\nม็อดนี้จะถูกปิดใช้งานโดยอัตโนมัติ mod.enable = เปิดใช้งาน -mod.requiresrestart = เกมจะปิดลงเพื่อใส่มอด +mod.requiresrestart = เกมจะปิดลงเพื่อติดตั้งม็อด mod.reloadrequired = [scarlet]จำเป็นต้องรีโหลด -mod.import = นำเข้ามอด +mod.import = นำเข้าม็อด mod.import.file = นำเข้าไฟล์ -mod.import.github = นำเข้ามอดจาก Github -mod.jarwarn = [scarlet]มอดไฟล์ JAR นั้นค่อนข้างไม่ปลอดภัย.[]\nกรุณาเช็คให้แน่ใจว่าคุณนำเข้ามอดนี้จะแหล่งที่เชื่อถือได้! -mod.item.remove = ไอเทมนี้เป็นส่วนหนึ่งของมอด[accent] '{0}'[]. หากต้องการนำออก กรุณาถอดการติดตั้งมอดนั้น -mod.remove.confirm = มอดนี้จะถูกลบ +mod.import.github = นำเข้าม็อดจาก Github +mod.jarwarn = [scarlet]ม็อดไฟล์ JAR นั้นค่อนข้างไม่ปลอดภัย[]\nกรุณาเช็คให้แน่ใจว่าคุณนำเข้าม็อดนี้จะแหล่งที่เชื่อถือได้! +mod.item.remove = ไอเท็มนี้เป็นส่วนหนึ่งของม็อด [accent]'{0}'[] หากต้องการนำออก กรุณาถอนการติดตั้งม็อดนั้น +mod.remove.confirm = ม็อดนี้จะถูกลบ mod.author = [lightgray]ผู้สร้าง:[] {0} -mod.missing = เซฟนี้มีมอดที่คุณอัปเดตหรือไม่ได้ติดตั้งแล้ว. อาจทำให้เซฟเสีย. คุณแน่จะหรือว่าจะโหลดเซฟนี้?\n[lightgray]มอดที่ใช้:\n{0} -mod.preview.missing = ก่อนที่จะนำมอดไปลงใน workshop, คุณต้องใส่รูปพรีวิวก่อน\nใส่รูปชื่อ[accent] preview.png[] ลงในโฟลเดอร์ของมอดแล้วลองอีกครั้ง -mod.folder.missing = มอดที่อยู่ในรูปแบบโฟลเดอร์เท่านั้นที่สามารถลงใน workshop ได้\nunzip ไฟล์แล้วลบไฟล์ zip เก่า แล้วรีสตาร์ทเกมหรือรีโหลดมอด -mod.scripts.disable = เครื่องของคุณไม่รองรับมอดที่มี scripts. คุณจำเป็นต้องปิดมอดเหล่านี้ก่อนจึงจะสามารถเล่นได้. +mod.missing = เซฟนี้มีม็อดที่คุณพึ่งอัพเดตหรือไม่ได้ติดตั้งแล้ว อาจทำให้เซฟเสีย คุณแน่จะหรือว่าจะโหลดเซฟนี้?\n[lightgray]ม็อดที่ใช้:\n{0} +mod.preview.missing = ก่อนที่จะนำม็อดไปลงในเวิร์กช็อป คุณต้องใส่รูปพรีวิวก่อน\nใส่รูปชื่อ[accent] preview.png[] ลงในโฟลเดอร์ของม็อดแล้วลองอีกครั้ง +mod.folder.missing = ม็อดที่อยู่ในรูปแบบโฟลเดอร์เท่านั้นที่สามารถลงในเวิร์กช็อปได้\nunzip ไฟล์แล้วลบไฟล์ zip เก่า แล้วรีสตาร์ทเกมหรือรีโหลดม็อด +mod.scripts.disable = เครื่องของคุณไม่รองรับม็อดที่มีสคริปต์ คุณจำเป็นต้องปิดม็อดเหล่านี้ก่อนจึงจะสามารถเล่นได้ about.button = เกี่ยวกับ name = ชื่อ: -noname = ใส่ชื่อ[accent] ผู้เล่น[] ก่อน. +noname = ใส่ชื่อ[accent]ผู้เล่น[]ก่อน planetmap = แผนที่ดาวเคราะห์ -launchcore = ส่ง Core +launchcore = ส่งแกนกลาง filename = ชื่อไฟล์: unlocked = เนื้อหาใหม่ปลดล็อค! -completed = [accent]สำเร็จ -techtree = ความคืบหน้าในการวิจัย -research.list = [lightgray]วิจัย: +available = มีการวิจัยใหม่พร้อมปลดล็อก! +completed = [accent]วิจัยแล้ว +techtree = การวิจัย +research.legacy = พบข้อมูลการวิจัยของเวอร์ชั่น [accent]5.0[]\nคุณต้องการ[accent]โหลดข้อมูล[]หรือ[accent]ทิ้งข้อมูลไป[]และเริ่มต้นวิจัยในแคมเปญใหม่ (แนะนำ) +research.load = โหลด +research.discard = ทอดทิ้ง +research.list = [lightgray]การวิจัย: research = วิจัย -researched = [lightgray]{0} วิจัยแล้ว. -research.progress = เสร็จแล้ว {0}% +researched = [lightgray]{0} วิจัยแล้ว +research.progress = วิจัยแล้ว {0}% players = {0} ผู้เล่น players.single = {0} ผู้เล่น players.search = ค้นหา players.notfound = [gray]ไม่พบผู้เล่น -server.closing = [accent]กำลังปิดเซิฟเวอร์... -server.kicked.kick = คุณถูกเตะออกจากเซิฟเวอร์! -server.kicked.whitelist = คุณไม่ได้อยู่ใน whitelisted -server.kicked.serverClose = เซิฟเวอร์ถูกปิด. -server.kicked.vote = คุณถูกโหวตเตะออก. บัยบาย. -server.kicked.clientOutdated = client เก่า! กรุณาอัปเดตเกมของคุณ! -server.kicked.serverOutdated = server เก่า! โปรดถามเจ้าของเซิฟเพื่ออัปเดต! -server.kicked.banned = คุณถูกแบนในเซิฟเวอร์นี้ -server.kicked.typeMismatch = เซิฟเวอร์นี้ไม่เข้ากับ build type ของคุณ. -server.kicked.playerLimit = เซิฟเวอร์เต็ม. กรุณารอให้เซิฟเวอร์ว่างก่อน. -server.kicked.recentKick = คุณเพิ่งถูกเตะออกจากเซิฟเวอร์นี้.\nกรุณารอสักครู่เพื่อเข้าร่วมอีกครั้ง +server.closing = [accent]กำลังปิดเซิร์ฟเวอร์... +server.kicked.kick = คุณถูกเตะออกจากเซิร์ฟเวอร์! +server.kicked.whitelist = คุณไม่ได้ถูกรับเชิญ\nคนที่ถูกรับเชิญเท่านั้นที่จะเข้าได้ +server.kicked.serverClose = เซิร์ฟเวอร์ถูกปิด +server.kicked.vote = คุณถูกโหวตเตะออก บัยบาย +server.kicked.clientOutdated = ไคลเอนต์เก่า! กรุณาอัพเดตเกมของคุณ! +server.kicked.serverOutdated = เซิร์ฟเวอร์เก่า! โปรดถามเจ้าของเซิร์ฟเวอร์เพื่ออัพเดต! +server.kicked.banned = คุณถูกแบนในเซิร์ฟเวอร์นี้ +server.kicked.typeMismatch = เซิร์ฟเวอร์นี้ไม่เข้ากับประเภทบิลด์ของคุณ +server.kicked.playerLimit = เซิร์ฟเวอร์เต็ม กรุณารอให้เซิร์ฟเวอร์ว่างก่อน +server.kicked.recentKick = คุณเพิ่งถูกเตะออกจากเซิร์ฟเวอร์นี้\nกรุณารอสักครู่เพื่อเข้าร่วมอีกครั้ง server.kicked.nameInUse = มีคนที่ใช้ชืชื่อนี้\nอยู่ในเซิฟเวอร์แล้ว server.kicked.nameEmpty = ชื่อของคุณไม่สามารถใช้ได้ -server.kicked.idInUse = คุณเชื่อมต่อกับเซิฟเวอร์นี้อยู่แล้ว เราไม่อนุญาตให้เชื่อมต่อ 2 บัญชีในเซฟเวอร์เดียวกัน -server.kicked.customClient = เซิฟเวอร์นี้ไม่รองรับ builds ปรับแต่ง. กรุณาโหลดของ official. +server.kicked.idInUse = คุณเชื่อมต่อกับเซิร์ฟเวอร์นี้อยู่แล้ว เราไม่อนุญาตให้เชื่อมต่อสองบัญชีในเซิร์ฟเวอร์เดียวกัน +server.kicked.customClient = เซิร์ฟเวอร์นี้ไม่รองรับเวอร์ชั่นที่ถูกปรับแต่ง กรุณาโหลดเวอร์ชั่นอย่างเป็นทางการของ Mindustry server.kicked.gameover = จบเกม! -server.kicked.serverRestarting = เซิฟเวอร์กำลังเริ่มใหม่. +server.kicked.serverRestarting = เซิร์ฟเวอร์กำลังเริ่มใหม่ server.versions = เวอร์ชั่นของคุณ:[accent] {0}[]\nเวอร์ชั่นของเซิฟเวอร์:[accent] {1}[] -host.info = ปุ่ม [accent]โฮสต์[] นั้นโฮสต์เซฟเวอร์ที่พอร์ท [scarlet]6567[]. \nทุกคนที่อยู่ใน [lightgray]wifi หรือ local network[] เดียวกันจะสามารถเห็นเซิฟเวอร์ของคุณในลิสของเซิฟเวอร์ได้\n\nถ้าคุณต้องการให้ผู้เล่นอื่นๆสามารถเชื่อมต่อได้จากทุกที่โดยใช้ IP, จำเป็นจะต้องใช้การ [accent]port forwarding[] \n\n[lightgray]Note: ถ้าผู้เล่นคนใดมีปัญหาในการเชื่อมต่อ LAN ของคุณ เช็คให้แน่ใจว่าคุณได้อนุญาตให้ Mindustry เข้าถึง local network ของคุณในการตั้งค่า firewall. จำให้ว่า network สาธารณะบางครั้งไม่อนุญาตการค้นหาเซิฟเวอร์ -join.info = คุณสามารถใส่ [accent]IP ของเซิฟเวอร์[] เพื่อที่จะเชื่อมต่อหรือค้นหา เซิฟเวอร์ที่ใช้[accent]local network[] จะสามารถเชื่อมโดยใช้\n LAN หรือ WAN ก็ได้\n\n[lightgray]โน้ต: เกมนี้ไม่มีระบบค้นหาเซิฟเวอร์ global ให้อัตโนมัติserver list; ถ้าคุณต้องการเชื่อมต่อกับเซิฟเวอร์โดยใช้ IP, คุณจำเป็นต้องถาม IP ผู้เล่นที่โฮสต์เซิฟเวอร์นั้นๆ. -hostserver = โฮสต์เกม Multiplayer +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 = ชวนเพื่อน hostserver.mobile = โฮสต์\nเกม host = โฮสต์ -hosting = [accent]กำลังเปิดเซิฟเวอร์... +hosting = [accent]กำลังเปิดเซิร์ฟเวอร์... hosts.refresh = รีเฟรช -hosts.discovering = กำลังค้นหาเซิฟเวอร์ใน LAN -hosts.discovering.any = กำลังค้นหาเซิฟเวอร์ -server.refreshing = กำลังรีเฟรชเซิฟเวอร์ -hosts.none = [lightgray]ไม่พบเซิฟเวอร์ใน local! +hosts.discovering = กำลังค้นหาเซิร์ฟเวอร์ใน LAN +hosts.discovering.any = กำลังค้นหาเซิร์ฟเวอร์ +server.refreshing = กำลังรีเฟรชเซิร์ฟเวอร์ +hosts.none = [lightgray]ไม่พบเซิร์ฟเวอร์ท้องถิ่น! host.invalid = [scarlet]ไม่สามารถเชื่อมต่อกับโฮสต์ได้ -servers.local = เซิฟเวอร์ Local -servers.remote = เซิฟเวอร์ Remote -servers.global = เซิฟเวอร์ Community +servers.local = เซิร์ฟเวอร์ท้องถิ่น +servers.remote = เซิร์ฟเวอร์ทางไกล +servers.global = เซิร์ฟเวอร์ของชุมชน -trace = Trace ผู้เล่น/ แกะรอยผู้เล่น +servers.disclaimer = ผู้พัฒนา[accent]ไม่ได้[]เป็นเจ้าของหรือควบคุมเซิร์ฟเวอร์ของชุมชน\n\nในเซิร์ฟเวอร์อาจมีเนื้อหาของผู้เล่นที่ไม่เหมาะกับทุกเพศทุกวัย +servers.showhidden = แสดงเซิร์ฟเวอร์ที่ซ่อนไว้ +server.shown = แสดง +server.hidden = ซ่อน + +trace = แกะรอยผู้เล่น trace.playername = ชื่อผู้เล่น: [accent]{0} trace.ip = IP: [accent]{0} -trace.id = ID พิเศษ: [accent]{0} -trace.mobile = Mobile Client : [accent]{0} -trace.modclient = Client แบบกำหนดเอง: [accent]{0} +trace.id = ID: [accent]{0} +trace.mobile = ไคลเอนต์โมบาย: [accent]{0} +trace.modclient = ไคลเอนต์แบบกำหนดเอง: [accent]{0} +trace.times.joined = เวลาเข้า: [accent]{0} +trace.times.kicked = เวลาโดนเตะ: [accent]{0} invalidid = client ID ไม่ถูกต้อง! กรุณารายงานบัคนี้ server.bans = แบน server.bans.none = ไม่พบผู้เล่นที่ถูกแบน! server.admins = แอดมิน server.admins.none = ไม่พบแอดมิน! -server.add = เพิ่มเซิฟเวอร์ -server.delete = คุณแน่ใจหรือว่าจะลบเซิฟเวอร์นี้? -server.edit = แก้ไขเซิฟเวอร์ -server.outdated = [crimson]Server ล้าสมัย![] -server.outdated.client = [crimson]Client ล้าสมัย![] -server.version = [gray]เวอร์ชั่น{0} {1} -server.custombuild = [accent]Build +server.add = เพิ่มเซิร์ฟเวอร์ +server.delete = คุณแน่ใจหรือว่าจะลบเซิร์ฟเวอร์นี้? +server.edit = แก้ไขเซิร์ฟเวอร์ +server.outdated = [crimson]เซิร์ฟเวอร์ล้าสมัย![] +server.outdated.client = [crimson]ไคลเอนต์ล้าสมัย![] +server.version = [gray]v{0} {1} +server.custombuild = [accent]เวอร์ชั่นปรับแต่ง confirmban = คุณแน่ใจหรือว่าจะแบนผู้เล่นนี้? confirmkick = คุณแน่ใจหรือว่าจะเตะผู้เล่นนี้ออก? confirmvotekick = คุณแน่ใจหรือว่าจะโหวตเตะผู้เล่นนี้ออก? confirmunban = คุณแน่ใจหรือว่าจะเลิกแบนผู้เล่นนี้? confirmadmin = คุณแน่ใจหรือว่าจะเปลี่ยนผู้เล่นคนนี้เป็นแอดมิน? -confirmunadmin = คุณแน่ใจหรือว่าจะลบสถานะการเป็นแอดมินของผู้เล่นนี้ง? +confirmunadmin = คุณแน่ใจหรือว่าจะลบสถานะการเป็นแอดมินของผู้เล่นนี้? joingame.title = เข้าร่วมเกม joingame.ip = ที่อยู่: disconnect = ตัดการเชื่อมต่อแล้ว disconnect.error = การเชื่อมต่อมีปัญหา disconnect.closed = การเชื่อมต่อถูกปิดแล้ว -disconnect.timeout = Timed out. -disconnect.data = การโหลดข้อมูลของ world ผิดพลาด! -cantconnect = ไม่สามารถเข้าร่วมเซิฟเวอร์ ([accent]{0}[]). +disconnect.timeout = หมดเวลา +disconnect.data = การโหลดข้อมูลของโลกผิดพลาด! +cantconnect = ไม่สามารถเข้าร่วมเซิฟเวอร์ ([accent]{0}[]) connecting = [accent]กำลังเชื่อมต่อ... -connecting.data = [accent]กำลังโหลดข้อมูลของ world ... -server.port = Port: -server.addressinuse = มีคนใช้ Address นี้แล้ว! -server.invalidport = เลข port ไม่ถูกต้อง! -server.error = [crimson]การโฮตส์เซิฟเวอร์ผิดพลาด +reconnecting = [accent]กำลังเชื่อมต่อใหม่... +connecting.data = [accent]กำลังโหลดข้อมูลของโลก ... +server.port = พอร์ต: +server.addressinuse = มีคนใช้ที่อยู่นี้แล้ว! +server.invalidport = เลขพอร์ตไม่ถูกต้อง! +server.error = [crimson]การโฮสต์เซิฟเวอร์ผิดพลาด save.new = เซฟใหม่ -save.overwrite = คุณแใจหรือว่าจะเซฟทับ\nเซฟนี้? +save.overwrite = คุณแน่ใจหรือว่าจะเซฟทับ\nเซฟนี้? overwrite = เขียนทับ save.none = ไม่พบเซฟ! savefail = เซฟเกมผิดพลาด! @@ -242,7 +278,7 @@ save.import = นำเข้าเซฟ save.newslot = ชื่อเซฟ: save.rename = เปลี่ยนชื่อ save.rename.text = ชื่อใหม่: -selectslot = เลือกเซฟ. +selectslot = เลือกเซฟ slot = [accent]Slot {0} editmessage = แก้ไขข้อความ save.corrupted = ไฟล์เซฟเสียหายหรือไม่ถูกต้อง! @@ -252,47 +288,54 @@ off = ปิด save.autosave = เซฟอัตโนมัติ: {0} save.map = แมพ: {0} save.wave = Wave {0} -save.mode = โหมดของเกม: {0} +save.mode = เกมโหมด: {0} save.date = เซฟล่าสุด: {0} save.playtime = เวลาที่เล่นไป: {0} -warning = คำเตือน. +warning = คำเตือน confirm = ตกลง delete = ลบ -view.workshop = เปิดใน Workshop -workshop.listing = แก้ไข Workshop Listing +view.workshop = เปิดในเวิร์คช็อป +workshop.listing = แก้ไขหน้ารายการเวิร์คช็อป ok = โอเค open = เปิด -customize = กฎแบบกำหนดเอง +customize = ตั้งค่ากฎ cancel = ยกเลิก openlink = เปิดลิ้งค์ copylink = คัดลอกลิ้งค์ back = กลับ +max = เต็ม +crash.export = ส่งออกบันทึกข้อขัดข้อง +crash.none = ไม่เจอบันทึกข้อขัดข้อง +crash.exported = ส่งออกบันทึกข้อขัดข้องแล้ว data.export = ส่งออกข้อมูล data.import = นำเข้าข้อมูล data.openfolder = เปิดโฟลเดอร์ข้อมูล -data.exported = ข้อมูลส่งออกแล้ว -data.invalid = นี่ไม่ใช่ข้อมูลเกมที่ถูกต้อง. -data.import.confirm = การนำเข้าข้อมูลจากภายนอกจะเขียนทับข้อมูลเก่า[scarlet]ทั้งหมด[]\n[accent]และไม่สามารถย้อนกลับได้![]\n\nหลังจากที่นำข้อมูลแล้วเกมจะปิดลงโดยทันที +data.exported = ส่งออกข้อมูลแล้ว +data.invalid = นี่ไม่ใช่ข้อมูลเกมที่ถูกต้อง +data.import.confirm = การนำเข้าข้อมูลจากภายนอกจะเขียนทับข้อมูลเก่า[scarlet]ทั้งหมด[]\n[accent]และไม่สามารถย้อนกลับได้![]\n\nหลังจากที่นำเข้าข้อมูลแล้วเกมจะปิดลงโดยทันที quit.confirm = คุณแน่ใจหรือว่าจะออก? -quit.confirm.tutorial = คุณแน่ใจหรือว่าคุณกำลังทำอะไรอยู่?\nการสอนเล่นสามารถเล่นได้อีกครั้งใน[accent] ตั้งค่า->เกม->เล่นการสอนเล่นอีกครั้ง[] loading = [accent]กำลังโหลด... -reloading = [accent]กำลังรีโหลดมอด... +reloading = [accent]กำลังรีโหลดม็อด... saving = [accent]กำลังเซฟ... -respawn = [accent][[{0}]][]เพื่อเกิดใหม่ที่ core -cancelbuilding = [accent][[{0}][]เพื่อเคลียแผน -selectschematic = [accent][[{0}][]เพื่อเลือกและคัดลอก -pausebuilding = [accent][[{0}][]เพื่อหยุดการสร้างชั่วคราว -resumebuilding = [scarlet][[{0}][]เพื่อสร้างต่อ -wave = [accent]Wave {0} -wave.cap = [accent]Wave {0}/{1} -wave.waiting = [lightgray]Wave ในอีก {0} -wave.waveInProgress = [lightgray]Wave กำลังดำเนินการ +respawn = กด [accent][[{0}][] เพื่อเกิดใหม่ที่แกนกลาง +cancelbuilding = กด [accent][[{0}][] เพื่อเคลียร์แผน +selectschematic = กด [accent][[{0}][] เพื่อเลือกและคัดลอก +pausebuilding = กด [accent][[{0}][] เพื่อหยุดการสร้างชั่วคราว +resumebuilding = กด [scarlet][[{0}][] เพื่อสร้างต่อ +enablebuilding = กด [scarlet][[{0}][] เพื่อเปิดการสร้าง +showui = หน้าต่างถูกซ่อน\nกด [accent][[{0}][] เพื่อเปิดหน้าต่าง +wave = [accent]คลื่นที่ {0} +wave.cap = [accent]คลื่น {0}/{1} +wave.waiting = [lightgray]คลื่นต่อไปใน {0} +wave.waveInProgress = [lightgray]คลื่นกำลังดำเนินการ waiting = [lightgray]กำลังรอ... waiting.players = รอผู้เล่น... -wave.enemies = ศัตรูคงเหลือ [lightgray]{0} -wave.enemy = ศัตรูคงเหลือ [lightgray]{0} -wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. -wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. +wave.enemies = ศัตรูคงเหลือ [lightgray]{0} [accent]ตัว +wave.enemycores = แกนกลางศัตรูเหลือ [accent]{0}[lightgray] แกน +wave.enemycore = [accent]{0}[lightgray] แกนกลางศัตรู +wave.enemy = ศัตรูคงเหลือ [lightgray]{0} [accent]ตัว +wave.guardianwarn = การ์เดียนจะปรากฏตัวในอีก [accent]{0}[] คลื่น! +wave.guardianwarn.one = การ์เดียนจะปรากฏตัวในอีก [accent]{0}[] คลื่น! เตรียมตัวให้พร้อม! loadimage = โหลดรูป saveimage = เซฟรูป unknown = ไม่ทราบ @@ -300,62 +343,62 @@ custom = กำหนดเอง builtin = Built-In map.delete.confirm = คุณแน่ใจหรือว่าจะลบแมพนี้? การกระทำครั้งนี้ไม่สามารถย้อนกลับได้! map.random = [accent]สุ่มแมพ -map.nospawn = แมพนี้ไม่มี core ที่จะให้ผู้เล่นเกิด! กรุณาใส่ core[accent] สีส้ม[] ใน editor -map.nospawn.pvp = แมพนี้ไม่มี core ของศัตรูสำหรับให้ผู้เล่นเกิด! กรุณาใส่ core[scarlet] ที่ไม่ใช่สีส้ม[] ใน editor -map.nospawn.attack = แมพนี้ไม่มี core ของศัตรูสำหรับให้ผู้เล่นโจมตี! กรุณาใส่ core[scarlet] สีแดง[] ใน editor +map.nospawn = แมพนี้ไม่มีแกนกลางให้ผู้เล่นเกิด! กรุณาใส่แกนกลาง[accent]สีเหลือง[] ในตัวแก้ไข +map.nospawn.pvp = แมพนี้ไม่มีแกนกลางของศัตรูสำหรับให้ผู้เล่นเกิด! กรุณาใส่แกนกลาง[scarlet]ที่ไม่ใช่สีส้ม[] ในตัวแก้ไข +map.nospawn.attack = แมพนี้ไม่มีแกนกลางของศัตรูสำหรับให้ผู้เล่นโจมตี! กรุณาใส่แกนกลาง[scarlet]สีแดง[] ในตัวแก้ไข map.invalid = โหลดแมพผิดพลาด: ไฟล์แมพเสียหายหรือไม่ถูกต้อง -workshop.update = อัปเดตไอเท็ม -workshop.error = ผิดพลาดในการนำ workshop มา รายละเอียดดังนี้: {0} +workshop.update = อัพเดตไอเท็ม +workshop.error = ผิดพลาดในการนำเวิร์กช็อปมา รายละเอียดดังนี้: {0} map.publish.confirm = คุณแน่ใจหรือว่าจะเผยแพร่แมพนี้?\n\n[lightgray]คุณต้องแน่ใจก่อนว่าคุณเห็นด้วยกับ Workshop EULA, มิฉนั้นแมพจะไม่ปรากฏ! -workshop.menu = เล์อกว่าจะทำอะไรกับไอเท็มนี้ +workshop.menu = เลือกว่าจะทำอะไรกับไอเท็มนี้ workshop.info = ข้อมูลไอเท็ม changelog = สิ่งที่เปลี่ยนไป (ไม่จำเป็น): eula = Steam EULA -missing = ไอเท็มนี้ถูกลบหรือย้าย\n[lightgray]ยกเลิกการเชื่อมต่อของ workshop listing แล้ว +missing = ไอเท็มนี้ถูกลบหรือย้าย\n[lightgray]ยกเลิกการเชื่อมต่อของหน้ารายการเวิร์กช็อปแล้ว publishing = [accent]กำลังเผยแพร่... -publish.confirm = คุณแน่ใจหรือว่าจะเผยแพร่สิ่งนี้?\n\n[lightgray]คุณต้องแน่ใจก่อนว่าคุณเห็นด้วยกับ Workshop EULA, มิฉนั้นไอเท็มของคุณจะไม่ปรากฏ! +publish.confirm = คุณแน่ใจหรือว่าจะเผยแพร่สิ่งนี้?\n\n[lightgray]คุณต้องแน่ใจก่อนว่าคุณเห็นด้วยกับ Workshop EULA มิฉนั้นไอเท็มของคุณจะไม่ปรากฏ! publish.error = การเผยแพร่ไอเท็มดังต่อไปนี้ผิดพลาด: {0} steam.error = ไม่สามารถเริ่ม Steam service ได้\nError: {0} editor.brush = แปรง -editor.openin = เปิดใน Editor +editor.openin = เปิดในตัวแก้ไข editor.oregen = การเกิดของแร่ editor.oregen.info = การเกิดของแร่: editor.mapinfo = ข้อมูลของแมพ editor.author = ผู้สร้าง: editor.description = คำอธิบาย: editor.nodescription = แมพจำเป็นต้องมีคำอธิบายอย่างน้อย 4 ตัวอักษรจึงจะสามารถเผยแพร่ได้ -editor.waves = Waves: +editor.waves = คลื่น: editor.rules = กฎ: -editor.generation = การเกิด: +editor.generation = เจนเนอเรชั่น: editor.ingame = แก้ไขในเกม -editor.publish.workshop = เผยแพร่บน Workshop +editor.publish.workshop = เผยแพร่บนเวิร์คช็อป editor.newmap = แมพใหม่ editor.center = ศูนย์กลางแมพ -workshop = Workshop -waves.title = Waves +workshop = เวิร์คช็อป +waves.title = คลื่น waves.remove = ลบ -waves.never = <ไม่เคย> waves.every = ทุกๆ -waves.waves = wave(s) -waves.perspawn = ต่อสปาวน์ -waves.shields = เกราะ/wave +waves.waves = คลื่น +waves.perspawn = ต่อการเกิด +waves.shields = เกราะ/คลื่น waves.to = ถึง waves.guardian = การ์เดียน waves.preview = พรีวิว waves.edit = แก้ไข... waves.copy = คัดลอกไปยังคลิปบอร์ด waves.load = โหลดจากคลิปบอร์ด -waves.invalid = waves ในคลิปบอร์ดไม่ถูกต้อง -waves.copied = คัดลอก Waves แล้ว -waves.none = ไม่ได้กำหนดศัตรู\nwave layouts เปล่าจะถูกแทนที่โดย layout ค่าเริ่มต้นของเกม +waves.invalid = แบบคลื่นในคลิปบอร์ดไม่ถูกต้อง +waves.copied = คัดลอกแบบคลื่นแล้ว +waves.none = ไม่ได้กำหนดศัตรู\nแบบคลื่นเปล่าจะถูกแทนที่โดยแบบคลื่นค่าเริ่มต้นของเกม +#these are intentionally in lower case wavemode.counts = จำนวน wavemode.totals = ทั้งหมด -wavemode.health = เลือด +wavemode.health = พลังชีวิต -editor.default = [lightgray]<ค่าเริ่่มต้น> -details = รสยละเอียด... +editor.default = [lightgray]<ค่าเริ่มต้น> +details = รายละเอียด... edit = แก้ไข... editor.name = ชื่อ: editor.spawn = สปาวน์ยูนิต @@ -363,36 +406,36 @@ editor.removeunit = ลบยูนิต editor.teams = ทีม editor.errorload = โหลดไฟล์ผิดพลาด editor.errorsave = เซฟไฟล์ผิดพลาด -editor.errorimage = ไฟล์นั้นคือไฟล์รูป ไม่ใช่แมพ\n\nหากคุณต้องการนำเข้าไฟล์แมพจากเวอร์ชั่น 3.5/build 40 ใช้ปุ่ม 'นำเข้าแมพ Legacy' ใน editor. -editor.errorlegacy = แมพนี้เก่าเกินไปและใช้ฟอร์แม็ตแมพ legacy ที่ไม่สนับสนุนแล้ว +editor.errorimage = ไฟล์นั้นคือไฟล์รูป ไม่ใช่แมพ\n\nหากคุณต้องการนำเข้าไฟล์แมพจากเวอร์ชั่น 3.5/build 40 ใช้ปุ่ม 'นำเข้าแมพรูปแบบเก่า' ในตัวแก้ไขแมพ +editor.errorlegacy = แมพนี้เก่าเกินไปและใช้รูปแบบแมพแบบเก่าที่ไม่สนับสนุนแล้ว editor.errornot = นี่ไม่ใช้ไฟล์แมพ editor.errorheader = ไฟล์แมพนี้เสียหรือไม่ถูกต้อง editor.errorname = แมพไม่มีการกำหนดชื่อ คุณกำลังโหลดไฟล์เซฟอยู่หรือป่าว? -editor.update = อัปเดต +editor.update = อัพเดต editor.randomize = สุ่ม editor.apply = ใช้ -editor.generate = การเกิด +editor.generate = การกำเนิด editor.resize = เปลี่ยนขนาด editor.loadmap = โหลดแมพ editor.savemap = เซฟแมพ editor.saved = เซฟเรียบร้อย! editor.save.noname = แมพของคุณไม่มีชื่อ! สามารถตั้งชื่อได้ในเมนู 'ข้อมูลแมพ' editor.save.overwrite = แมพของคุณไปทับกับแมพ built-in! เปลี่ยนชื่อได้ในเมนู 'ข้อมูลแมพ' -editor.import.exists = [scarlet]ไม่สามารถนำเข้าได้:[] มีแมพ built-in map ชื่อ '{0}' อยู่แล้ว! -editor.import = กำลังนำเข้า... +editor.import.exists = [scarlet]ไม่สามารถนำเข้าได้:[] มีแมพ built-in ที่ชื่อ '{0}' อยู่แล้ว! +editor.import = นำเข้า... editor.importmap = นำเข้าแมพ editor.importmap.description = นำเข้าแมพที่มีอยู่แล้ว editor.importfile = นำเข้าไฟล์ editor.importfile.description = นำเข้าแมพจากไฟล์ภายนอก -editor.importimage = นำเข้าแมพแบบ Legacy +editor.importimage = นำเข้าแมพรูปแบบเก่า editor.importimage.description = นำเข้าแมพจากไฟล์รูปภายนอก -editor.export = กำลังส่งออก... +editor.export = ส่งออก... editor.exportfile = ส่งออกไฟล์ editor.exportfile.description = ส่งออกไฟล์แมพ -editor.exportimage = ส่งออกไฟล์รูป Terrain +editor.exportimage = ส่งออกไฟล์รูปพื้นที่ editor.exportimage.description = ส่งออกไฟล์รูปแมพ -editor.loadimage = นำเข้า Terrain -editor.saveimage = ส่งออก Terrain +editor.loadimage = นำเข้าแบบพื้นที่ +editor.saveimage = ส่งออกแบบพื้นที่ editor.unsaved = [scarlet]คุณมีการเปลี่ยนแปลงที่ยังไม่ได้เซฟ![]\nคุณแน่ใจหรือว่าจะออก? editor.resizemap = เปลี่ยนขนาดของแมพ editor.mapname = ชื่อแมพ: @@ -402,30 +445,31 @@ editor.exists = มีแมพที่มีชื่อนี้อยู่ editor.selectmap = เลือกแมพที่จะโหลด: toolmode.replace = แทนที่ -toolmode.replace.description = วาดเฉพาะบนบล็อคตัน +toolmode.replace.description = วาดเฉพาะบนบล็อกตัน toolmode.replaceall = แทนที่ทั้งหมด -toolmode.replaceall.description = แทนที่บล็อคทั้งหมดในแมพ +toolmode.replaceall.description = แทนที่บล็อกทั้งหมดในแมพ toolmode.orthogonal = มุมฉาก -toolmode.orthogonal.description = วาดเส้นมุมฉากเท่านั้น. +toolmode.orthogonal.description = วาดเส้นมุมฉากเท่านั้น toolmode.square = สี่เหลี่ยม toolmode.square.description = แปรงรูปสี่เหลี่ยม toolmode.eraseores = ลบแร่ toolmode.eraseores.description = ลบเฉพาะแร่เท่านั้น toolmode.fillteams = เติมทีม -toolmode.fillteams.description = เติมทีมแทนที่จะเป็นบล็อค +toolmode.fillteams.description = เติมทีมแทนที่จะเป็นบล็อก toolmode.drawteams = วาดทีม -toolmode.drawteams.description = วาดทีมแทนที่จะเป็นบล็อค +toolmode.drawteams.description = วาดทีมแทนที่จะเป็นบล็อก filters.empty = [lightgray]ไม่มีฟิลเตอร์! เพิ่มด้วยปุ่มด้านล่างนี้ + filter.distort = บิดเบือน filter.noise = นอยส์ -filter.enemyspawn = เบือกที่เกิดศัตรู -filter.spawnpath = Path To Spawn -filter.corespawn = เลือก Core +filter.enemyspawn = เลือกจุดเกิดศัตรู +filter.spawnpath = ทางไปจุดเกิด +filter.corespawn = เลือกแกนกลาง filter.median = เฉลี่ย filter.oremedian = เฉลี่ยแร่ filter.blend = ผสมผสาน -filter.defaultores = แร่พื้นฐาน +filter.defaultores = แร่ค่าเริ่มต้น filter.ore = แร่ filter.rivernoise = นอยส์แม่น้ำ filter.mirror = สะท้อน @@ -433,25 +477,28 @@ filter.clear = เคลียร์ filter.option.ignore = เพิกเฉย filter.scatter = กระจาย filter.terrain = พื้นผิว + filter.option.scale = มาตราส่วน filter.option.chance = โอกาส filter.option.mag = แม็คนิจูต -filter.option.threshold = Threshold +filter.option.threshold = เกณฑ์ filter.option.circle-scale = สเกลวงกลม filter.option.octaves = เลอะเลือน -filter.option.falloff = หลุด +filter.option.falloff = หลุดร่วง filter.option.angle = มุม +filter.option.rotate = หมุน filter.option.amount = จำนวน -filter.option.block = บล็อค +filter.option.block = บล็อก filter.option.floor = พื้น -filter.option.flooronto = พื้น Target -filter.option.target = Target +filter.option.flooronto = พื้นเป้าหมาย +filter.option.target = เป้าหมาย +filter.option.replacement = แทนที่ filter.option.wall = กำแพง filter.option.ore = แร่ -filter.option.floor2 = พื้นชั้น 2 -filter.option.threshold2 = Threshold ชั้น 2 +filter.option.floor2 = พื้นชั้นสอง +filter.option.threshold2 = เกณฑ์ชั้นสอง filter.option.radius = รัศมี -filter.option.percentile = เปอร์เซ็น +filter.option.percentile = เปอร์เซ็นต์ไทล์ width = กว้าง: height = สูง: @@ -462,50 +509,50 @@ load = โหลด save = เซฟ fps = FPS: {0} ping = Ping: {0}ms +tps = TPS: {0} +memory = Mem: {0}mb +memory2 = Mem:\n {0}mb +\n {1}mb language.restart = กรุณารีสตาร์ทเพื่อที่จะให้เกมเปลี่ยนเป็นภาษาที่คุณเลือก settings = ตั้งค่า tutorial = สอนเล่น tutorial.retake = เล่นการสอนเล่นอีกครั้ง -editor = Editor -mapeditor = Editor ของแมพ +editor = ตัวแก้ไขแมพ +mapeditor = แก้ไขแมพ -abandon = ทิ้ง -abandon.text = โซนนี้และทรัพยากรทั้งหมดจะกลายเป็นของศัตรู +abandon = ละทิ้ง +abandon.text = โซนนี้และทรัพยากรทั้งหมดจะถูกยืดไปเป็นของศัตรู locked = ล็อค -complete = [lightgray]สำเร็จ: -requirement.wave = ถึง Wave ที่ {0} ใน {1} -requirement.core = ทำลาย Core ของศัตรูใน {0} -requirement.research = Research {0} -requirement.capture = Capture {0} -bestwave = [lightgray]Wave สูงสุด: {0} -launch.text = ส่ง -research.multiplayer = Only the host can research items. +complete = [lightgray]ต้องมี: +requirement.wave = ถึงคลื่นที่ {0} ใน {1} +requirement.core = ทำลายแกนกลางของศัตรูใน {0} +requirement.research = วิจัย {0} +requirement.produce = ผลิต {0} +requirement.capture = ยึดครอง {0} +launch.text = ลุย! +research.multiplayer = โฮสต์เท่านั้นที่วิจัยได้ +map.multiplayer = โฮสต์เท่านั้นที่สามารถดูเซ็กเตอร์ได้ uncover = เปิดเผย -configure = ตั้งค่า Loadout -loadout = Loadout -resources = ทรัพยากร -bannedblocks = บล็อคต้องห้าม +configure = ตั้งค่าทรัพยากร + +loadout = ทรัพยากรเริ่มต้น +resources = ทรัพยากร +bannedblocks = บล็อกต้องห้าม addall = เพิ่มทั้งหมด -launch.destination = Destination: {0} -configure.invalid = จำนวนต้อยู่ระหว่าง 0 ถึง {0}. -zone.unlocked = [lightgray]{0} ปลดล็อคแล้ว -zone.requirement.complete = ข้อเรียกร้องสำหรับ {0} สำเร็จแล้ว:[lightgray]\n{1} -zone.resources = [lightgray]ทรัพยากรที่พบ: -zone.objective = [lightgray]เป้าหมาย: [accent]{0} -zone.objective.survival = เอาชีวิตรอด -zone.objective.attack = ทำลาย Core ของศัตรู +launch.from = ลงจอดจากเซ็กเตอร์: [accent]{0} +launch.destination = จุดหมายปลายทาง: {0} +configure.invalid = จำนวนต้องอยู่ระหว่าง 0 ถึง {0} add = เพิ่ม... -boss.health = เลือดบอส +guardian = การ์เดียน connectfail = [crimson]การเชื่อมต่อผิดพลาด:\n\n[accent]{0} error.unreachable = เซิฟเวอร์ไม่สามารถเข้าถึงได้\nแน่ใจหรือว่าที่อยู่เขียนถูกต้อง? error.invalidaddress = ที่อยู่ไม่ถูกต้อง error.timedout = Timed out!\nเช็คให้แน่ใจว่า port forwarding ของโฮสต์เปิดอยู่และที่อยู่นั้นถูกต้อง! -error.mismatch = Packet error:\nอาจเกิดจากเวอร์ชั่นของ client/server ไม่ตรงกัน\nเช็คให้แน่ใจว่าเซิฟเวอร์ใช้ Mindustry เวอร์ชั่นล่าสุด! +error.mismatch = Packet error:\nอาจเกิดจากเวอร์ชั่นของ ไคลเอนต์/เซิร์ฟเวอร์ ไม่ตรงกัน\nเช็คให้แน่ใจว่าเซิฟเวอร์ใช้ Mindustry เวอร์ชั่นล่าสุด! error.alreadyconnected = เชื่อมต่ออยู่แล้ว error.mapnotfound = ไม่พบไฟล์แมพ -error.io = Network I/O error. -error.any = Unknown network error. +error.io = Network I/O error +error.any = Error: เครือข่ายที่ไม่รู้จัก error.bloom = ไม่สามารถเริ่มต้น bloom ได้\nอุปกรณ์ของคุณอาจไม่รองรับ weather.rain.name = ฝน @@ -517,106 +564,161 @@ weather.fog.name = หมอก sectors.unexplored = [lightgray]ยังไม่ได้สำรวจ sectors.resources = ทรัพยากร: sectors.production = การผลิต: -sectors.stored = เก็บ: -sectors.resume = ทำต่อ -sectors.launch = ส่ง +sectors.export = การส่งออก: +sectors.time = เวลา: +sectors.threat = ภัยคุกคาม: +sectors.wave = คลื่น: +sectors.stored = คลังไอเท็ม: +sectors.resume = ไปต่อ +sectors.launch = ลงจอด sectors.select = เลือก -sectors.nonelaunch = [lightgray]none (sun) -sectors.rename = Rename Sector -sector.missingresources = [scarlet]สิ่งของทำ core ไม่ครบ +sectors.nonelaunch = [lightgray]ไม่มี (ดวงอาทิตย์) +sectors.rename = เปลี่ยนชื่อเซ็กเตอร์ +sectors.enemybase = [scarlet]ฐานทัพศัตรู +sectors.vulnerable = [scarlet]เสี่ยงภัย +sectors.underattack = [scarlet]เซ็กเตอร์ถูกโจมตี! เสียหาย [accent]{0}% +sectors.survives = [accent]จะอยู่รอดอีก {0} คลื่น +sectors.go = ไป +sector.curcapture = ยึดครองแล้ว +sector.curlost = เราเสียเซ็กเตอร์! +sector.missingresources = [scarlet]ขาดทรัพยากรในการลงจอด +sector.attacked = เซ็กเตอร์ [accent]{0}[white] ถูกโจมตี! +sector.lost = เราเสียเซ็กเตอร์ [accent]{0}[white]! +#note: the missing space in the line below is intentional +sector.captured = เรายึดครองเซ็กเตอร์[accent]{0}[white]ได้แล้ว! +sector.changeicon = เปลี่ยนไอคอน -planet.serpulo.name = Serpulo -planet.sun.name = Sun +threat.low = ต่ำ +threat.medium = กลาง +threat.high = สูง +threat.extreme = ร้ายแรง +threat.eradication = มหาวิบัติ -sector.groundZero.name = Ground Zero -sector.craters.name = The Craters -sector.frozenForest.name = Frozen Forest -sector.ruinousShores.name = Ruinous Shores -sector.stainedMountains.name = Stained Mountains -sector.desolateRift.name = Desolate Rift -sector.nuclearComplex.name = Nuclear Production Complex -sector.overgrowth.name = Overgrowth -sector.tarFields.name = Tar Fields -sector.saltFlats.name = Salt Flats -sector.fungalPass.name = Fungal Pass +planets = ดาวเคราะห์ -sector.groundZero.description = ที่ที่ดีที่สุดในการเริ่มต้นอีกครั้ง. ศัตรูมีน้อย. ทรัพยากรน้อยฃ.\nเก็บตะกั่วและทองแดงให้ได้มากที่สุด.\nแล้วไปต่อ. -sector.frozenForest.description = แม้แต่ที่นี่, ที่ที่อยู่ใกล้ภูเขา, สปอร์ก็ยังแพร่มาถึงที่นี่. อากาศที่เย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป.\n\nเริ่มต้นการใช้ไฟฟ้า. สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้ถ่าน. เรียนรู้ที่จะใช้เครื่องซ่อมแซม. -sector.saltFlats.description = ณ ขอบของทะเลทราย เป็นที่ตั้งของ Salt Flats. สามารถพบทรัพยากรบางอย่างได้ที่นี่.\n\nศัตรูได้ตั้งฐานเก็บทรัพยากรไว้ที่นี่. ทำลาย core ของพวกมัน. อย่าให้มีอะไรเหลือ. -sector.craters.description = น้ำขังอยู่ในหลุมอุกกาบาศนี้, ที่นี้เป็นอนุสรณ์ของสองคราม. ยึดพื้นที่นี่มา. เก็บทราย. เผากระจกเมต้า. ปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและแท่นขุดเจาะ. -sector.ruinousShores.description = ต่อจากของเสียต่างๆ, เป็นที่ตั้งของชายฝั่ง. ครั้งก่อน, ที่นี่เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง. ณ ตอนนี้แทบจะไม่เหลือแล้ว. มีเหลือแค่ระบบการป้องกันพื้นฐาน, ทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก.\nทำการขยายการสำรวจต่อไป. ค้นพบกับเทคโนโลยีอีกครั้ง. -sector.stainedMountains.description = เข้าลึกไปในพื้นที่ จะพบกับภูเขา, ซึ่งยังไม่ถูกสปอร์แตะต้อง.\nขุดไทเทเนียมที่อุดมสมบูรณ์ในพื้นที่นี้. เรียนรู้ที่จะใช้มัน.\n\nมีศัตรูมากขึ้นในบริเวณนี้. อย่าปล่อยให้พวกมันปล่อยยูนิตที่แข็งแกร่งที่สุดของพวกมันออกมา. -sector.overgrowth.description = พื้นที่นี้ถูกปกคลุมไปด้วยพืช, ใกล้กับแหล่งกำเนิของสปอร์.\nศัตรูได้ตั้งฐานเฝ้าระวังไว้ที่นี่. สร้างยูนิตไททัน. ทำลายฐานซะ. แล้วนำสิ่งที่ถูกยึดไปกลับคืนมา. -sector.tarFields.description = ขอบของพื้นที่ผลิตน้ำมัน, อยู่ระหว่างภูเขาและทะเลทราย. หนึ่งในพื้นที่ที่มีแหล่งน้ำมันดิบที่ใช้ได้.\nแม้ว่าจะถูกทิ้งร้าง, พื้นที่นี้ยังคงมีทัพของศัตรูอยู่ใกล้ๆ. อย่าประมาทกับพวกมัน.\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้. -sector.desolateRift.description = เป็นพื้นที่ที่อันตรายมาก. ทรัพยากรมากมาย, แต่พื้นที่น้อย. ความเสี่ยงการโดนทำลายล้างสูง. ออกไปจากที่นี่ให้ไวที่สุด. อย่าถูกหลอกโดนระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ. -sector.nuclearComplex.description = สถานที่ผลิตและแปรรูปทอเรี่ยมเก่า, ถูกทำลายกลายเป็นซาก.\n[lightgray]วิจัยทอเรี่ยมและวิธีการใช้มัน.\n\nศัตรูในบริเวณนี้มีจำนวนมาก, ตรวจตราหาผู้บุกรุกอยู่ตลอดเวลา. -sector.fungalPass.description = พื้นที่ระหว่างพื้นที่สูงและต่ำของภูเขา, พื้นที่นี้เต็มไปด้วยสปอร์. ฐานลาดตระเวนขนาดเล็กของศัตรูตั้งอยู่ที่นี่.\nทำลายมันซะ.\nใช้ยูนิตเด็กเกอร์และครอว์เลอร์. ทำลาย core ทั้งสองซะ. +planet.serpulo.name = เซอร์ปูโล่ +planet.sun.name = ดวงอาทิตย์ + +sector.impact0078.name = อิมแพค 0078 +sector.groundZero.name = กราวน์ ซีโร่ +sector.craters.name = บ่ออุกกาบาต +sector.frozenForest.name = ป่าหนาวแหน็บ +sector.ruinousShores.name = ชายฝั่งพังทลาย +sector.stainedMountains.name = ภูเขาหลากสี +sector.desolateRift.name = เดโซเลต ริฟต์ +sector.nuclearComplex.name = ฐานผลิตนิวเคลียร์ +sector.overgrowth.name = โอเวอร์โกรว์ด +sector.tarFields.name = ทาร์ ฟิลด์ +sector.saltFlats.name = ที่ราบเกลือ +sector.fungalPass.name = ทางผ่านฟังกัล +sector.biomassFacility.name = แหล่งสังเคราะห์ชีวมวล +sector.windsweptIslands.name = หมู่เกาะวินด์สเวปท์ +sector.extractionOutpost.name = ด่านส่งทรัพยากร +sector.planetaryTerminal.name = ท่าปล่อยจรวดอวกาศยาน + +sector.groundZero.description = ที่ที่ดีที่สุดในการเริ่มต้นอีกครั้ง ศัตรูน้อย ทรัพยากรน้อย\nเก็บ[accent]ตะกั่ว[]และ[accent]ทองแดง[]ให้ได้มากที่สุด\nแล้วลุยต่อ +sector.frozenForest.description = แม้แต่ที่นี่ ที่ที่อยู่ใกล้ภูเขา [accent]สปอร์[]ก็ยังแพร่มาถึงที่นี่ อากาศที่เย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป\n\nเริ่มต้นการใช้ไฟฟ้า สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้ เรียนรู้ที่จะใช้เครื่องซ่อมแซม +sector.saltFlats.description = ณ ขอบของทะเลทราย เป็นที่ตั้งของที่ราบเกลือ สามารถพบทรัพยากรบางอย่างได้ที่นี่\n\nศัตรูได้ตั้งฐานเก็บทรัพยากรไว้ที่นี่ ทำลายแกนกลางของพวกมัน อย่าให้มีอะไรเหลือ +sector.craters.description = น้ำขังอยู่ในหลุมอุกกาบาศแห่งนี้ อนุสรณ์สถานของสงครามเก่าแก่ ยึดพื้นที่นี่มา เก็บทราย เผา[accent]กระจกเมต้า[] ปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและเครื่องขุดเจาะ +sector.ruinousShores.description = ถัดจากทะเลทราย เป็นที่ตั้งของชายฝั่ง ที่ครั้งก่อน เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง ซึ่งทุกทำลายไปซะส่วนใหญ่แล้ว มีเหลือแค่ระบบการป้องกันพื้นฐาน ทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก\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 = เป็นพื้นที่ที่อันตรายมาก ทรัพยากรมากมาย แต่พื้นที่แคบ ความเสี่ยงการโดนทำลายล้างสูง ออกไปจากที่นี่ให้เร็วที่สุด อย่าถูกหลอกโดยระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ +sector.nuclearComplex.description = สถานที่ผลิตและแปรรูปทอเรี่ยมเก่า ถูกทำลายไม่เหลือสิ้น\nวิจัยทอเรี่ยมและวิธีการใช้มัน\n\nศัตรูในบริเวณนี้มีจำนวนมาก คอยตรวจตราหาผู้บุกรุกอยู่ตลอดเวลา +sector.fungalPass.description = ทางผ่านระหว่างพื้นที่สูงและต่ำของภูเขา พื้นที่นี้เต็มไปด้วยสปอร์ ฐานลาดตระเวนขนาดเล็กของศัตรูตั้งอยู่ที่นี่\nทำลายมันซะ\nผลิตยูนิตแด็กเกอร์และครอว์เลอร์ ทำลายแกนกลางทั้งสองไม่ให้เหลือซาก +sector.biomassFacility.description = แหล่งต้นกำเนิดของสปอร์ ที่นี่คือฐานวิจัยและผลิตสปอร์เริ่มแรก\nวิจัยเทคโนโลยีที่อยู่ภายในนั้น เพาะชำ[accent]สปอร์[]เพื่อเป็นเชื้อเพลิงและใช้ในการผลิตพลาสติก\n\n[gray]เมื่อสถานที่นี้ถูกทิ้งร้าง สปอร์ก็ถูกปล่อยออกมา ไม่มีสิ่งใดในระบบนิเวศท้องถิ่นที่สามารถแข่งขันกับสิ่งมีชีวิตที่\nแพร่กระจายเช่นนี้ได้ +sector.windsweptIslands.description = เลยแนวชายฝั่งไปเป็นหมู่เกาะที่ตั้งอยู่ห่างไกล เคยมีบันทึกว่าที่นี่มีโรงงานผลิต[accent]พลาสตาเนี่ยม[]อยู่\n\nทำลายเรือศัตรู สร้างฐานทัพบนเกาะ วิจัยโรงงานพวกนี้ +sector.extractionOutpost.description = ด่านที่อยู่ห่างไกล สร้างโดยศัตรูเพื่อใช้ในการส่งทรัพยากรไปยังฐานทัพอื่น\n\nเทคโนโลยีการส่งไอเท็มข้ามเซ็กเตอร์เป็นสิ่งจำเป็นสำหรับการพิชิตถัดๆ ไป ทำลายด่าน วิจัยฐานส่งของ +sector.impact0078.description = นี่คือเศษซากของเรือขนส่งระหว่างดวงดาวที่เคยเข้ามายังระบบนี้\nเศษเหล็กและหิมะปกคลุมทั่วทั้งพื้นที่\n\nกอบกู้ซากยานให้ได้มากที่สุด วิจัยเทคโนโลยีทั้งหมดที่ยังเหลือรอด\n\n\n[gray]อย่าประมาทกับฐานทัพศัตรูที่อยู่ใกล้ๆ โดยอันขาด\nศัตรูจะส่งกองกำลังมาโจมตีเรื่อยๆ จนกว่าคุณจะพ่ายแพ้ +sector.planetaryTerminal.description = เป้าหมายสุดท้าย\n\nฐานทัพติดชายหาดนี้มีสิ่งประดิษฐ์ที่สามารถส่งแกนกลางไปยังดาวที่อยู่ใกล้ๆ ได้ ฐานทัพมีการป้องกันที่แน่นหนามาก\n\nผลิตยูนิตเรือ กวาดล้างศัตรูให้เร็วที่สุด วิจัยสิ่งประดิษฐ์นั่น + +status.burning.name = เผาไหม้ +status.freezing.name = แช่แข็ง +status.wet.name = เปียก +status.muddy.name = เปื้อนเปรอะ +status.melting.name = หลอมเหลว +status.sapped.name = อ่อนกำลัง +status.electrified.name = ช็อตไฟฟ้า +status.spore-slowed.name = สปอร์สโลว์ +status.tarred.name = เปื้อนน้ำมัน +status.overclock.name = โอเวอร์คล็อก +status.shocked.name = ช็อก +status.blasted.name = ระเบิด +status.unmoving.name = หยุดนิ่ง settings.language = ภาษา settings.data = ข้อมูลเกม settings.reset = รีเซ็ตเป็นค่าเริ่มต้น settings.rebind = แก้ไขปุ่ม -settings.resetKey = Reset +settings.resetKey = รีเซ็ต settings.controls = การควบคุม settings.game = เกม settings.sound = เสียง -settings.graphics = กราฟิก +settings.graphics = กราฟฟิค settings.cleardata = เคลียร์ข้อมูลเกม... settings.clear.confirm = คุณแน่ใจหรือว่าจะเคลียร์ข้อมูลเกม?\nสิ่งที่ทำไปแล้วจะไม่สามารถย้อนกลับได้! -settings.clearall.confirm = [scarlet]คำเตือน![]\nการกระทำนี้จะลบข้อมูลทั้งหมด นั้นรวมไปถึงเซฟ, แมพ, สิ่งที่ปลดล็อคแล้วและ keybinds.\nเมื่อคุณกด 'โอเค' เกมจะลบข้อมูลทุกอย่างและออกโดยอัตโนมัติ +settings.clearall.confirm = [scarlet]คำเตือน![]\nการกระทำนี้จะลบข้อมูลทั้งหมด นั้นรวมไปถึงเซฟ แมพ การวิจัยแล้วและก็ปุ่มควบตุม\nเมื่อคุณกด 'โอเค' เกมจะลบข้อมูลทุกอย่างและออกโดยอัตโนมัติ settings.clearsaves.confirm = คุณแน่ใจหรือว่าคุณต้องการเคลียร์เซฟทั้งหมด? settings.clearsaves = เคลียร์เซฟ -settings.clearresearch = ลบการ Research -settings.clearresearch.confirm = แน่ใจที่จะลบการ Research หรือไม่? -settings.clearcampaignsaves = ลบเซฟ Campaign -settings.clearcampaignsaves.confirm = แน่ใจที่จะลบเซฟ Campaign หรือไม่? +settings.clearresearch = เคลียร์การวิจัย +settings.clearresearch.confirm = แน่ใจที่จะเคลียร์การวิจัยหรือไม่? +settings.clearcampaignsaves = ลบเซฟแคมเปญ +settings.clearcampaignsaves.confirm = แน่ใจว่าจะลบเซฟแคมเปญหรือไม่? paused = [accent]< หยุดชั่วคราว > clear = เคลียร์ banned = [scarlet]แบน -unplaceable.sectorcaptured = [scarlet]ต้องการ captured sector -yes = ใช่ -no = ไม่ +unsupported.environment = [scarlet]ไม่รองรับในสภาพแวดล้อมนี้ +yes = ได้ +no = ไม่ได้ info.title = ข้อมูล error.title = [crimson]มีบางอย่างผิดพลาดเกิดขึ้น error.crashtitle = มีบางอย่างผิดพลาดเกิดขึ้น -unit.nobuild = [scarlet]ยูนิตไม่สามารถสร้างได้ +unit.nobuild = [scarlet]ยูนิตนี้ไม่สามารถสร้างได้ lastaccessed = [lightgray]:คนที่แตะเป็นคนสุดท้าย {0} block.unknown = [lightgray]??? -stat.input = นำเข้า +stat.showinmap = <โหลดแมพเพื่อแสดง> +stat.description = วัตถุประสงค์ +stat.input = ต้องการ stat.output = ส่งออก stat.booster = บูสเตอร์ -stat.tiles = ต้องการ Tiles -stat.affinities = affinities +stat.tiles = ช่องที่ต้องการ +stat.affinities = ความสัมพันธ์ +stat.opposites = ตรงข้าม stat.powercapacity = ความจุพลังงาน stat.powershot = หน่วยพลังงาน/นัด stat.damage = ดาเมจ -stat.targetsair = ยิงอากาศยาน -stat.targetsground = ยิงภาคพื้นดิน -stat.itemsmoved = ความเร็วเคลื่อนที่ +stat.targetsair = ยิงอากาศ +stat.targetsground = ยิงพื้นดิน +stat.itemsmoved = ความเร็วการเคลื่อนย้าย stat.launchtime = เวลาระหว่างการส่ง stat.shootrange = ระยะยิง stat.size = ขนาด -stat.displaysize = ขนาดที่โชว์ -stat.liquidcapacity = จุของเหลว +stat.displaysize = ขนาดที่แสดง +stat.liquidcapacity = ความจุของเหลว stat.powerrange = ระยะพลังงาน stat.linkrange = ระยะการเชื่อมต่อ -stat.instructions = คำแนะนำ +stat.instructions = ความเร็วคำสั่ง stat.powerconnections = จำนวนการเชื่อมต่อสูงสุด stat.poweruse = ใช้พลังงาน stat.powerdamage = หน่วยพลังงาน/ดาเมจ -stat.itemcapacity = จุไอเท็ม +stat.itemcapacity = ความจุไอเท็ม stat.memorycapacity = ความจุหน่วยความจำ -stat.basepowergeneration = กำเนิดพลังงานพื้นฐาน -stat.productiontime = เวลาที่ใช้ในการผลิต -stat.repairtime = เวลาที่ใช้ในการซ่อมแซมให้สมบูรณ์ +stat.basepowergeneration = ผลิตพลังงานโดยเฉลี่ย +stat.productiontime = เวลาในการผลิต +stat.repairtime = เวลาในการซ่อมบล็อกให้เสร็จ +stat.repairspeed = ความเร็วการซ่อม +stat.weapons = อาวุธ +stat.bullet = กระสุน stat.speedincrease = เพิ่มความเร็ว stat.range = ระยะ -stat.drilltier = ขุดได้ -stat.drillspeed = ความเร็วขุดพื้นฐาน +stat.drilltier = แร่ที่ขุดได้ +stat.drillspeed = ความเร็วการขุดเฉลี่ย stat.boosteffect = แอฟเฟ็คของบูสต์ stat.maxunits = จำนวนยูนิตสูงสุด -stat.health = เลือด +stat.armor = เกราะ +stat.health = พลังชีวิต stat.buildtime = เวลาในการสร้าง stat.maxconsecutive = ติดต่อกันสูงสุด stat.buildcost = ใช้ @@ -624,111 +726,131 @@ stat.inaccuracy = ความคลาดเคลื่อน stat.shots = นัด stat.reload = นัด/วินาที stat.ammo = กระสุน -stat.shieldhealth = เลือดของเกราะ -stat.cooldowntime = เวลา Cooldown -stat.explosiveness = ความแรงของระเบิด -stat.basedeflectchance = โอกาสกระสุนกระเด็นกลับ +stat.shieldhealth = พลังชีวิตโล่ +stat.cooldowntime = เวลาคูลดาวน์ +stat.explosiveness = แรงระเบิด +stat.basedeflectchance = โอกาสกระสุนสะท้อนกลับ stat.lightningchance = โอกาสที่จะเกิดสายฟ้า stat.lightningdamage = ความแรงของสายฟ้า stat.flammability = ความไวไฟ -stat.radioactivity = ความแรงของรังสี +stat.radioactivity = กัมมันตภาพรังสี +stat.charge = ชาร์จ stat.heatcapacity = ความจุความร้อน -stat.viscosity = Viscosity +stat.viscosity = ความหนืด stat.temperature = อุณหภูมิ -stat.speed = ความไว -stat.buildspeed = ความไวในการก่อสร้าง -stat.minespeed = ความไวในการขุด -stat.minetier = ความแรงของเลเซอร์ขุด -stat.payloadcapacity = ความจุการขนของ -stat.commandlimit = จำนวน Unit ที่สามารถสูงสุด +stat.speed = ความเร็ว +stat.buildspeed = ความเร็วการสร้าง +stat.minespeed = ความเร็วการขุด +stat.minetier = แร่ที่ขุดได้ +stat.payloadcapacity = ความจุสิ่งบรรทุก +stat.commandlimit = จำนวนยูนิตที่สั่งการได้สูงสุด stat.abilities = ทักษะ +stat.canboost = สามารถบูสต์ +stat.flying = บินได้ +stat.ammouse = ใช้กระสุน +stat.damagemultiplier = พหุคูณดาเมจ +stat.healthmultiplier = พหุคูณพลังชีวิต +stat.speedmultiplier = พหุคูณความเร็ว +stat.reloadmultiplier = พหุคูณการรีโหลด +stat.buildspeedmultiplier = พหุคูณความเร็วการสร้าง +stat.reactive = ปฏิกิริยา +stat.healing = การรักษา -ability.forcefield = สนามพลัง -ability.repairfield = รักษา Unit รอบข้าง -ability.statusfield = บัฟ Unit รอบข้าง -ability.unitspawn = โรงงานทำ {0} -ability.shieldregenfield = บัฟโล่รอบข้าง +ability.forcefield = โล่พลังงาน +ability.repairfield = สนามซ่อมแซม +ability.statusfield = สนามเอฟเฟกต์ {0} +ability.unitspawn = โรงงาน{0} +ability.shieldregenfield = สนามรักษาโล่ +ability.movelightning = ปล่อยสายฟ้าเมื่อเคลื่อนที่ +ability.energyfield = สนามพลังงาน: [accent]{0}[] ดาเมจ ~ [accent]{1}[] บล็อก / [accent]{2}[] เป้าหมาย -bar.drilltierreq = จำเป็นต้องใช้เครื่องขุดที่ดีกว่า -bar.noresources = ทรัพยากรหาย -bar.corereq = ฐาน Core ที่ต้องการ -bar.drillspeed = ความเร็วขุด: {0}/s -bar.pumpspeed = ความเร็วปั้ม: {0}/s +bar.drilltierreq = ต้องมีเครื่องขุดที่ดีกว่านี้ +bar.noresources = ขาดทรัพยากร +bar.corereq = ต้องวางบนแกนกลาง +bar.drillspeed = ความเร็วการขุด: {0}/วิ +bar.pumpspeed = ความเร็วการปั้ม: {0}/วิ bar.efficiency = ประสิทธิภาพ: {0}% -bar.powerbalance = พลังงาน: {0}/s +bar.boost = เปอร์เซ็นการเร่ง: {0}% +bar.powerbalance = พลังงาน: {0}/วิ bar.powerstored = เก็บแล้ว: {0}/{1} bar.poweramount = พลังงาน: {0} bar.poweroutput = พลังงานออก: {0} -bar.powerlines = Connections: {0}/{1} +bar.powerlines = การเชื่อมต่อ: {0}/{1} bar.items = ไอเท็ม: {0} bar.capacity = ความจุ: {0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[ยูนิตถูกปิด] bar.liquid = ของเหลว bar.heat = ความร้อน bar.power = พลังงาน -bar.progress = ความคืบหน้าในการสร้าง -bar.input = นำเข้า -bar.output = ส่งออก +bar.progress = ความคืบหน้า +bar.input = ด้านเข้า +bar.output = ด้านออก +bar.strength = [lightgray]ความแรง [stat]{0}[lightgray]x -units.processorcontrol = [lightgray]ถูก Processor ควบคุม +units.processorcontrol = [lightgray]ถูกตัวประมวลผลควบคุมอยู่ bullet.damage = [stat]{0}[lightgray] ดาเมจ bullet.splashdamage = [stat]{0}[lightgray] ดาเมจกระจาย ~[stat] {1}[lightgray] ช่อง bullet.incendiary = [stat]ติดไฟ -bullet.homing = [stat]ติดตาม -bullet.shock = [stat]ช็อค -bullet.frag = [stat]แตกออก +bullet.homing = [stat]ติดตามตัว +bullet.frag = [stat]กระจาย +bullet.lightning = [stat]{0}[lightgray]x สายฟ้า ~ [stat]{1}[lightgray] ดาเมจ +bullet.buildingdamage = [lightgray]ดาเมจต่อสิ่งก่อสร้าง [stat]{0}%[lightgray] bullet.knockback = [stat]{0}[lightgray] ดันกลับ -bullet.pierce = [stat]{0}[lightgray]x ทะลุ -bullet.infinitepierce = [stat]ทะลุ -bullet.freezing = [stat]แช่แข็ง -bullet.tarred = [stat]เปื้อนน้ำมัน -bullet.multiplier = [stat]{0}[lightgray]x จำนวนกระสุนต่อ 1 ไอเท็ม -bullet.reload = [stat]{0}[lightgray]x ความเร็วยิง +bullet.pierce = [lightgray]เจาะทะลุ [stat]{0}[lightgray]x +bullet.infinitepierce = [stat]เจาะทะลุ +bullet.healpercent = [lightgray]เปอร์เซ็นการรักษา: [stat]{0}[lightgray]% +bullet.multiplier = [lightgray]จำนวนกระสุนต่อไอเท็ม [stat]{0}[lightgray]x +bullet.reload = [lightgray]ความเร็วการยิง: [stat]{0}[lightgray]x -unit.blocks = บล็อค -unit.blockssquared = blocks² -unit.powersecond = หน่วยพลังงาน/วินาที -unit.liquidsecond = หน่วยของเหลว/วินาที +unit.blocks = บล็อก +unit.blockssquared = บล็อก² +unit.powersecond = หน่วย/วินาที +unit.liquidsecond = หน่วย/วินาที unit.itemssecond = ไอเท็ม/วินาที unit.liquidunits = หน่วยของเหลว unit.powerunits = หน่วยพลังงาน unit.degrees = องศา unit.seconds = วินาที unit.minutes = นาที -unit.persecond = /วินาที -unit.perminute = /ต่อนาที -unit.timesspeed = เท่าเร็วขึ้น +unit.persecond = /วิ +unit.perminute = /นาที +unit.timesspeed = x เร็วขึ้น unit.percent = % -unit.shieldhealth = เลือดเกราะ +unit.shieldhealth = พลังชีวิตโล่ unit.items = ไอเท็ม -unit.thousands = พัน -unit.millions = ล้าน -unit.billions = พันล้าน +unit.thousands = k +unit.millions = [] []ล้าน +unit.billions = [] []พันล้าน +unit.pershot = [] []กระสุน/การยิง +category.purpose = วัตถุประสงค์ category.general = ทั่วไป category.power = พลังงาน category.liquids = ของเหลว category.items = ไอเท็ม -category.crafting = นำเข้า/ส่งออก -category.function = Function -category.optional = การเพิ่มประสิทธิภาพทางเลือก -setting.landscape.name = ล็อค Landscape แนวนอน +category.crafting = การผลิต +category.function = ฟังค์ชั่น +category.optional = ทางเลือกการเพิ่มประสิทธิภาพ +setting.landscape.name = ล็อคภูมิทัศน์แนวนอน setting.shadows.name = เงา -setting.blockreplace.name = แนะนำบล็อคโดยอัตโนมัติ +setting.blockreplace.name = แนะนำบล็อกโดยอัตโนมัติ setting.linear.name = การกรองเชิงเส้น setting.hints.name = คำแนะนำ -setting.flow.name = แสดงอัตราการไหลของทรัพยากร[scarlet] (รุ่นทดลอง) +setting.logichints.name = คำแนะนำลอจิก +setting.flow.name = แสดงอัตราการไหลของทรัพยากร +setting.backgroundpause.name = หยุดในพื้นหลัง setting.buildautopause.name = หยุดสร้างชั่วคราวแบบอัตโนมัติ -setting.animatedwater.name = แอนิเมชั่นน้ำ +setting.doubletapmine.name = แตะสองครั้งเพื่อขุด +setting.modcrashdisable.name = ปิดม็อดเมื่อเกมขัดข้อง +setting.animatedwater.name = แอนิเมชั่นพื้นและน้ำ setting.animatedshields.name = แอนิเมชั่นเกราะ setting.antialias.name = Antialias[lightgray] (จำเป็นต้องรีสตาร์ท)[] setting.playerindicators.name = ตัวบอกผู้เล่น setting.indicators.name = ตัวบอกศัตรู/พักพวก setting.autotarget.name = เล็งเป้าอัตโนมัติ -setting.keyboard.name = การควบคุมแบบ เม้าส์+คีย์บอร์ด +setting.keyboard.name = การควบคุมแบบเม้าส์ + คีย์บอร์ด setting.touchscreen.name = การควบคุมแบบหน้าจอสัมผัส -setting.fpscap.name = FPS +setting.fpscap.name = FPS สูงสุด setting.fpscap.none = ∞ setting.fpscap.text = {0} FPS setting.uiscale.name = ขนาด UI[lightgray] (จำเป็นต้องรีสตาร์ท)[] @@ -741,25 +863,24 @@ setting.difficulty.insane = ยากมาก setting.difficulty.name = ระดับความยาก: setting.screenshake.name = การสั่นของจอ setting.effects.name = แสดงเอฟเฟ็ค -setting.destroyedblocks.name = แสดงบล็อคที่ถูกทำลาย -setting.blockstatus.name = แสดงสเตตัสของบล็อค -setting.conveyorpathfinding.name = Pathfinding -setting.sensitivity.name = ความไวของตัวควบคุม -setting.saveinterval.name = ระยะห่าวระหว่างเซฟ +setting.destroyedblocks.name = แสดงบล็อกที่ถูกทำลาย +setting.blockstatus.name = แสดงสเตตัสของบล็อก +setting.conveyorpathfinding.name = ตรวจสอบเส้นทางการวางอัจฉริยะ +setting.sensitivity.name = ความเร็วของตัวควบคุม +setting.saveinterval.name = ระยะห่างระหว่างการเซฟ setting.seconds = {0} วินาที -setting.blockselecttimeout.name = การหมดเวลาในการเลือกบล็อค setting.milliseconds = {0} มิลลิวินาที setting.fullscreen.name = เต็มจอ setting.borderlesswindow.name = วินโดว์แบบไร้ขอบ[lightgray] (อาจจะต้องรีตาร์ท) setting.fps.name = แสดง FPS และ Ping -setting.smoothcamera.name = กล้องแบบสมูท +setting.smoothcamera.name = กล้องแบบลื่นไหล setting.vsync.name = VSync -setting.pixelate.name = Pixelate[lightgray] (ปิดใช้งานแอนิเมชั่น) +setting.pixelate.name = ภาพพิกเซล[lightgray] (ปิดใช้งานแอนิเมชั่น) setting.minimap.name = แสดงมินิแมพ -setting.coreitems.name = แสดงไอเท็มใน Core (ยังไม่เสร็จสมบูรณ์) +setting.coreitems.name = แสดงไอเท็มในแกนกลาง setting.position.name = แสดงตำแหน่งของผู้เล่น setting.musicvol.name = ระดับเสียงเพลง -setting.atmosphere.name = แสดงชั้นบรรยากาศของดาวเคราะห์ +setting.atmosphere.name = แสดงชั้นบรรยากาศของดาว setting.ambientvol.name = ระดับเสียงล้อมรอบ setting.mutemusic.name = ปิดเพลง setting.sfxvol.name = ระดับเสียง SFX @@ -767,120 +888,131 @@ setting.mutesound.name = ปิดเสียง setting.crashreport.name = ส่งรายงานการแครชแบบไม่ระบุตัวตน setting.savecreate.name = สร้างเซฟโดยอัตโนมัติ setting.publichost.name = การมองเห็นเซิฟเวอร์สาธารณะ -setting.playerlimit.name = จัดกัดผู้เล่น +setting.playerlimit.name = จำกัดผู้เล่น setting.chatopacity.name = ความโปร่งแสงของแชท setting.lasersopacity.name = ความโปร่งแสงของเลเซอร์พลังงาน setting.bridgeopacity.name = ความโปร่งแสงของสะพาน setting.playerchat.name = แสดงบับเบิ้ลแชทของผู้เล่น -public.confirm = คุณต้องการให้เกมของคุณเปิดเป็นสาธารณะหรือไม่?\n[accent]ทุกคนจะสามารถเข้าร่วมเกมของคุณได้.\n[lightgray]คุณสามารถเปลี่ยนการตั้งค่านี้ได้ที่ ตั้งค่า->เกม->การมองเห็นเซิฟเวอร์สาธารณะ. +setting.showweather.name = แสดงแกรฟฟิกสภาพอากาศ +public.confirm = คุณต้องการให้เกมของคุณเปิดเป็นสาธารณะหรือไม่?\n[accent]ทุกคนจะสามารถเข้าร่วมเกมของคุณได้\n[lightgray]คุณสามารถเปลี่ยนการตั้งค่านี้ได้ที่ ตั้งค่า->เกม->การมองเห็นเซิฟเวอร์สาธารณะ +public.confirm.really = หากคุณอยากเล่นกับเล่นกับเพื่อน ใช้ [green]Invite Friend[] ดีกว่า แทนที่จะใช้ [scarlet]Public server[]!\nคุณแน่ใจนะว่าจะเปลี่ยนเกมคุณเป็น[scarlet]สาธารณะ[]? public.beta = เกมเวอร์ชั่นเบต้าไม่สามารถเปิดเซิฟเวอร์สาธารณะได้ -uiscale.reset = ขนาดของ UI มีการเปลี่ยนแปลง\nกด "โอเค" เพื่อยืนยันขนาดนี้.\n[scarlet]เปลี่ยนกลับไปเป็นแบบเดิมและออกในอีก[accent] {0}[] วินาที... +uiscale.reset = ขนาดของ UI มีการเปลี่ยนแปลง\nกด "โอเค" เพื่อยืนยันขนาด UI นี้\n[scarlet]เปลี่ยนกลับไปเป็นแบบเดิมและออกในอีก[accent] {0}[] วินาที... uiscale.cancel = ยกเลิกและออก setting.bloom.name = Bloom keybind.title = ตั้งค่าปุ่ม -keybinds.mobile = [scarlet]การตั้งค่าปุ่มส่วนใหญ่ไม่สามารถใช้ในมือถือได้. เฉพาะการเคลื่อนไหวพื้นฐานเท่านั้นที่ใช้ได้. +keybinds.mobile = [scarlet]การตั้งค่าปุ่มส่วนใหญ่ไม่สามารถใช้ในมือถือได้ เฉพาะการเคลื่อนไหวพื้นฐานเท่านั้นที่ใช้ได้ category.general.name = ทั่วไป -category.view.name = วิว -category.multiplayer.name = ผู้เล่นหลายคน -category.blocks.name = เลือกบล็อค +category.view.name = การมองเห็น +category.multiplayer.name = โหมดผู้เล่นหลายคน +category.blocks.name = เลือกบล็อก command.attack = โจมตี -command.rally = ชุมนุม +command.rally = รวมตัว command.retreat = ถอยกลับ command.idle = อยู่เฉยๆ -placement.blockselectkeys = \n[lightgray]Key: [{0}, +placement.blockselectkeys = \n[lightgray]ปุ่ม: [{0}, keybind.respawn.name = เกิดใหม่ keybind.control.name = ควบคุมยูนิต -keybind.clear_building.name = เคลียร์สิ่งก็สร้าง +keybind.clear_building.name = เคลียร์สิ่งก่อสร้าง keybind.press = กดปุ่มใดก็ได้... keybind.press.axis = กดแกนหรือปุ่มใดก็ได้... -keybind.screenshot.name = แมพ Screenshot +keybind.screenshot.name = ถ่ายรูปแมพ keybind.toggle_power_lines.name = เปิดปิดเลเซอร์พลังงาน -keybind.toggle_block_status.name = เปิดปิดสถานะของบล็อค +keybind.toggle_block_status.name = เปิดปิดสถานะของบล็อก keybind.move_x.name = เคลื่อนที่ในแกน x keybind.move_y.name = เคลี่อนที่ในแกน y keybind.mouse_move.name = ตามเม้าส์ keybind.pan.name = แพนวิว keybind.boost.name = บูสต์ -keybind.schematic_select.name = เลือกภูมิภาค -keybind.schematic_menu.name = เมนู Schematic -keybind.schematic_flip_x.name = กลับแผนผังแกน X -keybind.schematic_flip_y.name = กลับแผนผังแกน Y +keybind.schematic_select.name = เลือกพื้นที่ +keybind.schematic_menu.name = เมนูแผนผัง +keybind.schematic_flip_x.name = กลับด้านแผนผังแกน X +keybind.schematic_flip_y.name = กลับด้านแผนผังแกน Y keybind.category_prev.name = หมวดหมู่ก่อนหน้า keybind.category_next.name = หมวดหมู่ถ้ดไป -keybind.block_select_left.name = เลือกบล็อค ซ้าย -keybind.block_select_right.name = เลือกบล็อค ขวา -keybind.block_select_up.name = เลือกบล็อค ขึ้น -keybind.block_select_down.name = เลือกบล็อค ลง -keybind.block_select_01.name = หมวดหมู่/เลือกบล็อค 1 -keybind.block_select_02.name = หมวดหมู่/เลือกบล็อค 2 -keybind.block_select_03.name = หมวดหมู่/เลือกบล็อค 3 -keybind.block_select_04.name = หมวดหมู่/เลือกบล็อค 4 -keybind.block_select_05.name = หมวดหมู่/เลือกบล็อค 5 -keybind.block_select_06.name = หมวดหมู่/เลือกบล็อค 6 -keybind.block_select_07.name = หมวดหมู่/เลือกบล็อค 7 -keybind.block_select_08.name = หมวดหมู่/เลือกบล็อค 8 -keybind.block_select_09.name = หมวดหมู่/เลือกบล็อค 9 -keybind.block_select_10.name = หมวดหมู่/เลือกบล็อค 10 +keybind.block_select_left.name = เลือกบล็อก ซ้าย +keybind.block_select_right.name = เลือกบล็อก ขวา +keybind.block_select_up.name = เลือกบล็อก ขึ้น +keybind.block_select_down.name = เลือกบล็อก ลง +keybind.block_select_01.name = หมวดหมู่/เลือกบล็อก 1 +keybind.block_select_02.name = หมวดหมู่/เลือกบล็อก 2 +keybind.block_select_03.name = หมวดหมู่/เลือกบล็อก 3 +keybind.block_select_04.name = หมวดหมู่/เลือกบล็อก 4 +keybind.block_select_05.name = หมวดหมู่/เลือกบล็อก 5 +keybind.block_select_06.name = หมวดหมู่/เลือกบล็อก 6 +keybind.block_select_07.name = หมวดหมู่/เลือกบล็อก 7 +keybind.block_select_08.name = หมวดหมู่/เลือกบล็อก 8 +keybind.block_select_09.name = หมวดหมู่/เลือกบล็อก 9 +keybind.block_select_10.name = หมวดหมู่/เลือกบล็อก 10 keybind.fullscreen.name = เปิด/ปิด เต็มจอ keybind.select.name = เลือก/ยิง keybind.diagonal_placement.name = วางเป็นแนวทแยง -keybind.pick.name = เลือกบล็อค -keybind.break_block.name = ทุบบล็อค -keybind.deselect.name = ยกเลิกการเบือก +keybind.pick.name = เลือกบล็อก +keybind.break_block.name = ทุบบล็อก +keybind.deselect.name = ยกเลิกการเลือก keybind.pickupCargo.name = ยกของขึ้น keybind.dropCargo.name = วางของลง -keybind.command.name = คำสั่ง +keybind.command.name = สั่งการ keybind.shoot.name = ยิง keybind.zoom.name = ซูม keybind.menu.name = เมนู keybind.pause.name = หยุดชั่วคราว keybind.pause_building.name = หยุด/สร้างต่อ -keybind.minimap.name = มินิแมะ +keybind.minimap.name = มินิแมพ +keybind.planet_map.name = แผนที่ดาวเคราะห์ +keybind.research.name = การวิจัย +keybind.block_info.name = ข้อมูลบล็อก keybind.chat.name = แชท keybind.player_list.name = รายชื่อผู้เล่น -keybind.console.name = คอนโซล์ +keybind.console.name = คอนโซล keybind.rotate.name = หมุน keybind.rotateplaced.name = หมุนที่มีอยู่ (กดค้าง) keybind.toggle_menus.name = เปิด/ปิด เมนู keybind.chat_history_prev.name = ประวัติแชทก่อนหน้า keybind.chat_history_next.name = ประวัติแชทถัดไป keybind.chat_scroll.name = เลื่อนแชท +keybind.chat_mode.name = เปลี่ยนโหมดแชท keybind.drop_unit.name = ดรอปยูนิต keybind.zoom_minimap.name = ซูมมินิแมพ mode.help.title = คำอธิบายโหมด mode.survival.name = เอาชีวิตรอด -mode.survival.description = โหมดปกติ. ทรัพยากรมีจำกัดและ wave มาโดยอัตโนมัติ.\n[gray]ต้องมีสปาวน์ของศัตรูเพื่อที่จะเล่น. +mode.survival.description = โหมดปกติ ทรัพยากรมีจำกัดและคลื่นมาโดยอัตโนมัติ\n[gray]ต้องมีจุดเกิดของศัตรูเพื่อที่จะเล่น mode.sandbox.name = โหมดอิสระ -mode.sandbox.description = ทรัพยาดรไม่จำกัดและ wave ไม่จับเวลา. -mode.editor.name = Editor +mode.sandbox.description = ทรัพยากรไม่จำกัดและคลื่นไม่จับเวลา +mode.editor.name = ตัวแก้ไข mode.pvp.name = PvP -mode.pvp.description = สู้กับผู้เล่นอื่น.\n[gray]แมพจำเป็นต้องมี 2 core ที่ไม่ใช่สีเดียวกัน. +mode.pvp.description = สู้กับผู้เล่นอื่น\n[gray]แมพจำเป็นต้องมีแกนกลางสองแกนที่ไม่ใช่สีเดียวกัน mode.attack.name = โจมตี -mode.attack.description = ทำลายฐานของศัตรู ไม่มี wave.\n[gray]จำเป็นต้องมี core สีแดงเพื่อเล่น. +mode.attack.description = ทำลายฐานของศัตรู \n[gray]จำเป็นต้องมีแกนกลางสีแดงเพื่อเล่น mode.custom = กฎแบบกำหนดเอง rules.infiniteresources = ทรัพยากรไม่จำกัด -rules.reactorexplosions = การระเบิดของ +rules.reactorexplosions = การระเบิดของเตาปฏิกร +rules.coreincinerates = แกนกลางเผาไอเท็มส่วนเกิน rules.schematic = อนุญาตแผนผัง -rules.wavetimer = ตัวนับเวลาปล่อยคลื่น(รอบ) -rules.waves = คลื่น(รอบ) +rules.wavetimer = นับถอยหลังการปล่อยคลื่น +rules.waves = คลื่น rules.attack = โหมดการโจมตี -rules.buildai = สิ่ก่อสร้างของ AI +rules.buildai = AI ก่อสร้าง +rules.corecapture = ยืดแกนกลางเมื่อทำลาย +rules.polygoncoreprotection = รัศมีปกป้องแกนกลางแบบหลายเหลี่ยม rules.enemyCheat = AI (ทีมสีแดง) มีทรัพยากรไม่จำกัด -rules.blockhealthmultiplier = พหุคูณเลือดของบล็อค -rules.blockdamagemultiplier = พหุคูณดาเมจของบล็อค +rules.blockhealthmultiplier = พหุคูณพลังชีวิตของบล็อก +rules.blockdamagemultiplier = พหุคูณดาเมจของบล็อก rules.unitbuildspeedmultiplier = พหุคูณความเร็วในการสร้างยูนิต -rules.unithealthmultiplier = พหุคูณเลือดของยูนิต +rules.unithealthmultiplier = พหุคูณพลังชีวิตของยูนิต rules.unitdamagemultiplier = พหุคูณพลังโจมตีของยูนิต +rules.unitcapvariable = เพิ่มจำนวนยูนิตสูงสุดต่อแกนกลาง +rules.unitcap = ขีดกำจัดยูนิตสูงสุดพื้นฐาน rules.enemycorebuildradius = รัศมีห้ามสร้างบริเวณแกนกลางของศัตรู:[lightgray] (ช่อง) -rules.wavespacing = ระยะเวลาระหว่างคลื่น(รอบ):[lightgray] (วินาที) +rules.wavespacing = ระยะเวลาระหว่างคลื่น:[lightgray] (วินาที) rules.buildcostmultiplier = พหุคูณจำนวนทรัพยากรที่ใช้ในการสร้าง -rules.buildspeedmultiplier = พหุคูณความเร็วในการสร้าง -rules.deconstructrefundmultiplier = พหุคูณการคืนทรัพยากรเมื่อทำการทำลายสิ่งก่อสร้าง -rules.waitForWaveToEnd = คลื่น(รอบ)รอศัตรู +rules.buildspeedmultiplier = พหุคูณความเร็วการสร้าง +rules.deconstructrefundmultiplier = พหุคูณการคืนทรัพยากรเมื่อทำลาย +rules.waitForWaveToEnd = คลื่นรอศัตรู rules.dropzoneradius = รัศมีจุดเกิดของศัตรู:[lightgray] (ช่อง) rules.unitammo = ยูนิตต้องใช้กระสุน -rules.title.waves = คลื่น(รอบ) +rules.title.waves = คลื่น rules.title.resourcesbuilding = ทรัพยากรและสิ่งก่อสร้าง rules.title.enemy = ศัตรู rules.title.unit = ยูนิต @@ -889,16 +1021,19 @@ rules.title.environment = สิ่งแวดล้อม rules.lighting = แสง rules.enemyLights = ไฟศัตรู rules.fire = ไฟ -rules.explosions = ดาเมจบล็อค/ยูนิตระเบิด +rules.explosions = ดาเมจการระเบิดของบล็อก/ยูนิต rules.ambientlight = แสงจากแวดล้อม rules.weather = สภาพอากาศ rules.weather.frequency = ความถี่: +rules.weather.always = ตลอด rules.weather.duration = ระยะเวลา: content.item.name = ไอเท็ม content.liquid.name = ของเหลว content.unit.name = ยูนิต -content.block.name = บล็อค +content.block.name = บล็อก +content.status.name = เอฟเฟกต์สถานะ +content.sector.name = เซ็กเตอร์ item.copper.name = ทองแดง item.lead.name = ตะกั่ว @@ -916,51 +1051,58 @@ item.blast-compound.name = สารระเบิด item.pyratite.name = ไพราไทต์ item.metaglass.name = กระจกเมต้า item.scrap.name = เศษเหล็ก + liquid.water.name = น้ำ -liquid.slag.name = เศษแร่ +liquid.slag.name = แร่หลอม liquid.oil.name = น้ำมัน -liquid.cryofluid.name = โครโรฟิวล์ +liquid.cryofluid.name = สารหล่อเย็น unit.dagger.name = แด็กเกอร์ unit.mace.name = เมส unit.fortress.name = ฟอร์เทรส -unit.nova.name = โนว่า -unit.pulsar.name = พอวซ่า -unit.quasar.name = ควอซ่า +unit.nova.name = โนวา +unit.pulsar.name = พัลซ่าร์ +unit.quasar.name = ควาซ่าร์ unit.crawler.name = ครอว์เลอร์ -unit.atrax.name = เอแทรซ +unit.atrax.name = เอแทรคซ์ unit.spiroct.name = สปิรอคท์ unit.arkyid.name = อาร์คิดย์ -unit.toxopid.name = โทโสพิด +unit.toxopid.name = ท็อคโซพิด unit.flare.name = แฟลร์ unit.horizon.name = ฮอไรซอน -unit.zenith.name = ซีนิท +unit.zenith.name = เซนิธ unit.antumbra.name = แอนทัมบรา -unit.eclipse.name = อีคลิปส์ +unit.eclipse.name = อุปราคา unit.mono.name = โมโน -unit.poly.name = โพลี +unit.poly.name = โพลิ unit.mega.name = เมก้า unit.quad.name = ควอด -unit.oct.name = ออกค์ -unit.risso.name = ริสโส +unit.oct.name = อ็อคท์ +unit.risso.name = ริสโซ่ unit.minke.name = มิงค์ unit.bryde.name = ไบรดย์ -unit.sei.name = ไซย์ +unit.sei.name = เซย์ unit.omura.name = โอมูร่า +unit.retusa.name = เรธูซ่า +unit.oxynoe.name = อ๊อกซิโนอ์ +unit.cyerce.name = ไซเยิส +unit.aegires.name = เอเกียเรส +unit.navanax.name = นาวาแน็คซ์ unit.alpha.name = อัลฟ่า -unit.beta.name = บีตเา +unit.beta.name = เบต้า unit.gamma.name = แกมม่า -unit.scepter.name = สเซปเตอร์ +unit.scepter.name = สเก็ปเตอร์ unit.reign.name = เรน unit.vela.name = เวล่า unit.corvus.name = คอร์วัส block.resupply-point.name = จุดเติมของ -block.parallax.name = พาราแล็ซ -block.cliff.name = หน้าผ่า +block.parallax.name = พาราแล็คซ์ +block.cliff.name = หน้าผา block.sand-boulder.name = ก้อนหินทราย +block.basalt-boulder.name = ก้อนบะซอลต์ block.grass.name = หญ้า -block.slag.name = กากแร่ +block.slag.name = แร่หลอม block.space.name = อวกาศ block.salt.name = เกลือ block.salt-wall.name = กำแพงเกลือ @@ -969,9 +1111,9 @@ block.tendrils.name = ไม้เลื้อย block.sand-wall.name = กำแพงทราย block.spore-pine.name = ต้นสนสปอร์ block.spore-wall.name = กำแพงสปอร์ -block.boulder.name = ก้อยหินใหญ่ -block.snow-boulder.name = หินหิมะใหญ่ -block.snow-pine.name = ต้นสนที่คลุมหิมะ +block.boulder.name = ก้อนหิน +block.snow-boulder.name = ก้อนหิมะ +block.snow-pine.name = ต้นสนหิมะ block.shale.name = หินดินดาน block.shale-boulder.name = ก้อนหินดินดาน block.moss.name = ตะไคร่น้ำ @@ -980,12 +1122,12 @@ block.spore-moss.name = พุ่มไม้สปอร์ block.shale-wall.name = กำแพงหินดินดาน block.scrap-wall.name = กำแพงเศษเหล็ก block.scrap-wall-large.name = กำแพงเศษเหล็กขนาดใหญ่ -block.scrap-wall-huge.name = กำแพงเศษเหล็กขนาดใหญ่มาก -block.scrap-wall-gigantic.name = กำแพงเศษเหล็กขนาดยักษ์ -block.thruster.name = ทรัสเตอร์ +block.scrap-wall-huge.name = กำแพงเศษเหล็กขนาดยักษ์ +block.scrap-wall-gigantic.name = กำแพงเศษเหล็กขนาดมหึมา +block.thruster.name = เครื่องยนต์จรวด block.kiln.name = เตาเผา block.graphite-press.name = เครื่องอัดกราไฟต์ -block.multi-press.name = มัลติเพรสต์ +block.multi-press.name = เครื่องอัดสารพัดอย่าง block.constructing = {0} [lightgray](กำลังก่อสร้าง) block.spawn.name = จุดเกิดศัตรู block.core-shard.name = แกนกลาง: ชาร์ด @@ -1006,8 +1148,9 @@ block.sand-water.name = น้ำบนทราย block.darksand-water.name = น้ำบนทรายดำ block.char.name = ถ่าน block.dacite.name = ดาไซต์ +block.rhyolite.name = ไรโอไลต์ block.dacite-wall.name = กำแพงดาไซต์ -block.dacite-boulder.name = โขดหินดาไซต์ +block.dacite-boulder.name = ก้อนหินดาไซต์ block.ice-snow.name = น้ำแข็งหิมะ block.stone-wall.name = กำแพงหิน block.ice-wall.name = กำแพงน้ำแข็ง @@ -1017,13 +1160,14 @@ block.pine.name = ต้นสน block.dirt.name = ดิน block.dirt-wall.name = กำแพงดิน block.mud.name = โคลน -block.white-tree-dead.name = ต้นไม้ขาวที่ตายแล้ว +block.white-tree-dead.name = ต้นไม้ขาวตาย block.white-tree.name = ต้มไม้ขาว block.spore-cluster.name = กลุ่มสปอร์ -block.metal-floor.name = พื้นเหล็ก 1 -block.metal-floor-2.name = พื้นเหล็ก 2 -block.metal-floor-3.name = พื้นเหล็ก 3 -block.metal-floor-5.name = พื้นเหล็ก 4 +block.metal-floor.name = พื้นโลหะ 1 +block.metal-floor-2.name = พื้นโลหะ 2 +block.metal-floor-3.name = พื้นโลหะ 3 +block.metal-floor-4.name = พื้นโลหะ 4 +block.metal-floor-5.name = พื้นโลหะ 5 block.metal-floor-damaged.name = พื้นเหล็กที่เสียหาย block.dark-panel-1.name = แผ่นดำ 1 block.dark-panel-2.name = แผ่นดำ 2 @@ -1031,10 +1175,10 @@ block.dark-panel-3.name = แผ่นดำ 3 block.dark-panel-4.name = แผ่นดำ 4 block.dark-panel-5.name = แผ่นดำ 5 block.dark-panel-6.name = แผ่นดำ 6 -block.dark-metal.name = เหล็กดำ +block.dark-metal.name = โลหะดำ block.basalt.name = บะซอลต์ block.hotrock.name = หินร้อน -block.magmarock.name = หินแมกม่า +block.magmarock.name = หินแม็กม่า block.copper-wall.name = กำแพงทองแดง block.copper-wall-large.name = กำแพงทองแดงขนาดใหญ่ block.titanium-wall.name = กำแพงไทเทเนี่ยม @@ -1047,34 +1191,32 @@ block.thorium-wall.name = กำแพงทอเรี่ยม block.thorium-wall-large.name = กำแพงทอเรี่ยมขนาดใหญ่ block.door.name = ประตู block.door-large.name = ประตูขนาดใหญ่ -block.duo.name = ดูโอ +block.duo.name = ดูโอ้ block.scorch.name = สคอร์ช -block.scatter.name = สแคทเทอร์ -block.hail.name = แฮล +block.scatter.name = สแกตเตอร์ +block.hail.name = ลูกเห็บ block.lancer.name = แลนเซอร์ block.conveyor.name = สายพาน block.titanium-conveyor.name = สายพานไทเทเนี่ยม -block.plastanium-conveyor.name = สายพานพสาตตาเนี่ยม +block.plastanium-conveyor.name = สายพานพลาสตาเนี่ยม block.armored-conveyor.name = สายพานเสริมเกราะ -block.armored-conveyor.description = เคลื่อนย้ายไอเท็มได้เร็วเทียบเท่าสายพานไทเทเนี่ยม แต่มีเกราะที่แข็งแรงกว่า ไม่สามารถรับไอเท็มจากด้านข้างและจากสายพานชนิดอื่นนอกจากสายพานชนิดเดียวกัน. block.junction.name = ทางแยก -block.router.name = ตัวกระจาย +block.router.name = เร้าเตอร์ block.distributor.name = ตัวแจกจ่าย -block.sorter.name = เครื่องแยก -block.inverted-sorter.name = เครื่องแยกกลับด้าน +block.sorter.name = เครื่องคัดแยก +block.inverted-sorter.name = เครื่องคัดแยกกลับด้าน block.message.name = ตัวเก็บข้อความ block.illuminator.name = ตัวเปล่งแสง -block.illuminator.description = แหล่งกำเนิดแสงขนาดเล็ก สามารถดัดแปลงได้. จำเป็นต้องใช้พลังงานในการทำงาน. -block.overflow-gate.name = ประตูระบายไอเทม -block.underflow-gate.name = ประตูระบายไอเท็มย้อนกลับ -block.silicon-smelter.name = เตาเผาซิลิกอน +block.overflow-gate.name = ประตูระบาย +block.underflow-gate.name = ประตูระบายกลับด้าน +block.silicon-smelter.name = เตาหลอมซิลิกอน block.phase-weaver.name = เครื่องทอใยเฟส -block.pulverizer.name = เครื่องบด +block.pulverizer.name = เครื่องบดอัด block.cryofluid-mixer.name = เครื่องผสมสารหล่อเย็น -block.melter.name = เตาหลอม -block.incinerator.name = เตาเผาขยะ +block.melter.name = เครื่องหลอมละลาย +block.incinerator.name = เตาเผาสลาย block.spore-press.name = เครื่องอัดสปอร์ -block.separator.name = เครื่องแยก +block.separator.name = เครื่องแยกชิ้นส่วน block.coal-centrifuge.name = เครื่องสังเคราะห์ถ่านหิน block.power-node.name = ตัวจ่ายพลังงาน block.power-node-large.name = ตัวจ่ายพลังงานขนาดใหญ่ @@ -1082,60 +1224,61 @@ block.surge-tower.name = เสาเสิร์จ block.diode.name = ไดโอดแบตเตอรี่ block.battery.name = แบตเตอรี่ block.battery-large.name = แบตเตอรี่ขนาดใหญ่ -block.combustion-generator.name = เครื่องกำเนิดไฟฟ้าเผาไหม้ถ่าน +block.combustion-generator.name = เครื่องกำเนิดไฟฟ้าเผาไหม้ block.steam-generator.name = เครื่องกำเนิดไฟฟ้าไอน้ำ -block.differential-generator.name = เครื่องกำเนิดไฟฟ้าดิฟเฟอเร่นเตอร์ -block.impact-reactor.name = เตาปฏิกรณ์อัดกระแทก +block.differential-generator.name = เครื่องกำเนิดไฟฟ้าอุณหภูมิต่าง +block.impact-reactor.name = เตาปฏิกรณ์อิมแพค block.mechanical-drill.name = เครื่องขุดเชิงกล block.pneumatic-drill.name = เครื่องขุดอัดอากาศ block.laser-drill.name = เครื่องขุดเลเซอร์ -block.water-extractor.name = เครื่องขุดน้ำ -block.cultivator.name = เค้าติเวเตอร์ +block.water-extractor.name = เครื่องขุดน้ำบาดาล +block.cultivator.name = เครื่องสกัดสปอร์ block.conduit.name = ท่อน้ำ block.mechanical-pump.name = ปั๊มเชิงกล block.item-source.name = จุดกำเนิดไอเท็ม -block.item-void.name = จุดลบไอเท็ม +block.item-void.name = หลุมดูดไอเท็ม block.liquid-source.name = จุดกำเนิดของเหลว -block.liquid-void.name = จุดลบของเหลว -block.power-void.name = จุดลบพลังงาน +block.liquid-void.name = หลุมดูดของเหลว +block.power-void.name = หลุมดูดพลังงาน block.power-source.name = จุดกำเนิดพลังงาน -block.unloader.name = ตัวถ่ายไอเทม +block.unloader.name = ตัวถ่ายไอเท็ม block.vault.name = ตู้นิรภัย -block.wave.name = เวฟ +block.wave.name = คลื่นน้ำ block.tsunami.name = สึนามิ block.swarmer.name = สวอร์มเมอร์ block.salvo.name = ซัลโว block.ripple.name = ริปเปิล block.phase-conveyor.name = สายพานเฟส -block.bridge-conveyor.name = สายพานสะพาน -block.plastanium-compressor.name = เครื่องอัดพลาสตาเนียม +block.bridge-conveyor.name = สะพานไอเท็ม +block.plastanium-compressor.name = เครื่องอัดพลาสตาเนี่ยม block.pyratite-mixer.name = เครื่องผสมไพราไทต์ block.blast-mixer.name = เครื่องผสมสารระเบิด -block.solar-panel.name = แผงโซลาร์ -block.solar-panel-large.name = แผงโซลาร์ขนาดใหญ่ +block.solar-panel.name = แผงโซล่าเซลล์ +block.solar-panel-large.name = แผงโซล่าเซลล์ขนาดใหญ่ block.oil-extractor.name = เครื่องสกัดน้ำมัน -block.repair-point.name = จุดซ่อมแซม +block.repair-point.name = จุดซ่อมแซมยูนิต +block.repair-turret.name = ป้อมซ่อมแซมยูนิต block.pulse-conduit.name = ท่อน้ำพัลซ์ block.plated-conduit.name = ท่อน้ำเสริมเกราะ block.phase-conduit.name = ท่อน้ำเฟส -block.liquid-router.name = เครื่องกระจายของเหลว -block.liquid-tank.name = ถังบรรจุน้ำ +block.liquid-router.name = เร้าเตอร์ของเหลว +block.liquid-tank.name = ถังบรรจุของเหลว block.liquid-junction.name = ทางแยกของเหลว -block.bridge-conduit.name = ท่อน้ำสะพาน -block.rotary-pump.name = ปั๊มแบบหมุน +block.bridge-conduit.name = สะพานของเหลว +block.rotary-pump.name = ปั๊มโรตารี่ block.thorium-reactor.name = เตาปฏิกรณ์ทอเรี่ยม block.mass-driver.name = เครื่องโอนถ่ายมวล block.blast-drill.name = เครื่องขุดระเบิดอากาศ block.thermal-pump.name = ปั๊มความร้อน block.thermal-generator.name = เครื่องกำเนิดไฟฟ้าจากความร้อน -block.alloy-smelter.name = เตาเผาอัลลอย +block.alloy-smelter.name = เครื่องหลอมอัลลอย block.mender.name = เครื่องซ่อมแซม block.mend-projector.name = เครื่องฉายซ่อมแซม block.surge-wall.name = กำแพงเสิร์จ block.surge-wall-large.name = กำแพงเสิร์จขนาดใหญ่ block.cyclone.name = ไซโคลน block.fuse.name = ฟิวส์ -block.shock-mine.name = กับระเบิดไฟฟ้า +block.shock-mine.name = กับระเบิดช็อก block.overdrive-projector.name = เครื่องเร่งประสิทธิภาพ block.force-projector.name = เครื่องฉายสนามพลัง block.arc.name = อาร์ค @@ -1148,188 +1291,460 @@ block.launch-pad.name = ฐานส่งของ block.launch-pad-large.name = ฐานส่งของขนาดใหญ่ block.segment.name = เซ็กเมนต์ block.command-center.name = ศูนย์ควบคุม -block.ground-factory.name = โรงงานภาคพื้นดิน -block.air-factory.name = โรงงานภาคอากาศ -block.naval-factory.name = โรงงานทางน้ำ -block.additive-reconstructor.name = Reconstructor แบบบวก -block.multiplicative-reconstructor.name = Reconstructor แบบคูณ -block.exponential-reconstructor.name = Reconstructor แบบเอ็กโพเนนเชียว -block.tetrative-reconstructor.name = Tetrative Reconstructor -block.payload-conveyor.name = สายพาน Mass -block.payload-router.name = ตัวเปลี่ยเส้นทาง Payload -block.disassembler.name = ตัวชำแหละ +block.ground-factory.name = โรงงานยูนิตพื้นดิน +block.air-factory.name = โรงงานยูนิตอากาศ +block.naval-factory.name = โรงงานยูนิตน้ำ +block.additive-reconstructor.name = เครื่องพัฒนารุ่นบวก +block.multiplicative-reconstructor.name = เครื่องพัฒนารุ่นคูณ +block.exponential-reconstructor.name = เครื่องพัฒนารุ่นยกกำลัง +block.tetrative-reconstructor.name = เครื่องพัฒนารุ่นเตตร้า +block.payload-conveyor.name = สายพานบรรทุก +block.payload-router.name = เร้าเตอร์บรรทุก +block.duct.name = ท่อสูญญากาศ +block.duct-router.name = เร้าเตอร์สูญญากาศ +block.duct-bridge.name = สะพานสูญญากาศ +block.payload-propulsion-tower.name = หอเคลื่อนย้ายสิ่งบรรทุก +block.payload-void.name = หลุมดูดสิ่งบรรทุก +block.payload-source.name = จุดกำเนิดสิ่งบรรทุก +block.disassembler.name = เครื่องถอดแยกส่วนประกอบ block.silicon-crucible.name = เบ้าหลอมซิลิคอน -block.overdrive-dome.name = โดม Overdrive +block.overdrive-dome.name = โดมเร่งประสิทธิภาพ +#experimental, may be removed +block.block-forge.name = เครื่องสร้างบล็อก +block.block-loader.name = เครื่องโหลดบล็อก +block.block-unloader.name = เครื่องถ่ายบล็อก +block.interplanetary-accelerator.name = เครื่องส่งจรวดระหว่างดาวเคราะห์ -block.switch.name = สวิชต์ -block.micro-processor.name = ตัวประมวลผล Micro -block.logic-processor.name = ตัวประมวลผล Logic -block.hyper-processor.name = ตัวประมวลผล Hyper -block.logic-display.name = ตัวแสดง Logic -block.large-logic-display.name = ตัวแสดง Logic ขนาดใหญ่ +block.switch.name = สวิตช์ +block.micro-processor.name = ตัวประมวลผลขนาดเล็ก +block.logic-processor.name = ตัวประมวลผลลอจิก +block.hyper-processor.name = ตัวประมวลผลไฮเปอร์ +block.logic-display.name = หน้าจอลอจิก +block.large-logic-display.name = หน้าจอลอจิกขนาดใหญ่ block.memory-cell.name = เซลล์ความจำ -block.memory-bank.name = Memory Bank +block.memory-bank.name = ธนาคารความจำ team.blue.name = น้ำเงิน -team.crux.name = แดง -team.sharded.name = ส้ม -team.orange.name = ส้ม -team.derelict.name = ไม่มี +team.crux.name = ครักซ์ +team.sharded.name = ชาร์ด +team.derelict.name = ทิ้งร้าง team.green.name = เขียว team.purple.name = ม่วง -tutorial.next = [lightgray]<กดเพื่อดำเนินการต่อ> -tutorial.intro = คุณได้เข้าสู่[scarlet] บทฝึกสอนของ Mindustry.[]\nใช้[accent] [[WASD][] เพื่อเคลื่อนที่.\n[accent]กด [] ค้างระหว่างกลิ้งลูกกลิ้งเม้าส์[] เพื่อซูมเข้าและออก.\nเริ่มด้วยการ[accent] ขุดทองแดง[]. เคลื่อนที่ไปใกล้มัน, แล้วกดที่สายแร่ทองแดงใกล้ๆกับแกนกลางของคุณ\n\n[accent]ทองแดง {0}/{1} ชิ้น -tutorial.intro.mobile = คุณได้เข้าสู่[scarlet] บทฝึกสอนของ Mindustry.[]\nเลื่อนหน้าจอเพื่อเคลื่อนที่.\n[accent]ขยับสองนิ้วพร้อมกัน []เพื่อซูมเข้าและออก.\nเริ่มด้วยการ[accent] ขุดทองแดง[]. เคลื่อนที่ไปใกล้มัน, แล้วกดที่สายแร่ทองแดงใกล้ๆกับแกนกลางของคุณ\n\n[accent]ทองแดง {0}/{1} ชิ้น -tutorial.drill = ขุดด้วยตัวเองนั้นไม่ค่อยมีประสิทธิภาพ.\n[accent]เครื่องขุด []สามารถขุดได้แบบอัตโนมัติ.\nกดที่หมวดเครื่องขุดที่มุมล่างขวา.\nเลือก[accent] เครื่องขุดเชิงกล[]. วางมันบนสายแร่ทองแดงด้วยการคลิ๊ก.\n[accent]คลิ๊กขวา[] เพื่อหยุดการสร้าง. -tutorial.drill.mobile = ขุดด้วยตัวเองนั้นไม่ค่อยมีประสิทธิภาพ.\n[accent]เครื่องขุด []สามารถขุดได้แบบอัตโนมัติ.\nกดที่หมวดเครื่องขุดที่มุมล่างขวา.\nเลือก[accent] เครื่องขุดเชิงกล[].\nวางมันบนสายแร่ทองแดงด้วยการกดแล้วกดที่[accent] เครื่องหมายถูก[] ด้านล่างเพื่อยืนยันการสร้าง.\nกด[accent] ปุ่มกากบาท[] เพื่อยกเลิกการวาง. -tutorial.blockinfo = บล็อคแต่ละบล็อคจะมีสถานะที่ต่างกัน. เครื่องขุดแต่ละเครื่องจะขุดได้เฉพาะแร่บางชนิด.\nสามารถตรวจสอบข้อมูลและสถานะของบล็อคได้โดย,[accent] กดที่ปุ่ม "?" เมื่อเลือกบล็อคนั้นๆในเมนูการสร้าง.[]\n\n[accent]เข้าไปในสถานะของเครื่องขุดเชิงกลดูสิ.[] -tutorial.conveyor = [accent]สายพาน[] ใช้สำหรับขนส่งไอเท็มไปยังแกนกลาง.\nสร้างสายพานจากเครื่องขุดมายังแกนกลางสิ.\n[accent]กดปุ่มเม้าส์ค้างเพื่อสร้างเป็นเส้น.[]\nกด[accent] CTRL[] ค้างตอนลากเส้นเพื่อลากเส้นทแยง.\nใช้ลูกกลิ้งเม้าส์เพื่อหมุนบล็อคก่อนที่จะวาง.\n[accent]วางสายพาน 2 อันด้วยเครื่องมือลากเส้น แล้วส่งไอเท็มไปยังแกนกลาง. -tutorial.conveyor.mobile = [accent]สายพาน[] ใช้สำหรับขนส่งไอเท็มไปยังแกนกลาง.\nวางสายพาน 2 อันด้วยเครื่องมือลากเส้น แล้วส่งไอเท็มไปยังแกนกลาง.\n[accent] ลากเส้นโดยกดที่หน้าจอค้างสัก 1-2 วินาที[] แล้วลากไปทางที่ต้องการสร้าง\n\n[accent]วางสายพาน 2 อันด้วยเครื่องมือลากเส้น แล้วส่งไอเท็มไปยังแกนกลาง. -tutorial.turret = หลังจากทีาไอเท็มเข้าแกนกลางแล้ว, เราจะสามารถใช้มันในการก่อสร้างได้.\nจงจำไว้ว่าไอเท็มบางอันเท่านั้นที่สามารถใช้ในการก่อสร้างได้.\nตัวอย่างไอเท็มที่ไม่ได้ใช่ในการก่อสร้างได้แก่[accent] ถ่านหิน[] และ[accent] เศษเหล็ก[], ไม่สามารถใส่ในแกนกลางได้.\nสิ่งก่อสร้างเชิงป้องกันจำเป็นสำหรับการขับไล่[lightgray] ศัตรู[].\nสร้าง[accent] ป้อมปืนดูโอ้[] ใกล้กับฐานของคุณ. -tutorial.drillturret = ป้อมปืนดูโอ้ใช้[accent] ทองแดงเป็นกระสุน []ในการยิง.\nวางเครื่องขุดใกล้กับป้อมปืน.\nสร้างสายพานไปยังป้อมปืนเพื่อที่จะเติมทองแดงให้มัน.\n\n[accent]ส่งกระสุนแล้ว: 0/1 -tutorial.pause = ระหว่างการต่อสู้, คุณสามารถ[accent]หยุดเกมชั่วคราวได้.[]\nคุณอาจจะทำคิวการสร้างระหว่างหยุดเกมชั่วคราว.\n\n[accent]กด space เพื่อหยุดเกมชั่วคราว. -tutorial.pause.mobile = ระหว่างการต่อสู้, คุณสามารถ[accent] หยุดเกมชั่วคราวได้.[]\nคุณอาจจะทำคิวการสร้างระหว่างหยุดเกมชั่วคราว.\n\n[accent]กดปุ่มที่มุมบนซ้ายเพื่อหยุดเกมชั่วคราว. -tutorial.unpause = กด Space อีกครั้งเพื่อเล่นต่อ. -tutorial.unpause.mobile = กดปุ่มนั้นอีกครั้งเพื่อเล่นต่อ. -tutorial.breaking = บล็อคจำเป็นต้องทำลายบ่อยครั้ง.\n[accent]กดคลิ๊กขวาค้าง[] เพื่อทำลายบล็อคที่เลือก.[]\n\n[accent]ทำลายบล็อคเศษเหล็กทั้งหมดที่ยู่ทางด้านซ้ายของแกนกลางของคุณโดยใช้การเลือกแบบคลุมพื้นที่. -tutorial.breaking.mobile = บล็อคจำเป็นต้องทำลายบ่อยครั้ง.\n[accent]เลือกโหมดทำลาย[], แล้วกดบล็อคที่ต้องการทำลายเพื่อเริ่มทำลายมัน.\nทำลายเป็นพื้นที่ด้วยการกดค้าง 1-2 วินาที[] แล้วลากคลุมพื้นที่ที่ต้องการ.\nกดเครื่องหมายถูกเพื่อยืนยันการทำลาย.\n\n[accent]ทำลายบล็อคเศษเหล็กทั้งหมดที่ยู่ทางด้านซ้ายของแกนกลางของคุณโดยใช้การเลือกแบบคลุมพื้นที่. -tutorial.withdraw = ในบางเหตุการณ์, การนำไอเท็มออกจากบล็อคนั้นจำเป็น.\nวิธีทำคือ, [accent]กดที่บล็อค[] ที่มีไอเท็มอยู่, แล้ว [accent]กดไอเท็ม[] ในช่องเก็บของ.\nไอเท็มหลายๆอันสามารถนำออกมาได้โดย [accent]กดค้างที่ช่องเก็บของ[].\n\n[accent]นำทองแดงจำนวนหนึ่งออกจากแกนกลาง.[] -tutorial.deposit = นำไอเท็มเข้าบล็อคโดยลากไอเท็มจากยานของคุณไปที่บล็อคที่ต้องการ.\n\n[accent]เอาทองแดงกลับเข้าแกนกลาง.[] -tutorial.waves = [lightgray]ศัตรู[] กำลังมา.\n\nปกป้องแกนกลางของคุณ 2 คลื่น(รอบ).[accent] คลิ๊ก[] เพื่อยิง.\nสร้างป้อมปืนและเครื่องขุดเพิ่มเพื่อขุดทองแดงเพิ่มและปกป้องแกนกลาง. -tutorial.waves.mobile = [lightgray]ศัตรู[] กำลังมา.\n\nปกป้องแกนกลางของคุณ 2 คลื่น(รอบ). ยานของคุณจะยิงศตรูโดยอัตโนมัติ.\nสร้างป้อมปืนและเครื่องขุดเพิ่มเพื่อขุดทองแดงเพิ่มและปกป้องแกนกลาง. -tutorial.launch = เมื่อถึงคลื่น(รอบ)เฉพาะแล้ว, คุณจะสามารถ[accent] ส่งแกนกลาง[], ทิ้งระบบป้องกันทั้งหมดและ[accent] ได้รับทรัพยากรทั้งหมดในแกนกลาง.[]\nทรัพยากรพวกนี้สามารถนำไปใช้ในการวิจัยเทคโนโลยีใหม่ได้.\n\n[accent]กดปุ่มส่งสิ. +hint.skip = ข้าม +hint.desktopMove = กด [accent][[WASD][] เพื่อขยับ +hint.zoom = [accent]เลื่อน[]เพื่อซูมเข้าหรือซูมออก +hint.mine = ขยับไปใกล้ๆ กับ \uf8c4 ทองแดงแล้ว[accent]กด[]เพื่อขุด +hint.desktopShoot = กด [accent][[คลิ๊กซ้าย][] เพื่อยิง +hint.depositItems = ถ้าจะขนย้ายไอเท็ม ให้ลากไอเท็มจากยานไปยังแกนกลาง +hint.respawn = ถ้าอยากเกิดใหม่ ให้กดปุ่ม [accent][[V][] +hint.respawn.mobile = คุณกำลังควบคุมยูนิตหรือบล็อกอยู่ ถ้าจะเกิดใหม่เป็นยาน [accent]กดที่รูปอวาตาร์ซ้ายบน[] +hint.desktopPause = กด [accent][[Space][] เพื่อหยุดชั่วคราวหรือเล่นต่อ +hint.placeDrill = เลือกเมนู \ue85e [accent]เครื่องขุด[] ในแท็บเมนูขวาล่าง แล้วเลือก \uf870 [accent]เครื่องขุด[] แล้วกดที่แร่ทองแดงเพื่อวาง +hint.placeDrill.mobile = เลือกเมนู \ue85e [accent]เครื่องขุด[] ในแท็บเมนูขวาล่าง แล้วเลือก \uf870 [accent]เครื่องขุด[] แล้วกดที่แร่ทองแดงเพื่อวาง\n\nกด \ue800 [accent]ติ้กถูก[] ที่ขวาล่างเพื่อยืนยัน +hint.placeConveyor = สายพานจะย้ายไอเท็มจากเครื่องขุดไปยังบล็อกอื่นๆ เลือก \uf896 [accent]สายพาน[] จากแท็บ \ue814 [accent]การเคลื่อนย้าย[]\n\nคลิ๊กแล้วลากเพื่อวางหลายๆ สายพาน\n[accent]เลื่อน[]เพื่อหมุน +hint.placeConveyor.mobile = สายพานจะเคลื่อนย้ายไอเท็มจากที่ขุดไปยังบล็อกอื่นๆ เลือก \uf896 [accent]สายพาน[] จากแท็บ \ue814 [accent]การเคลื่อนย้าย[]\n\nเอานิ้วจิ้มลงไปสักแป็บนึงแล้วลากเพื่อวางหลายๆ อัน +hint.placeTurret = วาง \uf861 [accent]ป้อมปืน[] เพื่อป้องกันฐานทัพจากศัตรู\n\nป้อมปืนต้องมีกระสุน ในกรณีนี้ \uf838 ทองแดง\nใช้สายพานลากจากเครื่องขุดไปที่ป้อมปืนเพื่อเติมกระสุน +hint.breaking = [accent]คลิ๊กขวา[] แล้วลากเพื่อทำลายบล็อก +hint.breaking.mobile = เปิดใช้ \ue817 [accent]ค้อน[] ตรงล่างขวาแล้วเลือกเพื่อทำลายบล็อก\n\nเอานิ้วจิ้มลงไปสักแป็บนึงแล้วลากเพื่อเลือกหลายๆ อัน +hint.blockInfo = ดูข้อมูลของบล็อกโดยการเลือกจาก[accent]เมนูการสร้าง[] แล้วกดที่รูป [accent][[?][] ตรงด้านขวา +hint.research = ใช้ปุ่ม \ue875 [accent]วิจัย[] เพื่อวิจัยเทคโนโลยีใหม่ๆ +hint.research.mobile = ใช้ปุ่ม \ue875 [accent]วิจัย[] ใน \ue88c [accent]เมนู[] เพื่อวิจัยเทคโนโลยีใหม่ๆ +hint.unitControl = กด [accent][[L-Ctrl][] ค้างไว้แล้วกด[accent]คลิ๊ก[]เพื่อควบคุมยานพวกพ้องหรือป้อมปืน +hint.unitControl.mobile = [accent][[กดสองครั้ง][]เพื่อควบคุมยานพวกพ้องหรือป้อมปืน +hint.launch = เมื่อเก็บทรัพยากรเยอะพอ คุณสามารถ[accent]ส่งแกนกลาง[]โดยการเลือกเซ็กเตอร์จาก \ue827 [accent]แผนที่[] ตรงขวาล่าง +hint.launch.mobile = เมื่อเก็บทรัพยากรเยอะพอ คุณสามารถ[accent]ส่งแกนกลาง[]โดยการเลือกเซ็กเตอร์จาก \ue827 [accent]แผนที่[] ใน \ue88c [accent]เมนู[] +hint.schematicSelect = กด [accent][[F][] แล้วลากเพื่อเลือกบล็อกที่จะคัดลอกและวาง\n\n[accent][[คลิ๊กกลาง][] เพื่อคัดลอกบล็อกชนิดเดียว +hint.conveyorPathfind = กด [accent][[L-Ctrl][] ในขณะที่กำลังลากสายพานเพื่อสร้างเส้นทางแบบอัตโนมัติ +hint.conveyorPathfind.mobile = เปิดใช้งาน \ue844 [accent]โหมดแนวทแยง[] แล้วลากสายพานเพื่อสร้างเส้นทางแบบอัตโนมัติ +hint.boost = กด [accent][[L-Shift][] เพื่อบูสต์ข้ามสิ่งกีดขวางด้วยยูนิตของคุณ\n\nยูนิตพื้นดินบางประเภทเท่านั้นที่บินได้ +hint.command = กด [accent][[G][] เพื่อสั่งการยูนิตข้างๆ ของตัว[accent]ชนิดคล้ายกัน[]จัดเป็นรูปแบบล้อมรอบคุณ\n\nถ้าจะสั่งการยูนิตพื้นดิน คุณต้องควบคุมยูนิตประเภทเดียวกันอยู่ก่อน +hint.command.mobile = [accent][[กดสองครั้ง][] ที่ตัวยูนิตของคุณเพื่อสั่งการยูนิตรอบข้างให้มารวมตัวกันเป็นวงล้อมรอบคุณ +hint.payloadPickup = กด [accent][[[] เพื่อหยิบบล็อกเล็กๆ หรือยูนิต +hint.payloadPickup.mobile = [accent]กดค้างไว้[] ที่บล็อกเล็กๆ หรือตัวยูนิตเพื่อหยิบขึ้นมา +hint.payloadDrop = กด [accent]][] เพื่อปล่อยสิ่งที่บรรทุกอยู่ +hint.payloadDrop.mobile = [accent]กดค้างไว้[]ที่พื้นที่โล่งๆ เพื่อปล่อยสิ่งที่บรรทุกอยู่ +hint.waveFire = ป้อมปืน[accent]คลื่นน้ำ[]หากมีน้ำเป็นกระสุนจะช่วยดับไฟรอบข้างให้อัตโนมัติ +hint.generator = \uf879 [accent]เครื่องกำเนิดไฟฟ้าเผาไหม้[]จะเผาถ่านและส่งพลังงานไปยังบล็อกที่อยู่ใกล้ๆ\n\nระยะของพลังงานสามารถขยายได้ด้วย \uf87f [accent]ตัวจ่ายพลังงาน[] +hint.guardian = หน่วย[accent]การ์เดียน[]มีเกราะป้องกันหนาแน่น กระสุนเปราะบางอย่าง[accent]ทองแดง[]และ[accent]ตะกั่ว[][scarlet]ไม่มีประสิทธิภาพ[]\n\nควรใช้ป้อมปืนที่ดีกว่านี้หรือใช้ \uf835 [accent]กราไฟท์[]ใน \uf861ดูโอ/\uf859ซัลโวเป็นกระสุนเพื่อทำลายการ์เดียน +hint.coreUpgrade = สามารถอัพเกรดแกนกลางได้โดย[accent]วางแกนกลางที่ใหญ่กว่าทับมัน[]\n\nวาง  [accent]แกนกลาง: ฟาวน์เดชั่น[]ทับ  [accent]แกนกลาง: ชาร์ด[] ต้องแน่ใจว่ารอบข้างมีที่ว่างก่อนจะวาง +hint.presetLaunch = [accent]เซ็กเตอร์ลงจอด[]สีเทา อย่างเช่น[accent]ป่าหนาวแหน็บ[] สามารถลงจอดจากที่ไหนที่ได้ในแผนที่ พวกนั้นไม่จำเป็นต้องยืดครองเซ็กเตอร์รอบข้างเพื่อส่งแกนกลางไป\n\n[accent]เซ็กเตอร์ที่มีเลข[] อย่างเช่นอันนี้[accent]ไม่จำเป็น[]ต้องยืดครอง +hint.coreIncinerate = เมื่อแกนกลางมีจำนวนไอเท็มชนิดหนึ่งที่เต็ม ไอเท็มชนิดนั้นที่เข้ามาเพิ่มจะ[accent]ถูกเผา[] +hint.coopCampaign = ตอนที่เล่น[accent]แคมเปญร่วมกัน[]กับเพื่อน ไอเท็มที่ผลิตในแมพนี้จะถูกส่ง[accent]ไปยังเซ็กเตอร์ของคุณด้วย[]\n\nการวิจัยใหม่ที่โฮสต์ได้วิจัยก็เก็บเป็นของคุณด้วย -item.copper.description = วัสดุก่อสร้างพื้นฐาน. ใช้อย่างแพร่หลายในบล็อคเกือบทุกชนิด. -item.lead.description = ทรัพยากรพื้นฐานสำหรับผู้เริ่มต้นใหม่. ใช้อย่างแพร่หลายในอิเล็กทรอนิกส์และบล็อคขนย้ายของเหลว. -item.metaglass.description = ส่วนผสมของกระจกที่แข็งแรงมาก. ใช้อย่างแพร่หลายกับตัวจ่ายของเหลวและที่เก็บของ. -item.graphite.description = เกิดจากการจัดเรียงตัวใหม่ของคาร์บอน, ใช้เป็นกระสุนและชิ้นส่วนอุปกรณ์ไฟฟ้า. -item.sand.description = ทรัพยาการที่พบได้ทั่วไป ซึ่งใช้แพร่หลายในการหลอม, ทั้งในอัลลอยและเป็นตัวผสาน. -item.coal.description = ซากพืชที่ถับถมเมื่อนานมาแล้ว. ใช้เป็นเชื้อเพลิงและผลิตทรัพยากรอย่างแพร่หลาย. -item.titanium.description = โลหะเบาซึ่งหายาก ใช้อย่างแพร่หลายในการขนย้ายของเหลว, เครื่องขุดเจาะและอากาศยาน. -item.thorium.description = โลหะซึ่งหนาแน่นและมีกัมมัตภาพรังสี ใช้เป็นตัวช่วยในสิ่งปลูกสร้างบางประเภทและเป็นเชื้อเพลิงนิวเคลียร์. -item.scrap.description = เศษที่เหลือจากสิ่งก่อสร้างและยูนิตเก่า. มีร่องรอยของโลหะหลายชนิดอยู่. -item.silicon.description = สารกึ่งตัวนำที่มีประโยชน์มาก. ใช้ในแผงโซลาร์, อุปกรณ์อิเล็กทรอนิกที่ซับซ้อนและเป็นกระสุนสำหรับป้อมปืนที่ยิงจากระยะไกล. -item.plastanium.description = วัสดุเบาและดัดได้ ใช้ในอากาศยานขั้นสูงและกระสุนกระจาย. -item.phase-fabric.description = วัสดุที่เกือบไร้น้ำหนัก ใช้ในอิเล็กทรอนิกส์ขั้นสูงและเทคโนโลยีซ่อมแซมตนเอง -item.surge-alloy.description = อัลลอยขั้นสูงที่มีคุณสมบัติทางไฟฟ้าที่จำเพาะ -item.spore-pod.description = กระเปาะของสปอร์สังเคราะห์, สังเคราะห์โดยการรวบรวมจากอากาศ ใช้ในอุตสาหกรรม. ใช้ในการกลั่นเป็นน้ำมัน, สารระเบิดและเชื้อเพลิง. -item.blast-compound.description = สารประกอบที่ไม่เสถียร ใช้ในการระเบิด. สังเคราะห์จากสปอร์และสารระเหยอื่นๆ. ไม่แนะนำให้ใช้เป็นเชื้อเพลิง. -item.pyratite.description = สารซึ่งติดไฟง่าย ใช้ในอาวุธเพลิง. -liquid.water.description = ของเหลวที่มีประโยชน์ที่สุด โดยทั่วไปใช้เป็นตัวหล่อเย็นและจัดการของเสีย. -liquid.slag.description = โลหะชนิดต่างๆซึ่งหลอมรวมกัน. สามารถนำไปแยกโลหะที่จำเป็นหรือเป็นอาวุธพ่นใส่ศัตรู. -liquid.oil.description = ของเหลวใช้ในการผลิตวัสดุขั้นสูง. สามารถแปลงเเป็นถ่านหินเพือใช้เป็นเชื้อเพลิง หรือเป็นอาวุธเพื่อพ่นใส่ศัตรูแล้วจึงจุดไฟ. -liquid.cryofluid.description = ของเหลวเฉื่อยและไม่กัดกร่อน ผลิตจากน้ำและไทเทเนี่ยม. มีสมบัติการถ่ายเทความร้อนสูง. ใช้อย่างแพร่หลายในการหล่อเย็น. +item.copper.description = วัสดุก่อสร้างพื้นฐาน ใช้อย่างแพร่หลายในบล็อกเกือบทุกชนิด +item.copper.details = ทองแดง มีอยู่มากอย่างผิดปกติบน[accent]เซอร์ปูโล่[] ไม่ค่อยแข็งแรงยกเว้นจะเสริมเกราะ +item.lead.description = ทรัพยากรพื้นฐานที่หาเจอได้ง่าย ใช้อย่างแพร่หลายในอิเล็กทรอนิกส์และบล็อกขนย้ายของเหลว +item.lead.details = ทั้งหนาและเฉื่อย ใช้กันอย่างมากในแบตเตอรี่\n\nโน๊ต: มีแนวโน้มจะเป็นพิษต่อรูปแบบชีวิตทางชีวภาพ ไม่ใช่ว่ามันยังมีเหลืออยู่มากมายที่นี่ +item.metaglass.description = ใช้อย่างแพร่หลายกับท่อน้ำและที่เก็บของ หรือนำไปเป็นกระสุนกระจายใส่ในป้อมปืน +item.metaglass.details = กระจกที่แข็งแรงและทนทานอย่างมากจากการเสริมเกราะ\nด้วยตะกั่ว +item.graphite.description = เกิดจากการจัดเรียงตัวใหม่ของคาร์บอน ใช้เป็นชิ้นส่วนอุปกรณ์ไฟฟ้าหรือนำไปเป็นกระสุน +item.sand.description = ทรัพยาการที่พบได้ทั่วไป ใช้ในการแปรรูปเป็นวัสดุอื่นๆ หรือนำไปเผาเป็น[accent]กระจกเมต้า[] +item.coal.description = ใช้เป็นเชื้อเพลิงและการแปรรูปเป็นวัสดุอื่นๆ +item.coal.details = ดูเหมือนจะเป็นซากพืชดึกดำบรรพ์ เกิดขึ้นนานก่อนการแพร่พันธุ์ของสปอร์เสียอีก +item.titanium.description = ใช้อย่างแพร่หลายในการขนย้ายของเหลว เครื่องขุดเจาะและอากาศยาน +item.titanium.details = โลหะเบาซึ่งหายากตามธรรมชาติ เป็นโลหะที่แข็งแรงใช้ได้ จึงใช้กันอย่างแพร่หลายในการแปรรูปหรือสิ่งก่อสร้าง +item.thorium.description = ใช้ในการเสริมเกราะของสิ่งก่อสร้างต่างๆ หรือนำไปเป็นเป็นเชื้อเพลิงนิวเคลียร์ +item.thorium.details = แร่ธาตุที่หาได้ยากมากในธรรมชาติ เป็นแร่ธาตุที่ทั้งแข็งแกร่งและหนาแน่น จึงใช้กันอย่างแพร่หลายในสิ่งก่อสร้างคงทน มีคุณสมบัติพิเศษคือกัมมันตภาพรังสี ทำให้แร่ธาตุนี้อาจเป็นภัยหากใช้ในทางที่ผิด +item.scrap.description = ใช้ในเตาหลอมแร่และเครื่องบดเพื่อเปลี่ยนเป็นวัสดุอื่นๆ +item.scrap.details = เศษที่เหลือจากสิ่งก่อสร้างและยูนิตเก่า มีร่องรอยของโลหะหลายชนิดอยู่ เกิดจากฐานทัพโบราณในสมัยสงครามเก่าแก่ถูกทำลาย ทำให้วัสดุต่างๆ พังลงมารวมกับ +item.silicon.description = ใช้ในแผงโซล่าเซลล์ อุปกรณ์อิเล็กทรอนิกที่ซับซ้อนหรือนำไปเป็นกระสุนติดตามตัวสำหรับป้อมปืน +item.silicon.details = วัสดุกึ่งตัวนำที่มีประโยชน์มาก ผลิตจากการเผาทรายและถ่านหินเข้าด้วยกัน ใช้ในสิ่งก่อสร้างแทบทุกชนิดตั้งแต่ต้นเกมยันปลายเกม จึงควรผลิตวัสดุนี้ให้เยอะที่สุด +item.plastanium.description = ใช้ในอากาศยานขั้นสูง เป็นฉนวนกันความร้อนหรือนำไปเป็นกระสุนกระจาย +item.plastanium.details = วัสดุที่เบาและดัดได้ ผลิตจากการอัดไทเทเนี่ยมและน้ำมันเข้าด้วยกัน +item.phase-fabric.description = ใช้ในอิเล็กทรอนิกส์ขั้นสูงและเทคโนโลยีซ่อมแซมตนเอง +item.phase-fabric.details = วัสดุที่เบาจนแทบจะไร้น้ำหนัก สังเคราะห์จากทรายและทอเรี่ยม แม้จะยังมีกัมมันตรังสีหลงเหลืออยู่ แต่มันก็ปลอดภัยพอที่จะไม่ระเบิด +item.surge-alloy.description = โลหะผสมขั้นสูงที่มีคุณสมบัติทางไฟฟ้าที่จำเพาะ\nใช้ในอาวุธขั้นสูงและการป้องกันต่างๆ +item.spore-pod.description = กระเปาะของสปอร์สังเคราะห์ สังเคราะห์โดยการสกัดสปอร์ที่อยู่ในบรรยากาศ\nใช้ในอุตสาหกรรม ใช้ในการกลั่นเป็นน้ำมัน สารระเบิดและเชื้อเพลิง +item.spore-pod.details = สปอร์ น่าจะเป็นรูปแบบชีวิตสังเคราะห์ ปล่อยแก็สที่เป็นพิษต่อระบบสิ่งมีชีวิตอื่น แพร่พันธุ์และรุกรานเร็วมากๆ ไวไฟอย่างมากในบางสภาวะ +item.blast-compound.description = ใช้ในการระเบิดหรือนำไปเป็นกระสุนระเบิดจับคู่กับสารหล่อเย็น\nเพื่อทำดาเมจอย่างมหาศาล +item.blast-compound.details = สารประกอบที่ไม่เสถียร สังเคราะห์จากสปอร์และไพราไทต์ ไม่แนะนำให้ใช้เป็นเชื้อเพลิง (ตู้มมมมม) +item.pyratite.description = วัสดุที่ติดไฟได้ง่าย ใช้ในอาวุธเพลิงหรือนำมาผลิตพลังงาน สามารถนำมาผลิตเป็น[accent]สารระเบิด[]ได้ -block.message.description = เก็บข้อความ. ใช้สื่อสารกับพันธมิตร. -block.graphite-press.description = อัดก้อนถ่านหินให้เป็นแผ่นกราไฟต์บริสุทธิ์. -block.multi-press.description = เครื่องอัดกราไฟต์ที่ได้รับการอัปเกรด. ใช้น้ำและพลังงานในการแปรรูปถ่านหินให้เร็วและมีประสิทธิภาพมากขึ้น. -block.silicon-smelter.description = เผาทรายและถ่านหินบริสุทธิ์. ผลิตซิลิก้อน -block.kiln.description = เผาทรายและตะกั่วเป็นสารประกอบชื่อ กระจกเมต้า. จำเป็นต้องใช้พลังงานเล็กน้อยในการทำ. -block.plastanium-compressor.description = ผลิตพลาสตาเนี่ยมจากน้ำมันและไทเทเนี่ยม. -block.phase-weaver.description = สังเคราะห์ใยเฟสจากทอเรี่ยมที่มีรังสีและทราย. จำเป็นต้องใช้พลังงานจำนวนมากจึงจะทำงานง. -block.alloy-smelter.description = ผสมไทเทเนี่ยม, ตะกั่ว, ซิลิก้อนและทองแดงเพื่อที่จะผลิตเซิร์จอัลลอย. -block.cryofluid-mixer.description = ผสมน้ำและผงไทเทเนี่ยมบริสุทธิ์เป็นไครโยฟลูอิด. สำคัญสำหรับเตาปฏิกรณ์ทอเรี่ยม. -block.blast-mixer.description = บอและผสมสปอร์กับไพไรต์เพื่อผลิตสารประกอบระเบิด. -block.pyratite-mixer.description = ผสมถ่านหิน, ตะกั่วและทรายเข้าด้วยกันเป็นไฟไรต์ที่ติดไฟได้ง่าย. -block.melter.description = หลอมเศษเหล็กเป็กกากแร่เพื่อใช้สำหรับกระบวนการต่อไปหรือใช้ในป้อมปืนเวฟ. -block.separator.description = แยกกากแร่ออกเป็นส่วนประกอบแร่ธาตุของมัน. ส่งออกแร่ผลลัพธ์ในรูปแบบที่เย็นลงแล้ว. -block.spore-press.description = อัดกระเปาะสปอร์ด้วยแรงกดมหาศาลเพื่อสังเคราะห์น้ำมัน. -block.pulverizer.description = บดเศษเหล็กให้เป็นทรายละเอียด. -block.coal-centrifuge.description = ทำให้น้ำมันแข็งตัวเป็นก้อนถ่านหิน. -block.incinerator.description = ทำลายไอเท็มหรือของเหลวทุกอย่างที่ได้รับมา. -block.power-void.description = ทิ้งพลังงานทั้งหมดที่ได้รับ. เฉพาะ โหมดอิสระ เท่านั้น. -block.power-source.description = ส่งออกพลังงานไม่จำกัด. เฉพาะ โหมดอิสระ เท่านั้น. -block.item-source.description = ส่งออกไอเท็มไม่จำกัด. เฉพาะ โหมดอิสระ เท่านั้น. -block.item-void.description = ทำลายทุกไอเท็ม . เฉพาะ โหมดอิสระ เท่านั้น. -block.liquid-source.description = ส่งออกของเหลวไม่จำกัด. เฉพาะ โหมดอิสระ เท่านั้น. -block.liquid-void.description = ทิ้งของเหลวทุกชนิด. เฉพาะ โหมดอิสระ เท่านั้น. -block.copper-wall.description = บล็อคป้องกันราคาถูก.\nมีประโยชน์สำหรับป้องกัน core และป้อมปืนใน wave แรกๆ. -block.copper-wall-large.description = บล็อคป้องกันราคาถูก.\nมีประโยชน์สำหรับป้องกัน core และป้อมปืนใน wave แรกๆ.\nคลอบคลุมหลายข่อง. -block.titanium-wall.description = บล็อคป้องกันแข็งแกร่งปานกลาง.\nป้องกันศัตรูได้ในระดับหนึ่ง. -block.titanium-wall-large.description = บล็อคป้องกันแข็งแกร่งปานกลาง.\nป้องกันศัตรูได้ในระดับหนึ่ง.\nคลอบคลุมหลายช่อง. -block.plastanium-wall.description = กำแพงพิเศษที่สามารถดูดซับไฟฟ้าและป้องกันการต่อไฟกับโหนดพลังงานโดยอัตโนมัติได้. -block.plastanium-wall-large.description = กำแพงพิเศษที่สามารถดูดซับไฟฟ้าและป้องกันการต่อไฟกับโหนดพลังงานโดยอัตโนมัติได้.\nคลอบคลุมหลายช่อง. -block.thorium-wall.description = บล็อคป้องกันที่แข็งแรง.\nป้องกันศัตรูได้อย่างดี. -block.thorium-wall-large.description = บล็อคป้องกันที่แข็งแรง.\nป้องกันศัตรูได้อย่างดี.\nคลอบคลุมหลายช่อง. -block.phase-wall.description = กำแพงที่เคลือบด้วยวัสดุสะท้อนพิเศษจำพวก phase. เบี่ยงเบนกระสุนส่วนใหญ่ที่รับมา. -block.phase-wall-large.description = กำแพงที่เคลือบด้วยวัสดุสะท้อนพิเศษจำพวก phase. เบี่ยงเบนกระสุนส่วนใหญ่ที่รับมา.\nคลอบคลุมหลายช่อง. -block.surge-wall.description = บล็อคป้องกันที่มีทนทานสูง.\nสะสมพลังงานจากกระสุน, แล้วปล่อยออกมาแบบสุ่ม. -block.surge-wall-large.description = บล็อคป้องกันที่มีทนทานสูง.\nสะสมพลังงานจากกระสุน, แล้วปล่อยออกมาแบบสุ่ม.\nคลอบคลุมหลายช่อง. -block.door.description = ประตูขนาดเล็ก. สามารถเปิดได้โดยการกด. -block.door-large.description = ประตูขนาดใหญ่. สามารถเปิดและปิดได้โดยการกด.\nคลอบคลุมหลายช่อง. -block.mender.description = ซ่อมแซมบล็อคในวงของมันเป็นระยะๆ. ช่วยซ่อมแซมแนวป้องกันระหว่าง wave.\nสามารถใช้ซิลิก้อนเพื่อเพิ่มรัศมีและประสิทธิภาพได้ -block.mend-projector.description = เมนเดอร์ที่ได้รับการอัปเกรด. ซ่อมแซมบล็อคในระยะของมัน.\nสามารถใช้ใยเฟสเพื่อเพิ่มระยะและประสิทธิภาพได้. -block.overdrive-projector.description = เพิ่มความเร็วของสิ่งก่อสร้างรอบๆ.\nสามารถใช้ใยเฟสเพื่อเพิ่มระยะและประสิทธิภาพ. -block.force-projector.description = สร้างสนามพลังงานหกเหลี่ยมรอบๆตัวเอง ป้องกันสิ่งก่อสร้างและยูนิตภายในสนามพลังงานจากดาเมจ.\nจะร้อนจัดถ้าได้รับดาเมจมากพอ. สามารถใช้สารหล่อเย็นมากันการร้อนจัดได้. สามารถเพิ่มขนาดสนามพลังด้วยใยเฟส. -block.shock-mine.description = ดาเมจศัตรูที่เหยียบ. แถบจะล่องหนต่อศัตรู. -block.conveyor.description = บล็อคขนส่งไอเท็มพื้นฐาน. เคลื่อนไอเท็มไปข้างหน้าและใส่ลงบล็อคโดยอัตโนมัติ. สามารถหมุนได้. -block.titanium-conveyor.description = บล็อคขนส่งไอเท็มขั้นสูง. เคลื่อนไอเท็มเร็วกว่าสายพานทั่วไป. -block.plastanium-conveyor.description = เคลื่อนย้ายไอเท็มเป็นชุด.\nรับไอดท็มจากด้านหลัง, และนำออกไปสามทางข้างหน้า. -block.junction.description = มีหน้าที่เป็นสะพานสำหรับสายพาน 2 สายข้ามกัน. มีประโยชน์สำหรับเวลาสายพาน 2 สายที่ขนไอเท็มมา 2 ชนิดไปยัง 2 สถานที่. -block.bridge-conveyor.description = บล็อคขนส่งไอเท็มขั้นสูง. ทำให้สามารถส่งไอเท็มข้ามบล็อคใดก็ได้ 3 ช่อง. -block.phase-conveyor.description = บล็อคขนส่งไอเท็มขั้นสูง. ใช้พลังงานเพื่อส่งไอเท็มไปยังสายพานเฟสอีกอัน ข้ามได้หลายช่อง. -block.sorter.description = แยกไอเท็ม. ถ้าไอเท็มตรงกับที่เลือกไว้, จะผ่านได้. แต่ถ้าไม่ตรง, ไอเท็มจะออกทางซ้ายหรือขวา (ใช้ทางที่ไอเท็มเข้าเป็นหลัก) -block.inverted-sorter.description = แยกไอเท็มคล้ายเครื่องแยกธรรมดา, แต่ไอเท็มที่เลือกจะออกข้างแทน. -block.router.description = รับไอเท็มแล้วส่งออก 3 ทางเท่าๆกัน. มีประโยชน์สำหรับแยกไอเท็มจากแหล่งเดียวไปหลายที่.\n\n[scarlet]อย่าวางไว้ติดกับทางส่งไอเท็มเข้าเพราะของออกจะไปอุดตันได้.[] -block.distributor.description = เร้าเตอร์ขั้นสูง. แยกไอเท็มออก 7 ทางอย่างเท่าๆกัน. -block.overflow-gate.description = ของจะออกจากข้างๆเมื่อทางข้างหน้ถูกบล็อคเท่านั้น. -block.underflow-gate.description = ตรงข้ามกับประตูระบายไอเท็ม. ส่งออกไอเท็มไปข้างหน้าหากทางซ้ายและขวาถูกบล็อค. -block.mass-driver.description = บล็อคขนส่งไอเท็มขั้นสุดยอด. รวบรวมไอเท็มจำนวนหนึ่งแล้วยิงไปหาแมสไดรเวอร์อีกอันที่อยู่ไกลออกไป. ต้องใช้พลังงานในการใช้งาน. -block.mechanical-pump.description = ปั๊มราคาถูก เอ้าพุธต์ช้า แต่ไม่ใช้พลังงาน. -block.rotary-pump.description = ปั๊มขั้นสูง. ปั๊มของเหลวได้มากขึ้นแค่ใช้พลังงาน. -block.thermal-pump.description = ปั๊มขั้นสุดยอด. -block.conduit.description = บล็อคขนส่งของเหลวพื้นฐาน. เคลื่อนของเหลวไปข้างหน้า. ใช้ร่วมกับปั๊มและรางน้ำอื่นๆ. -block.pulse-conduit.description = บล็อคขนส่งของเหลวขั้นสูง. เคลื่อนย้ายของเหลวเร็วขึ้นและเก็บเยอะกว่ารางน้ำธรรมดา. -block.plated-conduit.description = เคลื่อนย้ายของเหลวได้เร็วพอๆกับ ท่อน้ำพัลซ์, แต่มีเกราะที่หนากว่า. ไม่รับของเหลวจากด้านข้างจากอย่างอื่นนอกจากท่อน้ำด้วยกันเอง.\nรั่วน้อยกว่า. -block.liquid-router.description = รับของเหลวจากทางเดียวแล้วส่งออก 3 ทางเท่าๆกัน. สามารถเก็บของ้หลวได้จำนวนหนึ่ง. มีประโยชน์สำหรับการแยกของเหลวจากแหล่งเดียวไปหลายที่. -block.liquid-tank.description = เก็บของเหลวจำนวนมาก. ใช่สำหรับสร้างบัฟเฟอร์ในเวลาที่ความต้องการของทรัพยากรไม่คงที่หรือเป็นตัวเซฟสำหรับบล็อคที่จำเป็นต้องใช้การหล่อเย็น. -block.liquid-junction.description = ทำหน้าที่เป็นสะพานสำหรับรางน้ำ 2 รางที่ข้ามกันที่มีของเหลว 2 ชนิด ซึ่งต้องการจะไปคนละที่. -block.bridge-conduit.description = บล็อคขนส่งของเหลวขั้นสูง. ขนส่งของเหลวข้ามบล็อคใดๆก็ได้ถึง 3 ช่อง. -block.phase-conduit.description = บล็อคขนส่งของเหลวขั้นสูง. ใช้พลังงานเพื่อขนส่งของเหลวไปที่รางน้ำเฟสข้ามหลายช่อง. -block.power-node.description = ส่งพลังงานไปยังโหลดพลังงานที่เชื้อมต่อ. โหนดจะรับพลังงานจากโหนดอื่นหรือแหล่งผลิตแล้วส่งไปยังบล็อคที่ติดกัน. -block.power-node-large.description = โหนดพลังงานขั้นสูง มีระยะเชื่อมต่อกว้างขึ้น. -block.surge-tower.description = โหนดพลังงานที่มีระยะเชื่อมต่อไกลมากแต่จำนสนการเชื่อมต่อน้อย. -block.diode.description = พลังงานแบตเตอรี่สามารถไหลผ่านบล็อคนี้ได้เพียงทางเดียว แต่เฉพาะเวลาที่อีกด้านมีพลังงานน้อยกว่าเท่านั้น. -block.battery.description = เก็บพลังงานเป็นบัฟเฟอร์เวลาที่มีพลังงานเกิน. และส่งออกพลังงานเมื่อพลังงานไม่พอ. -block.battery-large.description = เก็บพลังงานได้เยอะกว่าแบตเตอรี่ธรรมดา. -block.combustion-generator.description = ผลิตพลังงานโดยการวัสดุติดไฟ เช่นถ่านหิน. -block.thermal-generator.description = ผลิตพลังงานเมื่อวานในที่ร้อน (บนหินร้อนหรือหินแม็คม่า) -block.steam-generator.description = เครื่องกำเนิดไฟฟ้าเผาไหม้ขั้นสูง. ประสิทธิภาพสูงกว่า แต่ต้องใช้น้ำด้วยเพื่อผลิตไอน้ำ. -block.differential-generator.description = ผลิตไฟฟ้าจำนวนมาก. ใช้ความต่างของอุณหภูมิระหว่างไครโยฟลูอิดและไพไรต์ที่กำลังไหม้. -block.rtg-generator.description = เครื่องกำเนิดไฟฟ้าที่ใช้ง่ายและไว้ใจได้. ใช้ความร้อนจากการสลายของสารกัมมัตภาพรังสีเพื่อใช้ผลิตพลังงานอย่างช้าๆ. -block.solar-panel.description = ให้พลังงานจากแสงอาทิตย์จำนวนน้อย. -block.solar-panel-large.description = เวอร์ชั่นของแผงโซล่าเซลล์ที่มีประสิทธิภาพมากขึ้นกว่าแผงโซล่าเซลล์ธรรมดา. -block.thorium-reactor.description = ผลิตพลังงานจำนวนมากจากทอเรี่ยม. จำเป็นต้องใช้สารหล่อเย็นตลอดเวลา. จะระเบิดอย่างรุนแรงหากไม่ได้รับสารหล่อเย็นในจำนวนที่ต้องการ. จำนวนพลังงานที่ผลิตขึ้นอยู่กับความเต็ม และผลิตพลังงานเริ่มต้นที่ความสามารถสูงสุด. -block.impact-reactor.description = เครื่องกำเนิดไฟฟ้าขั้นสูง, สามารถผลิตไฟฟ้าได้จำนวนมหาศาลที่ประสิทธิภาพสูงสุด. จำเป็นต้องใช้พลังงานจำนวนมากในการสตาร์ทเครื่อง. -block.mechanical-drill.description = เครื่องขุดราคาถูก. เมื่อวางบนบล็อคที่ถูกต้อง, จะส่งไอเท็มของมันออกมาเรื่อยๆแบบไม่มีที่สิ้นสุด. ขุดได้แค่ทรัพยากรพื้นฐาน. -block.pneumatic-drill.description = เครื่องขุดได้รับการปรับปรุง, สามารถขุดไทเทเนี่ยมได้. ขุดไวกว่าเครื่องขุดเชิงกล. -block.laser-drill.description = ขุดได้เร็วขึ้นด้วยเทคโนโลยีเลเซอร์ แต่ต้องใช้พลังงาน. สามารถขุดทอเรี่ยมได้. -block.blast-drill.description = เครื่องขุดขั้นสุดยอด. ใช้พลังงานจำนวนมาก. -block.water-extractor.description = ขุดน้ำบาดาล. ใช้ในพื้นที่ที่ไม่มีน้ำบนดินให้ใช้. -block.cultivator.description = รวบรวมสปอร์ในชั้นบรรยากาศเป็นกระเปาะสปอร์สำหรับอุตสาหกรรม. -block.oil-extractor.description = ใช้พลังงาน, ทรายและน้ำเพื่อขุดหาน้ำมัน. -block.core-shard.description = core รุ่นแรก. เมื่อถูกทำลาย การติดต่อกับพื้นที่นั้นทั้งหมดจะหายไป. อย่าให้มันเกิดขึ้น. -block.core-foundation.description = core รุ่นที่ 2 . เสริมเกราะมากขึ้น. เก็บของได้เยอะขึ้น. -block.core-nucleus.description = core รุ่นที่ 3 และเป็นรุ่นสุดท้าย. เสริมเกราะดีมาก. เก็บของได้มหาศาล. -block.vault.description = เก็บของแต่ละชนิดได้เยอะ. สามารถใช้ตัวถ่ายของในการดึงของออกมาได้. -block.container.description = เก็บของแต่ละชนิดได้น้อย. สามารถใช้ตัวถ่ายของในการดึงของออกมาได้. -block.unloader.description = ดึงของออกมาจากบล็อคที่ไม่ใช่บล็อคขนส่งใกล้เคียง. สามารถเปลี่ยนชนิดของของที่จะดึงได้โดยการกด. -block.launch-pad.description = ส่งของจำนวนหนึ่งได้เลยโดยไม่ต้องรอส่ง core. -block.launch-pad-large.description = ฐานส่งของเวอร์ชั่นพัฒนาแล้ว. เก็บไอเท็มเยอะขึ้น. ส่งของบ่อยขึ้น. -block.duo.description = ป้อมปืนราคาถูกขนาดเล็ก. มีประโยชน์สำหรับยูนิตภาคพื้นดิน. -block.scatter.description = ป้อมปืนต่อต้านอากาศยานหลัก. ยิงก้อนตะกั่วหรือเศษเหล็กใส่ศัตรู. -block.scorch.description = เผาศัตรูภาคพื้นดินที่อยู่ใกล้ๆ. มีประสิทธิภาพสูงสุดเมื่อใช้ในระยะใกล้. -block.hail.description = ป้อมปืนใหญ่ขนาดเล็ก. -block.wave.description = ป้อมปืนขนาดกลาง. พ่นของเหลวสานศัตรู. ดับไฟให้โดยอัตโนมัติถ้าใส่น้ำให้. -block.lancer.description = ป้อมปืนเลเซอร์ต่อต้านภาคพื้นดินขนาดกลาง. ชาร์จและยิงลำแสงพลังงานที่ทรงพลัง. -block.arc.description = ป้อมปืนไฟฟ้าระยะใกล้. ยิงสายฟ้าใส่ศัตรู. -block.swarmer.description = ป้อมยิงขีปนาวุธขนาดกลาง. โจมตีศัตรูทั้งอากาศและภาคพื้นดิน. ยิงขีปนาวุธขนิดติดตาม. -block.salvo.description = ป้อมปืนดูโอเวอร์ชั่นขั้นสูงกว่า. ระดมยิงกระสุนใส่ศัตรู. -block.fuse.description = ป้อมปืนระยะใกล้ขนาดใหญ่. ยิงลำแสงทะลุทะลวง 3 เส้นใส่ศัตรู. -block.ripple.description = ป้อมปืนใหญ่ที่มีพลังงานสูง. ยิงกระจุกของกระสุนใส่ศัตรูจาดระยะไกล. -block.cyclone.description = ป้อมปืนต่อต้านอากาศยานและต่อต้านภาคพื้นดิน. ยิงกระจุของกระสุนระเบิดใส่ยูนิตศัตรู. -block.spectre.description = ปืนใหญ่ลำกล้องคูขนาดยักษ์. ยิงกระสุนเจาะเกราะใส่ศัตรูทั้งบนอากาศและภาดพื้นดิน. -block.meltdown.description = ปืนใหญ่เลเซอร์ขนาดยักษ์. ชาร์จแล้วยิงลำแสงเลเซอร์ใส่ศัตรูที่อยู่ใกล้. จำเป็นต้องใช้สารหล่อเย็น. -block.repair-point.description = ซ่อมแซมยูนิตที่อยู่ในรัศมีอย่างต่อเนื่อง. -block.segment.description = ทำดาเมจและทำลายโปรเจกไตล์ที่กำลังเข้ามา. โปรเจกไตล์เลเซอร์จะไม่ถูกล็อคเป้าด้วยบล็อคนี้. +liquid.water.description = ใช้ในการระบายความร้อนให้กับสิ่งก่อสร้างและจัดการของเสียต่างๆ +liquid.water.details = ของเหลวที่มีประโยชน์อย่างมาก พบได้แทบทุกที่บนดาว[accent]เซอร์ปูโล่[] +liquid.slag.description = สามารถนำไปแยกเป็นวัสดุต่างๆ หรือเป็นอาวุธพ่นใส่ศัตรู +liquid.slag.details = โลหะชนิดต่างๆซึ่งหลอมรวมกัน ร้อนและไม่เสถียรอย่างมาก ควรกักเก็บไว้อย่างไม่ประมาท เพราะอาจเป็นปัญหาได้หากรั่ว +liquid.oil.description = ใช้ในการผลิตวัสดุขั้นสูง สามารถแปรรูปเป็นถ่านหินเพื่อใช้เป็นเชื้อเพลิง หรือเป็นอาวุธเพื่อพ่นใส่ศัตรูเพื่อให้ศัตรูติดสถานะ[accent]เปื้อนน้ำมัน[] +liquid.oil.details = ของเหลวเฉื่อยพบได้ไม่ยากแต่ก็ไม่ง่าย ไวไฟเป็นอย่างมาก จึงต้องระวังอย่าให้มันแตะต้องกับไฟ +liquid.cryofluid.description = ใช้ในการหล่อเย็นเตาปฏิกร สิ่งก่อสร้างหรือโรงงานต่างๆ +liquid.cryofluid.details = ของเหลวเฉื่อยและไม่กัดกร่อน ผลิตจากน้ำและไทเทเนี่ยม มีคุณสมบัติการถ่ายเทความร้อนสูง + +block.resupply-point.description = เติมกระสุนยูนิตรอบข้างด้วยกระสุนทองแดง ใช้ไม่ได้กับยูนิตที่ใช้พลังงานเป็นกระสุน +block.armored-conveyor.description = เลื่อนไอเท็มไปข้างหน้า เร็วเท่าสายพานไทเทเนี่ยม แต่มีเกราะที่แข็งแรงกว่า ไม่รับไอเท็มจากด้านข้างยกเว้นเป็นสายพานชนิดเดียวกัน +block.illuminator.description = ตัวเปล่งแสงขนาดกะทัดรัด ส่องสว่างในที่มืดได้ดี\nแถมยังกำหนดสีของแสงได้ด้วย... เจ๋งใช่มั้ยล่ะ +block.message.description = เก็บข้อความ ใช้สื่อสารกับพันธมิตร +block.graphite-press.description = อัดก้อนถ่านหินให้เป็นแผ่นกราไฟต์บริสุทธิ์ +block.multi-press.description = อัดก้อนถ่านหินให้เป็นแผ่นกราไฟต์บริสุทธิ์ ใช้น้ำและพลังงานในการแปรรูปถ่านหินให้เร็วและมีประสิทธิภาพมากขึ้น +block.silicon-smelter.description = ผลิตซิลิกอนจากทรายและถ่านหินบริสุทธิ์ +block.kiln.description = เผาทรายและตะกั่วเป็นกระจกเมต้า +block.plastanium-compressor.description = บีบอัดน้ำมันและไทเทเนี่ยมเข้าด้วยกันเพื่อผลิตพลาสตาเนี่ยม +block.phase-weaver.description = สังเคราะห์ใยเฟสจากทรายและทอเรี่ยม ใช้พลังงานจำนวนมากในการทำงาน +block.alloy-smelter.description = หลอมรวมไทเทเนี่ยม ตะกั่ว ซิลิกอนและทองแดงเพื่อผลิตเซิร์จอัลลอย +block.cryofluid-mixer.description = ผสมน้ำและผงไทเทเนี่ยมบริสุทธิ์เป็นสารหล่อเย็น\nสำคัญสำหรับเตาปฏิกรณ์ทอเรี่ยม +block.blast-mixer.description = ผสมสปอร์กับไพราไทต์เพื่อผลิตสารประกอบระเบิด +block.pyratite-mixer.description = ผสมถ่านหิน ตะกั่วและทรายเข้าด้วยกันเป็นไพราไทต์ +block.melter.description = หลอมเศษเหล็กเป็นแร่หลอมเพื่อใช้ในกระบวนการแยกแร่\nหรือใช้เป็นอาวุธเผาศัตรู +block.separator.description = แยกแร่หลอมออกเป็นส่วนประกอบแร่ธาตุของมัน +block.spore-press.description = อัดกระเปาะสปอร์ด้วยแรงกดมหาศาลเพื่อสังเคราะห์น้ำมัน +block.pulverizer.description = บดเศษเหล็กให้เป็นทรายละเอียด +block.coal-centrifuge.description = แปรรูปน้ำมันให้กลายเป็นถ่านหิน +block.incinerator.description = เผาทำลายไอเท็มหรือของเหลวทุกอย่างที่ได้รับมา +block.power-void.description = ดูดพลังงานทั้งหมดที่ได้รับ มีเฉพาะโหมดอิสระ +block.power-source.description = ส่งออกพลังงานอย่างไม่จำกัด มีเฉพาะโหมดอิสระ +block.item-source.description = ส่งออกไอเท็มอย่างไม่จำกัด มีเฉพาะโหมดอิสระ +block.item-void.description = ทำลายไอเท็มทุกชนิดที่เข้ามา มีเฉพาะโหมดอิสระ +block.liquid-source.description = ส่งออกของเหลวอย่างไม่จำกัด มีเฉพาะโหมดอิสระ +block.liquid-void.description = ระเหยของเหลวทุกชนิดที่เข้ามา มีเฉพาะโหมดอิสระ +block.payload-source.description = ส่งออกสิ่งบรรทุกอย่างไม่จำกัด มีเฉพาะโหมดอิสระ +block.payload-void.description = ทำลายสิ่งบรรทุกทุกชนิดที่เข้ามา มีเฉพาะโหมดอิสระ +block.copper-wall.description = ป้องกันสิ่งก่อสร้างจากศัตรู +block.copper-wall-large.description = ป้องกันสิ่งก่อสร้างจากศัตรู ครอบคลุมหลายช่อง +block.titanium-wall.description = ป้องกันสิ่งก่อสร้างจากศัตรู แข็งแรงอยู่นิดหน่อย +block.titanium-wall-large.description = ป้องกันสิ่งก่อสร้างจากศัตรู แข็งแรงอยู่นิดหน่อย ครอบคลุมหลายช่อง +block.plastanium-wall.description = ป้องกันสิ่งก่อสร้างจากศัตรู ค่อนข้างแข็งแรง\nสามารถดูดซับพลังงานไฟฟ้าและเลเซอร์ และป้องกันการต่อไฟกับตัวจ่ายพลังงานโดยอัตโนมัติได้ +block.plastanium-wall-large.description = ป้องกันสิ่งก่อสร้างจากศัตรู ค่อนข้างแข็งแรง\nสามารถดูดซับพลังงานไฟฟ้าและเลเซอร์ และป้องกันการต่อไฟกับตัวจ่ายพลังงานโดยอัตโนมัติได้\nครอบคลุมหลายช่อง +block.thorium-wall.description = ป้องกันสิ่งก่อสร้างจากศัตรู แข็งแรงมาก ป้องกันศัตรูได้อย่างดี +block.thorium-wall-large.description = ป้องกันสิ่งก่อสร้างจากศัตรู แข็งแรงมาก ป้องกันศัตรูได้อย่างดี\nครอบคลุมหลายช่อง +block.phase-wall.description = ป้องกันสิ่งก่อสร้างจากศัตรู ทนทานและแข็งแรง\nเคลือบด้วยวัสดุพิเศษที่สะท้อนกระสุนส่วนใหญ่ที่รับมา +block.phase-wall-large.description = ป้องกันสิ่งก่อสร้างจากศัตรู ทนทานและแข็งแรง\nเคลือบด้วยวัสดุพิเศษที่สะท้อนกระสุนส่วนใหญ่ที่รับมา\nครอบคลุมหลายช่อง +block.surge-wall.description = ป้องกันสิ่งก่อสร้างจากศัตรู แข็งแกร่งอย่างมาก\nปล่อยพลังงานสายฟ้าออกมาเป็นระยะๆ เมื่อถูกโจมตี +block.surge-wall-large.description = ป้องกันสิ่งก่อสร้างจากศัตรู แข็งแกร่งอย่างมาก\nปล่อยพลังงานสายฟ้าออกมาเป็นระยะๆ เมื่อถูกโจมตี\nครอบคลุมหลายช่อง +block.scrap-wall.description = เศษซากของกำแพงที่เคยปกป้องสิ่งก่อสร้างจากศัตรู\nในช่วงสมัยสงครามเก่าแก่ +block.scrap-wall-large.description = เศษซากของกำแพงขนาดใหญ่ที่เคยปกป้องสิ่งก่อสร้างจากศัตรู\nในช่วงสมัยสงครามเก่าแก่ +block.scrap-wall-huge.description = เศษซากของกำแพงขนาดยักษ์ที่เคยปกป้องสิ่งก่อสร้างจากศัตรู\nในช่วงสมัยสงครามเก่าแก่ +block.scrap-wall-gigantic.description = เศษซากของกำแพงขนาดมหึมาที่เคยปกป้องสิ่งก่อสร้างจากศัตรู\nในช่วงสมัยสงครามเก่าแก่ +block.door.description = กำแพงที่สามารถเปิด/ปิดได้ ไว้ใช้เพื่อให้ยูนิตเดินผ่าน +block.door-large.description = กำแพงที่สามารถเปิด/ปิดได้ ไว้ใช้เพื่อให้ยูนิตเดินผ่าน\nครอบคลุมหลายช่อง +block.mender.description = ซ่อมแซมสิ่งก่อสร้างในวงของมันอย่างช้าๆ\สามารถใช้ซิลิกอนเพื่อเพิ่มระยะและประสิทธิภาพได้ +block.mend-projector.description = ซ่อมแซมสิ่งก่อสร้างในวงของมันอย่างล้นเหลือ\nสามารถใช้ใยเฟสเพื่อเพิ่มระยะและประสิทธิภาพได้ +block.overdrive-projector.description = เพิ่มความเร็วของสิ่งก่อสร้างรอบๆ\nสามารถใช้ใยเฟสเพื่อเพิ่มระยะและประสิทธิภาพ +block.force-projector.description = สร้างสนามพลังงานหกเหลี่ยมรอบๆ ตัวเอง ป้องกันสิ่งก่อสร้างและยูนิตภายในสนามพลังงานจากการโจมตี\nจะร้อนจัดถ้าได้รับดาเมจมากพอ สามารถใช้น้ำหรือสารหล่อเย็นมาระบายความร้อนได้ สามารถเพิ่มขนาดสนามพลังได้ด้วยใยเฟส +block.shock-mine.description = ปล่อยพลังงานสายฟ้าเมื่อศัตรูเหยียบกับดัก +block.conveyor.description = เลื่อนไอเท็มไปข้างหน้า +block.titanium-conveyor.description = เลื่อนไอเท็มไปข้างหน้า เลื่อนเร็วกว่าสายพานปกติ +block.plastanium-conveyor.description = เคลื่อนย้ายไอเท็มเป็นชุด\nรับไอเท็มจากด้านหลัง และนำออกไปสามทางข้างหน้า +block.junction.description = มีหน้าที่เป็นสะพานสำหรับสายพานสองสายข้ามกัน มีประโยชน์สำหรับเวลาสายพานสองสาย\nขนไอเท็มสองชนิดไปยังสองสถานที่ +block.bridge-conveyor.description = เคลื่อนย้ายไอเท็มข้ามสิ่งก่อสร้างหรือกำแพง +block.phase-conveyor.description = เคลื่อนย้ายไอเท็มข้ามสิ่งก่อสร้างหรือกำแพงด้วยความเร็วแสง\nมีระยะที่ไกลกว่าสะพานไอเท็ม แต่ต้องใช้พลังงาน +block.sorter.description = ถ้าไอเท็มที่เข้าไปข้างในตรงกับที่เลือกไว้ ก็จะผ่านได้ แต่ถ้าไม่ตรง ไอเท็มก็จะถูกส่งออกไปทางซ้ายขวาแทน +block.inverted-sorter.description = แยกไอเท็มคล้ายกับเครื่องคัดแยกธรรมดา แต่ไอเท็มที่เลือกจะออกทางซ้ายขวาแทน +block.router.description = รับไอเท็มแล้วส่งออกสามทางเท่าๆกัน มีประโยชน์สำหรับแยกไอเท็มจากแหล่งเดียวไปหลายที่ +block.router.details = สิ่งชั่วร้ายที่เราจำเป็นต้องใช้ ไม่แนะนำให้ใช้ติดกันกับโรงงาน เพราะของจะถูกอุดตันและปนกันมั่วไปหมด +block.distributor.description = แยกไอเท็มออกเป็นเจ็ดทางเท่าๆ กัน +block.overflow-gate.description = ไอเท็มจะถูกระบายออกทางซ้ายขวาเมื่อข้างหน้าถูกบล็อก +block.underflow-gate.description = ตรงข้ามกับประตูระบาย จะระบายไอเท็มไปข้างหน้าหากทางซ้ายและขวาถูกบล็อก +block.mass-driver.description = บล็อกขนส่งไอเท็มทางไกล รวบรวมไอเท็มจำนวนหนึ่งแล้ว\nยิงไปหาเครื่องโอนถ่ายมวลอีกเครื่องที่อยู่ไกลออกไป +block.mechanical-pump.description = ปั้มของเหลวขึ้นมา ไม่ใช้พลังงาน +block.rotary-pump.description = ปั๊มของเหลวได้มากขึ้น แต่ต้องใช้พลังงาน +block.thermal-pump.description = ปั๊มขั้นสุดยอด ปั้มของเหลวขึ้นมาได้เป็นจำนวนมาก +block.conduit.description = เคลื่อนย้ายของเหลวไปข้างหน้า ใช้ร่วมกับปั๊มและท่อน้ำอื่นๆ +block.pulse-conduit.description = เคลื่อนย้ายของเหลวไปข้างหน้า เคลื่อนย้ายได้เร็วขึ้นและเก็บของเหลวได้เยอะกว่าท่อน้ำธรรมดา +block.plated-conduit.description = เคลื่อนย้ายของเหลวไปข้างหน้า ไม่รับของเหลวจากด้านข้างนอกจากท่อน้ำด้วยกันเอง\nไม่รั่ว และมีเกราะที่หนากว่า +block.liquid-router.description = รับของเหลวจากทางเดียวแล้วส่งออกสามทางเท่าๆกัน สามารถเก็บของเหลวได้จำนวนหนึ่ง\nมีประโยชน์สำหรับการส่งของเหลวจากปั้มไปยังหลายที่ +block.liquid-tank.description = เก็บของเหลวจำนวนมาก ส่งออกไปรอบด้านคล้ายกับเร้าเตอร์ของเหลว\nใช้สำหรับสร้างกันชนในเวลาที่ของเหลวไม่คงที่หรือเวลาที่ใช้ของเหลว\nเป็นจำนวนมาก +block.liquid-junction.description = ทำหน้าที่เป็นสะพานสำหรับท่อน้ำสองท่อตัดกันที่มีของเหลวสองชนิดแล้วจะไปคนละที่ +block.bridge-conduit.description = เคลื่อนย้ายของเหลวข้ามสิ่งก่อสร้างหรือกำแพง +block.phase-conduit.description = เคลื่อนย้ายของเหลวข้ามสิ่งก่อสร้างหรือกำแพงด้วยความเร็วแสง\nมีระยะที่ไกลกว่าสะพานของเหลว แต่ต้องใช้พลังงาน +block.power-node.description = ส่งพลังงานไปยังตัวจ่ายพลังงานที่เชื่อมต่อ ตัวจ่ายจะรับพลังงานจากตัวจ่ายอื่น\nหรือแหล่งพลังงานแล้วส่งไปยังบล็อกที่ติดกัน +block.power-node-large.description = ตัวจ่ายพลังงานขั้นสูง มีระยะเชื่อมต่อกว้างขึ้น เชื่อมต่อได้มากขึ้น +block.surge-tower.description = ตัวจ่ายพลังงานที่มีระยะเชื่อมต่อไกลมากแต่เชื่อมต่อได้น้อย\nไว้ใช้สำหรับส่งพลังงานไปที่ไกลๆ +block.diode.description = พลังงานแบตเตอรี่สามารถไหลผ่านบล็อกนี้ได้เพียงทางเดียว แต่เฉพาะเวลาที่อีกด้านมีพลังงานน้อยกว่าเท่านั้น +block.battery.description = เก็บพลังงานเป็นกันชนเวลาที่มีพลังงานเกิน และส่งออกพลังงานเมื่อพลังงานไม่พอ +block.battery-large.description = เก็บพลังงานเป็นกันชนเวลาที่มีพลังงานเกิน และส่งออกพลังงานเมื่อพลังงานไม่พอ\nเก็บพลังงานได้เยอะกว่าแบตเตอรี่ธรรมดา +block.combustion-generator.description = ผลิตพลังงานจากการเผาไหม้วัสดุติดไฟ อย่างเช่นถ่านหิน +block.thermal-generator.description = ผลิตพลังงานเมื่อวางในพื้นที่ร้อน +block.steam-generator.description = เครื่องกำเนิดไฟฟ้าเผาไหม้ขั้นสูง ประสิทธิภาพสูงกว่า แต่ต้องใช้น้ำด้วยเพื่อผลิตไอน้ำ +block.differential-generator.description = ผลิตไฟฟ้าจำนวนมาก ใช้ความต่างของอุณหภูมิระหว่าง\nสารหล่อเย็นและไพราไทต์อันร้อนแรงเพื่อผลิตพลังงานออกมา +block.rtg-generator.description = เครื่องกำเนิดไฟฟ้าที่ใช้ง่ายและไว้ใจได้\nใช้ความร้อนจากการสลายตัวของสารกัมมันตภาพรังสีมาผลิตพลังงาน\nอย่างช้าๆ +block.solar-panel.description = ผลิตพลังงานจากแสงอาทิตย์อย่างน้อยๆ +block.solar-panel-large.description = ผลิตพลังงานจากแสงอาทิตย์อย่างพอประมาณ มีประสิทธิภาพมากกว่าแผงโซล่าเซลล์ธรรมดา +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.blast-drill.description = เครื่องขุดขั้นสุดยอด ใช้พลังงานจำนวนมาก +block.water-extractor.description = ขุดน้ำบาดาลจากใต้พื้นดิน ใช้ในพื้นที่ที่ไม่มีน้ำบนดินให้ใช้ +block.cultivator.description = รวบรวมสปอร์ในชั้นบรรยากาศมาสกัดเป็นกระเปาะสปอร์สำหรับ\nอุตสาหกรรม +block.cultivator.details = เทคโนโลยีที่กอบกู้มาได้ ใช้สำหรับสกัดชีวมวลจำนวนมหาศาล\nอย่างมีประสิทธิภาพให้ได้มากที่สุด\nน่าจะเป็นศูนย์บ่มเพาะเริ่มแรกของสปอร์ที่ตอนนี้\nครอบคลุมดาว[accent]เซอร์ปูโล่[] +block.oil-extractor.description = ใช้พลังงานจำนวนมากกับทรายและน้ำเพื่อขุดหาน้ำมัน +block.core-shard.description = แกนกลางเป็นใจกลางของฐานทัพ เมื่อถูกทำลาย การติดต่อกับพื้นที่นั้นทั้งหมดจะหายไป อย่าให้มันเกิดขึ้น +block.core-shard.details = แกนกลางรุ่นแรก กะทัดรัด แยกร่างได้ ติดตั้งด้วยเครื่องยนต์จรวดสำหรับใช้ครั้งเดียว ไม่ได้ออกแบบมาเพื่อไปอวกาศ +block.core-foundation.description = ใจกลางของฐานทัพ เสริมเกราะมากขึ้น เก็บของได้เยอะกว่าชาร์ด +block.core-foundation.details = แกนกลางรุ่นที่สอง ยานบินเบต้าที่ดีกว่าจะปกป้องแกนกลางนี้ไว้ +block.core-nucleus.description = ใจกลางของฐานทัพ เสริมเกราะอย่างดีเยี่ยม เก็บของได้มหาศาล +block.core-nucleus.details = แกนกลางรุ่นที่สามและเป็นรุ่นสุดท้าย ยานบินสุดยอดแกมม่าจะปกป้องแกนกลางนี้ไว้ +block.vault.description = เก็บไอเท็มแต่ละชนิดได้จำนวนมาก สามารถใช้ตัวถ่ายไอเท็มในการดึงไอเท็มออกมาได้ +block.container.description = เก็บไอเท็มแต่ละชนิดได้นิดหน่อย สามารถใช้ตัวถ่ายไอเท็มในการดึงไอเท็มออกมาได้ +block.unloader.description = ดึงไอเท็มที่เลือกไว้ออกมาจากบล็อกใกล้เคียง +block.launch-pad.description = ส่งไอเท็มเป็นชุดๆ ไปยังเซ็กเตอร์ที่เลือกไว้ +block.duo.description = ป้อมปืนขนาดเล็ก ยิงกระสุนที่อยู่ในตัวมันใส่ศัตรู +block.scatter.description = ยิงก้อนตะกั่ว เศษเหล็กหรือกระจกเมต้าใส่ยานบินศัตรูที่อยู่ใกล้เคียง +block.scorch.description = เผาศัตรูพื้นดินที่อยู่ใกล้ๆ มีประสิทธิภาพสูงสุดเมื่อใช้ในระยะใกล้ +block.hail.description = ป้อมปืนใหญ่ขนาดย่อม ยิงลูกระเบิดใส่ศัตรูพื้นดินจากระยะไกล +block.wave.description = ป้อมปืนขนาดกลาง พ่นของเหลวสาดใส่ศัตรู จะดับไฟให้อัตโนมัติเมื่อใส่น้ำเข้าไป +block.lancer.description = ป้อมปืนเลเซอร์ต่อต้านพื้นดินขนาดกลาง ชาร์จและยิงลำแสงพลังงานอันทรงพลังใส่ศัตรู +block.arc.description = ป้อมปืนไฟฟ้าระยะใกล้ ยิงสายฟ้าใส่ศัตรูพื้นดิน จะทำดาเมจมหาศาลเมื่อศัตรูเปียกน้ำ +block.swarmer.description = ป้อมยิงขีปนาวุธขนาดกลาง ยิงขีปนาวุธติดตามตัวใส่ศัตรูทั้งอากาศและพื้นดิน +block.salvo.description = ป้อมปืนขนาดกลาง ระดมยิงกระสุนหนักใส่ศัตรูอย่างรวดเร็ว +block.fuse.description = ป้อมปืนระยะใกล้ขนาดใหญ่ ยิงลำแสงเจาะทะลุสามเส้นใส่ศัตรูที่อยู่ใกล้เคียง +block.ripple.description = ป้อมปืนใหญ่พลังงานสูง ยิงกระจุกของลูกระเบิดใส่ศัตรูพื้นดินจากระยะไกล +block.cyclone.description = ป้อมปืนต่อต้านทั้งอากาศยานและพื้นดิน ยิงกระสุนเป็นกระจุกระเบิดใส่ยูนิตศัตรูอย่างรวดเร็ว +block.spectre.description = ปืนใหญ่คู่ขนาดยักษ์ ยิงกระสุนเจาะเกราะใส่ศัตรูทั้งบนอากาศและพื้นดิน +block.meltdown.description = ชาร์จแล้วยิงลำแสงเลเซอร์ใส่ศัตรูที่อยู่ใกล้เคียงอย่างต่อเนื่อง ต้องมีของเหลวมาหล่อเย็นป้อมปืนเพื่อทำงาน +block.foreshadow.description = ป้อมปืนเรลกันขนาดมหึมา ยิงลำแสงพลังงานใส่เป้าหมายเดี่ยวขนาดใหญ่\nมีระยะการยิงไกลมาก จะเลือกยิงยูนิตที่มีพลังชีวิตมากที่สุดก่อน +block.repair-point.description = ซ่อมแซมยูนิตที่อยู่ในรัศมีอย่างต่อเนื่อง +block.segment.description = สร้างความเสียหายและทำลายกระสุนที่กำลังเข้ามา ไม่สามารถทำลายลำแสงเลเซอร์ได้ +block.parallax.description = ยิงลำแสงที่ดึงยานบินศัตรูเข้าหา สร้างความเสียหายแก่พวกมันระหว่างทาง +block.tsunami.description = ยิงกระแสของเหลวอันทรงพลังใส่ศัตรู จะดับไฟให้อัตโนมัติเมื่อใส่น้ำเข้าไป +block.silicon-crucible.description = หลอมซิลิกอนจากทรายและถ่าน ใช้ไพราไทต์เป็นแหล่งความร้อนเพิ่มเติม ทำงานเร็วกว่าถ้าตั้งอยู่ในพื้นที่ร้อน +block.disassembler.description = แยกแร่หลอมออกเป็นแร่ธาตุปริมาณเล็กน้อยโดยมีประสิทธิภาพต่ำ สามารถผลิตทอเรี่ยมได้ +block.overdrive-dome.description = เร่งประสิทธิภาพสิ่งก่อสร้างรอบข้างอย่างมหาศาล ต้องมีใยเฟสกับซิลิกอนเพื่อทำงาน +block.payload-conveyor.description = เคลื่อนย้ายสิ่งของบรรทุกหนัก อย่างเช่นยูนิต +block.payload-router.description = แยกสิ่งของบรรทุกออกเป็นสามทิศทาง +block.command-center.description = ควบคุมและสั่งการยูนิตด้วยคำสั่งที่มีมากมาย +block.ground-factory.description = ผลิตยูนิตทางบก ยูนิตที่ผลิตสามารถใช้ได้เลย หรือนำไปใส่ในเครื่องพัฒนาเพื่ออัพเกรด +block.air-factory.description = ผลิตยูนิตทางอากาศ ยูนิตที่ผลิตสามารถใช้ได้เลย หรือนำไปใส่ในเครื่องพัฒนาเพื่ออัพเกรด +block.naval-factory.description = ผลิตยูนิตเรือ ยูนิตที่ผลิตสามารถใช้ได้เลย หรือนำไปใส่ในเครื่องพัฒนาเพื่ออัพเกรด +block.additive-reconstructor.description = อัพเกรดยูนิตที่อยู่ข้างในให้เป็นรุ่นที่สอง +block.multiplicative-reconstructor.description = อัพเกรดยูนิตที่อยู่ข้างในให้เป็นรุ่นที่สาม +block.exponential-reconstructor.description = อัพเกรดยูนิตที่อยู่ข้างในให้เป็นรุ่นที่สี่ +block.tetrative-reconstructor.description = อัพเกรดยูนิตที่อยู่ข้างในให้เป็นรุ่นที่ห้าและรุ่นสุดท้าย +block.switch.description = สวิตช์เปิดปิดได้ สามารถควบคุมหรืออ่านค่าได้ด้วยตัวประมวลผลลอจิก +block.micro-processor.description = รันคำสั่งลอจิกเป็นลำดับวนไปวนมา สามารถใช้ควบคุมยูนิตหรือสิ่งก่อสร้าง ไม่ค่อยเร็วเท่าไหร่ +block.logic-processor.description = รันคำสั่งลอจิกเป็นลำดับวนไปวนมา สามารถใช้ควบคุมยูนิตหรือสิ่งก่อสร้าง ค่อนข้างเร็ว มีระยะการเชื่อมต่อที่ค่อนข้างไกล +block.hyper-processor.description = รันคำสั่งลอจิกเป็นลำดับวนไปวนมา สามารถใช้ควบคุมยูนิตหรือสิ่งก่อสร้าง เร็วอย่างมาก และเชื่อมต่อได้ไกลมาก แต่ต้องใช้สารหล่อเย็นในการทำงาน +block.memory-cell.description = เก็บข้อมูลเป็นตัวเลขสำหรับตัวประมวลผลลอจิกไว้สื่อสารกันไปมา +block.memory-bank.description = เก็บข้อมูลเป็นตัวเลขสำหรับตัวประมวลผลลอจิกไว้สื่อสารกันไปมา มีพื้นที่เยอะมาก +block.logic-display.description = แสดงกราฟิกโดยควบคุมจากตัวประมวลผลลอจิก +block.large-logic-display.description = แสดงกราฟิกโดยควบคุมจากตัวประมวลผลลอจิก มีขนาดใหญ่กว่า +block.interplanetary-accelerator.description = หอคอยเรลกันแม่เหล็กไฟฟ้าขนาดมหึมา เร่งความเร็วแกนกลางเพื่อบินสู่อวกาศไปยังดาวเคราะห์อื่นๆ + +unit.dagger.description = ยิงกระสุนธรรมดาใส่ศัตรูที่อยู่ใกล้เคียง +unit.mace.description = ยิงเปลวไฟใส่ศัตรูที่อยู่ใกล้เคียง ทำให้ศัตรูถูกเผาไหม้ +unit.fortress.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.crawler.description = วิ่งเข้าหาศัตรูแล้วระเบิดตัวเอง ทำให้เกิดระเบิดขนาดใหญ่ +unit.atrax.description = ยิงลูกแก้วแร่หลอมใส่เป้าหมายพื้นดิน ทำให้ศัตรูถูกเผาไหม้ สามารถเหยียบข้ามกำแพงได้ +unit.spiroct.description = ยิงเลเซอร์ทอนกำลังใส่ศัตรู ซ่อมแซมตัวเองไปในตัว สามารถเหยียบข้ามกำแพงได้ +unit.arkyid.description = ยิงเลเซอร์ทอนกำลังขนาดใหญ่ใส่ศัตรู ซ่อมแซมตัวเองไปในตัว สามารถเหยียบข้ามกำแพงได้ +unit.toxopid.description = ยิงระเบิดไฟฟ้าขนาดใหญ่และเลเซอร์เจาะทะลุใส่ศัตรู สามารถเหยียบข้ามกำแพงได้ +unit.flare.description = ยิงกระสุนธรรมดาไปที่เป้าหมายพื้นดินที่อยู่ใกล้เคียง +unit.horizon.description = ทิ้งกลุ่มระเบิดขนาดเล็กใส่เป้าหมายพื้นดิน +unit.zenith.description = ระดมยิงขีปนาวุธติดตามตัวใส่ศัตรูที่อยู่ใกล้เคียง +unit.antumbra.description = สาดกระสุนและยิงขีปนาวุธติดตามตัวใส่ศัตรูที่อยู่ใกล้เคียง +unit.eclipse.description = ยิงเลเซอร์เจาะทะลุสองกระบอกและยิงกระสุนระเบิดใส่ศัตรูที่อยู่ใกล้เคียง +unit.mono.description = ขุดทองแดงและตะกั่วให้โดยอัตโนมัติ แล้วนำกลับไปยังแกนกลาง +unit.poly.description = สร้างสิ่งก่อสร้างที่ถูกทำลายให้ใหม่โดยอัตโนมัติและคอยช่วยเหลือ\nยูนิตอื่นๆ ในการก่อสร้าง +unit.mega.description = ซ่อมแซมสิ่งก่อสร้างที่เสียหายให้โดยอัตโนมัติ สามารถบรรทุกบล็อกและยูนิตพื้นดินขนาดเล็กได้ +unit.quad.description = ทิ้งระเบิดขนาดใหญ่ลงบนเป้าหมายพื้นดิน ซ่อมแซมสิ่งก่อสร้างของพวกพ้องและสร้างความเสียหายแก่ศัตรู สามารถบรรทุกยูนิตพื้นดินขนาดกลางได้ +unit.oct.description = ปกป้องพวกพ้องที่อยู่ใกล้เคียงด้วยโล่พลังงาน สามารถบรรทุกยูนิตภาคพื้นดินได้แทบทุกตัว +unit.risso.description = ยิงขีปนาวุธและสาดกระสุนจำนวนมากใส่ศัตรูใกล้เคียง +unit.minke.description = ยิงกระสุนหนักและกระสุนธรรมดาไปยังเป้าหมายพื้นดินที่อยู่ใกล้เคียง\nให้สถานะ[accent]โอเวอร์คล็อก[]แก่พวกพ้องรอบข้าง ทำให้ยิงเร็วและแรงขึ้น +unit.bryde.description = ยิงกระสุนปืนใหญ่พิสัยไกลและขีปนาวุธติดตามตัวใส่ศัตรู +unit.sei.description = ยิงขีปนาวุธติดตามตัวและกระสุนเจาะเกราะใส่ศัตรู +unit.omura.description = ยิงลำแสงปืนเรลกันเจาะทะลุระยะไกลใส่ศัตรู สร้างยูนิตแฟลร์ +unit.alpha.description = ปกป้องแกนกลางชาร์ดจากศัตรู สร้างสิ่งต่างๆ +unit.beta.description = ปกป้องแกนกลางฟาวน์เดชั่นจากศัตรู สร้างสิ่งต่างๆ +unit.gamma.description = ปกป้องแกนกลางนิวเคลียสจากศัตรู สร้างสิ่งต่างๆ + +lst.read = อ่านเลขจากเซลล์ความจำที่เชื่อมต่อไว้ +lst.write = เขียนเลขไปยังเซลล์ความจำที่เชื่อมต่อไว้ +lst.print = เพิ่มข้อความไปยังคิวข้อความ\nข้อความจะยังไม่แสดงจนกว่าจะใช้ [accent]Print Flush[] +lst.draw = เพิ่มรูปไปยังคิวการวาด\nจะภาพยังไม่แสดงจนกว่าจะใช้ [accent]Draw Flush[] +lst.drawflush = ปล่อยคิว[accent]วาด[]ไปยังหน้าจอลอจิกที่เชื่อมต่อไว้ +lst.printflush = ปล่อยคิว[accent]ปริ้น[]ไปยังตัวเก็บข้อความที่เชื่อมต่อไว้ +lst.getlink = รับลิงค์จากตัวประมวลผลตามดัชนี เริ่มที่ 0 +lst.control = ควบคุมสิ่งก่อสร้าง +lst.radar = เรดาร์หายูนิตที่อยู่รอบๆ สิ่งก่อสร้าง โดยระยะการตรวจสอบขึ้นอยู่กับระยะสิ่งก่อสร้าง +lst.sensor = รับข้อมูลจากสิ่งก่อสร้างหรือยูนิต +lst.set = ตั้งตัวแปร +lst.operation = ทำการดำเนินการกับ 1-2 ตัวแปร +lst.end = กลับไปยังด้านบนสุดของชุดคำสั่ง +lst.wait = รอเวลาเป็นวินาที +lst.lookup = ค้นหาชนิดไอเท็ม/ของเหลว/ยูนิต/บล็อกตาม ID\nสามารถหาจำนวนนับทั้งหมดของแต่ละชนิดได้ด้วย:\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[] +lst.jump = ข้ามไปยังจุดต่างๆ โดยมีเงื่อนไข +lst.unitbind = เลือกยูนิตถัดไปเป็นชนิด และเก็บค่าไว้ใน [accent]@unit[] +lst.unitcontrol = ควบคุมยูนิตที่เลือกไว้ +lst.unitradar = ค้นหายูนิตรอบๆ ยูนิตที่เลือกไว้ +lst.unitlocate = ค้นหาตำแหน่ง/สิ่งก่อสร้างเฉพาะอย่างที่ใดก็ได้บนแผนที่\nต้องมียูนิตที่เลือกไว้ + +logic.nounitbuild = [red]ไม่อนุญาตให้ใช้ลอจิกบังคับให้ยูนิตสร้างที่นี่ + +lenum.type = ชนิดของสิ่งก่อสร้าง/ยูนิต\nอย่างเช่น เร้าเตอร์ทุกตัวจะส่งว่า [accent]@router[]\nไม่ใช่สตริง +lenum.shoot = ยิงไปที่ตำแหน่งเป้าหมาย +lenum.shootp = ยิงเป้าหมายโดยมีการคำนวณการยิง +lenum.config = การกำหนดค่าของสิ่งก่อสร้าง เช่น ไอเท็มของเครื่องคัดแยก +lenum.enabled = ว่าบล็อกเปิดอยู่หรือเปล่า + +laccess.color = สีของตัวเปล่งแสง +laccess.controller = ผู้ควบคุมยูนิต ถ้าผู้ควบคุมคือตัวประมวลผล จะส่งกลับว่า processor\nถ้าเป็นผู้สั่งการรูปแบบ จะส่งกลับว่า leader\nนอกนั้น จะส่งตัวยูนิตเอง +laccess.dead = ว่าสิ่งก่อสร้าง/ยูนิตตายแล้วหรือใช้ไม่ได้แล้ว +laccess.controlled = จะส่งกลับ:\n[accent]@ctrlProcessor[] ถ้าผู้ควบคุมคือตัวประมวลผลลอจิก\n[accent]@ctrlPlayer[] ถ้าสิ่งก่อสร้าง/ยูนิตถูกควบคุมโดยผู้เล่น\n[accent]@ctrlFormation[] ถ้ายูนิตถูกสั่งการให้อยู่เป็นรูปแบบอยู่\nนอกนั้น 0 +laccess.commanded = [red]อันนี้เลิกใช้แล้ว จะถูกลบ![]\nให้ใช้ [accent]controlled[] แทน +laccess.progress = ความคืบหน้าการดำเนินการ 0 ถึง 1\nจะส่งกลับ production หรือ turret reload หรือ construction progress + +graphicstype.clear = เติมจอแสดงผลด้วยสี +graphicstype.color = ตั้งค่าสีสำหรับการวาดครั้งต่อไป +graphicstype.stroke = ตั้งค่าความกว้างของเส้น +graphicstype.line = วาดส่วนของเส้นตรง +graphicstype.rect = เติมรูปเหลี่ยม +graphicstype.linerect วาดโครงร่างสี่เหลี่ยม +graphicstype.poly = เติมรูปหลายเหลี่ยมปกติ +graphicstype.linepoly = วาดโครงร่างรูปหลายเหลี่ยมปกติ +graphicstype.triangle = เติมสามเหลี่ยม +graphicstype.image = วาดรูปสิ่งต่างๆ \nตัวอย่างเช่น: [accent]@router[] หรือ [accent]@dagger[] + +lenum.always = เป็นจริงเสมอ +lenum.idiv = หารจำนวนเต็ม +lenum.div = หาร\nจะให้[accent]ค่าว่าง[] หากหารศูนย์ +lenum.mod = โมดูโล่ (หารหาเศษ) +lenum.equal = เท่ากับ บังคับประเภท\nสิ่งที่ไม่ใช่ค่าว่างเมื่อเทียบกับตัวเลขจะเป็น 1 นอกนั้น 0 +lenum.notequal = ไม่เท่ากับ บังคับประเภท +lenum.strictequal = เท่ากับที่เข้มงวด ไม่บังคับประเภท\nใช้ตรวจสอบหา[accent]ค่าว่าง[]ได้ +lenum.shl = เลื่อนบิตไปทางซ้าย +lenum.shr = เลื่อนบิตไปทางขวา +lenum.or = หรือ แบบบิต +lenum.land = และ เชิงตรรกะ +lenum.and = และ แบบบิต +lenum.not = กลับด้าน แบบบิต +lenum.xor = XOR แบบบิต + +lenum.min = เทียบต่ำสุดของสองหมายเลข +lenum.max = เทียบสูงสุดของสองหมายเลข +lenum.angle = มุมของเวกเตอร์ เป็นองศา +lenum.len = ความยาวของเวกเตอร์ + +lenum.sin = ไซน์ หน่วยเป็นองศา +lenum.cos = โคไซน์ หน่วยเป็นองศา +lenum.tan = แทนเจนต์ หน่วยเป็นองศา + +lenum.asin = อาร์คไซน์ หน่วยเป็นองศา +lenum.acos = อาร์คโคไซน์ หน่วยเป็นองศา +lenum.atan = อาร์คแทนเจนต์ หน่วยเป็นองศา + +#not a typo, look up 'range notation' +lenum.rand = สุ่มทศนิยมในช่วง [0, ค่า) +lenum.log = ลอการิทึมธรรมชาติ (ln) +lenum.log10 = ลอการิทึมฐาน 10 +lenum.noise = นอยส์ 2D ซิมเพล็กซ์ +lenum.abs = ค่าสัมบูรณ์ +lenum.sqrt = สแควร์รูด + +lenum.any = ยูนิตอะไรก็ได้ +lenum.ally = ยูนิตพวกพ้อง +lenum.attacker = ยูนิตติดอาวุธ +lenum.enemy = ยูนิตศัตรู +lenum.boss = ยูนิตการ์เดียน +lenum.flying = ยูนิตอากาศ +lenum.ground = ยูนิตพื้นดิน +lenum.player = ยูนิตที่ถูกควบคุมโดยผู้เล่น + +lenum.ore = แร่ตามพื้นต่างๆ +lenum.damaged = สิ่งก่อสร้างที่เสียหาย +lenum.spawn = จุดเกิดของศัตรู\nอาจเป็นแกนกลางหรือตำแหน่ง +lenum.building = สิ่งก่อสร้างเฉพาะกลุ่ม + +lenum.core = แกนกลาง +lenum.storage = บล็อกเก็บของ เช่น ตู้นิรภัย +lenum.generator = สิ่งก่อสร้างที่ผลิตพลังงาน +lenum.factory = สิ่งก่อสร้างที่เปลี่ยนสิ่งหนึ่งเป็นอีกสิ่งหนึ่ง +lenum.repair = จุดซ่อมแซมหรือป้อมซ่อมแซมยูนิต +lenum.rally = ศูนย์ควบคุม +lenum.battery = แบตเตอรี่อะไรก็ได้ +lenum.resupply = จุดเติมของ\nจะใช้ได้เมื่อ [accent]"ยูนิตต้องใช้กระสุน"[] เปิดอยู่ +lenum.reactor = เตาปฏิกรอิมแพค/ทอเรี่ยม +lenum.turret = ป้อมปืนอะไรก็ได้ + +sensor.in = สิ่งก่อสร้าง/ยูนิตให้เซนเซอร์ + +radar.from = สิ่งก่อสร้างที่จะใช้ในการค้นหา\nระยะเซนเซอร์จะขึ้นอยู่กับระยะของสิ่งก่อสร้าง +radar.target = ตัวกรองในการหายูนิต +radar.and = ตัวกรองเพิ่มเติม +radar.order = เรียงลำดับคำสั่ง\n0 เพื่อย้อนกลับ +radar.sort = เมตริกเพื่อจัดเรียงผลลัพย์ตาม +radar.output = ตัวแปรของยูนิตที่มองหา + +unitradar.target = ตัวกรองในการหายูนิต +unitradar.and = ตัวกรองเพิ่มเติม +unitradar.order = เรียงลำดับคำสั่ง\n0 เพื่อย้อนกลับ +unitradar.sort = เมตริกเพื่อจัดเรียงผลลัพย์ตาม +unitradar.output = ตัวแปรของยูนิตที่มองหา + +control.of = สิ่งก่อสร้างให้ควบคุม +control.unit = ยูนิต/สิ่งก่อสร้างที่จะเล็ง +control.shoot = ว่าจะยิงหรือเปล่า + +unitlocate.enemy = ว่าจะหาสิ่งก่อสร้างศัตรูหรือไม่ +unitlocate.found = ตัวแปรว่าหาเจอหรือไม่\nจะส่งกลับว่า true หากเจอสิ่งก่อสร้าง +unitlocate.building = ตัวแปรสิ่งก่อสร้างที่มองหา +unitlocate.outx = ตัวแปรพิกัด X +unitlocate.outy = ตัวแปรพิกัด Y +unitlocate.group = กลุ่มสิ่งก่อสร้างที่มองหา + +lenum.idle = หยุดขยับ แต่ยังคงขุด/ก่อสร้าง\nสถานะเริ่มต้นของยูนิต +lenum.stop = หยุดขยับ/ขุด/ก่อสร้าง +lenum.move = ขยับไปที่ตำแหน่งที่กำหนดไว้ +lenum.approach = เข้าใกล้ตำแหน่งโดยกำหนดระยะห่าง +lenum.pathfind = ใช้ AI ปกติเดินทางไปหาแกนกลางศัตรู +lenum.target = ยิงไปที่ตำแหน่งเป้าหมาย +lenum.targetp = ยิงเป้าหมายโดยมีการคำนวณความเร็ว +lenum.itemdrop = ปล่อยไอเท็ม +lenum.itemtake = หยิบไอเท็มจากสิ่งก่อสร้าง +lenum.paydrop = ปล่อยของที่บรรทุกอยู่ +lenum.paytake = หยิบของบรรทุกที่จุดที่อยู่ +lenum.flag = ปักธงยูนิตเป็นหมายเลข +lenum.mine = ขุดที่ตำแหน่งเป้าหมาย +lenum.build = สร้างสิ่งก่อสร้าง +lenum.getblock = ดึงข้อมูลสิ่งก่อสร้างและประเภทสิ่งก่อสร้างที่ตำแหน่งเป้าหมาย\nหน่วยต้องอยู่ในช่วงของตำแหน่ง\nของแข็งที่ไม่ใช่สิ่งก่อสร้างจะส่งกลับเป็น [accent]@solid[] +lenum.within = ตรวจสอบว่ายูนิตอยู่ในระยะหรือไม่ +lenum.boost = เริ่ม/หยุดการบูสต์ +#extra line: 18 => extra descriptions: 4+2 => extra details: (7+4)+1 diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index 54b22fcc6f..d3b469bf1c 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -576,13 +576,13 @@ sectors.vulnerable = [scarlet]Dayanıksız sectors.underattack = [scarlet]Saldırı Altında! [accent]{0}% hasarlı sectors.survives = [accent]{0} Dalgaya dayanabilir! sectors.go = Git -sector.curcapture = Sektör Yakalandı +sector.curcapture = Sektör Elegeçirildi sector.curlost = Sektör Kaybedildi sector.missingresources = [scarlet]Yetersiz Çekirdek Kaynakları sector.attacked = Sektör [accent]{0}[white] saldırı altında! sector.lost = Sektör [accent]{0}[white] kaybedildi! #note: the missing space in the line below is intentional -sector.captured = Sektör [accent]{0}[white]yakalandı! +sector.captured = Sektör [accent]{0}[white]elegeçirildi! sector.changeicon = İkon Değiştir threat.low = Düşük @@ -1292,14 +1292,14 @@ block.additive-reconstructor.name = Eklemeli Yeniden Yapılandırıcı block.multiplicative-reconstructor.name = Çarpmalı Yeniden Yapılandırıcı block.exponential-reconstructor.name = Üstel Yeniden Yapılandırıcı block.tetrative-reconstructor.name = Dörtlü Yeniden Yapılandırıcı -block.payload-conveyor.name = Yük Konveyörü -block.payload-router.name = Yük Yönlendirici +block.payload-conveyor.name = Kargo Konveyörü +block.payload-router.name = Kargo Yönlendirici block.duct.name = Tüp block.duct-router.name = Tüp Yönlendirici block.duct-bridge.name = Tüp Köprü block.payload-propulsion-tower.name = Yük Aktarma Kulesi -block.payload-void.name = Yük Yokedici -block.payload-source.name = Yük Kaynağı +block.payload-void.name = Kargo Yokedici +block.payload-source.name = Kargo Kaynağı block.disassembler.name = Sökücü block.silicon-crucible.name = Büyük Silikon Fırını block.overdrive-dome.name = Hızlandırma Kubbesi @@ -1308,7 +1308,7 @@ block.block-forge.name = Blok Fabrikası block.block-loader.name = Blok Yükleyici block.block-unloader.name = Blok Boşaltıcı block.interplanetary-accelerator.name = Gezegenler Arası Hızlandırıcı - +#ama tüp ne aga -Anti Dragon block.switch.name = Düğme block.micro-processor.name = Mikro İşlemci block.logic-processor.name = İşlemci @@ -1456,7 +1456,7 @@ block.underflow-gate.description = Taşma geçidinin zıttıdır. Sol ve sağ ta block.mass-driver.description = En gelişmiş materyal taşıma bloğu. bir miktar materyalı alır ve onları uzak mesafedeki bir başka kütle sürücüsüne ateşler. Çalışması için enerji gerekir. block.mechanical-pump.description = Hiç enerji harcamayan, düşük çıktılı, ucuz bir pompa. block.rotary-pump.description = Daha gelişmiş bir pompa. Daha fazla sıvı depolar ama çalışması için enerji gerekir. -block.thermal-pump.description = En iyi pompa. +block.thermal-pump.description = En iyi pompa. Çalışması için enerji gerekir. block.conduit.description = Temel sıvı taşıma bloğu. Sıvıları ileri taşır. Pompalar ve diğer borularla birlikte kullanılır. block.pulse-conduit.description = Gelişmiş bir sıvı taşıma bloğu. Sıvıları normal borulardan daha hızlı taşır ve onlardan daha fazla sıvı alır. block.plated-conduit.description = Sıvıları dalga borusuyla aynı güçte taşır ancak daha fazla zırha sahiptir. Borular dışında başka bir şekilde yandan sıvı kabul etmez.\nDaha az sızıntı yapar. @@ -1465,9 +1465,9 @@ block.liquid-tank.description = Çok miktarda sıvıyı depolar. İhtiyaçları block.liquid-junction.description = Çakışan iki boru hattı arasında bir köprü görevi görür. İki farklı borunun farklı hedeflere farklı sıvıları taşıdığı durumlarda kullanışlıdır. block.bridge-conduit.description = Gelişmiş sıvı taşıma bloğu. Sıvıları her türlü arazi veya binanın üzerinden üç bloğa kadar uzağa taşıyabilir. block.phase-conduit.description = Gelişmiş sıvı taşıma bloğu. Sıvıları kendisine bağlı başka bir faz borusuna ışınlamak için enerji kullanır. -block.power-node.description = Bağlı düğümlere enerji sağlar. Ayrıca dibindeki bloklardan da enerji alıp onlara enerji verebilir. -block.power-node-large.description = Daha fazla menzil ve bağlantıya sahip daha gelişmiş bir güç düğümü -block.surge-tower.description = Daha az bağlantı sayısına sahip oldukça uzun menzilli bir güç düğümü. +block.power-node.description = Bağlı noktalara enerji aktarır. Ayrıca dibindeki bloklardan da enerji alıp onlara enerji verebilir. +block.power-node-large.description = Daha fazla menzil ve bağlantıya sahip daha gelişmiş bir enerji noktası. +block.surge-tower.description = Daha az bağlantı sayısına sahip oldukça uzun menzilli bir enerji noktası. block.diode.description = Pil gücü, bu bloktan yalnızca diğer tarafta daha az güç depolandığında sadece tek bir yöne akabilir. block.battery.description = Enerji fazlasını yedek olarak saklar. Enerji açığında sakladığı enerjiyi salar. block.battery-large.description = Sıradan bataryadan çok daha fazla enerji depolar. @@ -1570,9 +1570,9 @@ unit.minke.description = Yakındaki düşmanlara basit mermi ve toplarla saldır unit.bryde.description = Düşmanlara uzun menzil havanıyla saldırır. unit.sei.description = Düşmanlara füze atar ve devasa zırh delici mermilerle saldırır. unit.omura.description = Uzun menzil bir ışın atıcıya sahiptir. Mermisi nerdeyse her bolğu delebilir. Flare üretir. -unit.alpha.description = Çekirdeği korur. Bina inşa eder -unit.beta.description = Çekirdeği korur. Bina inşa eder -unit.gamma.description = Çekirdeği korur. Bina inşa eder +unit.alpha.description = Çekirdeği korur. Bina inşa eder. +unit.beta.description = Çekirdeği korur. Bina inşa eder. +unit.gamma.description = Çekirdeği korur. Bina inşa eder. lst.read = Bağlı hafıza kutusundaki numarayı okur. lst.write = Bağlı hafıza kutuaundaki numaraya yazar. diff --git a/core/assets/bundles/bundle_vi.properties b/core/assets/bundles/bundle_vi.properties index ca6ada0206..951bb1ecde 100644 --- a/core/assets/bundles/bundle_vi.properties +++ b/core/assets/bundles/bundle_vi.properties @@ -67,6 +67,14 @@ schematic.delete.confirm = Bản thiết kế này sẽ bị xóa hoàn toàn. schematic.rename = Đổi tên bản thiết kế schematic.info = {0}x{1}, {2} khối schematic.disabled = [scarlet]Tính năng bản thiết kế đã bị tắt[]\nBạn không được sử dụng bản thiết kế trong [accent]bản đồ[] hoặc [accent]máy chủ. +schematic.tags = Thẻ: +schematic.edittags = Chỉnh sửa thẻ +schematic.addtag = Thêm thẻ +schematic.texttag = Thẻ văn bản +schematic.icontag = Thẻ icon +schematic.renametag = Đổi tên thẻ +schematic.tagdelconfirm = Xóa thẻ này? +schematic.tagexists = Thẻ đã tồn tại. stats = Thống kê stat.wave = Đợt đã vượt qua:[accent] {0} @@ -220,6 +228,8 @@ trace.ip = IP: [accent]{0} trace.id = ID: [accent]{0} trace.mobile = Mobile Client: [accent]{0} trace.modclient = Custom Client: [accent]{0} +trace.times.joined = Số lần tham gia: [accent]{0} +trace.times.kicked = Số lần bị kick: [accent]{0} invalidid = Client ID không hợp lệ! Vui lòng gửi báo cáo lỗi. server.bans = Cấm server.bans.none = Không có người chơi nào bị cấm! @@ -304,7 +314,6 @@ data.exported = Dữ liệu đã được xuất. data.invalid = Đây không phải dữ liệu trò chơi hợp lệ. data.import.confirm = Nhập dữ liệu bên ngoài sẽ ghi đè[scarlet] tất cả[] dữ liệu trò chơi hiện tại.\n[accent]Điều này không thể hoàn tác![]\n\nSau khi dữ liệu được nhập, trò chơi của bạn sẽ thoát ngay lập tức. quit.confirm = Bạn có chắc muốn thoát? -quit.confirm.tutorial = Bạn có chắc chắn biết mình đang làm gì không?\nHướng dẫn có thể được thực hiện lại trong[accent] Cài đặt->Trò chơi>Thực hiện lại hướng dẫn.[] loading = [accent]Đang tải... reloading = [accent]Đang tải lại Mods... saving = [accent]Đang lưu... @@ -451,6 +460,7 @@ toolmode.drawteams = Draw Teams toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [lightgray]Không có bộ lọc! Thêm một cái bằng nút bên dưới. + filter.distort = Cong vẹo filter.noise = Nhiễu filter.enemyspawn = Khu vực xuất hiện của kẻ thù @@ -467,6 +477,7 @@ filter.clear = Xóa filter.option.ignore = Bỏ qua filter.scatter = Phân tán filter.terrain = Địa hình + filter.option.scale = Kích thước filter.option.chance = Tỷ lệ filter.option.mag = Độ lớn @@ -475,11 +486,13 @@ filter.option.circle-scale = Độ lớn vòng tròn filter.option.octaves = Octaves filter.option.falloff = Falloff filter.option.angle = Góc +filter.option.rotate = Quay filter.option.amount = Số lượng filter.option.block = Khối filter.option.floor = Nền filter.option.flooronto = Nền thay thế filter.option.target = Mục tiêu +filter.option.replacement = Thay thế filter.option.wall = Tường filter.option.ore = Quặng filter.option.floor2 = Nền phụ @@ -496,6 +509,7 @@ load = Tải save = Lưu fps = FPS: {0} ping = Ping: {0}ms +tps = TPS: {0} memory = Mem: {0}mb memory2 = Mem:\n {0}mb +\n {1}mb language.restart = Khởi động lại trò chơi của bạn để cài đặt ngôn ngữ có hiệu lực. @@ -528,7 +542,7 @@ launch.from = Đang phóng từ: [accent]{0} launch.destination = Đích đến: {0} configure.invalid = Số lượng phải là số trong khoảng 0 đến {0}. add = Thêm... -boss.health = Máu Boss +guardian = Guardian connectfail = [scarlet]Lỗi kết nối:\n\n[accent]{0} error.unreachable = Không thể truy cập máy chủ.\nKiểm tra lại xem địa chỉ có đúng không? @@ -572,6 +586,7 @@ sector.attacked = Khu vực [accent]{0}[white] đang bị tấn công! sector.lost = Khu vực [accent]{0}[white] đã mất! #note: the missing space in the line below is intentional sector.captured = Khu vực [accent]{0}[white]đã chiếm! +sector.changeicon = Thay đổi icon threat.low = Thấp threat.medium = Trung bình @@ -584,7 +599,6 @@ planets = Hành tinh planet.serpulo.name = Serpulo planet.sun.name = Mặt trời -#Why we should translate this ?? sector.impact0078.name = Impact 0078 sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -621,16 +635,17 @@ sector.planetaryTerminal.description = Mục tiêu cuối cùng.\n\nCăn cứ ve status.burning.name = Cháy status.freezing.name = Đóng băng -status.wet.name = Wet +status.wet.name = Ẩm status.muddy.name = Muddy status.melting.name = Tan chảy -status.sapped.name = Sapped +status.sapped.name = Ăn mòn +status.electrified.name = Electrified status.spore-slowed.name = Spore Slowed status.tarred.name = Tarred status.overclock.name = Overclock status.shocked.name = Shock status.blasted.name = Nổ -status.unmoving.name = Unmoving +status.unmoving.name = Bất động settings.language = Ngôn ngữ settings.data = Dữ liệu trò chơi @@ -653,6 +668,7 @@ settings.clearcampaignsaves.confirm = Bạn có chắc muốn xóa toàn bộ d paused = [accent]< Tạm dừng > clear = Xóa banned = [scarlet]Cấm +unsupported.environment = [scarlet]Môi trường không phù hợp yes = Có no = Không info.title = Thông tin @@ -662,12 +678,14 @@ unit.nobuild = [scarlet]Quân lính/Công trình không thể xây dựng lastaccessed = [lightgray]Truy cập lần cuối: {0} block.unknown = [lightgray]??? +stat.showinmap = stat.description = Mô tả stat.input = Đầu vào stat.output = Sản phẩm stat.booster = Tăng cường stat.tiles = Yêu cầu khu vực stat.affinities = Phù hợp +stat.opposites = Đối diện stat.powercapacity = Dung lượng pin stat.powershot = Năng lượng/Phát bắn stat.damage = Sát thương @@ -690,6 +708,7 @@ stat.memorycapacity = Dung lượng bộ nhớ stat.basepowergeneration = Năng lượng tạo ra (cơ bản) stat.productiontime = Thời gian sản xuất stat.repairtime = Thời gian sửa +stat.repairspeed = Tốc độ sửa stat.weapons = Vũ khí stat.bullet = Đạn stat.speedincrease = Tăng tốc @@ -735,13 +754,15 @@ stat.speedmultiplier = Hệ số tốc độ stat.reloadmultiplier = Reload Multiplier stat.buildspeedmultiplier = Hệ số tốc độ xây dựng stat.reactive = Phản ứng. +stat.healing = Sửa chữa ability.forcefield = Tạo khiên ability.repairfield = Sửa chữa/Xây dựng -ability.statusfield = Status Field +ability.statusfield = {0} Status Field ability.unitspawn = Sản xuất {0} ability.shieldregenfield = Tạo khiên nhỏ ability.movelightning = Movement Lightning +ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets bar.drilltierreq = Cần máy khoan tốt hơn bar.noresources = Thiếu tài nguyên @@ -764,6 +785,7 @@ bar.power = Năng lượng bar.progress = Đang xây dựng bar.input = Đầu vào bar.output = Sản phẩm +bar.strength = [stat]{0}[lightgray]x strength units.processorcontrol = [lightgray]Điều khiển bởi bộ xử lý @@ -773,12 +795,11 @@ bullet.incendiary = [stat]cháy bullet.homing = [stat]truy đuổi bullet.buildingdamage = [stat]{0}%[lightgray] sát thương khối bullet.frag = [stat]phá mảnh -# I am not sure about this... bullet.lightning = [stat]{0}[lightgray]x tia chớp ~ [stat]{1}[lightgray] sát thương bullet.knockback = [stat]{0}[lightgray] bật lùi bullet.pierce = [stat]{0}[lightgray]x xuyên giáp bullet.infinitepierce = [stat]xuyên thấu -bullet.healpercent = [stat]{0}[lightgray]% sửa chửa +bullet.healpercent = [stat]{0}[lightgray]% sửa chữa bullet.multiplier = [stat]{0}[lightgray]x lượng đạn bullet.reload = [stat]{0}[lightgray]x tốc độ bắn @@ -815,6 +836,7 @@ setting.shadows.name = Bóng đổ setting.blockreplace.name = Tự động đề xuất khối setting.linear.name = Lọc tuyến tính setting.hints.name = Gợi ý +setting.logichints.name = Gợi ý Logic setting.flow.name = Hiện thị tốc độ chuyền tài nguyên setting.backgroundpause.name = Tạm dừng trong nền setting.buildautopause.name = Tự động dừng xây dựng @@ -972,6 +994,8 @@ rules.wavetimer = Đếm ngược đợt rules.waves = Đợt rules.attack = Chế độ tấn công rules.buildai = AI Xây dựng +rules.corecapture = Chiếm căn cứ khi phá hủy +rules.polygoncoreprotection = Bảo vệ lõi kiểu đa giác. rules.enemyCheat = Tài nguyên vô hạn (kẻ địch) rules.blockhealthmultiplier = Hệ số độ bền khối rules.blockdamagemultiplier = Hệ số sát thương của khối @@ -1008,6 +1032,7 @@ content.item.name = Vật phẩm content.liquid.name = Chất lỏng content.unit.name = Quân lính content.block.name = Khối +content.status.name = Trạng thái hiệu ứng content.sector.name = Khu vực item.copper.name = Đồng @@ -1026,12 +1051,12 @@ item.blast-compound.name = Chất nổ item.pyratite.name = Nhiệt thạch item.metaglass.name = Thuỷ tinh item.scrap.name = Phế liệu + liquid.water.name = Nước liquid.slag.name = Xỉ nóng chảy liquid.oil.name = Dầu liquid.cryofluid.name = Chất làm lạnh -#Why we should translate this ??? unit.dagger.name = Dagger unit.mace.name = Mace unit.fortress.name = Fortress @@ -1058,6 +1083,11 @@ unit.minke.name = Minke unit.bryde.name = Bryde unit.sei.name = Sei unit.omura.name = Omura +unit.retusa.name = Retusa +unit.oxynoe.name = Oxynoe +unit.cyerce.name = Cyerce +unit.aegires.name = Aegires +unit.navanax.name = Navanax unit.alpha.name = Alpha unit.beta.name = Beta unit.gamma.name = Gamma @@ -1118,6 +1148,7 @@ block.sand-water.name = Nước cát block.darksand-water.name = Nước cát đen block.char.name = Char block.dacite.name = Đá Dacit +block.rhyolite.name = Đá Ryolit block.dacite-wall.name = Tường Dacit block.dacite-boulder.name = Tảng đá Dacit block.ice-snow.name = Băng tuyết @@ -1135,8 +1166,9 @@ block.spore-cluster.name = Cụm bào tử block.metal-floor.name = Nền kim loại 1 block.metal-floor-2.name = Nền kim loại 2 block.metal-floor-3.name = Nền kim loại 3 -block.metal-floor-5.name = Nền kim loại 4 -block.metal-floor-damaged.name = Nền kim loại bị hư hỏng +block.metal-floor-4.name = Nền kim loại 4 +block.metal-floor-5.name = Nền kim loại 5 +block.metal-floor-damaged.name = Nền kim loại hư hỏng block.dark-panel-1.name = Nền tối 1 block.dark-panel-2.name = Nền tối 2 block.dark-panel-3.name = Nền tối 3 @@ -1225,6 +1257,7 @@ block.solar-panel.name = Pin mặt trời block.solar-panel-large.name = Pin mặt trời lớn block.oil-extractor.name = Máy khoan dầu block.repair-point.name = Điểm sửa chữa +block.repair-turret.name = Súng sữa chữa block.pulse-conduit.name = Ống dẫn titan block.plated-conduit.name = Ống dẫn bọc giáp block.phase-conduit.name = Ống dẫn Phase @@ -1267,6 +1300,12 @@ block.exponential-reconstructor.name = Máy nâng cấp quân đội cấp 4 block.tetrative-reconstructor.name = Máy nâng cấp quân đội cấp 5 block.payload-conveyor.name = Băng chuyền khối hàng block.payload-router.name = Bộ định tuyến khối hàng +block.duct.name = Duct +block.duct-router.name = Duct Router +block.duct-bridge.name = Duct Bridge +block.payload-propulsion-tower.name = Payload Propulsion Tower +block.payload-void.name = Payload Void +block.payload-source.name = Payload Source block.disassembler.name = Máy phân tách lớn block.silicon-crucible.name = Máy nấu Silicon lớn block.overdrive-dome.name = Máy tăng tốc lớn @@ -1286,10 +1325,9 @@ block.memory-cell.name = Bộ nhớ block.memory-bank.name = Bộ nhớ lớn team.blue.name = Xanh dương -team.crux.name = Đỏ -team.sharded.name = Cam -team.orange.name = Cam -team.derelict.name = không xác định +team.crux.name = Crux +team.sharded.name = Sharded +team.derelict.name = Không xác định team.green.name = Xanh lá cây team.purple.name = Tím @@ -1309,6 +1347,7 @@ hint.placeConveyor.mobile = Băng chuyền di chuyển các vật phẩm từ kh hint.placeTurret = Đặt \uf861 [accent]Súng[] để bảo vệ căn cứ của bạn khỏi kẻ thù.\n\nSúng cần đạn - trong trường hợp này sử dụng \uf838Đồng.\nSử dụng băng chuyền và máy khoan để cung cấp cho chúng. hint.breaking = [accent]Chuột phải[] và kéo để phá vỡ các khối. hint.breaking.mobile = Kích hoạt \ue817 [accent]Cây búa[] ở phía dưới cùng bên phải và nhấn để phá vỡ các khối.\n\nGiữ ngón tay của bạn trong một giây và kéo để phá khối trong vùng được chọn. +hint.blockInfo = Xem thông tin của một khối bằng cách chọn nó trong [accent]menu xây dựng[], Sau đó chọn nút [accent][[?][] ở bên phải. hint.research = Sử dụng nút \ue875 [accent]Nghiên cứu[] để nghiên cứu công nghệ mới. hint.research.mobile = Sử dụng nút \ue875 [accent]Nghiên cứu[] trong \ue88c [accent]Menu[] để nghiên cứu công nghệ mới. hint.unitControl = Giữ [accent][[L-ctrl][] và [accent]click[] để điều khiển quân lính của bạn hoặc súng. @@ -1330,6 +1369,7 @@ hint.generator = \uf879 [accent]Máy phát điện đốt cháy[] đốt than v hint.guardian = [accent]Boss[] được bọc giáp. Sử dụng loại đạn yếu chẳng hạn như [accent]Đồng[] và [accent]Chì[] là [scarlet]không hiệu quả[].\n\nSử dụng súng tiên tiến hơn hoặc sử dụng \uf835 [accent]Than chì làm đạn [] \uf861Duo/\uf859Salvo đạn dược để hạ gục Boss. hint.coreUpgrade = Các căn cứ có thể được nâng cấp bằng cách [accent]đặt căn cứ cấp cao hơn trên chúng[].\n\nĐặt một căn cứ  [accent]Trụ sở[] trên căn cứ  [accent]Cơ sở[]. Đảm bảo không có vật cản gần đó. hint.presetLaunch = Khác khu vực đáp [accent] xám[], như [accent]Frozen Forest[], có thể được phóng đến từ bất cứ đâu. Nó không yêu cầu chiếm các khu vực lân cận.\n\n[accent]Các khu vực được đánh số[], chẳng hạn như cái này, là [accent]không bắt buộc[]. +hint.coreIncinerate = Sau khi căn cứ đầy vật phẩm, bất kì vật phẩm vào thuộc loại đó nhận được sẽ bị [accent]tiêu hủy[]. hint.coopCampaign = Khi chơi chiến dịch[accent]co-op[], các vật phẩm được sản xuất trong bản đồ hiện tại cũng sẽ được gửi [accent]đến các khu vực của bạn[].\n\nBất kỳ nghiên cứu mới nào được thực hiện đều được lưu lại. item.copper.description = Dùng trong tất cả các khu xây dựng và các loại đạn dược. @@ -1341,7 +1381,7 @@ item.graphite.description = Dùng trong các bộ phận điện và đạn dư item.sand.description = Dùng để sản xuất các vật liệu tinh chế khác. item.coal.description = Dùng để sản xuất nhiên liệu và nguyên liệu sản xuất vật liệu tinh chế. item.coal.details = Có vẻ là vật chất hóa thạch của thực vật, hình thành từ rất lâu trước khi được khai thác. -item.titanium.description = Dùng trong cấu trúc vận chuyển chất lỏng, máy khoan và máy bay. +item.titanium.description = Dùng trong cấu trúc vận chuyển chất lỏng, máy khoan và các công trình. item.thorium.description = Dùng trong các công trình bền vững và có thể dùng làm nhiên liệu hạt nhân. item.scrap.description = Dùng làm nguyên liệu cho Máy nung phế liệu và Máy nghiền để tinh luyện thành các vật liệu khác. item.scrap.details = Tàn tích còn lại của các công trình và robot cũ. @@ -1360,7 +1400,7 @@ liquid.oil.description = Dùng trong sản xuất vật liệu tiên tiến và liquid.cryofluid.description = Dùng làm chất làm mát trong lò phản ứng, súng và nhà máy. block.resupply-point.description = Cung cấp đạn đồng cho các quân lính ở gần. Không tương thích với quân lính sử dụng điện. -block.armored-conveyor.description = Vận chuyển vật phẩm về phía. Không nhận đầu vào từ phía bên. +block.armored-conveyor.description = Vận chuyển vật phẩm về phía trước. Không nhận đầu vào từ phía bên cạnh. block.illuminator.description = Phát sáng. block.message.description = Lưu trữ tin nhắn giao tiếp giữa đồng đội. block.graphite-press.description = Nén than thành than chì. @@ -1370,7 +1410,7 @@ block.kiln.description = Nấu chảy cát và chì thành thuỷ tinh. block.plastanium-compressor.description = Sản xuất nhựa từ dầu và titan. block.phase-weaver.description = Tổng hợp phase fabric từ thorium và cát. block.alloy-smelter.description = Trộn titan, chì, silicon và đồng thành hợp kim. -block.cryofluid-mixer.description = Trộn nước và bột titan để sản xuất chất làm mát. +block.cryofluid-mixer.description = Trộn nước và titan để sản xuất chất làm mát. block.blast-mixer.description = Tạo ra hợp chất nổ từ nhiệt thạch và vỏ bào tử. block.pyratite-mixer.description = Trộn than, chì và cát thành nhiệt thạch. block.melter.description = Nung phế liệu thành xỉ. @@ -1410,8 +1450,8 @@ block.plastanium-conveyor.description = Vận chuyển vật phẩm về phía block.junction.description = Hoạt động như một cầu nối cho hai băng chuyền băng qua. block.bridge-conveyor.description = Vận chuyển vật phẩm qua nhiều loại địa hình hoặc công trình. block.phase-conveyor.description = Vận chuyển tức thời vật phẩm qua địa hình hoặc công trình. Phạm vi dài hơn cầu nối, nhưng cần năng lượng. -block.sorter.description = Nếu vật phẩm giống vật được chọn sẽ được chuyển đến trước, nếu không sẽ được chuyển qua trái hoặc phải. -block.inverted-sorter.description = Giống như máy phân loại, nhưng vật được chọn sẽ được chuyển qua trái hoặc phải. +block.sorter.description = Nếu vật phẩm giống vật phẩm được chọn sẽ được chuyển đến trước, nếu không sẽ được chuyển qua trái hoặc phải. +block.inverted-sorter.description = Giống như bộ lọc, nhưng vật phẩm được chọn sẽ được chuyển qua trái hoặc phải. block.router.description = Phân phối các vật phẩm đầu vào thành 3 hướng đầu ra như nhau. block.router.details = Không khuyên dùng cạnh đầu vào dây chuyền vì sẽ bị kẹt bởi đầu ra. block.distributor.description = Phân phối các vật phẩm đầu vào thành 7 hướng đầu ra như nhau. @@ -1453,7 +1493,7 @@ block.cultivator.description = Lọc bào tử có trong không khí và nuôi c block.cultivator.details = Công nghệ được phục hồi. Được sử dụng để sản xuất một lượng lớn bào tử. Có thể là nơi ủ ban đầu của các bào tử hiện đang bao phủ Serpulo. block.oil-extractor.description = Sử dụng lượng năng lượng năng lớn, sử dụng cát và nước để khoan dầu. block.core-shard.description = Trung tâm của căn cứ. Sau khi bị phá hủy, khu vực này sẽ bị mất. -block.core-shard.details = Lần thử đầu tiên. Gọn nhẹ. Tự thay thế. Được trang bị tên lửa đẩy dùng một lần. Không được thiết kế để di chuyển giữa các hành tinh. +block.core-shard.details = Căn cứ cấp 1. Gọn nhẹ. Tự thay thế. Được trang bị tên lửa đẩy dùng một lần. Không được thiết kế để di chuyển giữa các hành tinh. block.core-foundation.description = Trung tâm của căn cứ. Được bọc giáp. Chứa được nhiều tài nguyên hơn Căn cứ: Cơ sỏ. block.core-foundation.details = Căn cứ cấp 2. block.core-nucleus.description = Lõi của căn cứ. Bọc giáp chắc chắn. Lưu trữ lượng lớn tài nguyên. @@ -1481,7 +1521,7 @@ block.repair-point.description = Liên tục sửa chữa robot ở trong phạm block.segment.description = Gây hư hại và phá hủy đạn đến. Ngoại trừ tia laser. block.parallax.description = Bắn một tia kéo máy bay địch và làm hư hỏng nó trong quá trình kéo. block.tsunami.description = Phóng một tia chất lỏng mạnh vào kẻ địch. Tự chữa cháy nếu được cung cấp nước hoặc chất làm mát. -block.silicon-crucible.description = Tinh chế silicon từ cát và than, sử dụng tiền chất nổ làm nguồn nhiệt phụ. Có hiệu quả cao hơn khi ở nơi nóng. +block.silicon-crucible.description = Tinh chế silicon từ cát và than, sử dụng nhiệt thạch làm nguồn nhiệt phụ. Có hiệu quả cao hơn khi ở nơi nóng. block.disassembler.description = Tách xỉ thành các kim loại khác nhau với hiệu suất thấp. Có thể sản xuất thorium. block.overdrive-dome.description = Tăng tốc độ làm việc của các công trình lân cận. Sử dụng phase fabric and silicon để hoạt động. block.payload-conveyor.description = Di chuyển những khối hàng lớn, chẳng hạn như các quân lính từ nhà máy. @@ -1542,7 +1582,7 @@ lst.read = Đọc một số từ bộ nhớ được liên kết. lst.write = Ghi một số vào bộ nhớ được liên kết. lst.print = Thêm văn bản vào bộ nhớ in.\nKhông hiển thị gì cho đến khi sử dụng [accent]Print Flush[]. lst.draw = Thêm một thao tác vào bộ nhớ vẽ.\nKhông hiển thị gì cho đến khi sử dụng [accent]Draw Flush[]. -lst.drawflush = Chuyển các thao tác [accent]Draw[] đến màng hình. +lst.drawflush = Chuyển các thao tác [accent]Draw[] đến màn hình. lst.printflush = Chuyển các thao tác [accent]Print[] đến khối tin nhắn. lst.getlink = Nhận liên kết bộ xử lý theo thứ tự. Bắt đầu từ 0. lst.control = Điều khiển một khối. @@ -1562,7 +1602,7 @@ logic.nounitbuild = [red]Unit building logic is not allowed here. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.shoot = Bắn vào vị trí xác định. lenum.shootp = Shoot at a unit/building with velocity prediction. -lenum.configure = Building configuration, e.g. sorter item. +lenum.config = Building configuration, e.g. sorter item. lenum.enabled = Bất cứ khi nào khối hoạt động. laccess.color = Màu đèn chiếu sáng. @@ -1570,6 +1610,7 @@ laccess.controller = Unit controller. If processor controlled, returns processor laccess.dead = Whether a unit/building is dead or no longer valid. laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0. laccess.commanded = [red]Deprecated. Will be removed![]\nUse [accent]controlled[] instead. +laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress. graphicstype.clear = Tô màu cho màn hình. graphicstype.color = Đặt màu cho thao tác vẽ tiếp theo. @@ -1601,9 +1642,15 @@ lenum.min = Số nhỏ nhất giữa hai số. lenum.max = Số lớn nhất giữa hai số. lenum.angle = Góc của vectơ tính bằng độ. lenum.len = Chiều dài của vectơ. + lenum.sin = Sin, tính bằng độ. lenum.cos = Cos, tính bằng độ. lenum.tan = Tan, tính bằng độ. + +lenum.asin = Arc sin, tính bằng độ. +lenum.acos = Arc cos, tính bằng độ. +lenum.atan = Arc tan, tính bằng độ. + #not a typo, look up 'range notation' lenum.rand = Tạo ra số nguyên ngẫu nhiên trong phạm vi [0, giá trị). lenum.log = Lôgarit tự nhiên (ln). @@ -1679,4 +1726,4 @@ lenum.mine = Đào tại vị trí. lenum.build = Xây công trình. lenum.getblock = Fetch a building and type at coordinates.\nUnit must be in range of position.\nSolid non-buildings will have the type [accent]@solid[]. lenum.within = Kiểm tra xem quân lính có gần vị trí không. -lenum.boost = Start/stop boosting. \ No newline at end of file +lenum.boost = Bắt đầu/Dừng tăng tốc. diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index 2c25a8d2fe..a77a616d24 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -67,6 +67,14 @@ schematic.delete.confirm = 該藍圖將被完全清除。 schematic.rename = 重新命名藍圖 schematic.info = {0}x{1}, {2}方塊 schematic.disabled = [scarlet]藍圖被進用[]\n你不能在這個[accent]地圖[] 或 [accent]伺服器中使用藍圖. +schematic.tags = 標籤: +schematic.edittags = 編輯標籤 +schematic.addtag = 新增標籤 +schematic.texttag = 文字標籤 +schematic.icontag = 圖像標籤 +schematic.renametag = 重新命名 +schematic.tagdelconfirm = 確認刪除此標籤? +schematic.tagexists = 該標籤已存在。 stats = 統計 stat.wave = 打敗的波次:[accent]{0} @@ -306,7 +314,6 @@ data.exported = 資料已匯出。 data.invalid = 這不是有效的遊戲資料。 data.import.confirm = 導入外部資料將會覆寫您目前[scarlet]所有的[]遊戲資料,\n[accent]此動作無法復原![]\n\n匯入資料後,您的遊戲將立刻結束。 quit.confirm = 您確定要結束嗎? -quit.confirm.tutorial = 您確定您知道自己在做什麼嗎?\n可以在[accent] 設定-遊戲[] 選項中重設教學。 loading = [accent]載入中…… reloading = [accent]模組重新載入中…… saving = [accent]儲存中…… @@ -477,6 +484,7 @@ filter.option.circle-scale = 圓形規模 filter.option.octaves = 倍頻 filter.option.falloff = 衰減 filter.option.angle = 角度 +filter.option.rotate = 旋轉 filter.option.amount = 數量 filter.option.block = 方塊 filter.option.floor = 地板 @@ -498,6 +506,7 @@ load = 載入 save = 儲存 fps = FPS:{0} ping = 延遲:{0}毫秒 +tps = TPS: {0} memory = Mem: {0}mb memory2 = Mem:\n {0}mb +\n {1}mb language.restart = 請重新啟動遊戲以使選取的語言生效。 @@ -530,7 +539,7 @@ launch.from = 發射來源:[accent]{0} launch.destination = 目的地:{0} configure.invalid = 數值必須介於 0 到 {0}。 add = 新增…… -boss.health = 頭目血量 +guardian = 頭目 connectfail = [scarlet]伺服器連線錯誤:\n\n[accent]{0} error.unreachable = 無法連線到伺服器。請確認拼字是否正確? @@ -574,6 +583,7 @@ sector.attacked = 地區 [accent]{0}[white] 遭受攻擊! sector.lost = 地區 [accent]{0}[white] 戰敗! #note: 校正用空行 sector.captured = 成功佔領地區[accent]{0}[white]! +sector.changeicon = 更改圖標 threat.low = 低 threat.medium = 中 @@ -626,6 +636,7 @@ status.wet.name = 浸濕 status.muddy.name = 泥濘 status.melting.name = 融化 status.sapped.name = 被吸血 +status.electrified.name = 觸電 status.spore-slowed.name = 孢子緩速 status.tarred.name = 焦油 status.overclock.name = 快轉 @@ -654,6 +665,7 @@ settings.clearcampaignsaves.confirm = 你確定要清除所有戰役紀錄? paused = [accent](已暫停) clear = 清除 banned = [scarlet]已被封鎖 +unsupported.environment = [scarlet]不支援的環境 yes = 是 no = 否 info.title = 資訊 @@ -692,6 +704,7 @@ stat.memorycapacity = 記憶體容量 stat.basepowergeneration = 基礎能量生產 stat.productiontime = 生產時間 stat.repairtime = 方塊完全修復時間 +stat.repairspeed = 修復速度 stat.weapons = 武器 stat.bullet = 子彈 stat.speedincrease = 速度提升 @@ -737,13 +750,15 @@ stat.speedmultiplier = 速度加成 stat.reloadmultiplier = 射速加成 stat.buildspeedmultiplier = 建造速度加成 stat.reactive = 具反應性 +stat.healing = 治癒 ability.forcefield = 防護罩 ability.repairfield = 維修力場 -ability.statusfield = 狀態力場 +ability.statusfield = {0}狀態力場 ability.unitspawn = {0}工廠 ability.shieldregenfield = 護盾充能力場 ability.movelightning = 移動閃電 +ability.energyfield = 能量場: [accent]{0}[] 傷害 ~ [accent]{1}[] 方格 / [accent]{2}[] 目標數 bar.drilltierreq = 需要更好的鑽頭 bar.noresources = 缺少資源 @@ -766,6 +781,7 @@ bar.power = 能量 bar.progress = 建造進度 bar.input = 輸入 bar.output = 輸出 +bar.strength = [stat]{0}[lightgray]x 強度 units.processorcontrol = [lightgray]由微處理器控制 @@ -941,6 +957,7 @@ keybind.pause_building.name = 暫停/繼續建造 keybind.minimap.name = 小地圖 keybind.planet_map.name = 行星地圖 keybind.research.name = 研究 +keybind.block_info.name = 方塊資訊 keybind.chat.name = 聊天 keybind.player_list.name = 玩家列表 keybind.console.name = 終端機 @@ -973,6 +990,7 @@ rules.wavetimer = 波次時間 rules.waves = 波次 rules.attack = 攻擊模式 rules.buildai = 電腦自動建築 +rules.corecapture = 佔領摧毀的核心 rules.enemyCheat = 電腦無限資源 rules.blockhealthmultiplier = 建築物耐久度倍數 rules.blockdamagemultiplier = 建築物傷害倍數 @@ -1028,6 +1046,7 @@ item.blast-compound.name = 爆炸化合物 item.pyratite.name = 火焰彈 item.metaglass.name = 鋼化玻璃 item.scrap.name = 廢料 + liquid.water.name = 水 liquid.slag.name = 熔渣 liquid.oil.name = 原油 @@ -1059,6 +1078,11 @@ unit.minke.name = 鬚鯨號 unit.bryde.name = 鯷鯨號 unit.sei.name = 塞鯨號 unit.omura.name = 角島鯨號 +unit.retusa.name = Retusa +unit.oxynoe.name = Oxynoe +unit.cyerce.name = Cyerce +unit.aegires.name = Aegires +unit.navanax.name = Navanax unit.alpha.name = 阿爾法 unit.beta.name = 貝塔 unit.gamma.name = 伽瑪 @@ -1119,6 +1143,7 @@ block.sand-water.name = 沙水 block.darksand-water.name = 黑沙水 block.char.name = 燒焦 block.dacite.name = 英安岩 +block.rhyolite.name = 流紋岩 block.dacite-wall.name = 英安岩牆 block.dacite-boulder.name = 英安岩石塊 block.ice-snow.name = 冰雪 @@ -1226,6 +1251,7 @@ block.solar-panel.name = 太陽能板 block.solar-panel-large.name = 大型太陽能板 block.oil-extractor.name = 原油鑽井 block.repair-point.name = 維修點 +block.repair-turret.name = 維修機台 block.pulse-conduit.name = 脈衝管線 block.plated-conduit.name = 裝甲管線 block.phase-conduit.name = 相織管線 @@ -1289,7 +1315,6 @@ block.memory-bank.name = 記憶體 team.blue.name = 藍 team.crux.name = 紅 team.sharded.name = 黃 -team.orange.name = 橘 team.derelict.name = 灰 team.green.name = 綠 team.purple.name = 紫 @@ -1506,7 +1531,7 @@ block.logic-display.description = 顯示由處理器輸出的任意圖像。 block.large-logic-display.description = 顯示由處理器輸出的任意圖像。 block.interplanetary-accelerator.description = 巨大的電磁砲塔。將核心加速至脫離速度以在其他星球部署。 -unit.dagger.description = 發射普通子彈攻擊所有附近敵人。 +unit.dagger.description = 發射普通子彈攻擊附近敵人。 unit.mace.description = 噴發烈焰攻擊所有附近敵人。 unit.fortress.description = 發射遠程迫砲攻擊地面目標。 unit.scepter.description = 發射大量續能子彈打擊所有附近敵人。 diff --git a/core/assets/contributors b/core/assets/contributors index d3364a79fd..89f98a6bda 100644 --- a/core/assets/contributors +++ b/core/assets/contributors @@ -38,6 +38,7 @@ Jaiun Lee Gab_351 Carter Gale Jan Polák +JrTRinny JustYanns BasedUser BLucky-gh diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat new file mode 100644 index 0000000000..c34c5571b7 Binary files /dev/null and b/core/assets/logicids.dat differ diff --git a/core/assets/maps/passage.msav b/core/assets/maps/passage.msav index b6816fba7b..e9b8c5b1d1 100644 Binary files a/core/assets/maps/passage.msav and b/core/assets/maps/passage.msav differ diff --git a/core/src/mindustry/ClientLauncher.java b/core/src/mindustry/ClientLauncher.java index 71b04314a8..24582860bf 100644 --- a/core/src/mindustry/ClientLauncher.java +++ b/core/src/mindustry/ClientLauncher.java @@ -149,7 +149,16 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform } mods.eachClass(Mod::init); finished = true; - Events.fire(new ClientLoadEvent()); + var event = new ClientLoadEvent(); + //a temporary measure for compatibility with certain mods + Events.fireWrap(event.getClass(), event, listener -> { + try{ + listener.get(event); + }catch(NoSuchFieldError | NoSuchMethodError | NoClassDefFoundError error){ + Log.err(error); + } + + }); clientLoaded = true; super.resize(graphics.getWidth(), graphics.getHeight()); app.post(() -> app.post(() -> app.post(() -> app.post(() -> { diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index 001d5c85d6..ac5268e59b 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -73,8 +73,8 @@ public class Vars implements Loadable{ /** URL to the JSON file containing all the BE servers. Only queried in BE. */ public static final String serverJsonBeURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_be.json"; /** URL to the JSON file containing all the stable servers. */ - //TODO this uses BE servers until full v7 release, there's no point in displaying v6 at all - public static final String serverJsonURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_be.json"; + //TODO merge with v6 list upon release + public static final String serverJsonURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_v7.json"; /** URL of the github issue report template.*/ public static final String reportIssueURL = "https://github.com/Anuken/Mindustry/issues/new?labels=bug&template=bug_report.md"; /** list of built-in servers.*/ @@ -148,6 +148,8 @@ public class Vars implements Loadable{ public static int maxTextureSize = 2048; /** Whether to show the core landing animation. */ public static boolean showLandAnimation = true; + /** Whether to check for memory use before taking screenshots. */ + public static boolean checkScreenshotMemory = true; /** Whether to prompt the user to confirm exiting. */ public static boolean confirmExit = true; /** if true, UI is not drawn */ diff --git a/core/src/mindustry/ai/types/MinerAI.java b/core/src/mindustry/ai/types/MinerAI.java index 89dda32d63..64bddbd5f0 100644 --- a/core/src/mindustry/ai/types/MinerAI.java +++ b/core/src/mindustry/ai/types/MinerAI.java @@ -31,7 +31,7 @@ public class MinerAI extends AIController{ //core full of the target item, do nothing if(targetItem != null && core.acceptStack(targetItem, 1, unit) == 0){ unit.clearItem(); - unit.mineTile =null; + unit.mineTile = null; return; } @@ -39,7 +39,7 @@ public class MinerAI extends AIController{ if(unit.stack.amount >= unit.type.itemCapacity || (targetItem != null && !unit.acceptsItem(targetItem))){ mining = false; }else{ - if(timer.get(timerTarget, 60) && targetItem != null){ + if(timer.get(timerTarget3, 60) && targetItem != null){ ore = indexer.findClosestOre(unit, targetItem); } diff --git a/core/src/mindustry/async/PhysicsProcess.java b/core/src/mindustry/async/PhysicsProcess.java index 9ad2064a7a..c8594a3ee2 100644 --- a/core/src/mindustry/async/PhysicsProcess.java +++ b/core/src/mindustry/async/PhysicsProcess.java @@ -24,6 +24,7 @@ public class PhysicsProcess implements AsyncProcess{ @Override public void begin(){ if(physics == null) return; + boolean local = !Vars.net.client(); //remove stale entities refs.removeAll(ref -> { @@ -60,8 +61,9 @@ public class PhysicsProcess implements AsyncProcess{ ref.body.layer = entity.type.allowLegStep ? layerLegs : entity.isGrounded() ? layerGround : layerFlying; - ref.x = entity.x(); - ref.y = entity.y(); + ref.x = entity.x; + ref.y = entity.y; + ref.body.local = local || entity.isLocal(); } } @@ -156,6 +158,10 @@ public class PhysicsProcess implements AsyncProcess{ for(int i = 0; i < bodies.size; i++){ PhysicsBody body = bodies.items[i]; + + //for clients, the only body that collides is the local one; all other physics simulations are handled by the server. + if(!body.local) continue; + body.hitbox(rect); seq.size = 0; @@ -174,10 +180,14 @@ public class PhysicsProcess implements AsyncProcess{ float ms = body.mass + other.mass; float m1 = other.mass / ms, m2 = body.mass / ms; + //first body is always local due to guard check above body.x += vec.x * m1 / scl; body.y += vec.y * m1 / scl; - other.x -= vec.x * m2 / scl; - other.y -= vec.y * m2 / scl; + + if(other.local){ + other.x -= vec.x * m2 / scl; + other.y -= vec.y * m2 / scl; + } } } body.collided = true; @@ -187,7 +197,7 @@ public class PhysicsProcess implements AsyncProcess{ public static class PhysicsBody implements QuadTreeObject{ public float x, y, radius, mass; public int layer = 0; - public boolean collided = false; + public boolean collided = false, local = true; @Override public void hitbox(Rect out){ diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index e531d3d901..ce243403b7 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -60,7 +60,7 @@ public class Blocks implements ContentList{ cellSynthesisChamber, //sandbox - powerSource, powerVoid, itemSource, itemVoid, liquidSource, liquidVoid, payloadVoid, payloadSource, illuminator, + powerSource, powerVoid, itemSource, itemVoid, liquidSource, liquidVoid, payloadSource, payloadVoid, illuminator, //defense copperWall, copperWallLarge, titaniumWall, titaniumWallLarge, plastaniumWall, plastaniumWallLarge, thoriumWall, thoriumWallLarge, door, doorLarge, @@ -1178,17 +1178,17 @@ public class Blocks implements ContentList{ //special transport blocks duct = new Duct("duct"){{ - requirements(Category.distribution, with(Items.graphite, 5, Items.metaglass, 2)); + requirements(Category.distribution, BuildVisibility.debugOnly, with(Items.graphite, 5, Items.metaglass, 2)); speed = 4f; }}; ductRouter = new DuctRouter("duct-router"){{ - requirements(Category.distribution, with(Items.graphite, 10, Items.metaglass, 4)); + requirements(Category.distribution, BuildVisibility.debugOnly, with(Items.graphite, 10, Items.metaglass, 4)); speed = 4f; }}; ductBridge = new DuctBridge("duct-bridge"){{ - requirements(Category.distribution, with(Items.graphite, 20, Items.metaglass, 8)); + requirements(Category.distribution, BuildVisibility.debugOnly, with(Items.graphite, 20, Items.metaglass, 8)); speed = 4f; }}; @@ -1757,13 +1757,13 @@ public class Blocks implements ContentList{ shots = 4; burstSpacing = 5; inaccuracy = 10f; - range = 210f; + range = 215f; xRand = 6f; size = 2; health = 300 * size * size; shootSound = Sounds.missile; - limitRange(2f); + limitRange(5f); }}; salvo = new ItemTurret("salvo"){{ @@ -1778,7 +1778,7 @@ public class Blocks implements ContentList{ size = 2; range = 190f; - reloadTime = 34f; + reloadTime = 31f; restitution = 0.03f; ammoEjectBack = 3f; cooldown = 0.03f; @@ -2147,7 +2147,7 @@ public class Blocks implements ContentList{ }}; repairPoint = new RepairPoint("repair-point"){{ - requirements(Category.units, with(Items.lead, 20, Items.copper, 20, Items.silicon, 15)); + requirements(Category.units, with(Items.lead, 25, Items.copper, 25, Items.silicon, 20)); repairSpeed = 0.5f; repairRadius = 65f; beamWidth = 0.73f; @@ -2156,16 +2156,16 @@ public class Blocks implements ContentList{ }}; repairTurret = new RepairPoint("repair-turret"){{ - requirements(Category.units, with(Items.silicon, 70, Items.thorium, 60, Items.plastanium, 60)); + requirements(Category.units, with(Items.silicon, 90, Items.thorium, 80, Items.plastanium, 80)); size = 2; length = 6f; - repairSpeed = 4f; + repairSpeed = 3.25f; repairRadius = 140f; powerUse = 5f; beamWidth = 1.1f; pulseRadius = 6.1f; - coolantUse = 0.15f; - coolantMultiplier = 1.7f; + coolantUse = 0.16f; + coolantMultiplier = 1.5f; acceptCoolant = true; }}; @@ -2266,12 +2266,12 @@ public class Blocks implements ContentList{ alwaysUnlocked = true; }}; - payloadVoid = new PayloadVoid("payload-void"){{ + payloadSource = new PayloadSource("payload-source"){{ requirements(Category.units, BuildVisibility.sandboxOnly, with()); size = 5; }}; - payloadSource = new PayloadSource("payload-source"){{ + payloadVoid = new PayloadVoid("payload-void"){{ requirements(Category.units, BuildVisibility.sandboxOnly, with()); size = 5; }}; diff --git a/core/src/mindustry/content/Bullets.java b/core/src/mindustry/content/Bullets.java index 674cb514e2..560e34f6cd 100644 --- a/core/src/mindustry/content/Bullets.java +++ b/core/src/mindustry/content/Bullets.java @@ -257,7 +257,6 @@ public class Bullets implements ContentList{ width = 8f; height = 8f; shrinkY = 0f; - drag = -0.01f; splashDamageRadius = 30f; splashDamage = 30f * 1.5f; ammoMultiplier = 5f; @@ -274,7 +273,6 @@ public class Bullets implements ContentList{ width = 7f; height = 8f; shrinkY = 0f; - drag = -0.01f; homingPower = 0.08f; splashDamageRadius = 20f; splashDamage = 20f * 1.5f; @@ -288,7 +286,6 @@ public class Bullets implements ContentList{ width = 8f; height = 8f; shrinkY = 0f; - drag = -0.01f; splashDamageRadius = 25f; splashDamage = 25f * 1.4f; hitEffect = Fx.blastExplosion; diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index d5b9ffcf7b..caf2b37f6a 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -854,7 +854,7 @@ public class Fx{ fireRemove = new Effect(70f, e -> { if(Fire.regions[0] == null) return; alpha(e.fout()); - rect(Fire.regions[((int)(e.rotation + e.fin() * Fire.frames)) % Fire.frames], e.x, e.y); + rect(Fire.regions[((int)(e.rotation + e.fin() * Fire.frames)) % Fire.frames], e.x + Mathf.randomSeedRange((int)e.y, 2), e.y + Mathf.randomSeedRange((int)e.x, 2)); Drawf.light(e.x, e.y, 50f + Mathf.absin(5f, 5f), Pal.lightFlame, 0.6f * e.fout()); }), diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index b5225e6b85..e4dffdb406 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -572,7 +572,7 @@ public class UnitTypes implements ContentList{ speed = 1f; splashDamageRadius = 60f; instantDisappear = true; - splashDamage = 88f; + splashDamage = 90f; killShooter = true; hittable = false; collidesAir = true; @@ -581,7 +581,7 @@ public class UnitTypes implements ContentList{ }}; atrax = new UnitType("atrax"){{ - speed = 0.5f; + speed = 0.54f; drag = 0.4f; hitSize = 13f; rotateSpeed = 3f; @@ -621,7 +621,7 @@ public class UnitTypes implements ContentList{ }}; spiroct = new UnitType("spiroct"){{ - speed = 0.45f; + speed = 0.48f; drag = 0.4f; hitSize = 15f; rotateSpeed = 3f; @@ -2113,7 +2113,7 @@ public class UnitTypes implements ContentList{ bullet = new ContinuousLaserBulletType(){{ maxRange = 90f; - damage = 26f; + damage = 27f; length = 95f; hitEffect = Fx.hitMeltHeal; drawSize = 200f; @@ -2144,7 +2144,7 @@ public class UnitTypes implements ContentList{ x = 70f/4f; y = -26f/4f; - reload = 70f; + reload = 65f; shake = 3f; rotateSpeed = 2f; shadow = 30f; @@ -2161,7 +2161,7 @@ public class UnitTypes implements ContentList{ timeIncrease = 3f; timeDuration = 60f * 20f; powerDamageScl = 3f; - damage = 50; + damage = 60; hitColor = lightColor = Pal.heal; lightRadius = 70f; clipSize = 250f; @@ -2177,7 +2177,7 @@ public class UnitTypes implements ContentList{ trailWidth = 6f; trailColor = Pal.heal; trailInterval = 3f; - splashDamage = 60f; + splashDamage = 70f; splashDamageRadius = rad; hitShake = 4f; trailRotation = true; diff --git a/core/src/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java index 51dba3a916..905425f1c9 100644 --- a/core/src/mindustry/core/NetServer.java +++ b/core/src/mindustry/core/NetServer.java @@ -48,7 +48,7 @@ public class NetServer implements ApplicationListener{ if(state.rules.pvp){ //find team with minimum amount of players and auto-assign player to that. TeamData re = state.teams.getActive().min(data -> { - if((state.rules.waveTeam == data.team && state.rules.waves) || !data.team.active()) return Integer.MAX_VALUE; + if((state.rules.waveTeam == data.team && state.rules.waves) || !data.team.active() || data.team == Team.derelict) return Integer.MAX_VALUE; int count = 0; for(Player other : players){ @@ -472,6 +472,10 @@ public class NetServer implements ApplicationListener{ return; } + if(!player.dead() && player.unit().isCommanding()){ + player.unit().clearCommand(); + } + player.getInfo().lastSyncTime = Time.millis(); Call.worldDataBegin(player.con); netServer.sendWorldData(player); diff --git a/core/src/mindustry/core/Renderer.java b/core/src/mindustry/core/Renderer.java index 0e7855f3eb..15523f861a 100644 --- a/core/src/mindustry/core/Renderer.java +++ b/core/src/mindustry/core/Renderer.java @@ -11,6 +11,7 @@ import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; import arc.util.async.*; +import mindustry.*; import mindustry.content.*; import mindustry.game.EventType.*; import mindustry.gen.*; @@ -355,7 +356,7 @@ public class Renderer implements ApplicationListener{ int w = world.width() * tilesize, h = world.height() * tilesize; int memory = w * h * 4 / 1024 / 1024; - if(memory >= (mobile ? 65 : 120)){ + if(Vars.checkScreenshotMemory && memory >= (mobile ? 65 : 120)){ ui.showInfo("@screenshot.invalid"); return; } diff --git a/core/src/mindustry/ctype/UnlockableContent.java b/core/src/mindustry/ctype/UnlockableContent.java index c28496bb81..b557bbaf89 100644 --- a/core/src/mindustry/ctype/UnlockableContent.java +++ b/core/src/mindustry/ctype/UnlockableContent.java @@ -126,6 +126,10 @@ public abstract class UnlockableContent extends MappableContent{ return true; } + public boolean logicVisible(){ + return !isHidden(); + } + /** Makes this piece of content unlocked; if it already unlocked, nothing happens. */ public void unlock(){ if(!unlocked && !alwaysUnlocked){ diff --git a/core/src/mindustry/entities/Puddles.java b/core/src/mindustry/entities/Puddles.java index 2811c28d01..183f64eacc 100644 --- a/core/src/mindustry/entities/Puddles.java +++ b/core/src/mindustry/entities/Puddles.java @@ -52,22 +52,22 @@ public class Puddles{ Puddle p = map.get(tile.pos()); if(p == null){ Puddle puddle = Puddle.create(); - puddle.tile(tile); - puddle.liquid(liquid); - puddle.amount(amount); - puddle.generation(generation); + puddle.tile = tile; + puddle.liquid = liquid; + puddle.amount = amount; + puddle.generation = generation; puddle.set((tile.worldx() + source.worldx()) / 2f, (tile.worldy() + source.worldy()) / 2f); puddle.add(); map.put(tile.pos(), puddle); - }else if(p.liquid() == liquid){ - p.accepting(Math.max(amount, p.accepting())); + }else if(p.liquid == liquid){ + p.accepting = Math.max(amount, p.accepting); - if(generation == 0 && p.lastRipple <= Time.time - 40f && p.amount() >= maxLiquid / 2f){ - Fx.ripple.at((tile.worldx() + source.worldx()) / 2f, (tile.worldy() + source.worldy()) / 2f, 1f, p.liquid().color); + if(generation == 0 && p.lastRipple <= Time.time - 40f && p.amount >= maxLiquid / 2f){ + Fx.ripple.at((tile.worldx() + source.worldx()) / 2f, (tile.worldy() + source.worldy()) / 2f, 1f, p.liquid.color); p.lastRipple = Time.time; } }else{ - p.amount(p.amount() + reactPuddle(p.liquid(), liquid, amount, p.tile(), (p.x() + source.worldx())/2f, (p.y() + source.worldy())/2f)); + p.amount += reactPuddle(p.liquid, liquid, amount, p.tile, (p.x + source.worldx())/2f, (p.y + source.worldy())/2f); } } diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index f09c5967f7..7ed52813a7 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -297,7 +297,7 @@ public class BulletType extends Content implements Cloneable{ } } - /** Called when the bullet reaches the end of its lifetime of is destroyed by something external. */ + /** Called when the bullet reaches the end of its lifetime or is destroyed by something external. */ public void despawned(Bullet b){ if(despawnHit){ hit(b); diff --git a/core/src/mindustry/entities/comp/BoundedComp.java b/core/src/mindustry/entities/comp/BoundedComp.java index 6ecb94052f..7b09f23f69 100644 --- a/core/src/mindustry/entities/comp/BoundedComp.java +++ b/core/src/mindustry/entities/comp/BoundedComp.java @@ -1,6 +1,7 @@ package mindustry.entities.comp; import arc.math.*; +import arc.util.*; import mindustry.annotations.Annotations.*; import mindustry.gen.*; @@ -24,7 +25,7 @@ abstract class BoundedComp implements Velc, Posc, Healthc, Flyingc{ if(x > world.unitWidth()) dx -= (x - world.unitWidth())/warpDst; if(y > world.unitHeight()) dy -= (y - world.unitHeight())/warpDst; - velAddNet(dx, dy); + velAddNet(dx * Time.delta, dy * Time.delta); } //clamp position if not flying diff --git a/core/src/mindustry/entities/comp/FireComp.java b/core/src/mindustry/entities/comp/FireComp.java index dd9d70e800..88470707dd 100644 --- a/core/src/mindustry/entities/comp/FireComp.java +++ b/core/src/mindustry/entities/comp/FireComp.java @@ -28,6 +28,7 @@ abstract class FireComp implements Timedc, Posc, Syncc, Drawc{ public static final TextureRegion[] regions = new TextureRegion[frames]; @Import float time, lifetime, x, y; + @Import int id; Tile tile; private transient Block block; @@ -116,7 +117,7 @@ abstract class FireComp implements Timedc, Posc, Syncc, Drawc{ Draw.alpha(Mathf.clamp(warmup / warmupDuration)); Draw.z(Layer.effect); - Draw.rect(regions[Math.min((int)animation, regions.length - 1)], x, y); + Draw.rect(regions[Math.min((int)animation, regions.length - 1)], x + Mathf.randomSeedRange((int)y, 2), y + Mathf.randomSeedRange((int)x, 2)); Draw.reset(); Drawf.light(x, y, 50f + Mathf.absin(5f, 5f), Pal.lightFlame, 0.6f * Mathf.clamp(warmup / warmupDuration)); diff --git a/core/src/mindustry/entities/comp/HealthComp.java b/core/src/mindustry/entities/comp/HealthComp.java index 85d0a37105..c06e6909e3 100644 --- a/core/src/mindustry/entities/comp/HealthComp.java +++ b/core/src/mindustry/entities/comp/HealthComp.java @@ -1,6 +1,5 @@ package mindustry.entities.comp; -import arc.math.*; import arc.util.*; import mindustry.annotations.Annotations.*; import mindustry.gen.*; @@ -34,7 +33,7 @@ abstract class HealthComp implements Entityc, Posc{ void kill(){ if(dead) return; - health = 0; + health = Math.min(health, 0); dead = true; killed(); remove(); @@ -86,7 +85,7 @@ abstract class HealthComp implements Entityc, Posc{ } void clampHealth(){ - health = Mathf.clamp(health, 0, maxHealth); + health = Math.min(health, maxHealth); } /** Heals by a flat amount. */ diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index dd64442f02..cfd1554ecc 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -397,7 +397,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I //move down elevation -= type.fallSpeed * Time.delta; - if(isGrounded()){ + if(isGrounded() || health <= -maxHealth){ Call.unitDestroy(id); } } @@ -528,7 +528,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I @Override public void killed(){ wasPlayer = isLocal(); - health = 0; + health = Math.min(health, 0); dead = true; //don't waste time when the unit is already on the ground, just destroy it diff --git a/core/src/mindustry/game/Gamemode.java b/core/src/mindustry/game/Gamemode.java index a83fcd3e8d..43425914c4 100644 --- a/core/src/mindustry/game/Gamemode.java +++ b/core/src/mindustry/game/Gamemode.java @@ -38,7 +38,6 @@ public enum Gamemode{ rules.infiniteResources = true; rules.editor = true; rules.waves = false; - rules.enemyCoreBuildRadius = 0f; rules.waveTimer = false; }); diff --git a/core/src/mindustry/graphics/BlockRenderer.java b/core/src/mindustry/graphics/BlockRenderer.java index b67124e78b..d85a9e335d 100644 --- a/core/src/mindustry/graphics/BlockRenderer.java +++ b/core/src/mindustry/graphics/BlockRenderer.java @@ -165,6 +165,7 @@ public class BlockRenderer{ darkEvents.each(pos -> { var tile = world.tile(pos); + if(tile == null) return; float darkness = world.getDarkness(tile.x, tile.y); //then draw the shadow Draw.colorl(darkness <= 0f ? 1f : 1f - Math.min((darkness + 0.5f) / 4f, 1f)); diff --git a/core/src/mindustry/input/MobileInput.java b/core/src/mindustry/input/MobileInput.java index 55851e5c1c..cc1ced2143 100644 --- a/core/src/mindustry/input/MobileInput.java +++ b/core/src/mindustry/input/MobileInput.java @@ -270,6 +270,7 @@ public class MobileInput extends InputHandler implements GestureListener{ b.button(Icon.save, style, this::showSchematicSave).disabled(f -> lastSchematic == null || lastSchematic.file != null); b.button(Icon.cancel, style, () -> { selectRequests.clear(); + lastSchematic = null; }); b.row(); b.button(Icon.flipX, style, () -> flipRequests(selectRequests, true)); diff --git a/core/src/mindustry/io/JsonIO.java b/core/src/mindustry/io/JsonIO.java index c5b7986daa..37dff7ec56 100644 --- a/core/src/mindustry/io/JsonIO.java +++ b/core/src/mindustry/io/JsonIO.java @@ -70,8 +70,6 @@ public class JsonIO{ json.setElementType(Rules.class, "spawns", SpawnGroup.class); json.setElementType(Rules.class, "loadout", ItemStack.class); - //TODO this is terrible - json.setSerializer(Sector.class, new Serializer<>(){ @Override public void write(Json json, Sector object, Class knownType){ diff --git a/core/src/mindustry/logic/GlobalConstants.java b/core/src/mindustry/logic/GlobalConstants.java index 479eda46ab..e631906760 100644 --- a/core/src/mindustry/logic/GlobalConstants.java +++ b/core/src/mindustry/logic/GlobalConstants.java @@ -1,20 +1,28 @@ package mindustry.logic; +import arc.*; +import arc.files.*; import arc.struct.*; import arc.util.*; import mindustry.*; import mindustry.content.*; +import mindustry.ctype.*; import mindustry.entities.units.*; import mindustry.logic.LExecutor.*; import mindustry.type.*; import mindustry.world.*; +import java.io.*; + /** Stores global constants for logic processors. */ public class GlobalConstants{ public static final int ctrlProcessor = 1, ctrlPlayer = 2, ctrlFormation = 3; + public static final ContentType[] lookableContent = {ContentType.block, ContentType.unit, ContentType.item, ContentType.liquid}; private ObjectIntMap namesToIds = new ObjectIntMap<>(); private Seq vars = new Seq<>(Var.class); + private UnlockableContent[][] logicIdToContent; + private int[][] contentIdToLogicId; public void init(){ put("the end", null); @@ -61,6 +69,49 @@ public class GlobalConstants{ for(UnitCommand cmd : UnitCommand.all){ put("@command" + Strings.capitalize(cmd.name()), cmd); } + + logicIdToContent = new UnlockableContent[ContentType.all.length][]; + contentIdToLogicId = new int[ContentType.all.length][]; + + Fi ids = Core.files.internal("logicids.dat"); + if(ids.exists()){ + //read logic ID mapping data (generated in ImagePacker) + try(DataInputStream in = new DataInputStream(ids.readByteStream())){ + for(ContentType ctype : lookableContent){ + short amount = in.readShort(); + logicIdToContent[ctype.ordinal()] = new UnlockableContent[amount]; + contentIdToLogicId[ctype.ordinal()] = new int[Vars.content.getBy(ctype).size]; + + //store count constants + put("@" + ctype.name() + "Count", amount); + + for(int i = 0; i < amount; i++){ + String name = in.readUTF(); + UnlockableContent fetched = Vars.content.getByName(ctype, name); + + if(fetched != null){ + logicIdToContent[ctype.ordinal()][i] = fetched; + contentIdToLogicId[ctype.ordinal()][fetched.id] = i; + } + } + } + }catch(IOException e){ + //don't crash? + Log.err("Error reading logic ID mapping", e); + } + } + } + + /** @return a piece of content based on its logic ID. This is not equivalent to content ID. */ + public @Nullable Content lookupContent(ContentType type, int id){ + var arr = logicIdToContent[type.ordinal()]; + return arr != null && id >= 0 && id < arr.length ? arr[id] : null; + } + + /** @return the integer logic ID of content, or -1 if invalid. */ + public int lookupLogicId(UnlockableContent content){ + var arr = contentIdToLogicId[content.getContentType().ordinal()]; + return arr != null && content.id >= 0 && content.id < arr.length ? arr[content.id] : -1; } /** @return a constant ID > 0 if there is a constant with this name, otherwise -1. */ diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index 5536874a6e..73a83c00b2 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -537,7 +537,7 @@ public class LExecutor{ public void run(LExecutor exec){ Object obj = exec.obj(target); if(obj instanceof Building b && b.team == exec.team && exec.linkIds.contains(b.id)){ - if(type.isObj && exec.var(p1).isobj){ //TODO may break logic? + if(type.isObj && exec.var(p1).isobj){ b.control(type, exec.obj(p1), exec.num(p2), exec.num(p3), exec.num(p4)); }else{ b.control(type, exec.num(p1), exec.num(p2), exec.num(p3), exec.num(p4)); @@ -764,7 +764,6 @@ public class LExecutor{ Var v = exec.var(to); Var f = exec.var(from); - //TODO error out when the from-value is a constant if(!v.constant){ if(f.isobj){ v.objval = f.objval; @@ -1024,6 +1023,26 @@ public class LExecutor{ } } + public static class LookupI implements LInstruction{ + public int dest; + public int from; + public ContentType type; + + public LookupI(int dest, int from, ContentType type){ + this.dest = dest; + this.from = from; + this.type = type; + } + + public LookupI(){ + } + + @Override + public void run(LExecutor exec){ + exec.setobj(dest, constants.lookupContent(type, exec.numi(from))); + } + } + //endregion } diff --git a/core/src/mindustry/logic/LStatements.java b/core/src/mindustry/logic/LStatements.java index 9b78de37f8..1d04b21052 100644 --- a/core/src/mindustry/logic/LStatements.java +++ b/core/src/mindustry/logic/LStatements.java @@ -7,6 +7,7 @@ import arc.scene.ui.*; import arc.scene.ui.layout.*; import mindustry.*; import mindustry.annotations.Annotations.*; +import mindustry.ctype.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.logic.LCanvas.*; @@ -662,8 +663,7 @@ public class LStatements{ } } - //TODO untested - //@RegisterStatement("wait") + @RegisterStatement("wait") public static class WaitStatement extends LStatement{ public String value = "0.5"; @@ -684,6 +684,42 @@ public class LStatements{ } } + @RegisterStatement("lookup") + public static class LookupStatement extends LStatement{ + public ContentType type = ContentType.item; + public String result = "result", id = "0"; + + @Override + public void build(Table table){ + fields(table, result, str -> result = str); + + table.add(" = lookup "); + + row(table); + + table.button(b -> { + b.label(() -> type.name()); + b.clicked(() -> showSelect(b, GlobalConstants.lookableContent, type, o -> { + type = o; + })); + }, Styles.logict, () -> {}).size(64f, 40f).pad(4f).color(table.color); + + table.add(" # "); + + fields(table, id, str -> id = str); + } + + @Override + public Color color(){ + return Pal.logicOperations; + } + + @Override + public LInstruction build(LAssembler builder){ + return new LookupI(builder.var(result), builder.var(id), type); + } + } + @RegisterStatement("end") public static class EndStatement extends LStatement{ @Override diff --git a/core/src/mindustry/mod/ModClassLoader.java b/core/src/mindustry/mod/ModClassLoader.java index 3124c16fed..d9c05036f9 100644 --- a/core/src/mindustry/mod/ModClassLoader.java +++ b/core/src/mindustry/mod/ModClassLoader.java @@ -11,6 +11,10 @@ public class ModClassLoader extends ClassLoader{ } }; + public ModClassLoader(ClassLoader parent){ + super(parent); + } + public void addChild(ClassLoader child){ children.add(child); } diff --git a/core/src/mindustry/mod/Mods.java b/core/src/mindustry/mod/Mods.java index 91dabc5482..1380251730 100644 --- a/core/src/mindustry/mod/Mods.java +++ b/core/src/mindustry/mod/Mods.java @@ -39,7 +39,7 @@ public class Mods implements Loadable{ private int totalSprites; private MultiPacker packer; - private ModClassLoader mainLoader = new ModClassLoader(); + private ModClassLoader mainLoader = new ModClassLoader(getClass().getClassLoader()); Seq mods = new Seq<>(); private ObjectMap, ModMeta> metas = new ObjectMap<>(); diff --git a/core/src/mindustry/net/Administration.java b/core/src/mindustry/net/Administration.java index 306a6d8291..98f8b02429 100644 --- a/core/src/mindustry/net/Administration.java +++ b/core/src/mindustry/net/Administration.java @@ -61,7 +61,6 @@ public class Administration{ }); //block interaction rate limit - //TODO when someone disconnects, a different player is mistakenly kicked for spamming actions addActionFilter(action -> { if(action.type != ActionType.breakBlock && action.type != ActionType.placeBlock && diff --git a/core/src/mindustry/net/ArcNetProvider.java b/core/src/mindustry/net/ArcNetProvider.java index ba8ff4cfa0..9cbad476ad 100644 --- a/core/src/mindustry/net/ArcNetProvider.java +++ b/core/src/mindustry/net/ArcNetProvider.java @@ -391,7 +391,15 @@ public class ArcNetProvider implements NetProvider{ //no compression, copy over buffer if(compression == 0){ buffer.position(0).limit(length); - buffer.put(byteBuffer.array(), byteBuffer.position(), length); + if(byteBuffer.hasArray()){ + buffer.put(byteBuffer.array(), byteBuffer.position(), length); + }else{ + byte[] readcopy = new byte[length]; + int pos = byteBuffer.position(); + byteBuffer.get(readcopy); + byteBuffer.position(pos); + buffer.put(readcopy); + } buffer.position(0); packet.read(reads.get(), length); //move read packets forward diff --git a/core/src/mindustry/net/Net.java b/core/src/mindustry/net/Net.java index 2341d0509b..34fed7fa4b 100644 --- a/core/src/mindustry/net/Net.java +++ b/core/src/mindustry/net/Net.java @@ -97,7 +97,7 @@ public class Net{ if(e instanceof BufferUnderflowException || e instanceof BufferOverflowException){ error = Core.bundle.get("error.io"); - }else if(error.equals("mismatch")){ + }else if(error.equals("mismatch") || (e instanceof IndexOutOfBoundsException && e.getStackTrace()[0].getClassName().contains("java.nio"))){ error = Core.bundle.get("error.mismatch"); }else if(error.contains("port out of range") || error.contains("invalid argument") || (error.contains("invalid") && error.contains("address")) || Strings.neatError(e).contains("address associated")){ error = Core.bundle.get("error.invalidaddress"); diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index e045f247cb..2e28d01ff1 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -664,7 +664,7 @@ public class UnitType extends UnlockableContent{ if(unit.item() != null && unit.itemTime > 0.01f){ float size = (itemSize + Mathf.absin(Time.time, 5f, 1f)) * unit.itemTime; - Draw.mixcol(Pal.accent, Mathf.absin(Time.time, 5f, 0.5f)); + Draw.mixcol(Pal.accent, Mathf.absin(Time.time, 5f, 0.1f)); Draw.rect(unit.item().fullIcon, unit.x + Angles.trnsx(unit.rotation + 180f, itemOffsetY), unit.y + Angles.trnsy(unit.rotation + 180f, itemOffsetY), diff --git a/core/src/mindustry/type/weather/ParticleWeather.java b/core/src/mindustry/type/weather/ParticleWeather.java index e58f084f39..f277911753 100644 --- a/core/src/mindustry/type/weather/ParticleWeather.java +++ b/core/src/mindustry/type/weather/ParticleWeather.java @@ -33,7 +33,6 @@ public class ParticleWeather extends Weather{ region = Core.atlas.find(particleRegion); //load noise texture - //TODO mod support if(drawNoise && Core.assets != null){ Core.assets.load("sprites/" + noisePath + ".png", Texture.class); } diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index 28415c7dc8..a8bd8b0603 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -6,6 +6,7 @@ import arc.graphics.*; import arc.input.*; import arc.math.*; import arc.scene.ui.*; +import arc.scene.ui.TextButton.*; import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; @@ -34,6 +35,7 @@ public class JoinDialog extends BaseDialog{ int totalHosts; int refreshes; boolean showHidden; + TextButtonStyle style; String lastIp; int lastPort; @@ -42,6 +44,15 @@ public class JoinDialog extends BaseDialog{ public JoinDialog(){ super("@joingame"); + style = new TextButtonStyle(){{ + over = Styles.flatOver; + font = Fonts.def; + fontColor = Color.white; + disabledFontColor = Color.gray; + down = Styles.flatOver; + up = Styles.black5; + }}; + loadServers(); if(!steam) buttons.add().width(60f); @@ -119,7 +130,7 @@ public class JoinDialog extends BaseDialog{ //why are java lambdas this bad TextButton[] buttons = {null}; - TextButton button = buttons[0] = remote.button("[accent]" + server.displayIP(), Styles.cleart, () -> { + TextButton button = buttons[0] = remote.button("[accent]" + server.displayIP(), style, () -> { if(!buttons[0].childrenPressed()){ if(server.lastHost != null){ Events.fire(new ClientPreConnectEvent(server.lastHost)); @@ -405,7 +416,7 @@ public class JoinDialog extends BaseDialog{ float w = targetWidth(); //TODO looks bad - container.button(b -> buildServer(host, b), Styles.cleart, () -> { + container.button(b -> buildServer(host, b), style, () -> { Events.fire(new ClientPreConnectEvent(host)); if(!Core.settings.getBool("server-disclaimer", false)){ ui.showCustomConfirm("@warning", "@servers.disclaimer", "@ok", "@back", () -> { @@ -442,7 +453,7 @@ public class JoinDialog extends BaseDialog{ local.row(); - local.button(b -> buildServer(host, b), Styles.cleart, () -> { + local.button(b -> buildServer(host, b), style, () -> { Events.fire(new ClientPreConnectEvent(host)); safeConnect(host.address, host.port, host.version); }).width(w); diff --git a/core/src/mindustry/ui/dialogs/KeybindDialog.java b/core/src/mindustry/ui/dialogs/KeybindDialog.java index 4674c8f60e..0aefcb2a38 100644 --- a/core/src/mindustry/ui/dialogs/KeybindDialog.java +++ b/core/src/mindustry/ui/dialogs/KeybindDialog.java @@ -72,7 +72,6 @@ public class KeybindDialog extends Dialog{ } if(sections.length != 1){ - //TODO toggle style TextButton button = new TextButton(bundle.get("section." + section.name + ".name", Strings.capitalize(section.name))/*, "toggle"*/); if(section.equals(this.section)) button.toggle(); diff --git a/core/src/mindustry/ui/dialogs/ModsDialog.java b/core/src/mindustry/ui/dialogs/ModsDialog.java index ca5ff1fcf8..afe38d02d7 100644 --- a/core/src/mindustry/ui/dialogs/ModsDialog.java +++ b/core/src/mindustry/ui/dialogs/ModsDialog.java @@ -324,7 +324,6 @@ public class ModsDialog extends BaseDialog{ if(showImport) dialog.buttons.button("@mods.browser.reinstall", Icon.download, () -> githubImportMod(mod.getRepo(), mod.isJava())); } - //TODO improve this menu later dialog.cont.pane(desc -> { desc.center(); desc.defaults().padTop(10).left(); diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 6076d33875..bba673762d 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -241,7 +241,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ dialog.add("@sectors.captured"); } - //TODO + //TODO unimplemented, cutscene needed public void showPlanetLaunch(Sector sector, Cons listener){ selected = null; hovered = null; diff --git a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java index 2b89f153aa..168ae4b451 100644 --- a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -423,12 +423,17 @@ public class SettingsMenuDialog extends Dialog{ } }); - graphics.checkPref("linear", !mobile, b -> { - for(Texture tex : Core.atlas.getTextures()){ - TextureFilter filter = b ? TextureFilter.linear : TextureFilter.nearest; - tex.setFilter(filter, filter); - } - }); + //iOS (and possibly Android) devices do not support linear filtering well, so disable it + if(!ios){ + graphics.checkPref("linear", !mobile, b -> { + for(Texture tex : Core.atlas.getTextures()){ + TextureFilter filter = b ? TextureFilter.linear : TextureFilter.nearest; + tex.setFilter(filter, filter); + } + }); + }else{ + settings.put("linear", false); + } if(Core.settings.getBool("linear")){ for(Texture tex : Core.atlas.getTextures()){ diff --git a/core/src/mindustry/ui/fragments/HudFragment.java b/core/src/mindustry/ui/fragments/HudFragment.java index 9cb5d850e0..9b857b1ce2 100644 --- a/core/src/mindustry/ui/fragments/HudFragment.java +++ b/core/src/mindustry/ui/fragments/HudFragment.java @@ -267,6 +267,7 @@ public class HudFragment extends Fragment{ //core info parent.fill(t -> { t.top(); + t.visible(() -> shown); t.name = "coreinfo"; diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 6e2e2c1afc..2fccf0130b 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -774,6 +774,11 @@ public class Block extends UnlockableContent{ return ContentType.block; } + @Override + public boolean logicVisible(){ + return buildVisibility != BuildVisibility.hidden; + } + /** Called after all blocks are created. */ @Override @CallSuper @@ -838,7 +843,7 @@ public class Block extends UnlockableContent{ //load specific team regions teamRegions = new TextureRegion[Team.all.length]; for(Team team : Team.all){ - teamRegions[team.id] = teamRegion.found() ? Core.atlas.find(name + "-team-" + team.name, teamRegion) : teamRegion; + teamRegions[team.id] = teamRegion.found() && team.hasPalette ? Core.atlas.find(name + "-team-" + team.name, teamRegion) : teamRegion; } if(variants != 0){ diff --git a/core/src/mindustry/world/Build.java b/core/src/mindustry/world/Build.java index 0069ea0f56..d5bb888f7a 100644 --- a/core/src/mindustry/world/Build.java +++ b/core/src/mindustry/world/Build.java @@ -134,24 +134,26 @@ public class Build{ return false; } - //find closest core, if it doesn't match the team, placing is not legal - if(state.rules.polygonCoreProtection){ - float mindst = Float.MAX_VALUE; - CoreBuild closest = null; - for(TeamData data : state.teams.active){ - for(CoreBuild tile : data.cores){ - float dst = tile.dst2(x * tilesize + type.offset, y * tilesize + type.offset); - if(dst < mindst){ - closest = tile; - mindst = dst; + if(!state.rules.editor){ + //find closest core, if it doesn't match the team, placing is not legal + if(state.rules.polygonCoreProtection){ + float mindst = Float.MAX_VALUE; + CoreBuild closest = null; + for(TeamData data : state.teams.active){ + for(CoreBuild tile : data.cores){ + float dst = tile.dst2(x * tilesize + type.offset, y * tilesize + type.offset); + if(dst < mindst){ + closest = tile; + mindst = dst; + } } } - } - if(closest != null && closest.team != team){ + if(closest != null && closest.team != team){ + return false; + } + }else if(state.teams.eachEnemyCore(team, core -> Mathf.dst(x * tilesize + type.offset, y * tilesize + type.offset, core.x, core.y) < state.rules.enemyCoreBuildRadius + type.size * tilesize / 2f)){ return false; } - }else if(state.teams.eachEnemyCore(team, core -> Mathf.dst(x * tilesize + type.offset, y * tilesize + type.offset, core.x, core.y) < state.rules.enemyCoreBuildRadius + type.size * tilesize / 2f)){ - return false; } Tile tile = world.tile(x, y); diff --git a/core/src/mindustry/world/blocks/campaign/Accelerator.java b/core/src/mindustry/world/blocks/campaign/Accelerator.java index 6ca4ee3f0a..7aeb501bef 100644 --- a/core/src/mindustry/world/blocks/campaign/Accelerator.java +++ b/core/src/mindustry/world/blocks/campaign/Accelerator.java @@ -109,10 +109,15 @@ public class Accelerator extends Block{ if(!state.isCampaign() || !consValid()) return; - ui.planet.showPlanetLaunch(state.rules.sector, sector -> { - //TODO cutscene, etc... - consume(); - }); + //TODO implement + if(true){ + ui.showInfo("@indev.campaign"); + }else{ + ui.planet.showPlanetLaunch(state.rules.sector, sector -> { + //TODO cutscene, etc... + consume(); + }); + } Events.fire(Trigger.acceleratorUse); } diff --git a/core/src/mindustry/world/blocks/campaign/LaunchPad.java b/core/src/mindustry/world/blocks/campaign/LaunchPad.java index 1f65097c47..fe50676d0b 100644 --- a/core/src/mindustry/world/blocks/campaign/LaunchPad.java +++ b/core/src/mindustry/world/blocks/campaign/LaunchPad.java @@ -149,7 +149,7 @@ public class LaunchPad extends Block{ public void display(Table table){ super.display(table); - if(!state.isCampaign()) return; + if(!state.isCampaign() || net.client()) return; table.row(); table.label(() -> { diff --git a/core/src/mindustry/world/blocks/defense/ShockMine.java b/core/src/mindustry/world/blocks/defense/ShockMine.java index 6cdcac7c3d..78a2abfd01 100644 --- a/core/src/mindustry/world/blocks/defense/ShockMine.java +++ b/core/src/mindustry/world/blocks/defense/ShockMine.java @@ -3,8 +3,10 @@ package mindustry.world.blocks.defense; import arc.graphics.*; import arc.graphics.g2d.*; import arc.math.*; +import arc.util.*; import mindustry.annotations.Annotations.*; import mindustry.entities.*; +import mindustry.entities.bullet.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.world.*; @@ -18,6 +20,9 @@ public class ShockMine extends Block{ public int length = 10; public int tendrils = 6; public Color lightningColor = Pal.lancerLaser; + public int shots = 6; + public float inaccuracy = 0f; + public @Nullable BulletType bullet; public float teamAlpha = 0.3f; public @Load("@-team-top") TextureRegion teamRegion; @@ -46,17 +51,26 @@ public class ShockMine extends Block{ @Override public void drawCracks(){ - + //no } @Override public void unitOn(Unit unit){ if(enabled && unit.team != team && timer(timerDamage, cooldown)){ - for(int i = 0; i < tendrils; i++){ - Lightning.create(team, lightningColor, damage, x, y, Mathf.random(360f), length); - } + triggered(); damage(tileDamage); } } + + public void triggered(){ + for(int i = 0; i < tendrils; i++){ + Lightning.create(team, lightningColor, damage, x, y, Mathf.random(360f), length); + } + if(bullet != null){ + for(int i = 0; i < shots; i++){ + bullet.create(this, x, y, (360f / shots) * i + Mathf.random(inaccuracy)); + } + } + } } } diff --git a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java index 58d0aed084..8e1a2c0ad5 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java @@ -136,6 +136,7 @@ public class ItemTurret extends Turret{ } BulletType type = ammoTypes.get(item); + if(type == null) return; totalAmmo += type.ammoMultiplier; //find ammo entry by type diff --git a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java index 2a2131c6b9..29ba6b9f77 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java @@ -100,17 +100,27 @@ public class LiquidTurret extends Turret{ @Override protected void findTarget(){ if(extinguish && liquids.current().canExtinguish()){ + Fire result = null; + float mindst = 0f; int tr = (int)(range / tilesize); for(int x = -tr; x <= tr; x++){ for(int y = -tr; y <= tr; y++){ - Tile other = world.tileWorld(x + tile.x, y + tile.y); + Tile other = world.tile(x + tile.x, y + tile.y); + var fire = Fires.get(x + tile.x, y + tile.y); + float dst = fire == null ? 0 : dst2(fire); //do not extinguish fires on other team blocks - if(other != null && Fires.has(x + tile.x, y + tile.y) && (other.build == null || other.team() == team)){ - target = Fires.get(x + tile.x, y + tile.y); - return; + if(other != null && fire != null && Fires.has(other.x, other.y) && dst <= range * range && (result == null || dst < mindst) && (other.build == null || other.team() == team)){ + result = fire; + mindst = dst; } } } + + if(result != null){ + target = result; + //don't run standard targeting + return; + } } super.findTarget(); diff --git a/core/src/mindustry/world/blocks/distribution/PayloadRouter.java b/core/src/mindustry/world/blocks/distribution/PayloadRouter.java index 6a73e75bcc..186e67b6d0 100644 --- a/core/src/mindustry/world/blocks/distribution/PayloadRouter.java +++ b/core/src/mindustry/world/blocks/distribution/PayloadRouter.java @@ -43,6 +43,10 @@ public class PayloadRouter extends PayloadConveyor{ do{ rotation = (rotation + 1) % 4; onProximityUpdate(); + //force update to transfer if necessary + if(next instanceof PayloadConveyorBuild && !(next instanceof PayloadRouterBuild)){ + next.updateTile(); + } //this condition intentionally uses "accept from itself" conditions, because payload conveyors only accept during the start //"accept from self" conditions are for dropped payloads and are less restrictive }while((blocked || next == null || !next.acceptPayload(next, item)) && ++rotations < 4); diff --git a/core/src/mindustry/world/blocks/payloads/PayloadSource.java b/core/src/mindustry/world/blocks/payloads/PayloadSource.java index 52ba318699..f64377ede2 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadSource.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadSource.java @@ -12,6 +12,7 @@ import mindustry.gen.*; import mindustry.type.*; import mindustry.world.*; import mindustry.world.blocks.*; +import mindustry.world.blocks.storage.*; import static mindustry.Vars.*; @@ -69,7 +70,7 @@ public class PayloadSource extends PayloadBlock{ } public boolean canProduce(Block b){ - return b.isVisible() && b.size < size; + return b.isVisible() && b.size < size && !(b instanceof CoreBlock); } public boolean canProduce(UnitType t){ diff --git a/core/src/mindustry/world/blocks/production/Fracker.java b/core/src/mindustry/world/blocks/production/Fracker.java index a3dc07b312..fc07b9750a 100644 --- a/core/src/mindustry/world/blocks/production/Fracker.java +++ b/core/src/mindustry/world/blocks/production/Fracker.java @@ -1,6 +1,7 @@ package mindustry.world.blocks.production; import arc.graphics.g2d.*; +import arc.math.*; import mindustry.annotations.Annotations.*; import mindustry.gen.*; import mindustry.graphics.*; @@ -67,6 +68,8 @@ public class Fracker extends SolidPump{ super.updateTile(); accumulator += delta() * efficiency(); }else{ + warmup = Mathf.lerpDelta(warmup, 0f, 0.02f); + lastPump = 0f; dumpLiquid(result); } } diff --git a/core/src/mindustry/world/draw/DrawArcSmelter.java b/core/src/mindustry/world/draw/DrawArcSmelter.java index efab1368ed..957b739b4c 100644 --- a/core/src/mindustry/world/draw/DrawArcSmelter.java +++ b/core/src/mindustry/world/draw/DrawArcSmelter.java @@ -8,7 +8,6 @@ import arc.util.*; import mindustry.world.*; import mindustry.world.blocks.production.GenericCrafter.*; -//TODO public class DrawArcSmelter extends DrawBlock{ public TextureRegion top, bottom; public Color flameColor = Color.valueOf("f58349"), midColor = Color.valueOf("f2d585"); diff --git a/core/src/mindustry/world/draw/DrawWeave.java b/core/src/mindustry/world/draw/DrawWeave.java index 0d6c94dcb9..f014a23c38 100644 --- a/core/src/mindustry/world/draw/DrawWeave.java +++ b/core/src/mindustry/world/draw/DrawWeave.java @@ -38,6 +38,6 @@ public class DrawWeave extends DrawBlock{ @Override public TextureRegion[] icons(Block block){ - return new TextureRegion[]{bottom, block.region, weave}; + return new TextureRegion[]{bottom, weave, block.region}; } } diff --git a/desktop/src/mindustry/desktop/DesktopLauncher.java b/desktop/src/mindustry/desktop/DesktopLauncher.java index a1438cbbcd..1d289847ae 100644 --- a/desktop/src/mindustry/desktop/DesktopLauncher.java +++ b/desktop/src/mindustry/desktop/DesktopLauncher.java @@ -322,7 +322,9 @@ public class DesktopLauncher extends ClientLauncher{ presence.largeImageKey = "logo"; - DiscordRPC.send(presence); + try{ + DiscordRPC.send(presence); + }catch(Exception ignored){} } if(steam){ diff --git a/desktop/src/mindustry/desktop/steam/SNet.java b/desktop/src/mindustry/desktop/steam/SNet.java index 750c40cd42..8541d12056 100644 --- a/desktop/src/mindustry/desktop/steam/SNet.java +++ b/desktop/src/mindustry/desktop/steam/SNet.java @@ -88,8 +88,12 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback, net.handleException(t); } } - }catch(SteamException e){ - Log.err(e); + }catch(Exception e){ + if(net.server()){ + Log.err(e); + }else{ + net.showError(e); + } } } } @@ -303,7 +307,8 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback, try{ SteamID lobby = smat.getLobbyByIndex(i); String mode = smat.getLobbyData(lobby, "gamemode"); - if(mode == null || mode.isEmpty() || Strings.parseInt(smat.getLobbyData(lobby, "version"), -1) == -1) continue; + //make sure versions are equal, don't list incompatible lobbies + if(mode == null || mode.isEmpty() || (Version.build != -1 && Strings.parseInt(smat.getLobbyData(lobby, "version"), -1) != Version.build)) continue; Host out = new Host( -1, //invalid ping smat.getLobbyData(lobby, "name"), diff --git a/fastlane/metadata/android/fr-FR/full_description.txt b/fastlane/metadata/android/fr-FR/full_description.txt index 691e49eedb..cd1a089c64 100644 --- a/fastlane/metadata/android/fr-FR/full_description.txt +++ b/fastlane/metadata/android/fr-FR/full_description.txt @@ -1,14 +1,51 @@ -Crée des chaînes de ravitaillement pour tes défenses, produis les matériaux de construction pour aggrandir et protéger tes bâtiments contre des vagues d'ennemis. Joue avec tes amis grâce à des jeux multijoueurs co-op cross-plateformes, ou défie-les dans des parties en JcJ par équipe. +Créer des chaînes de ravitaillement pour tes défenses, 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. -Caractéristiques: -- 24 cartes integrées -- Une campagne, complète avec un arbre de recherche et des zones à débloquer -- 4 puissants boss de fin de vague à vaincre -- Systèmes de transport d'énergie, liquides et objets -- 19 différents types de drones, méchas et vaisseaux -- 120+ blocs technologiques à maîtriser -- 75+ différents blocs environnementaux -- Multijoueur cross-plateforme via réseau local or serveurs dédiés -- Règles de jeu personnalisables: Change le coût des structures, les stats des ennemis, les ressources de départ, fréquence des vagues et plus -- Un éditeur puissant dotés d'outils pour générer aléatoirement des minéraux, le terrain, des décorations et appliquer une symétrie au terrain. -- Vagues d'ennemis personnalisables +

Caractéristiques du jeu

+ +- Utilisez les usines de production avancés pour créer des ressources plus complexes. +- Défendez vos structures contre les vagues d'ennemis. +- Jouez avec vos amis dans des jeux coopératifs multijoueurs multi plateformes, ou défiez-les dans des matchs JcJ par équipe. +- 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. +- Produisez une grande variété d'unités pour la gestion automatique de votre base ou l'assaut des bases ennemies. + + +

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. +- Capturez des territoires et installez des usines pour produire des ressources pendant que vous jouez dans d'autres secteurs. +- Défendez vos secteurs contre les invasions périodiques. +- Coordonner la distribution des ressources entre les secteurs via des rampes de lancement. +- Recherchez de nouveaux blocs pour alimenter votre progression. +- Invitez vos amis à accomplir des missions ensemble. +- Plus de 130 blocs technologiques à maîtriser. +- 33 types différents de drones, de mechs et de vaisseaux. + + +

Modes de jeu

+ +- Survie : 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. +- Attaque : 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. +- PvP : Affrontez d'autres joueurs dans jusqu'à 4 équipes différentes pour détruire les noyaux des autres. Créez des unités, ou attaquez directement les autres bases avec vos mechs. +- Bac à sable : 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. + + +

Jeux & Cartes Personnalisés; Multijoueurs Cross-Plateformes

+ +- 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. +- Rejoignez un serveur public dédié ou invitez vos amis à votre propre session privée. +- 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. + +

Éditeur de cartes personnalisées

+ +- Peignez le terrain grâce à une interface d'édition. +- Éditez and prévisualisez les structures en jeu. +- 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. +- Appliquez les effets bruit, distortion, lissage, erosion, 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. +- Configurez la disposition des vagues ennemies. +- Personnalisez les règles de base de vos cartes +- Utilisez plus de 80 blocs environnementaux différents. diff --git a/gradle.properties b/gradle.properties index ddd72aa92f..e07a747c11 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,4 +10,4 @@ kapt.include.compile.classpath=false kotlin.stdlib.default.dependency=false #needed for android compilation android.useAndroidX=true -archash=52f21644b8f70c3a926d3d8d8130f0d71e0e4e79 +archash=1142cfc35b6671c6a2c5566632ff044a46527b82 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0f80bbf516..69a9715077 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/servers.json b/servers.json deleted file mode 100644 index fa12fdd56f..0000000000 --- a/servers.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "address": "mindustry.atannergaming.com" - }, - { - "address": "mindustry.atannergaming.com:7000" - }, - { - "address": "mindustry.atannergaming.com:8000" - }, - { - "address": "mindustry.atannergaming.com:6800" - } -] diff --git a/servers_be.json b/servers_be.json index d22999dea0..eff76d37c5 100644 --- a/servers_be.json +++ b/servers_be.json @@ -1,17 +1,14 @@ [ - { - "address": "mindustry.us.to" - }, { "address": "be.mindustry.nydus.app:6567" }, - { - "address": "157.90.180.53:25777" - }, { "address": "mindustry.pl:7777" }, { - "address": "mindurka.tk:9999" + "address": "v7.mindurka.tk:9999" + }, + { + "address": "c-n.ddns.net:6567" } ] diff --git a/servers_v6.json b/servers_v6.json index dfcd37de1b..e3db39edbe 100644 --- a/servers_v6.json +++ b/servers_v6.json @@ -21,7 +21,7 @@ }, { "name": "C.A.M.S.", - "address": ["routerchain.ddns.net", "nikochio.ddns.net", "play.thedimas.pp.ua"] + "address": ["baseduser.eu.org:6568", "nikochio.ddns.net", "play.thedimas.pp.ua"] }, { "name": "BE6.RUN", @@ -65,7 +65,7 @@ }, { "name": "Korea", - "address": ["mindustry.kr"] + "address": ["mindustry.kr", "mindustry.initd.kr"] }, { "name": "hexpvp.ml", diff --git a/servers_v7.json b/servers_v7.json new file mode 100644 index 0000000000..9a156872e3 --- /dev/null +++ b/servers_v7.json @@ -0,0 +1,45 @@ +[ + { + "address": "mindustry.us.to" + }, + { + "name": "mindustry.pl", + "address": ["mindustry.pl:6000", "mindustry.pl:6666", "mindustry.pl:6966"] + }, + { + "name": "C.A.M.S.", + "address": ["baseduser.eu.org:6569", "v7.thedimas.pp.ua"] + } + { + "name": "hexpvp.ml", + "address": "hexpvp.ml" + }, + { + "name": "[accent]Mindustry [red]Reborn", + "address": "mindustry.me:7000" + }, + { + "name": "Omega", + "address": "157.90.180.53:25777" + }, + { + "name": "MeowLand", + "address": "34.134.111.15" + }, + { + "name": "Mindurka", + "address": ["mindurka.tk", "mindurka.tk:4000"] + }, + { + "name": "Chaotic Neutral", + "address": ["c-n.ddns.net:5555", "c-n.ddns.net:6666"] + }, + { + "name": "XCore", + "address": "178.170.47.34:28110" + }, + { + "name": "Obvilion Network", + "address": "obvilionnetwork.ru:7004" + } +] diff --git a/tests/src/test/java/ApplicationTests.java b/tests/src/test/java/ApplicationTests.java index 2ea226ab7c..ab16bf6597 100644 --- a/tests/src/test/java/ApplicationTests.java +++ b/tests/src/test/java/ApplicationTests.java @@ -1,8 +1,6 @@ import arc.*; import arc.backend.headless.*; import arc.files.*; -import arc.func.*; -import arc.math.*; import arc.math.geom.*; import arc.struct.*; import arc.util.*; @@ -118,7 +116,6 @@ public class ApplicationTests{ Thread.sleep(10); } - Block block = content.getByName(ContentType.block, "build2"); assertEquals("build2", block == null ? null : block.name, "2x2 construct block doesn't exist?"); }catch(Throwable r){ @@ -184,7 +181,7 @@ public class ApplicationTests{ @Test void serverListJson(){ - String[] files = {"servers.json", "servers_be.json", "servers_v6.json"}; + String[] files = {"servers_v6.json", "servers_v7.json", "servers_be.json"}; for(String file : files){ try{ @@ -508,72 +505,6 @@ public class ApplicationTests{ world.tile(0, 0).build.acceptStack(Items.copper, 1000, null); } - @Test - void indexingBasic(){ - resetWorld(); - SaveIO.load(Core.files.internal("77.msav")); - - //test basic method. - Rand r = new Rand(0); - Building[] res = {null}; - - Cons assigner = t -> res[0] = t; - - int iterations = 100; - - r.setSeed(0); - - //warmup. - for(int i = 0; i < iterations; i++){ - int x = r.random(0, world.width()), y = r.random(0, world.height()); - float range = r.random(tilesize * 30); - - indexer.eachBlock(Team.sharded, x * tilesize, y * tilesize, range, t -> true, assigner); - } - - //TODO impl - /* - r.setSeed(0); - - for(int i = 0; i < iterations; i++){ - int x = r.random(0, world.width()), y = r.random(0, world.height()); - float range = r.random(tilesize * 30); - - indexer.eachBlock2(Team.sharded, x * tilesize, y * tilesize, range, t -> true, assigner); - }*/ - - //benchmark. - - r.setSeed(0); - - Time.mark(); - - for(int i = 0; i < iterations; i++){ - int x = r.random(0, world.width()), y = r.random(0, world.height()); - float range = r.random(tilesize * 30); - - indexer.eachBlock(Team.sharded, x * tilesize, y * tilesize, range, t -> true, assigner); - } - - Log.info("Time for basic indexing: @", Time.elapsed()); - - r.setSeed(0); - - /* - Time.mark(); - - for(int i = 0; i < iterations; i++){ - int x = r.random(0, world.width()), y = r.random(0, world.height()); - float range = r.random(tilesize * 30); - - indexer.eachBlock2(Team.sharded, x * tilesize, y * tilesize, range, t -> true, assigner); - } - - Log.info("Time for quad: {0}", Time.elapsed()); - */ - - } - @Test void conveyorBench(){ int[] itemsa = {0}; diff --git a/tests/src/test/java/ModTestBM.java b/tests/src/test/java/ModTestBM.java index a99969a188..f026c4b52b 100644 --- a/tests/src/test/java/ModTestBM.java +++ b/tests/src/test/java/ModTestBM.java @@ -24,7 +24,7 @@ public class ModTestBM extends GenericModTest{ assertNotNull(type, "A mod block must be loaded."); assertSame(type.buildVisibility, BuildVisibility.shown, "A mod block must be buildable."); - world.loadMap(ApplicationTests.testMap); + world.loadMap(maps.loadInternalMap("groundZero")); Tile t = world.tile(3, 3); t.setBlock(type); diff --git a/tests/src/test/java/ModTestExotic.java b/tests/src/test/java/ModTestExotic.java index c9e401f811..ea791a9b97 100644 --- a/tests/src/test/java/ModTestExotic.java +++ b/tests/src/test/java/ModTestExotic.java @@ -4,6 +4,7 @@ import mindustry.gen.*; import mindustry.type.*; import org.junit.jupiter.api.*; +import static mindustry.Vars.*; import static org.junit.jupiter.api.Assertions.*; //grabs a version-locked exotic-mod commit and makes sure its content is parsed correctly @@ -23,7 +24,7 @@ public class ModTestExotic extends GenericModTest{ assertNotNull(type, "A mod unit must be loaded."); assertTrue(type.weapons.size > 0, "A mod unit must have a weapon."); - Vars.world.loadMap(ApplicationTests.testMap); + Vars.world.loadMap(maps.loadInternalMap("groundZero")); Unit unit = type.spawn(0, 0); diff --git a/tests/src/test/java/ModTestHAI.java b/tests/src/test/java/ModTestHAI.java index c33f9262c9..26f56740f4 100644 --- a/tests/src/test/java/ModTestHAI.java +++ b/tests/src/test/java/ModTestHAI.java @@ -4,6 +4,7 @@ import mindustry.gen.*; import mindustry.type.*; import org.junit.jupiter.api.*; +import static mindustry.Vars.*; import static org.junit.jupiter.api.Assertions.*; //grabs a version-locked Heavy Armaments Industries commit and makes sure it initializes correctly @@ -22,7 +23,7 @@ public class ModTestHAI extends GenericModTest{ assertNotNull(type, "A mod unit must be loaded."); assertTrue(type.weapons.size > 0, "A mod unit must have a weapon."); - Vars.world.loadMap(ApplicationTests.testMap); + Vars.world.loadMap(maps.loadInternalMap("groundZero")); Unit unit = type.spawn(0, 0); diff --git a/tools/src/mindustry/tools/Generators.java b/tools/src/mindustry/tools/Generators.java index b97890fed3..2c188946b3 100644 --- a/tools/src/mindustry/tools/Generators.java +++ b/tools/src/mindustry/tools/Generators.java @@ -390,7 +390,6 @@ public class Generators{ } }); - //TODO broken, freezes generate("unit-icons", () -> content.units().each(type -> { if(type.isHidden()) return; //hidden units don't generate diff --git a/tools/src/mindustry/tools/ImagePacker.java b/tools/src/mindustry/tools/ImagePacker.java index a787540c15..0df257f52f 100644 --- a/tools/src/mindustry/tools/ImagePacker.java +++ b/tools/src/mindustry/tools/ImagePacker.java @@ -14,6 +14,7 @@ import mindustry.*; import mindustry.content.*; import mindustry.core.*; import mindustry.ctype.*; +import mindustry.logic.*; import mindustry.world.blocks.*; import java.io.*; @@ -86,7 +87,8 @@ public class ImagePacker{ Time.mark(); Generators.run(); Log.info("&ly[Generator]&lc Total time to generate: &lg@&lcms", Time.elapsed()); - //Log.info("&ly[Generator]&lc Total images created: &lg@", Image.total()); + + //write icons to icons.properties //format: //character-ID=contentname:texture-name @@ -118,6 +120,74 @@ public class ImagePacker{ } writer.close(); + + //now, write the IDs to logicids.dat + + //don't write to the file unless I'm packing, because logic IDs rarely change and I don't want merge conflicts from PRs + if(!OS.username.equals("anuke")) return; + + //format: ([content type (byte)] [content count (short)] (repeat [name (string)])) until EOF + Fi logicidfile = Fi.get("../../../assets/logicids.dat"); + + Seq lookupCont = new Seq<>(); + + for(ContentType t : GlobalConstants.lookableContent){ + lookupCont.addAll(Vars.content.getBy(t).select(UnlockableContent::logicVisible)); + } + + ObjectIntMap[] registered = new ObjectIntMap[ContentType.all.length]; + IntMap[] idToContent = new IntMap[ContentType.all.length]; + + for(int i = 0; i < ContentType.all.length; i++){ + registered[i] = new ObjectIntMap<>(); + idToContent[i] = new IntMap<>(); + } + + if(logicidfile.exists()){ + try(DataInputStream in = new DataInputStream(logicidfile.readByteStream())){ + for(ContentType ctype : GlobalConstants.lookableContent){ + short amount = in.readShort(); + for(int i = 0; i < amount; i++){ + String name = in.readUTF(); + UnlockableContent fetched = Vars.content.getByName(ctype, name); + if(fetched != null){ + registered[ctype.ordinal()].put(fetched, i); + idToContent[ctype.ordinal()].put(i, fetched); + } + } + } + } + } + + //map stuff that hasn't been mapped yet + for(UnlockableContent c : lookupCont){ + int ctype = c.getContentType().ordinal(); + if(!registered[ctype].containsKey(c)){ + int nextId = 0; + //find next ID - this is O(N) but content counts are so low that I don't really care + //checking the last ID doesn't work because there might be "holes" + for(UnlockableContent other : lookupCont){ + if(!idToContent[ctype].containsKey(other.id + 1)){ + nextId = other.id + 1; + break; + } + } + + idToContent[ctype].put(nextId, c); + registered[ctype].put(c, nextId); + } + } + + //write the resulting IDs + try(DataOutputStream out = new DataOutputStream(logicidfile.write(false, 2048))){ + for(ContentType t : GlobalConstants.lookableContent){ + Seq all = idToContent[t.ordinal()].values().toArray().sort(u -> registered[t.ordinal()].get(u)); + out.writeShort(all.size); + for(UnlockableContent u : all){ + out.writeUTF(u.name); + } + } + } } static String texname(UnlockableContent c){