Compare commits

..
102 Commits
Author SHA1 Message Date
Anuken 25bd8a7eaa Fixed sector name not being displayed in saves 2018-08-17 13:02:53 -04:00
Anuken bbd2424a3f Merge remote-tracking branch 'origin/master' 2018-08-17 12:55:18 -04:00
Anuken 83eeeed319 Discord rich presence improvements 2018-08-17 12:55:06 -04:00
Anuken c92e8161a1 Merge pull request #190 from Prosta4okua/patch-21
[Complete] bundle_ru.properties
2018-08-17 11:33:29 -04:00
Anuken 258555c990 Merge remote-tracking branch 'origin/master' 2018-08-17 11:32:19 -04:00
Anuken 0f7799422e Crashes fixed 2018-08-17 11:32:12 -04:00
Anuken 177b565d7c Merge pull request #173 from Gab351/patch-1
Translate l227 to l239
2018-08-17 10:38:24 -04:00
Prosta4okua a62b336b6c Update bundle_ru.properties 2018-08-17 12:59:51 +03:00
Prosta4okua 3ea61c8b3a Update bundle_ru.properties 2018-08-17 12:02:44 +03:00
Prosta4okua 4c57f9f902 Update bundle_ru.properties 2018-08-17 10:48:29 +03:00
Anuken 6d7941fba4 iOS portrait mode support 2018-08-16 18:38:43 -04:00
Anuken 53d35e8c77 Bundles updated / Fixed some localization bugs 2018-08-16 17:43:43 -04:00
Anuken 01f205d352 Merge pull request #189 from Leone25/patch-1
last update bundle_ita.properties
2018-08-16 17:38:44 -04:00
Leone25 b15c04a532 Update bundle_ita.properties 2018-08-16 21:10:04 +02:00
Anuken 80d57f8c0c Comma fix 2018-08-16 11:25:27 -04:00
Anuken 1de367e89c Full chat revert / Crash fixes 2018-08-16 10:09:22 -04:00
Anuken 8850a89e30 Fixed game-over sector algorithm 2018-08-15 21:25:07 -04:00
Anuken 4f72011cf7 Fixed markup crash / setsector command fixed / Drone crash fixed 2018-08-15 21:00:40 -04:00
Anuken c569232e74 Fixed multiblocks not accepting items 2018-08-15 19:38:13 -04:00
Anuken 14c526d0c4 Power distribution fix 2018-08-15 18:41:21 -04:00
Anuken 5c4ac6b702 Fixed major issue with Vector2.ZERO mutation 2018-08-15 18:37:20 -04:00
Anuken d58cc18136 Fixed block targeting bug 2018-08-15 18:18:57 -04:00
Anuken 36c01fde94 Updated uCore / Minor server tweak 2018-08-15 17:46:33 -04:00
Anuken d4d9d59fe4 Server sector commands / World data compression / Snapshot sent w/ world 2018-08-15 17:25:19 -04:00
Anuken 8dbd0a6130 Fixed drones repairing incorrect blocks 2018-08-15 16:28:00 -04:00
Anuken 3746344cba Crash fixes 2018-08-15 16:26:08 -04:00
Anuken d07fd1bbfe Improved build sync 2018-08-15 15:16:56 -04:00
Anuken 02f95c0ed4 Merge remote-tracking branch 'origin/master' 2018-08-15 14:16:42 -04:00
Anuken c98fcbd795 Turrets target blocks / Added core no-build radius 2018-08-15 14:13:50 -04:00
Anuken d071877963 Merge pull request #186 from Leone25/patch-1
Big update for italian bundle
2018-08-15 13:12:18 -04:00
Anuken 0267cb4006 Conduit sprites improved / Fixed incorrect proximity update 2018-08-15 13:11:55 -04:00
Leone25 bf571e595c Update bundle_ita.properties 2018-08-15 19:05:18 +02:00
Anuken c0cad70212 Merge remote-tracking branch 'origin/master' 2018-08-15 10:49:05 -04:00
Anuken 7bd6dbb4b4 Partial korean font PR revert / Crash fixes 2018-08-15 10:48:19 -04:00
Anuken 6d932e3d04 Merge pull request #185 from Prosta4okua/patch-19
Update bundle_ru.properties
2018-08-15 09:20:41 -04:00
Prosta4okua e154b5179d Update bundle_ru.properties 2018-08-15 08:27:26 +03:00
Anuken 52110d6008 ok 2018-08-14 19:30:05 -04:00
Anuken 103b08fd1d Added build progress sync 2018-08-14 18:56:42 -04:00
Anuken cb09d10e7f Merge remote-tracking branch 'origin/master' 2018-08-14 18:51:13 -04:00
Anuken a041c1e60d Synced whole place queue / Fixed player flash desync 2018-08-14 18:51:06 -04:00
Anuken 586b4cf4bd Merge pull request #183 from cloud9350/master
Add korean chat fonts + fix typos
2018-08-14 18:32:52 -04:00
Leone25 d0ff149cca Update bundle_ita.properties 2018-08-14 21:07:39 +02:00
Anuken f8ddc8325c Fixed puddle/IO crash / crafter storage / player NaN position / red tint 2018-08-14 12:24:04 -04:00
Anuken 59ec09e82c Crash fixes / Resource-steal fixed / No-build while shooting fixed 2018-08-14 12:16:21 -04:00
Anuken 2ae5c96690 Merge remote-tracking branch 'origin/master' 2018-08-14 10:42:09 -04:00
Anuken fda9e6bb9c Various crashes fixed 2018-08-14 10:41:54 -04:00
Leone25 b70de81c2d Update bundle_ita.properties 2018-08-14 14:41:38 +02:00
Gureumi 5e89b2568f Add korean chat fonts + fix typos 2018-08-14 15:59:07 +09:00
Anuken ac1d8215ff Merge pull request #182 from Prosta4okua/patch-18
[COMPLETE]Update bundle_ru.properties
2018-08-13 22:21:06 -04:00
Leone25 fefc734bfa Update bundle_ita.properties 2018-08-12 22:24:10 +02:00
Prosta4okua 7f8735842c Update bundle_ru.properties 2018-08-12 22:28:23 +03:00
Prosta4okua a226983470 Update bundle_ru.properties 2018-08-12 19:19:07 +03:00
Prosta4okua 28526d0a12 Update bundle_ru.properties 2018-08-12 18:54:51 +03:00
Prosta4okua 913e005bae Update bundle_ru.properties 2018-08-12 10:44:56 +03:00
Prosta4okua 7bd9fd5bae Update bundle_ru.properties 2018-08-12 00:12:55 +03:00
Anuken ef936214f0 Merge pull request #180 from Prosta4okua/patch-17
[Complete]Update bundle_uk_UA.properties
2018-08-10 10:20:43 -04:00
Anuken 18fce6b3e3 Merge pull request #179 from cloud9350/master
Change items name texts and update font
2018-08-10 09:12:52 -04:00
Prosta4okua ecda4d74ab Update bundle_uk_UA.properties 2018-08-10 16:12:44 +03:00
Prosta4okua 31124037b5 Update bundle_uk_UA.properties 2018-08-10 16:07:46 +03:00
Prosta4okua aaf95e0756 Update bundle_uk_UA.properties 2018-08-10 16:06:01 +03:00
Gureumi 804e311875 Update 2018-08-10 19:21:46 +09:00
Anuken 61ad9bc47d Merge remote-tracking branch 'origin/master' 2018-08-09 22:20:52 -04:00
Anuken 2b23b7876a Minor bugfix 2018-08-09 22:20:46 -04:00
Anuken 547d334f43 Merge pull request #178 from Leone25/patch-1
update italian boundle_ita
2018-08-09 19:29:34 -04:00
Leone25 7432dc115e Update bundle_ita.properties 2018-08-10 00:48:20 +02:00
Anuken 905defe8ce Merge pull request #177 from Prosta4okua/patch-15
Update bundle_ru.properties
2018-08-09 18:35:44 -04:00
Prosta4okua 0a8ff0cde7 Update bundle_ru.properties 2018-08-10 00:59:27 +03:00
Prosta4okua bd5f44030e Update bundle_ru.properties 2018-08-10 00:53:41 +03:00
Anuken 79abb86262 Merge remote-tracking branch 'origin/master' 2018-08-09 17:45:09 -04:00
Anuken fe6f98ec5a Minor bugfixes / Added block names to bundle/ Autogen ore names 2018-08-09 17:44:52 -04:00
Anuken e39a856e54 Update TRANSLATING.md 2018-08-09 09:47:15 -04:00
Anuken 64e5f8155d Merge pull request #176 from cloud9350/patch-1
Update language ko file
2018-08-09 09:20:10 -04:00
Gureumi 8328b11f6b Update. 2018-08-09 19:54:09 +09:00
Anuken 15778b2ca5 Server hotfix 2018-08-08 22:37:52 -04:00
Anuken b7842014c1 Fixed minor autotile bug 2018-08-08 22:29:56 -04:00
Anuken a804053904 Typo fix / Biomatter compressor buffed 2018-08-08 21:10:57 -04:00
Anuken 2aee72b47b Improved host command 2018-08-08 20:57:24 -04:00
Anuken 0cb8c600b7 Merge remote-tracking branch 'origin/master' 2018-08-08 20:53:02 -04:00
Anuken aa5348f37e Auto-play server sectors / Difficulty decrease / Improved d/c messages 2018-08-08 20:52:51 -04:00
Anuken 0736574a57 Merge pull request #174 from Prosta4okua/patch-13
[Сomlete]Update bundle_ru.properties
2018-08-08 20:07:23 -04:00
Anuken d56365ce63 Merge pull request #175 from CinExPL/patch-1
Update bundle_pl.properties
2018-08-08 20:07:14 -04:00
Prosta4okua c82d2f856a Update bundle_ru.properties 2018-08-09 00:02:22 +03:00
Prosta4okua 8432677826 Update bundle_ru.properties 2018-08-08 23:58:41 +03:00
Prosta4okua 0c0c6e5470 Update bundle_ru.properties 2018-08-08 23:56:42 +03:00
Anuken 57019b6e20 Fixed oil extractor desync / Buffed thermal genenerator / Typo fix 2018-08-08 16:00:33 -04:00
CinExPL 12ab2249b4 Update bundle_pl.properties 2018-08-08 21:10:42 +02:00
Anuken 22d0992d38 Merge remote-tracking branch 'origin/master' 2018-08-08 15:04:04 -04:00
Anuken f8def04653 Overall difficulty decrease / Crash fix / Server fillitems command 2018-08-08 15:02:51 -04:00
Anuken 6349530fc5 Updated build.gradle 2018-08-08 14:42:10 -04:00
Anuken ad83a7dcc3 Merge remote-tracking branch 'origin/master' 2018-08-08 12:37:46 -04:00
Anuken cfc2239733 Minor iso changes 2018-08-08 12:37:29 -04:00
Anuken 91552a3a2b Various bugfixes 2018-08-08 12:22:47 -04:00
Anuken 4e3204bc6d All known crashes fixed 2018-08-08 11:18:30 -04:00
Anuken a94998bd02 Merge remote-tracking branch 'origin/master' 2018-08-08 10:43:09 -04:00
Anuken 81c78eafa6 Biomass compressor fix / Crash fix / Removed spawners in waves 2018-08-08 10:43:03 -04:00
Prosta4okua 273523480f Update bundle_ru.properties 2018-08-08 08:34:44 +03:00
Anuken b27fefae88 Misc fixes 2018-08-08 01:09:57 -04:00
Anuken aa00a1b8d1 Minor save-time fix 2018-08-07 20:16:50 -04:00
Leone25 3acb843109 Update bundle_ita.properties 2018-08-07 21:48:42 +02:00
Leone25 1768aea66f Update bundle_ita.properties 2018-08-07 20:54:40 +02:00
Leone25 b4272e0387 Update bundle_ita.properties 2018-08-06 20:44:09 +02:00
Gab_351 502c4e51ae Translate l227 to l239 2018-08-06 15:16:39 +03:00
115 changed files with 4468 additions and 4025 deletions
+1
View File
@@ -21,6 +21,7 @@
/core/assets/gifexport/
/core/assets/version.properties
/core/assets/locales.json
/ios/src/io/anuke/mindustry/gen/
*.gif
version.properties
+2 -2
View File
@@ -7,7 +7,7 @@ To begin, log in to your GitHub account, or if you don't have one yet, create it
Consult [this list](https://www.science.co.il/language/Locale-codes.php) to find the locale code for your language. Once you've found it,
head over to the translation bundle folder and check the [list of bundles](https://github.com/Anuken/Mindustry/tree/master/core/assets/bundles) that have already been created.
You're looking for a file called "`bundle_`(insert locale code here)`.properties`".
You're looking for a file called "`bundle_`(insert locale code here)`.properties`". If you don't find one, create one manually (more info below).
#### Editing an existing translation
@@ -19,7 +19,7 @@ Once this is done, all you need to do is wait for me to approve your changes.
If a translation bundle for your language *doesn't* exist, you need to create one yourself.
In the folder with all the bundles in it, click the *'create new file'* button, and name it `bundle_(locale code here).properties`.
Then, copy-paste the entire contents of the [English translation bundle](https://raw.githubusercontent.com/Anuken/Mindustry/master/core/assets/bundles/bundle.properties) into the file, and translate all the necessary text to your language.
Once you are done, press the *propose new file* button at the bottom, then 'create pull request twice'.
Once you are done, press the *propose new file* button at the bottom, then 'create pull request' twice.
#### Useful Information
+1 -1
View File
@@ -21,7 +21,7 @@
android:name="io.anuke.mindustry.AndroidLauncher"
android:label="@string/app_name"
android:screenOrientation="user"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
+21 -3
View File
@@ -26,7 +26,7 @@ allprojects {
appName = 'Mindustry'
gdxVersion = '1.9.8'
roboVMVersion = '2.3.0'
uCoreVersion = '6a727b957e'
uCoreVersion = '1d353d76e9'
getVersionString = {
String buildVersion = getBuildVersion()
@@ -50,7 +50,7 @@ allprojects {
output += '"' + other.name.substring("bundle".length() + 1, other.name.lastIndexOf('.')) + '",'
}
output = (output.substring(0, output.size() - 1) + "]")
new File('core/assets/locales.json').text = output;
new File(project(':core').projectDir, 'assets/locales.json').text = output;
}
writeVersion = {
@@ -126,6 +126,25 @@ project(":ios") {
apply plugin: "java"
apply plugin: "robovm"
task copyGen{
doFirst{
copy{
from ("../core/build/classes/java/main/io/anuke/mindustry/gen/"){
include "**/*.java"
}
into "../core/src/io/anuke/mindustry/gen"
}
}
doLast{
delete{
delete "../core/src/io/anuke/mindustry/gen/"
}
}
}
build.finalizedBy(copyGen)
dependencies {
compile project(":core")
@@ -150,7 +169,6 @@ project(":core") {
build.finalizedBy(finish)
def comp = System.properties["release"] == null || System.properties["release"] == "false"
if(!comp) println("Note: Compiling release build.")
if(new File(projectDir.parent, '../uCore').exists() && comp){
Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 B

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 243 B

After

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 252 B

After

Width:  |  Height:  |  Size: 235 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 B

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 B

After

Width:  |  Height:  |  Size: 240 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 242 B

After

Width:  |  Height:  |  Size: 235 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 B

After

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 B

After

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 B

After

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 B

After

Width:  |  Height:  |  Size: 269 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 289 B

After

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 284 B

After

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 289 B

After

Width:  |  Height:  |  Size: 270 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 B

After

Width:  |  Height:  |  Size: 267 B

+30 -6
View File
@@ -79,7 +79,9 @@ text.server.mismatch=Packet error: possible client/server version mismatch.\nMak
text.server.closing=[accent]Closing server...
text.server.kicked.kick=You have been kicked from the server!
text.server.kicked.fastShoot=You are shooting too quickly.
text.server.kicked.invalidPassword=Invalid password!
text.server.kicked.serverClose=Server closed.
text.server.kicked.sectorComplete=Sector completed.
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
text.server.kicked.clientOutdated=Outdated client! Update your game!
text.server.kicked.serverOutdated=Outdated server! Ask the host to update!
text.server.kicked.banned=You are banned on this server.
@@ -198,6 +200,7 @@ text.builtin=Built-In
text.map.delete.confirm=Are you sure you want to delete this map? This action cannot be undone!
text.map.random=[accent]Random Map
text.map.nospawn=This map does not have any cores for the player to spawn in! Add a [ROYAL]blue[] core to this map in the editor.
text.map.invalid=Error loading map: corrupted or invalid map file.
text.editor.brush=Brush
text.editor.slope=\\
text.editor.openin=Open In Editor
@@ -280,7 +283,7 @@ text.blocks.maxitemssecond=Max Items
text.blocks.powerrange=Power Range
text.blocks.poweruse=Power Use
text.blocks.inputitemcapacity=Input Item Capacity
text.blocks.outputitemcapacity=Input Item Capacity
text.blocks.outputitemcapacity=Output Item Capacity
text.blocks.itemcapacity=Item Capacity
text.blocks.maxpowergeneration=Max Power Generation
text.blocks.powertransferspeed=Power Transfer
@@ -353,6 +356,11 @@ setting.mutemusic.name=Mute Music
setting.sfxvol.name=SFX Volume
setting.mutesound.name=Mute Sound
text.keybind.title=Rebind Keys
section.general.name=General
section.view.name=View
section.multiplayer.name=Multiplayer
keybind.move_x.name=Move x
keybind.move_y.name=Move y
keybind.select.name=Select
@@ -365,8 +373,9 @@ keybind.pause.name=Pause
keybind.dash.name=Dash
keybind.chat.name=Chat
keybind.player_list.name=Player list
keybind.console.name=console
keybind.console.name=Console
keybind.rotate.name=Rotate
mode.text.help.title=Description of modes
mode.waves.name=waves
mode.waves.description=the normal mode. limited resources and automatic incoming waves.
@@ -428,6 +437,21 @@ text.liquid.heatcapacity=[LIGHT_GRAY]Heat Capacity: {0}
text.liquid.viscosity=[LIGHT_GRAY]Viscosity: {0}
text.liquid.temperature=[LIGHT_GRAY]Temperature: {0}
block.deepwater.name=deepwater
block.water.name=water
block.lava.name=lava
block.oil.name=oil
block.blackstone.name=blackstone
block.stone.name=stone
block.dirt.name=dirt
block.sand.name=sand
block.ice.name=ice
block.snow.name=snow
block.grass.name=grass
block.shrub.name=shrub
block.rock.name=rock
block.blackrock.name=blackrock
block.icerock.name=icerock
block.tungsten-wall.name=Tungsten Wall
block.tungsten-wall-large.name=Large Tungsten Wall
block.carbide-wall.name=Carbide Wall
@@ -443,7 +467,7 @@ block.lancer.name=Lancer
block.conveyor.name=Conveyor
block.titanium-conveyor.name=Titanium Conveyor
block.junction.name=Junction
block.splitter.name=Splitter
block.splitter.name=Router
block.splitter.description=Outputs items into three different directions once they are recieved.
block.router.name=Router
block.router.description=Splits items into all 4 directions. Can store items as a buffer.
@@ -536,8 +560,8 @@ unit.drone.name=Drone
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
unit.fabricator.name=Fabricator
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
unit.scout.name=Scout
unit.scout.description=A basic ground unit. Useful in massive swarms.
unit.dagger.name=Dagger
unit.dagger.description=A basic ground unit. Useful in swarms.
unit.titan.name=Titan
unit.titan.description=An advanced, armored ground unit. Attacks both ground and air targets.
unit.monsoon.name=Monsoon
+27 -4
View File
@@ -15,7 +15,6 @@ text.players={0} Spieler online
text.players.single={0} Spieler online
text.server.mismatch=Paketfehler: Mögliche Client / Server-Version stimmt nicht überein. Stell sicher, dass du und der Host die neueste Version von Mindustry haben!
text.server.kicked.kick=Du wurdest vom Server gekickt!
text.server.kicked.invalidPassword=Falsches Passwort.
text.hostserver=Server hosten
text.host=Host
text.hosting=[accent] Server wird geöffnet...
@@ -464,7 +463,6 @@ block.rotary-pump.name=Rotary Pump
block.nuclear-reactor.name=Nuclear Reactor
text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release.
text.customgame=Custom Game
text.campaign=Campaign
text.sectors=Sectors
text.sector=Selected Sector: [LIGHT_GRAY]{0}
text.sector.time=Time: [LIGHT_GRAY]{0}
@@ -503,8 +501,6 @@ unit.drone.name=Drone
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
unit.fabricator.name=Fabricator
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
unit.scout.name=Scout
unit.scout.description=A basic ground unit. Uses lead as ammo.
unit.titan.name=Titan
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
unit.monsoon.name=Monsoon
@@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump
block.dagger-pad.name=Dagger Pad
block.titan-pad.name=Titan Pad
block.thermal-generator.name=Thermal Generator
text.coreattack=< Core is under attack! >
text.continue=Continue
text.nextmission=Next Mission
text.server.kicked.serverClose=Server closed.
text.server.kicked.sectorComplete=Sector completed.
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
text.map.invalid=Error loading map: corrupted or invalid map file.
section.general.name=General
section.view.name=View
section.multiplayer.name=Multiplayer
block.deepwater.name=deepwater
block.water.name=water
block.lava.name=lava
block.oil.name=oil
block.blackstone.name=blackstone
block.stone.name=stone
block.dirt.name=dirt
block.sand.name=sand
block.ice.name=ice
block.snow.name=snow
block.grass.name=grass
block.shrub.name=shrub
block.rock.name=rock
block.blackrock.name=blackrock
block.icerock.name=icerock
unit.dagger.name=Dagger
unit.dagger.description=A basic ground unit. Useful in swarms.
+27 -4
View File
@@ -26,7 +26,6 @@ text.players.single={0} jugador en línea
text.server.mismatch=Error de paquete: posible desajuste de la versión cliente / servidor.\n¡Asegúrate de que tú y el anfitrión tengáis la última versión de Mindustry!
text.server.closing=[accent] Cerrando servidor ...
text.server.kicked.kick=¡Has sido expulsado del servidor!
text.server.kicked.invalidPassword=¡Contraseña inválida!
text.server.kicked.clientOutdated=Cliente desactualizado ¡Actualiza tu juego!
text.server.kicked.serverOutdated=Servidor desactualizado ¡Pidele actualizar al anfitrión!
text.server.kicked.banned=Tu entrada está prohibida en este servidor.
@@ -464,7 +463,6 @@ block.rotary-pump.name=Rotary Pump
block.nuclear-reactor.name=Nuclear Reactor
text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release.
text.customgame=Custom Game
text.campaign=Campaign
text.sectors=Sectors
text.sector=Selected Sector: [LIGHT_GRAY]{0}
text.sector.time=Time: [LIGHT_GRAY]{0}
@@ -503,8 +501,6 @@ unit.drone.name=Drone
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
unit.fabricator.name=Fabricator
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
unit.scout.name=Scout
unit.scout.description=A basic ground unit. Uses lead as ammo.
unit.titan.name=Titan
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
unit.monsoon.name=Monsoon
@@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump
block.dagger-pad.name=Dagger Pad
block.titan-pad.name=Titan Pad
block.thermal-generator.name=Thermal Generator
text.coreattack=< Core is under attack! >
text.continue=Continue
text.nextmission=Next Mission
text.server.kicked.serverClose=Server closed.
text.server.kicked.sectorComplete=Sector completed.
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
text.map.invalid=Error loading map: corrupted or invalid map file.
section.general.name=General
section.view.name=View
section.multiplayer.name=Multiplayer
block.deepwater.name=deepwater
block.water.name=water
block.lava.name=lava
block.oil.name=oil
block.blackstone.name=blackstone
block.stone.name=stone
block.dirt.name=dirt
block.sand.name=sand
block.ice.name=ice
block.snow.name=snow
block.grass.name=grass
block.shrub.name=shrub
block.rock.name=rock
block.blackrock.name=blackrock
block.icerock.name=icerock
unit.dagger.name=Dagger
unit.dagger.description=A basic ground unit. Useful in swarms.
+41 -17
View File
@@ -16,7 +16,6 @@ text.players.single=joueur en ligne
text.server.mismatch=Erreur de paquet: possible incompatibilité de version client/serveur. Assurez-vous que vous et l'hôte avez la dernière version de Mindustry!
text.server.closing=[accent]Fermeture du serveur ...
text.server.kicked.kick=Vous avez été expulsé du serveur!
text.server.kicked.invalidPassword=Mot de passe non valide !
text.server.kicked.clientOutdated=Client dépassé! Mettez à jour votre jeu!
text.server.kicked.serverOutdated=Serveur dépassé! Demandez à l'hôte de le mettre à jour!
text.server.kicked.banned=Vous êtes banni sur ce serveur.
@@ -224,19 +223,20 @@ block.liquidjunction.name=jonction à liquide
block.sorter.name=trieur
block.smelter.name=fonderie
text.credits=Credits
text.link.discord.description=the official Mindustry discord chatroom
text.link.github.description=Game source code
text.link.dev-builds.description=Unstable development builds
text.link.trello.description=Official trello board for planned features
text.link.itch.io.description=itch.io page with PC downloads and web version
text.link.google-play.description=Google Play store listing
text.link.wiki.description=official Mindustry wiki
text.linkfail=Failed to open link!\nThe URL has been copied to your cliboard.
text.editor.web=The web version does not support the editor!\nDownload the game to use it.
text.web.unsupported=The web version does not support this feature! Download the game to use it.
text.map.delete=Are you sure you want to delete the map "[orange]{0}[]"?
text.construction.title=Block Construction Guide
text.construction=You've just selected [accent]block construction mode[].\n\nTo begin placing, simply tap a valid location near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Shift the selection[] by holding and dragging any block in the selection.\n- [accent]Place blocks in a line[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel construction or selection[] by pressing the X at the bottom left.
text.link.discord.description=Le discord officiel de Mindustry
text.link.github.description=code source du jeu
text.link.dev-builds.description=version de développement instable
text.link.trello.description=le tableau trelli officiel pour les futures ajouts
text.link.itch.io.description=la page itch.io avec la version Web et PC à télécharger
text.link.google-play.description=la page Google play Store
text.link.wiki.description=wiki officiel de Mindustry
text.linkfail=Erreur lors de l'ouverture du lien !\nL'URL as bien été copier dans le presse-papiers.
text.editor.web=Votre navigateur ne supporte pas l'éditeur !\nTéléchargez le jeu pour l'utiliser.
text.web.unsupported=votre navigateur ne supporte pas cette fonctionnalité ! Téléchargez le jeu pour l'utiliser.
text.map.delete=êtes vous sûre de supprimer la carte "[orange]{0}[]"?
text.construction.title=Guide des blocs de construction
text.construction=Voou avez sélectionné le [accent]mode de construction de blocs[].\n\n pour commencer à en placer, taper sur un emplacement validé près de votre vaisseau '.\nUne fois que vous avez sélectionné des blocs, appuyez sur la flèche pour valider, et votre vaisseau va les construire.\n\n- [accent]Enlever des blocs[] de votre sélection en les touchant.\n- [accent]étendez la sélection[] en maintenant et en étirant les blocs de la selection.\n- [accent]Placer des blocs en ligne[] en touchant et en laissant appuyer sur une case vide, puis étirez dans une direction.\n- [accent]Annulez une construction ou une selection[]en appuyant sur X en bas à gauche .
text.deconstruction.title=Block Deconstruction Guide
text.deconstruction=You've just selected [accent]block deconstruction mode[].\n\nTo begin breaking, simply tap a block near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Remove blocks in an area[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel deconstruction or selection[] by pressing the X at the bottom left.
text.showagain=Don't show again next session
@@ -464,7 +464,6 @@ block.rotary-pump.name=Rotary Pump
block.nuclear-reactor.name=Nuclear Reactor
text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release.
text.customgame=Custom Game
text.campaign=Campaign
text.sectors=Sectors
text.sector=Selected Sector: [LIGHT_GRAY]{0}
text.sector.time=Time: [LIGHT_GRAY]{0}
@@ -503,8 +502,6 @@ unit.drone.name=Drone
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
unit.fabricator.name=Fabricator
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
unit.scout.name=Scout
unit.scout.description=A basic ground unit. Uses lead as ammo.
unit.titan.name=Titan
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
unit.monsoon.name=Monsoon
@@ -516,3 +513,30 @@ block.thermal-pump.name=Thermal Pump
block.dagger-pad.name=Dagger Pad
block.titan-pad.name=Titan Pad
block.thermal-generator.name=Thermal Generator
text.coreattack=< Core is under attack! >
text.continue=Continue
text.nextmission=Next Mission
text.server.kicked.serverClose=Server closed.
text.server.kicked.sectorComplete=Sector completed.
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
text.map.invalid=Error loading map: corrupted or invalid map file.
section.general.name=General
section.view.name=View
section.multiplayer.name=Multiplayer
block.deepwater.name=deepwater
block.water.name=water
block.lava.name=lava
block.oil.name=oil
block.blackstone.name=blackstone
block.stone.name=stone
block.dirt.name=dirt
block.sand.name=sand
block.ice.name=ice
block.snow.name=snow
block.grass.name=grass
block.shrub.name=shrub
block.rock.name=rock
block.blackrock.name=blackrock
block.icerock.name=icerock
unit.dagger.name=Dagger
unit.dagger.description=A basic ground unit. Useful in swarms.
+27 -4
View File
@@ -16,7 +16,6 @@ text.players.single={0} pemain online
text.server.mismatch=Kesalahan paket: kemungkinan versi client / server tidak sesuai.\nPastikan Anda dan host memiliki versi terbaru Mindustry!
text.server.closing=[accent]Menutup server...
text.server.kicked.kick=Anda telah dikeluarkan dari server!
text.server.kicked.invalidPassword=Kata sandi salah!
text.server.kicked.clientOutdated=Client versi lama! Update game Anda!
text.server.kicked.serverOutdated=Server versi lama! Tanyakan host untuk mengupdate!
text.hostserver=Host Server
@@ -464,7 +463,6 @@ block.rotary-pump.name=Rotary Pump
block.nuclear-reactor.name=Nuclear Reactor
text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release.
text.customgame=Custom Game
text.campaign=Campaign
text.sectors=Sectors
text.sector=Selected Sector: [LIGHT_GRAY]{0}
text.sector.time=Time: [LIGHT_GRAY]{0}
@@ -503,8 +501,6 @@ unit.drone.name=Drone
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
unit.fabricator.name=Fabricator
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
unit.scout.name=Scout
unit.scout.description=A basic ground unit. Uses lead as ammo.
unit.titan.name=Titan
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
unit.monsoon.name=Monsoon
@@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump
block.dagger-pad.name=Dagger Pad
block.titan-pad.name=Titan Pad
block.thermal-generator.name=Thermal Generator
text.coreattack=< Core is under attack! >
text.continue=Continue
text.nextmission=Next Mission
text.server.kicked.serverClose=Server closed.
text.server.kicked.sectorComplete=Sector completed.
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
text.map.invalid=Error loading map: corrupted or invalid map file.
section.general.name=General
section.view.name=View
section.multiplayer.name=Multiplayer
block.deepwater.name=deepwater
block.water.name=water
block.lava.name=lava
block.oil.name=oil
block.blackstone.name=blackstone
block.stone.name=stone
block.dirt.name=dirt
block.sand.name=sand
block.ice.name=ice
block.snow.name=snow
block.grass.name=grass
block.shrub.name=shrub
block.rock.name=rock
block.blackrock.name=blackrock
block.icerock.name=icerock
unit.dagger.name=Dagger
unit.dagger.description=A basic ground unit. Useful in swarms.
+180 -157
View File
@@ -26,7 +26,6 @@ text.players.single={0} giocatori online
text.server.mismatch=Errore nel pacchetto: possibile discrepanza nella versione client / server. Assicurati che tu e l'host abbiate l'ultima versione di Mindustry!
text.server.closing=[accent]Chiusura server ...
text.server.kicked.kick=Sei stato cacciato dal server!
text.server.kicked.invalidPassword=Password non valida.
text.server.kicked.clientOutdated=Versione del client obsoleta! Aggiorna il tuo gioco!
text.server.kicked.serverOutdated=Server obsoleto! Chiedi all'host di aggiornare!
text.server.kicked.banned=Sei bannato da questo server.
@@ -163,7 +162,7 @@ text.settings.game=Gioco
text.settings.sound=Suono
text.settings.graphics=Grafica
text.paused=In pausa
text.info.title=[Accent]Info
text.info.title=[accent] Info
text.error.title=[crimson]Si è verificato un errore
text.error.crashtitle=Si è verificato un errore
text.blocks.blockinfo=info sul blocco
@@ -254,7 +253,6 @@ text.showagain=non mostrare più
text.unlocks=Sblocchi
text.addplayers=Aggiungi/rimuovi giocatori
text.customgame=Gioco personalizzato
text.campaign=Campagna
text.sectors=Settori
text.sector=Settori Selezionati: [LIGHT_GRAY]{0}
text.sector.time=Tempo: [LIGHT_GRAY]{0}
@@ -308,128 +306,128 @@ text.editor.export=Esportazione...
text.editor.exportfile=Esporta file
text.editor.exportfile.description=Esporta file mappa
text.editor.exportimage=Esporta immagine terreno
text.editor.exportimage.description=Export a map image file
text.editor.overwrite.confirm=[scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
text.editor.exportimage.description=Esporta file immagine mappa
text.editor.overwrite.confirm=[scarlet]Attenzione![] Una mappa con questo nome esiste già. Sei sicuro di volerla sovrascrivere?
text.fps=FPS: {0}
text.tps=TPS: {0}
text.ping=Ping: {0}ms
text.settings.rebind=Rebind
text.yes=Yes
text.settings.rebind=Reinposta
text.yes=Si
text.no=No
text.blocks.targetsair=Targets Air
text.blocks.itemspeed=Units Moved
text.blocks.shootrange=Range
text.blocks.poweruse=Power Use
text.blocks.inputitemcapacity=Input Item Capacity
text.blocks.outputitemcapacity=Input Item Capacity
text.blocks.maxpowergeneration=Max Power Generation
text.blocks.powertransferspeed=Power Transfer
text.blocks.craftspeed=Production Speed
text.blocks.inputliquidaux=Aux Liquid
text.blocks.inputitems=Input Items
text.blocks.outputitem=Output Item
text.blocks.drilltier=Drillables
text.blocks.drillspeed=Base Drill Speed
text.blocks.liquidoutput=Liquid Output
text.blocks.liquiduse=Liquid Use
text.blocks.coolant=Coolant
text.blocks.coolantuse=Coolant Use
text.blocks.inputliquidfuel=Fuel Liquid
text.blocks.liquidfueluse=Liquid Fuel Use
text.blocks.reload=Reload
text.blocks.inputfuel=Fuel
text.blocks.fuelburntime=Fuel Burn Time
text.unit.blocks=blocks
text.unit.powersecond=power units/second
text.unit.liquidsecond=liquid units/second
text.unit.itemssecond=items/second
text.unit.pixelssecond=pixels/second
text.unit.liquidunits=liquid units
text.unit.powerunits=power units
text.unit.degrees=degrees
text.unit.seconds=seconds
text.blocks.targetsair=Attacca nemici aerei
text.blocks.itemspeed=Unità spostate
text.blocks.shootrange=Raggio
text.blocks.poweruse=Utilizzo energia
text.blocks.inputitemcapacity=Capacità oggetti in entrata
text.blocks.outputitemcapacity=Capacità oggetti in uscità
text.blocks.maxpowergeneration=Produzione massima energia
text.blocks.powertransferspeed=Velocità trasferimento energia
text.blocks.craftspeed=Velocità produzione
text.blocks.inputliquidaux=Liquidi extra
text.blocks.inputitems=Oggetti in entrata
text.blocks.outputitem=Oggetti in uscita
text.blocks.drilltier=Scavabili
text.blocks.drillspeed=Velocità scavo stbile
text.blocks.liquidoutput=Uscita liquidi
text.blocks.liquiduse=Uso liquidi
text.blocks.coolant=Refrigerante
text.blocks.coolantuse=uso refrigerante
text.blocks.inputliquidfuel=carburante liquido
text.blocks.liquidfueluse=Utilizzo carburante liquido
text.blocks.reload=Ricarica
text.blocks.inputfuel=Carburante
text.blocks.fuelburntime=Tempo combustione carburante
text.unit.blocks=blocchi
text.unit.powersecond=unità energia/secondo
text.unit.liquidsecond=unità liquide/secondo
text.unit.itemssecond=oggetti/secondo
text.unit.pixelssecond=pixel/secondo
text.unit.liquidunits=unità liquidi
text.unit.powerunits=unità energia
text.unit.degrees=gradi
text.unit.seconds=secondi
text.unit.none=
text.unit.items=items
text.category.general=General
text.category.power=Power
text.category.liquids=Liquids
text.category.items=Items
text.category.crafting=Crafting
text.category.shooting=Shooting
setting.minimap.name=Show Minimap
content.item.name=Items
content.liquid.name=Liquids
content.unit-type.name=Units
content.recipe.name=Blocks
item.stone.description=A common raw material. Used for separating and refining into other materials, or melting into lava.
item.tungsten.name=Tungsten
item.tungsten.description=A common, but very useful structure material. Used in drills and heat-resistant blocks such as generators and smelteries.
item.lead.name=Lead
item.lead.description=A basic starter material. Used extensively in electronics and liquid transportation blocks.
item.coal.description=A common and readily available fuel.
item.carbide.name=Carbide
item.carbide.description=A tough alloy made with tungsten and carbon. Used in advanced transportation blocks and high-tier drills.
item.titanium.description=A rare super-light metal used extensively in liquid transportation, drills and aircraft.
item.thorium.name=Thorium
item.thorium.description=A dense, radioactive metal used as structural support and nuclear fuel.
item.silicon.name=Silicon
item.silcion.description=An extremely useful semiconductor, with applications in solar panels and many complex electronics.
item.plastanium.name=Plastanium
item.plastanium.description=A light, ductile material used in advanced aircraft and fragmentation ammunition.
item.phase-matter.name=Phase Matter
text.unit.items=oggetti
text.category.general=Generali
text.category.power=Energia
text.category.liquids=Liquidi
text.category.items=Oggetti
text.category.crafting=Produzione
text.category.shooting=Potenza di fuoco
setting.minimap.name=Mostra minimappa
content.item.name=Oggetti
content.liquid.name=Liquidi
content.unit-type.name=Unità
content.recipe.name=Blocchi
item.stone.description=UN materiale grezzo molto comune, che solitamente viene rifinito per ottenerne degli altri.
item.tungsten.name=Tungsteno
item.tungsten.description=Un materiale di strutturale molto comune, ma molto utile. Utilizzato in trapani e blocchi resistenti al calore come generatori e fonderie.
item.lead.name=Piombo
item.lead.description=Un materiale base, molto usato nei blocchi di trasporto.
item.coal.description=Un carburante comune e facilmente ottenibile.
item.carbide.name=Carburo
item.carbide.description=Una lega resistente realizzata con tungsteno e carbone. Utilizzato in blocchi di trasporto avanzati e trapani ad alto livello.
item.titanium.description=Un raro metallo super leggero usato ampiamente nel trasporto di liquidi, trapani e navi.
item.thorium.name=Torio
item.thorium.description=Un materiale denso e radioattivo, utilizzato nella costruzione di strutture e come carburante del reattore nucleare.
item.silicon.name=Silicio
item.silcion.description=Un semiconduttore molto utile che viene utilizzato nei pannelli solari e nei macchinari elettronici.
item.plastanium.name=Plastaniu
item.plastanium.description=Un materiale leggero e duttile, utilizzato nelle navi avanzete e come munizione.
item.phase-matter.name=Vaporizzatore di materia
item.surge-alloy.name=Surge Alloy
item.biomatter.name=Biomatter
item.biomatter.description=A clump of organic mush; used for conversion into oil or as a basic fuel.
item.sand.description=A common material that is used extensively in smelting, both in alloying and as a flux.
item.blast-compound.name=Blast Compound
item.blast-compound.description=A volatile compound used in bombs and explosives. While it can burned as fuel, this is not advised.
item.pyratite.name=Pyratite
item.pyratite.description=An extremely flammable substance used in incendiary weapons.
liquid.cryofluid.name=Cryofluid
text.item.explosiveness=[LIGHT_GRAY]Explosiveness: {0}
text.item.flammability=[LIGHT_GRAY]Flammability: {0}
text.item.radioactivity=[LIGHT_GRAY]Radioactivity: {0}
text.item.fluxiness=[LIGHT_GRAY]Flux Power: {0}
text.item.hardness=[LIGHT_GRAY]Hardness: {0}
text.liquid.heatcapacity=[LIGHT_GRAY]Heat Capacity: {0}
text.liquid.viscosity=[LIGHT_GRAY]Viscosity: {0}
text.liquid.temperature=[LIGHT_GRAY]Temperature: {0}
block.tungsten-wall.name=Tungsten Wall
block.tungsten-wall-large.name=Large Tungsten Wall
block.carbide-wall.name=Carbide Wall
block.carbide-wall-large.name=Large Carbide Wall
block.thorium-wall.name=Thorium Wall
block.thorium-wall-large.name=Large Thorium Wall
item.biomatter.name=Biomateria
item.biomatter.description=Materiale organico; Utilizzato per essere convertito in petrolio o carburante.
item.sand.description=Un materiale base che viene altamente usato nei processi di fusione, Sia come lega che come lubrificante.
item.blast-compound.name=Polvere esplosiva
item.blast-compound.description=Un composto altamente volatile, utilizzato nella produzione di bombe ed esplosivi. Può essere utilizzato come combustibile anche se non è consigliato.
item.pyratite.name=Pirite
item.pyratite.description=Una sostanza molto infiammabile che viene utilizzata nelle armi a fuoco.
liquid.cryofluid.name=criogenium
text.item.explosiveness=[LIGHT_GRAY]Esplosività: {0}
text.item.flammability=[LIGHT_GRAY]Infiammabilità: {0}
text.item.radioactivity=[LIGHT_GRAY]Radioattività: {0}
text.item.fluxiness=[LIGHT_GRAY]Portata: {0}
text.item.hardness=[LIGHT_GRAY]Durezza: {0}
text.liquid.heatcapacity=[LIGHT_GRAY]Capacità calorifica: {0}
text.liquid.viscosity=[LIGHT_GRAY]Viscosità: {0}
text.liquid.temperature=[LIGHT_GRAY]Temperatura: {0}
block.tungsten-wall.name=Muro di tungseno
block.tungsten-wall-large.name=Muro grande di tungsteno
block.carbide-wall.name=Muro di carburo
block.carbide-wall-large.name=Muro grande di carburo
block.thorium-wall.name=Muro di torio
block.thorium-wall-large.name=Muro grande di torio
block.duo.name=Duo
block.scorch.name=Scorch
block.hail.name=Hail
block.lancer.name=Lancer
block.titanium-conveyor.name=Titanium Conveyor
block.splitter.name=Splitter
block.splitter.description=Outputs items into three different directions once they are recieved.
block.router.description=Splits items into all 4 directions. Can store items as a buffer.
block.distributor.name=Distributor
block.distributor.description=A splitter that can split items into 8 directions.
block.sorter.description=Sorts items. If an item matches the selection, it is allowed to pass. Otherwise, the item is outputted to the left and right.
block.overflow-gate.name=Overflow Gate
block.overflow-gate.description=A combination splitter and router that only outputs to the left and right if the front path is blocked.
block.bridgeconveyor.name=Bridge Conveyor
block.bridgeconveyor.description=A conveyor that can go over other blocks, for up to two total blocks.
block.arc-smelter.name=Arc Smelter
block.silicon-smelter.name=Silicon Smelter
block.phase-weaver.name=Phase Weaver
block.pulverizer.name=Pulverizer
block.cryofluidmixer.name=Cryofluid Mixer
block.melter.name=Melter
block.incinerator.name=Incinerator
block.biomattercompressor.name=Biomatter Compressor
block.separator.name=Separator
block.centrifuge.name=Centrifuge
block.power-node.name=Power Node
block.power-node-large.name=Large Power Node
block.battery.name=Battery
block.battery-large.name=Large Battery
block.combustion-generator.name=
block.hail.name=Bombardiere
block.lancer.name=Idrogetto
block.titanium-conveyor.name=Nastro trasportatore potenziato
block.splitter.name=Divisore
block.splitter.description=Divide gli oggetti in 3 direzioni diverse.
block.router.description=Divide gli oggetti in 4 direzioni. Ha inventario proprio che viente utilizzato per conservare provvisoriamente oggetti.
block.distributor.name=Mega router
block.distributor.description=Un divisore che distribuisce oggetti su 8 lati.
block.sorter.description=Divide gli oggetti. Se l'oggetto corrisponde a quello selezionato, Può passare. Altrimenti viene espulso sui lati.
block.overflow-gate.name=splitter per eccesso
block.overflow-gate.description=Una combinazione di un divisore e di un router , che distribuisce sui suoi lati se la via centrale è bloccata.
block.bridgeconveyor.name=Nastro trasportatore sopraelevato
block.bridgeconveyor.description=Un nastro trasportatore che può passare sopra i blocchi, al massimo due.
block.arc-smelter.name=Fonderia ad arco
block.silicon-smelter.name=Fonderia per silicio
block.phase-weaver.name=Tessitore di fase
block.pulverizer.name=Polverizzatore
block.cryofluidmixer.name=Mixer liqidi
block.melter.name=Fonditore
block.incinerator.name=Inceneritore
block.biomattercompressor.name=Compostore
block.separator.name=Separatore
block.centrifuge.name=Centrifugatore
block.power-node.name=Snodo energetico
block.power-node-large.name=Snodo energetico grande
block.battery.name=Batteria
block.battery-large.name=Batteria grossa
block.combustion-generator.name=generatore a carbone
block.turbine-generator.name=Turbina
block.tungsten-drill.name=Estrattore con punta al tungsteno
block.carbide-drill.name=Estrattore con punta al carburo
@@ -441,7 +439,7 @@ block.delta-mech-factory.name=Fabbrica di mech
block.repairpoint.name=Punto di riparazione
block.resupplypoint.name=Punto di rifornimento
block.liquidtank.name=Tanica
block.bridgeconduit.name=Condotta sopraelevata
block.bridgeconduit.name=Condotto sopraelevato
block.mechanical-pump.name=Pompa meccanica
block.itemsource.name=Sorgente oggetti
block.itemvoid.name=Vuoto oggetti
@@ -468,51 +466,76 @@ block.javelin-ship-factory.name=Fabbrica ni navi
block.repair-point.name=Punto di riparazione
block.resupply-point.name=Punto di rifornimento
block.pulse-conduit.name=Condotta attiva
block.phase-conduit.name=Condotta ad alta velocità
block.phase-conduit.name=Condotto ad alta velocità
block.liquid-router.name=Distributore liquidi
block.liquid-tank.name=Tanica d'acqua
block.liquid-junction.name=Giunzione liquida
block.bridge-conduit.name=Condotta forzata sopraelevata
block.bridge-conduit.name=Condotta sopraelevata
block.rotary-pump.name=Pompa a turbina
block.nuclear-reactor.name=Reattore nucleare
text.credits.text=Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!)
text.sector.gameover=This sector has been lost. Re-deploy?
text.sector.retry=Retry
text.wave.lasted=You lasted until wave [accent]{0}[].
text.credits.text=Creato da [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](Nel caso non te ne sia accorto, la traduzione del gioco non è completa.\n Chi di dovere sta lavorando più velocemente possibile per completarla!)
text.sector.gameover=Hai perso questo settore. Attaccare di nuovo?
text.sector.retry=Riprova
text.wave.lasted=Sei sopravvissuto fino all'onda [accent]{0}[].
text.mission=Mission:[LIGHT_GRAY] {0}
text.mission.complete=Mission complete!
text.mission.complete.body=Sector {0},{1} has been conquered.
text.mission.wave=Survive [accent]{0}[] waves.
text.mission.battle=Destroy the enemy base.
text.mission.resource=Obtain {0} x{1}
text.none=<none>
text.sector.corrupted=[orange]A save file for this sector was found, but loading failed.\nA new one has been created.
setting.fpscap.name=Max FPS
setting.fpscap.none=None
text.mission.complete=Missione completata!
text.mission.complete.body=Il settore {0},{1} è stato conquistato.
text.mission.wave=Sopravvivi a [accent]{0}[] onda/e.
text.mission.battle=Distruggi la base del nemico.
text.mission.resource=Ottieni {0} x{1}
text.none=<Niente . . . >
text.sector.corrupted=[orange]Un file per questo settore è stato trovato, ma è fallito il caricamnto.\nQuindi ne è stato creato uno nuovo.
setting.fpscap.name=Limite FPS
setting.fpscap.none=Niente
setting.fpscap.text={0} FPS
mode.sandbox.warning=Note that blocks cannot be used in sandbox mode until they are unlocked in other modes.\n\n[LIGHT_GRAY]If you have not unlocked any blocks, none will appear.
text.unit.health=[LIGHT_GRAY]Health: {0}
text.unit.speed=[LIGHT_GRAY]Speed: {0}
block.drone-pad.name=Drone Pad
block.fabricator-pad.name=Fabricator Pad
block.interceptor-pad.name=Interceptor Pad
block.monsoon-pad.name=Monsoon Pad
block.command-center.name=Command Center
block.mass-driver.name=Mass Driver
mode.sandbox.warning=Nota che questo blocco non può essere utilizzato in modalità sandbox e non lo sblocchi .\n\n[LIGHT_GRAY]Se non hai sbloccato alcun blocco, non ne comparirà nessuno.
text.unit.health=[LIGHT_GRAY]Vita: {0}
text.unit.speed=[LIGHT_GRAY]Velocità: {0}
block.drone-pad.name=Base del drone
block.fabricator-pad.name=Base del costruttore
block.interceptor-pad.name=Bese dell'intercettatore
block.monsoon-pad.name=Base del vento del nord
block.command-center.name=Centro di comando
block.mass-driver.name=Lancia materiali
block.blast-drill.name=Blast Drill
block.thermal-pump.name=Thermal Pump
block.dagger-pad.name=Dagger Pad
block.titan-pad.name=Titan Pad
block.thermal-generator.name=Thermal Generator
block.thermal-pump.name=Pompa termica
block.dagger-pad.name=Pad pericolo
block.titan-pad.name=pad titano
block.thermal-generator.name=Generatore termico
unit.drone.name=Drone
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
unit.fabricator.name=Fabricator
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
unit.scout.name=Scout
unit.scout.description=A basic ground unit. Uses lead as ammo.
unit.titan.name=Titan
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
unit.monsoon.name=Monsoon
unit.monsoon.description=A heavy carpet bomber. Uses blast compound or pyratite as ammo.
unit.interceptor.name=Interceptor
unit.interceptor.description=A fast, hit-and-run strike unit. Uses lead as ammo.
unit.drone.description=Un'unità base, che mina e costruisce.
unit.fabricator.name=Costruttore
unit.fabricator.description=Un drone molto avanzato che raccoglie minerali e costruisce molto meglio e più velocemente di un drone base.
unit.titan.name=Titano
unit.titan.description=Un'unità di terra corazzata avanzata. Utilizza carburo come munizione. Attacca sia bersagli terrestri che aerei.
unit.monsoon.name=Monsone
unit.monsoon.description=Un bombardiere molto potente, che raderà al suolo chiunque gli passi davanti.
unit.interceptor.name=Intercettatore
unit.interceptor.description=Un veloce ed efficiente torretta che funziona con il piombo.
text.coreattack=< Core is under attack! >
text.continue=Continue
text.nextmission=Next Mission
text.server.kicked.serverClose=Server closed.
text.server.kicked.sectorComplete=Sector completed.
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
text.map.invalid=Error loading map: corrupted or invalid map file.
section.general.name=General
section.view.name=View
section.multiplayer.name=Multiplayer
block.deepwater.name=deepwater
block.water.name=water
block.lava.name=lava
block.oil.name=oil
block.blackstone.name=blackstone
block.stone.name=stone
block.dirt.name=dirt
block.sand.name=sand
block.ice.name=ice
block.snow.name=snow
block.grass.name=grass
block.shrub.name=shrub
block.rock.name=rock
block.blackrock.name=blackrock
block.icerock.name=icerock
unit.dagger.name=Dagger
unit.dagger.description=A basic ground unit. Useful in swarms.
+197 -174
View File
@@ -3,8 +3,8 @@ text.discord=Mindustry Discord 에 참여하세요!
text.link.discord.description=공식 Mindustry Discord 채팅방
text.link.github.description=게임 소스코드
text.link.dev-builds.description=개발중인 빌드
text.link.trello.description=다음 계획된 기능들을 게시한 공식 trello 보드
text.link.itch.io.description=PC 버전 다운로드 HTML5 버전이 있는 itch.io 사이트
text.link.trello.description=다음 출시될 기능들을 게시한 공식 Trello 보드
text.link.itch.io.description=PC 버전 다운로드와 HTML5 버전이 있는 itch.io 사이트
text.link.google-play.description=Google 플레이 스토어 등록 정보
text.link.wiki.description=공식 Mindustry 위키
text.linkfail=링크를 여는데 실패했습니다!URL이 기기의 클립보드에 복사되었습니다.
@@ -12,7 +12,7 @@ text.editor.web=HTML5 버전은 에디터 기능을 지원하지 않습니다!
text.web.unsupported=HTML5 버전은 이 기능을 지원하지 않습니다!게임을 다운로드 한 뒤에 사용 해 주세요.
text.gameover=코어가 터졌습니다. 게임 오버!
text.highscore=[YELLOW]최고점수 달성!
text.level.highscore=최고 점수 : [accent]{0}
text.level.highscore=최고 점수:[accent]{0}
text.level.delete.title=삭제 확인
text.map.delete=정말로 "[orange]{0}[]" 맵을 삭제하시겠습니까?
text.level.select=맵 선택
@@ -22,7 +22,7 @@ text.construction=[accent]블록 배치 모드[]를 선택하셨습니다.\n\n
text.deconstruction.title=블록 삭제 안내서
text.deconstruction=[accent]블록 삭제 모드[]를 선택하셨습니다\n블록을 삭제하고 싶다면, 자신의 건설 가능 범위 내에서 간단히 탭 하면 됩니다.\n일부 블록을 선택한 후에 확인 버튼을 누르면 배가 파괴 작업을 진행할 것입니다.\n- [accent]블록을 삭제[]하고 싶다면 배치하고 싶은 영역을 탭 하세요- [accent]블록을 넓은 범위로 삭제[]하고 싶다면 배치하고 싶은 시작 영역을 길게 누르며 드래그 하면 됩니다.- [accent]블록 삭제 모드를 취소[]하고 싶다면 화면 하단 왼쪽에 있는 X 버튼을 누르면 됩니다.
text.showagain=다음 세션에서 이 메세지를 표시하지 않습니다
text.unlocks=잠금 해제
text.unlocks=아이템들
text.savegame=게임 저장
text.loadgame=게임 불러오기
text.joingame=게임 참가
@@ -32,25 +32,24 @@ text.maps=맵
text.maps.none=[LIGHT_GRAY]맵을 찾을 수 없습니다!
text.about.button=정보
text.name=이름:
text.unlocked=새 블록이 잠금 해제되었습니다!
text.unlocked.plural=새 블록이 잠금 해제되었습니다!
text.players={0} 플레이어 온라인
text.players.single={0} 플레이어 온라인
text.server.mismatch=패킷 오류: 클라이언트와 서버 버전이 일치하지 않습니다.자신이 서버를 호스트하거나 최신 버전을 사용 해 주세요!
text.unlocked=새 블록 잠금 해제
text.unlocked.plural=새 블록 잠금 해제
text.players=현재 {0}명 접속중
text.players.single=현재 {0}명만 있음.
text.server.mismatch=클라이언트와 서버 버전이 일치하지 않습니다. 자신이 서버를 호스트하거나 최신 버전을 사용 해 주세요!
text.server.closing=[accent]서버 닫는중...
text.server.kicked.kick=당신은 서버에서 추방되었습니다!
text.server.kicked.fastShoot=당신은 총을 너무 빨리 발사했습니다.
text.server.kicked.invalidPassword=알 수 없는 비밀번호 입니다!
text.server.kicked.clientOutdated=오래된 버전의 클라이언트 입니다! 게임을 업데이트 하세요!
text.server.kicked.serverOutdated=오래된 버전의 서버입니다! 서버 호스트 관리자에게 문의하세요!
text.server.kicked.banned=당신은 서버에서 밴 망치를 맞아 차단당했습니다.
text.server.kicked.recentKick=당신은 방금 추방처리 되었습니다.잠시 기다린 후에 접속 해 주세요.
text.server.kicked.recentKick=당신은 방금 추방처리 되었습니다. 잠시 기다린 후에 접속 해 주세요.
text.server.kicked.nameInUse=이 닉네임이 이미 서버에서 사용중입니다.
text.server.kicked.nameEmpty=닉네임에는 반드시 영어 또는 숫자가 있어야 합니다.
text.server.kicked.idInUse=당신은 이미 서버에 접속중입니다! 다중 계정은 허용되지 않습니다.
text.server.kicked.customClient=이 서버는 커스텀 빌드를 지원하지 않습니다. 공식 버전을 사용하세요.
text.host.info=[accent]호스트[] 버튼은 현재 네트워크의 [scarlet]6567[] 과 [scarlet]6568[] 포트를 사용합니다.\n[LIGHY_GRAY]같은 Wi-Fi 또는 로컬 네트워크[] 에서 서버 목록을 볼 수 있습니다.\n\n만약 플레이어들이 이 IP를 통해 어디에서나 연결할 수 있게 하고 싶다면, 공유기 설정에서 [accent]포트 포워딩[]을 해야 합니다.\n\n[LIGHT_GRAY]참고 : LAN 게임 연결에 문제가 있는 사람이 있다면, 방화벽 설정에서 Mindustry 가 로컬 네트워크에 액세스하도록 허용했는지 확인 해 주세요.
text.join.info=여기서 [accent]서버 IP[]를 입력하여 다른 서버에 접속할 수 있습니다.\n또는 [accent]로컬 네트워크(LAN)[] 서버를 검색하여 접속할 수 있습니다.\nLAN 및 WAN 멀티 플레이어 모두 지원됩니다.\n\n[LIGHT_GRAY]참고 : 여기에서는 자동으로 글로벌 서버를 추가하지 않습니다. IP로 다른 사람의 서버에 접속할려면 서버장에게 IP를 요청해야 합니다.
text.host.info=[accent]호스트[] 버튼은 현재 네트워크의 [scarlet]6567[] 과 [scarlet]6568[] 포트를 사용합니다.\n[LIGHY_GRAY]같은 Wi-Fi 또는 로컬 네트워크[] 에서 서버 목록을 볼 수 있습니다.\n\n만약 플레이어들이 이 IP를 통해 어디에서나 연결할 수 있게 하고 싶다면, 공유기 설정에서 [accent]포트 포워딩[]을 해야 합니다.\n\n[LIGHT_GRAY]참고:LAN 게임 연결에 문제가 있는 사람이 있다면, 방화벽 설정에서 Mindustry 가 로컬 네트워크에 액세스하도록 허용했는지 확인 해 주세요.
text.join.info=여기서 [accent]서버 IP[]를 입력하여 다른 서버에 접속할 수 있습니다.\n또는 [accent]로컬 네트워크(LAN)[] 서버를 검색하여 접속할 수 있습니다.\nLAN 및 WAN 멀티 플레이어 모두 지원됩니다.\n\n[LIGHT_GRAY]참고:여기에서는 자동으로 글로벌 서버를 추가하지 않습니다. IP로 다른 사람의 서버에 접속할려면 서버장에게 IP를 요청해야 합니다.
text.hostserver=서버 열기
text.host=호스트
text.hosting=[accent]서버 여는중..
@@ -60,28 +59,28 @@ text.server.refreshing=서버 목록 새로고치는중...
text.hosts.none=[lightgray]LAN 게임을 찾을 수 없습니다!
text.host.invalid=[scarlet]서버에 연결할 수 없습니다!
text.trace=플레이어 추적
text.trace.playername=플레이어 이름: [accent]{0}
text.trace.ip=IP : [accent]{0}
text.trace.id=고유 ID: [accent]{0}
text.trace.android=Android 클라이언트 : [accent]{0}
text.trace.modclient=수정된 클라이언트 : [accent]{0}
text.trace.totalblocksbroken=총 블럭 파괴 수: [accent]{0}
text.trace.structureblocksbroken=총 구조 블럭 파괴 수: [accent]{0}
text.trace.lastblockbroken=마지막으로 파괴한 블럭: [accent]{0}
text.trace.totalblocksplaced=총 설치한 블럭 수: [accent]{0}
text.trace.lastblockplaced=마지막으로 설치한 블록: [accent]{0}
text.invalidid=잘못된 클라이언트 ID 입니다! 공식 Mindustry 으로 버그 보고서를 제출 해 주세요.
text.trace.playername=이름:[accent]{0}
text.trace.ip=IP:[accent]{0}
text.trace.id=고유 ID:[accent]{0}
text.trace.android=Android 클라이언트:[accent]{0}
text.trace.modclient=수정된 클라이언트:[accent]{0}
text.trace.totalblocksbroken=총 블럭 파괴 개수:[accent]{0}
text.trace.structureblocksbroken=구조 블럭 파괴 수:[accent]{0}
text.trace.lastblockbroken=마지막으로 파괴한 블럭:[accent]{0}
text.trace.totalblocksplaced=총 설치한 블럭 개수:[accent]{0}
text.trace.lastblockplaced=마지막으로 설치한 블록:[accent]{0}
text.invalidid=잘못된 클라이언트 ID 입니다! 공식 Mindustry Discord 으로 버그 보고서를 제출 해 주세요.
text.server.bans=차단된 유저
text.server.bans.none=차단된 플레이어가 없습니다.
text.server.admins=관리자들
text.server.admins=관리자
text.server.admins.none=관리자가 없습니다!
text.server.add=서버 추가
text.server.delete=이 서버를 삭제 하시겠습니까?
text.server.hostname=호스트: {0}
text.server.hostname=호스트:{0}
text.server.edit=서버 수정
text.server.outdated=[crimson]서버 버전이 낮습니다![]
text.server.outdated.client=[Crimson]클라이언트 버전이 낮습니다![]
text.server.version=[lightgray]버전 : {0}
text.server.version=[lightgray]서버 버전:{0}
text.server.custombuild=[yellow]커스텀 서버
text.confirmban=이 플레이어를 차단하시겠습니까?
text.confirmunban=이 플레이어를 차단하시겠습니까?
@@ -90,14 +89,14 @@ text.confirmunadmin=이 플레이어의 관리자 상태를 해제하시겠습
text.joingame.title=게임 참가
text.joingame.ip=IP:
text.disconnect=서버와 연결이 해제되었습니다.
text.disconnect.data=맵 데이터를 불러오지 못했습니다!
text.disconnect.data=맵 데이터를 받아오는데 실패했습니다.
text.connecting=[accent]연결중...
text.connecting.data=[accent]월드 데이터 로딩중...
text.connecting.data=[accent]맵 데이터 다운로드중...
text.connectfail=[crimson]{0}[orange] 서버에 연결하지 못했습니다.[]
text.server.port=포트:
text.server.addressinuse=이 주소는 이미 사용중입니다!
text.server.invalidport=포트 번호가 잘못되었습니다.
text.server.error=[crimson]{0}[orange]서버를 호스팅 하는데 오류가 발생했습니다.[]
text.server.error=[crimson]{0}[orange]서버를 여는데 오류가 발생했습니다.[]
text.save.new=새로 저장\n
text.save.overwrite=이 저장 슬롯을 덮어씌우겠습니까?\n
text.overwrite=덮어쓰기\n
@@ -108,8 +107,8 @@ text.save.delete.confirm=이 저장파일을 삭제 하시겠습니까?\n
text.save.delete=삭제\n
text.save.export=저장파일 내보내기\n
text.save.import.invalid=[orange]저장 상태가 정상이 아닙니다!
text.save.import.fail=[crimson]저장파일을 불러오지 못함: [orange]{0}\n
text.save.export.fail=[crimson]저장파일을 내보내지 못함: [orange]{0}
text.save.import.fail=[crimson]저장파일을 불러오지 못함:[orange]{0}\n
text.save.export.fail=[crimson]저장파일을 내보내지 못함:[orange]{0}
text.save.import=저장파일 불러오기\n
text.save.newslot=저장 파일이름 :\n
text.save.rename=이름 변경\n
@@ -120,11 +119,11 @@ text.save.corrupted=[orange]세이브 파일이 손상되었거나 잘못된 파
text.empty=<비어있음>\n
text.on=켜기\n
text.off=끄기\n
text.save.autosave=자동저장: {0}
text.save.map=맵 : {0}
text.save.wave={0} 웨이브
text.save.difficulty=난이도: {0}
text.save.date=마지막 저장 날짜 : {0}
text.save.autosave=자동저장:{0}
text.save.map=맵:{0}
text.save.wave={0}단계
text.save.difficulty=난이도:{0}
text.save.date=마지막 저장 날짜:{0}
text.confirm=확인
text.delete=삭제\n
text.ok=승인
@@ -143,10 +142,10 @@ text.changelog.current=[orange][[현재 버전]
text.changelog.latest=[orange][[최신 버전]
text.loading=[accent]불러오는중...
text.saving=[accent]저장중...\n
text.wave=[orange]{0} 웨이브
text.wave.waiting=다음 웨이브 시작까지 {0}초
text.waiting=기다리는중...
text.enemies=남은 몹 : {0}
text.wave=[orange]{0}단계
text.wave.waiting=다음 단계 시작까지 {0}초
text.waiting=대기중...
text.enemies=남은 몹:{0}
text.enemies.single=몹이 {0}마리 남아있음
text.loadimage=사진 불러오기
text.saveimage=사진 저장
@@ -166,7 +165,7 @@ text.editor.description=설명:
text.editor.name=이름:
text.editor.teams=팀
text.editor.elevation=높이
text.editor.badsize=[orange]사진 크기가 잘못되었습니다![]유효한 맵 크기 : {0}
text.editor.badsize=[orange]사진 크기가 잘못되었습니다![]유효한 맵 크기:{0}
text.editor.errorimageload=[orange]{0}[] 파일을 불러오는데 오류가 발생했습니다.
text.editor.errorimagesave=[orange]{0}[] 파일 저장중 오류가 발생했습니다.
text.editor.generate=생성
@@ -203,9 +202,9 @@ text.menu=메뉴
text.play=플레이
text.load=불러오기
text.save=저장
text.fps={0} FPS
text.tps={0} TPS
text.ping=핑 : {0}ms
text.fps={0}FPS
text.tps={0}TPS
text.ping={0}ms
text.language.restart=언어를 변경하려면 게임을 다시 시작 해 주세요.
text.settings.language=언어
text.settings=설정
@@ -227,50 +226,50 @@ text.error.title=[crimson]오류가 발생했습니다.
text.error.crashtitle=오류가 발생했습니다.
text.blocks.blockinfo=블록 정보
text.blocks.powercapacity=최대 전력 용량
text.blocks.powershot=1발당 파워 소모량
text.blocks.targetsair=표적 공기
text.blocks.powershot=1발당 전력 소모량
text.blocks.targetsair=공중공격 가능
text.blocks.itemspeed=유닛 이동 속도
text.blocks.shootrange=공격 범위
text.blocks.shootrange=사거리
text.blocks.size=블록 크기
text.blocks.liquidcapacity=최대 액체 용량
text.blocks.maxitemssecond=최대 아이템 보관량
text.blocks.powerrange=전력 범위
text.blocks.poweruse=전력 사용
text.blocks.inputitemcapacity=입력 아이템 용량
text.blocks.outputitemcapacity=입력 아이템 용량
text.blocks.itemcapacity=품목 용량
text.blocks.outputitemcapacity=출력 아이템 용량
text.blocks.itemcapacity=저장 용량
text.blocks.maxpowergeneration=최대 발전량
text.blocks.powertransferspeed=전력 전송량
text.blocks.craftspeed=생산 속도
text.blocks.inputliquid=입력 액체
text.blocks.inputliquid=사용되는 액체
text.blocks.inputliquidaux=보조 액체
text.blocks.inputitem=입력 아이템
text.blocks.inputitems=입력 아이템들
text.blocks.inputitem=사용되는 아이템
text.blocks.inputitems=사용되는 아이템들
text.blocks.outputitem=출력 아이템
text.blocks.drilltier=드릴
text.blocks.drillspeed=기본 드릴 속도
text.blocks.liquidoutput=액체 출력
text.blocks.liquiduse=액체 사용
text.blocks.liquiduse=액체 사용량
text.blocks.coolant=냉각제
text.blocks.coolantuse=냉각수 사용
text.blocks.inputliquidfuel=연료 액
text.blocks.liquidfueluse=액체 연료 사용
text.blocks.explosive=이게 터지면 펑 터지면서 주변 블록에게 피해를 입힙니다!
text.blocks.health=체력
text.blocks.inaccuracy=빗맞을 확률
text.blocks.shots=총알
text.blocks.inaccuracy=오차각
text.blocks.shots=발포 횟수
text.blocks.reload=재장전
text.blocks.inputfuel=연료
text.blocks.fuelburntime=연료 연소 시간
text.blocks.inputcapacity=입력 용량
text.blocks.outputcapacity=출력 용량
text.unit.blocks=블록들
text.unit.powersecond=초당 전력 단위
text.unit.liquidsecond=액체 단위 / 초
text.unit.itemssecond=항목 / 초
text.unit.blocks=블록
text.unit.powersecond=전력/초
text.unit.liquidsecond=액체/초
text.unit.itemssecond=개/초
text.unit.pixelssecond=초당 픽셀
text.unit.liquidunits=액상 단위
text.unit.powerunits=전원 장치
text.unit.liquidunits=
text.unit.powerunits=전력
text.unit.degrees=도
text.unit.seconds=초
text.unit.none=
@@ -280,12 +279,11 @@ text.category.power=전력
text.category.liquids=액체
text.category.items=아이템
text.category.crafting=제작
text.category.shooting=발사
text.category.shooting=사격
setting.difficulty.easy=쉬움
setting.difficulty.normal=보통
setting.difficulty.hard=어려움
setting.difficulty.insane=[#1E90FF]K[#ADFF2F]O[#FFB6C1]R[#B0C4DE]E[#FF4500]A
setting.difficulty.purge=[#1E90FF]K[#ADFF2F]O[#FFB6C1]R[#B0C4DE]E[#FF4500]A
setting.difficulty.name=난이도:
setting.screenshake.name=화면 흔들기
setting.indicators.name=적 위치 표시 화살표
@@ -320,21 +318,21 @@ keybind.player_list.name=플레이어 목록
keybind.console.name=콘솔
keybind.rotate.name=회전
mode.text.help.title=도움말
mode.waves.name=웨이브
mode.waves.description=이것은 일반 모드입니다. 제한된 자원과 자동으로 다음 웨이브가 시작됩니다.
mode.waves.name=단계
mode.waves.description=이것은 일반 모드입니다. 제한된 자원과 자동으로 다음 단계가 시작됩니다.
mode.sandbox.name=샌드박스
mode.sandbox.description=무한한 자원과 다음 웨이브 시작을 위한 타이머가 없습니다.
mode.sandbox.description=무한한 자원과 다음단계 시작을 위한 타이머가 없습니다.
mode.freebuild.name=자유 건축
mode.freebuild.description=제한된 자원과 다음 웨이브 시작을 위한 타이머가 없습니다.
mode.freebuild.description=제한된 자원과 다음단계 시작을 위한 타이머가 없습니다.
content.item.name=아이템
content.liquid.name=액체
content.unit-type.name=종류
content.recipe.name=블록들
content.recipe.name=블록
item.stone.name=돌
item.stone.description=흔히 찾을 수 있는 자원. 바닥에서 돌을 캐거나 용암을 사용하여 얻을 수 있습니다.
item.tungsten.name=텅스텐
item.tungsten.description=일반적이지만 매우 유용한 건축 재료. 드릴 및 생산 건물, 제련소와 같은 내열성 블록에 사용됩니다.
item.lead.name=리드
item.lead.name=납
item.lead.description=기본적인 시작 자원. 전자 및 액체 수송 블록에서 광범위하게 사용됩니다.
item.coal.name=석탄
item.coal.description=일반적이고 쉽게 이용할 수 있는 연료.
@@ -345,91 +343,106 @@ item.titanium.description=물 운반이나 드릴, 비행기등에서 재료로
item.thorium.name=토륨
item.thorium.description=건물 탄약 또는 핵연료로 사용되는 방사성 금속.
item.silicon.name=실리콘
item.silcion.description=매우 유용한 반도체로, 태양 전지 패널과 복잡한 전자 제품에 응용할 수 있습니다.
item.silcion.description=매우 유용한 반도체로, 태양 전지판과 복잡한 전자 제품에 응용할 수 있습니다.
item.plastanium.name=플라스타늄
item.plastanium.description=고급 항공기 및 분열 탄약에 사용되는 가벼운 연성 재료.
item.phase-matter.name=메타
item.surge-alloy.name=설합금
item.surge-alloy.name=설탕
item.biomatter.name=바이오메터
item.biomatter.description=이것은 유기농 덤불입니다! 석유로 전환하거나 기본 연료로 사용됩니다.
item.sand.name=모래
item.sand.description=합금 및 플럭스 모두에서 제련시 광범위하게 사용되는 일반적인 재료.
item.sand.description=합금 및 플렉스 모두에서 제련시 광범위하게 사용되는 일반적인 재료.
item.blast-compound.name=폭발 화합물
item.blast-compound.description=폭탄 및 폭발물에 사용되는 휘발성 화합물.연료로 불을 낼 수 있지만, 별로 추천하지는 않습니다.
item.blast-compound.description=폭탄 및 폭발물에 사용되는 휘발성 화합물. 이 연료로 불을 낼 수 있지만, 별로 추천하지는 않습니다.
item.pyratite.name=피러레이트
item.pyratite.description=화염 무기에 사용되는 엄청난 가연성 물질.
liquid.water.name=물
liquid.lava.name=용암
liquid.oil.name=석유
liquid.cryofluid.name=크라이오플루드
text.item.explosiveness=[LIGHT_GRAY]폭발력 : {0}
text.item.flammability=[LIGHT_GRAY]인화성 : {0}
text.item.radioactivity=[LIGHT_GRAY]방사능 : {0}
text.item.fluxiness=[LIGHT_GRAY]플렉스 파워 : {0}
text.item.hardness=[LIGHT_GRAY]강도 : {0}
text.liquid.heatcapacity=[LIGHT_GRAY]발열 용량 : {0}
text.liquid.viscosity=[LIGHT_GRAY]점도 : {0}
text.liquid.temperature=[LIGHT_GRAY]온도 : {0}
liquid.cryofluid.name=냉각수
text.item.explosiveness=[LIGHT_GRAY]폭발력:{0}
text.item.flammability=[LIGHT_GRAY]인화성:{0}
text.item.radioactivity=[LIGHT_GRAY]방사능:{0}
text.item.fluxiness=[LIGHT_GRAY]플렉스 파워:{0}
text.item.hardness=[LIGHT_GRAY]강도:{0}
text.liquid.heatcapacity=[LIGHT_GRAY]발열량:{0}
text.liquid.viscosity=[LIGHT_GRAY]점도:{0}
text.liquid.temperature=[LIGHT_GRAY]온도:{0}
block.deepwater.name=깊은물
block.water.name=물
block.lava.name=용암
block.oil.name=석유
block.blackstone.name=검은돌
block.stone.name=돌
block.dirt.name=흙
block.sand.name=모래
block.ice.name=얼음
block.snow.name=눈
block.grass.name=잔디
block.shrub.name=관목
block.rock.name=바위
block.blackrock.name=검은바위
block.icerock.name=얼음바위
block.tungsten-wall.name=텅스텐 벽
block.tungsten-wall-large.name=큰 텅스텐 벽
block.carbide-wall.name=합금벽
block.carbide-wall-large.name=대형 합금벽
block.thorium-wall.name=토룸 벽
block.thorium-wall-large.name=대형 토륨 벽
block.thorium-wall.name=토룸벽
block.thorium-wall-large.name=대형 토륨벽
block.door.name=문
block.door-large.name=큰 문
block.duo.name=샷건
block.door-large.name=대형문
block.duo.name=듀오
block.scorch.name=스코치
block.hail.name=헤일
block.lancer.name=랜서
block.conveyor.name=컨베이어
block.titanium-conveyor.name=티타늄 컨베이어
block.junction.name=교차기
block.splitter.name=스플리터
block.splitter.name=분배기
block.splitter.description=아이템을 넣는 즉시 컨베이어를 반대 방향으로 바꾼 후 내보냅니다.
block.router.name=분배기
block.router.description=아이템을 넣으면 다른 방향으로 아이템을 번갈아서 내보냅니다.
block.distributor.name=디스토이어
block.distributor.description=아이템을 8방향으로 나눌 수있는 스플리터.
block.distributor.name=대형 분배기
block.distributor.description=아이템을 8방향으로 나눌 수 있는 대형 분배기.
block.sorter.name=필터
block.sorter.description=아이템을 받아서 설정된 아이템일 경우 바로 앞으로 통과하며, 그렇지 않을 경우 옆으로 통과합니다.
block.sorter.description=아이템을 넣어서 필터에 설정된 아이템일 경우 바로 앞으로 통과하며, 그렇지 않을 경우 옆으로 통과합니다.
block.overflow-gate.name=오버플로 게이트
block.overflow-gate.description=정면 경로가 차단된 경우 왼쪽과 오른쪽으로만 출력하는 복합 스플리터와 분배기 입니다.
block.overflow-gate.description=정면 경로가 차단된 경우 왼쪽과 오른쪽으로만 출력하는 복합 분배기입니다.
block.bridgeconveyor.name=터널
block.bridgeconveyor.description=최대 2블록을 건너 뛰고 자원을 운반하게 해 주는 블럭.
block.smelter.name=제련소
block.arc-smelter.name=아크 제련소
block.arc-smelter.name=대형 제련소
block.silicon-smelter.name=실리콘 제련소
block.phase-weaver.name=펄스 위버
block.phase-weaver.name=메타 합성기
block.pulverizer.name=분쇄기
block.cryofluidmixer.name=크라이오플루드 혼합기
block.melter.name=멜터
block.cryofluidmixer.name=냉각수 혼합기
block.melter.name=융해기
block.incinerator.name=소각로
block.biomattercompressor.name=바이오매터 압축기
block.biomattercompressor.name=바이오메터 압축기
block.separator.name=셉터
block.centrifuge.name=원심 분리기
block.power-node.name=전력 노드
block.power-node-large.name=대형 전력 노드
block.power-node.name=전력 송신기
block.power-node-large.name=대형 전력 송신기
block.battery.name=배터리
block.battery-large.name=대형 배터리
block.combustion-generator.name=연소 발전기
block.combustion-generator.name=석탄 발전기
block.turbine-generator.name=터빈 발전기
block.tungsten-drill.name=텅스텐 드릴
block.carbide-drill.name=합금 드릴
block.laser-drill.name=레이저 드릴
block.water-extractor.name=물 추출기
block.cultivator.name=경운기
block.dart-ship-factory.name=다트 선박 공장
block.delta-mech-factory.name=델타 메크 공장
block.cultivator.name=온실
block.dart-ship-factory.name=비행기 공장
block.delta-mech-factory.name=샷건 공장
block.repairpoint.name=수리 포인트
block.resupplypoint.name=재공급 포인트
block.conduit.name=도관
block.pulseconduit.name=펄스 도관
block.conduit.name=파이프
block.pulseconduit.name=퓨즈 파이프
block.liquidrouter.name=액체 분배기
block.liquidtank.name=물탱크
block.liquidjunction.name=액체 교차기
block.bridgeconduit.name=브릿지 도관
block.mechanical-pump.name=기계 펌프
block.bridgeconduit.name=브릿지 파이프
block.mechanical-pump.name=기계식 펌프
block.itemsource.name=아이템 소스
block.itemvoid.name=아이템 무효
block.liquidsource.name=액체 소스
@@ -437,82 +450,92 @@ block.powervoid.name=무효 전력
block.powerinfinite.name=무한한 힘
block.unloader.name=언로더
block.sortedunloader.name=정렬된 언로더
block.vault.name=Vault
block.wave.name=웨이브
block.swarmer.name=스워머
block.vault.name=창고
block.wave.name=파도
block.swarmer.name=스웜
block.salvo.name=살보
block.ripple.name=라이플
block.phase-conveyor.name=펄스 컨베이어
block.ripple.name=립플
block.phase-conveyor.name=메타 컨베이어
block.bridge-conveyor.name=터널
block.plastanium-compressor.name=플라스터늄 압축기
block.pyratite-mixer.name=피터레이트 혼합기
block.blast-mixer.name=블래스트 혼합기
block.blast-mixer.name=폭발 화합물 혼합기
block.solidifer.name=고체
block.solar-panel.name=태양 전지 패널
block.solar-panel.name=태양 전지판
block.solar-panel-large.name=대형 태양 전지판
block.oil-extractor.name=오일 추출기
block.javelin-ship-factory.name=창 던지기 선박 공장
block.repair-point.name=수리 점
block.resupply-point.name=재 공급 포인트
block.pulse-conduit.name=펄스 도관
block.phase-conduit.name=위상 도관
block.liquid-router.name=액체 라우터
block.liquid-tank.name=액체 탱크
block.oil-extractor.name=석유 추출기
block.javelin-ship-factory.name=전투기 공장
block.repair-point.name=정비소
block.resupply-point.name=탄약 보급소
block.pulse-conduit.name=퓨즈 파이프
block.phase-conduit.name=메타 파이프
block.liquid-router.name=액체 분배기
block.liquid-tank.name=물탱크
block.liquid-junction.name=액체 교차기
block.bridge-conduit.name=브릿지 도관
block.rotary-pump.name=로타리 펌프
block.nuclear-reactor.name=핵발전소
block.bridge-conduit.name=다리 파이프
block.rotary-pump.name=동력 펌프
block.nuclear-reactor.name=원자로
text.save.old=이 저장파일은 이전 버전의 게임용이며, 지금은 사용할 수 없습니다. \n\n[LIGHT_GRAY]4.0 정식때 이전 게임버전에서 만든 저장파일과 호환됩니다.
text.customgame=Custom Game
text.campaign=Campaign
text.sectors=Sectors
text.sector=Selected Sector: [LIGHT_GRAY]{0}
text.sector.time=Time: [LIGHT_GRAY]{0}
text.sector.deploy=Deploy
text.sector.resume=Resume
text.sector.locked=[scarlet][[Incomplete]
text.sector.unexplored=[accent][[Unexplored]
text.close=Close
text.save.playtime=Playtime: {0}
text.editor.brush=Brush
text.customgame=커스텀 게임
text.sectors=구역
text.sector=선택된 구역:[LIGHT_GRAY]{0}
text.sector.time=시간:[LIGHT_GRAY]{0}
text.sector.deploy=배치
text.sector.resume=계속하기
text.sector.locked=[scarlet][[완료안됨]
text.sector.unexplored=[accent][[탐색안됨]
text.close=닫기
text.save.playtime=플레이시간:{0}
text.editor.brush=브러쉬
text.credits.text=Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!)
text.sector.gameover=This sector has been lost. Re-deploy?
text.sector.retry=Retry
text.wave.lasted=You lasted until wave [accent]{0}[].
setting.fpscap.name=Max FPS
setting.fpscap.none=None
text.sector.gameover=이 구역을 잃었습니다. 다시 배치하시겠습니까?
text.sector.retry=다시할꺼임
text.wave.lasted=[accent]{0}[] 까지 버티셨습니다.
setting.fpscap.name=최대 FPS
setting.fpscap.none=없음
setting.fpscap.text={0} FPS
block.command-center.name=Command Center
text.mission=Mission:[LIGHT_GRAY] {0}
text.mission.wave=Survive [accent]{0}[] waves.
text.mission.battle=Destroy the enemy base.
text.none=<none>
text.sector.corrupted=[orange]A save file for this sector was found, but loading failed.\nA new one has been created.
text.mission.complete=Mission complete!
text.mission.complete.body=Sector {0},{1} has been conquered.
block.command-center.name=명령 본부
text.mission=목표:[LIGHT_GRAY] {0}
text.mission.wave=[accent]{0}[]단계가 될때까지 생존하세요.
text.mission.battle=적 본부를 파괴하세요.
text.none=<없음>
text.sector.corrupted=[orange]저장 파일에서 구역을 발견했으나 불러오지 못했습니다.\n새로 생성되었습니다.
text.mission.complete=미션 성공!
text.mission.complete.body=구역 {0},{1} 탐색 성공.
text.mission.resource=Obtain {0} x{1}
text.unit.health=[LIGHT_GRAY]Health: {0}
text.unit.speed=[LIGHT_GRAY]Speed: {0}
block.drone-pad.name=Drone Pad
block.fabricator-pad.name=Fabricator Pad
block.interceptor-pad.name=Interceptor Pad
block.monsoon-pad.name=Monsoon Pad
block.mass-driver.name=Mass Driver
block.blast-drill.name=Blast Drill
unit.drone.name=Drone
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
unit.fabricator.name=Fabricator
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
unit.scout.name=Scout
unit.scout.description=A basic ground unit. Uses lead as ammo.
unit.titan.name=Titan
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
unit.monsoon.name=Monsoon
unit.monsoon.description=A heavy carpet bomber. Uses blast compound or pyratite as ammo.
unit.interceptor.name=Interceptor
unit.interceptor.description=A fast, hit-and-run strike unit. Uses lead as ammo.
text.unit.health=[LIGHT_GRAY]체력:{0}
text.unit.speed=[LIGHT_GRAY]속도:{0}
block.drone-pad.name=드론 공장
block.fabricator-pad.name=페버 공장
block.interceptor-pad.name=인터셉터 공장
block.monsoon-pad.name=문순 공장
block.mass-driver.name=물질 이동기
block.blast-drill.name=고속 발열 드릴
unit.drone.name=드론
unit.drone.description=초기형 드론 유닛입니다. 기본적으로 코어에서 1대를 스폰합니다. 자동으로 아이템을 수집/채광하며 블럭들을 수리합니다.
unit.fabricator.name=페버
unit.fabricator.description=고급 드론 유닛입니다. 자동으로 아이템과 수집/채광/블록들을 수리하며, 일반 드론보다 더 빠르게 작업할 수 있습니다.
unit.titan.name=타이탄
unit.titan.description=고급 지상 유닛입니다. 합금을 탄약으로 사용하며 지상과 공중 둘다 공격할 수 있습니다.
unit.monsoon.name=문순
unit.monsoon.description=자폭 유닛입니다. 폭발 화합물 또는 피러레이트를 탄약으로 사용합니다.
unit.interceptor.name=인터셉터
unit.interceptor.description=빠르고, 공격하고 튀는 방식을 사용합니다. 납을 탄약으로 사용합니다.
unit.dagger.name=디거
unit.dagger.description=기본 지상 유닛입니다. 스웜과 같이 쓰면 유용합니다.
mode.sandbox.warning=Note that blocks cannot be used in sandbox mode until they are unlocked in other modes.\n\n[LIGHT_GRAY]If you have not unlocked any blocks, none will appear.
block.thermal-pump.name=Thermal Pump
block.dagger-pad.name=Dagger Pad
block.titan-pad.name=Titan Pad
block.thermal-generator.name=Thermal Generator
block.thermal-pump.name=지열 펌프
block.dagger-pad.name=디거 공장
block.titan-pad.name=타이탄 공장
block.thermal-generator.name=지열 발전기
text.coreattack=< Core is under attack! >
text.continue=Continue
text.nextmission=Next Mission
text.server.kicked.serverClose=Server closed.
text.server.kicked.sectorComplete=Sector completed.
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
text.map.invalid=Error loading map: corrupted or invalid map file.
setting.difficulty.purge=purge
section.general.name=General
section.view.name=View
section.multiplayer.name=Multiplayer
+46 -23
View File
@@ -16,7 +16,6 @@ text.players.single={0} gracz online
text.server.mismatch=Błąd pakietu: możliwa niezgodność wersji klienta/serwera.\nUpewnij się, że Ty i host macie najnowszą wersję Mindustry!
text.server.closing=[accent] Zamykanie serwera ...
text.server.kicked.kick=Zostałeś wyrzucony z serwera!
text.server.kicked.invalidPassword=Nieprawidłowe hasło!
text.server.kicked.clientOutdated=Nieaktualna gra! Zaktualizują ją!
text.server.kicked.serverOutdated=Nieaktualna gra! Zaktualizują ją!
text.hostserver=Stwórz Serwer
@@ -184,10 +183,10 @@ block.pulseconduit.name=Rura impulsowa
block.liquidrouter.name=Rozdzielacz płynów
block.conveyor.name=Przenośnik
block.router.name=Rozdzielacz
block.junction.name=węzeł
block.junction.name=Węzeł
block.liquidjunction.name=Węzeł dla płynów
block.sorter.name=Sortownik
block.smelter.name=huta
block.smelter.name=Huta
text.credits=Zasłużeni
text.link.discord.description=Oficjalny serwer Discord Mindustry
text.link.github.description=Kod Gry
@@ -201,9 +200,9 @@ text.editor.web=Wersja przeglądarkowa nie wspomaga edytora map!\nPobierz grę a
text.web.unsupported=Wersja przeglądarkowa nie wspomaga tej fukcji!\nPobierz grę aby użyć tej funkcji.
text.map.delete=Jesteś pewny, że chcesz usunąć "[orange]{0}[]"?
text.construction.title=Poradnik tworzenia bloków
text.construction=Wybrałeś [accent]tryb tworzenia bloków[].\n\nAby zacząć stawiać bloki, po prostu kliknij na dostępne pole obot twojego statku.\nKiedy wybrałeś kilka bloków, kliknij ptaszek i twój statek zacznie budować bloki.\n\n- [accent]Anuluj bloki[] z twojej kolekcji przez klikanie ich(?).\n- [accent]Przesuwaj bloki w kolekcji[] przez przeciąganie ich w opowiednim kierunku.\n- [accent]Stawiaj bloki w lini[] przez kliknięcie w wybranym miejscu i przesuięcie palca.\n- [accent]Anuluj konstrukcję lub kolekcję [] przez kliknięcie X w lewym dolnym rogu.
text.construction=Wybrałeś [accent]tryb tworzenia bloków[].\n\nAby zacząć stawiać bloki, po prostu kliknij na dostępne pole obok twojego statku.\nKiedy wybrałeś kilka bloków, kliknij ptaszek i twój statek zacznie budować bloki.\n\n- [accent]Anuluj bloki[] z twojej kolekcji przez klikanie ich(?).\n- [accent]Przesuwaj bloki w kolekcji[] przez przeciąganie ich w opowiednim kierunku.\n- [accent]Stawiaj bloki w lini[] przez kliknięcie w wybranym miejscu i przesuięcie palca.\n- [accent]Anuluj konstrukcję lub kolekcję [] przez kliknięcie X w lewym dolnym rogu.
text.deconstruction.title=Poradnik niszczenia bloków
text.deconstruction=Wybrałeś [accent]tryb niszczenia bloków[].\n\nAby zacząć niszczenie, po prosty kliknij na blok obok twojego statku.\nKiedy wybrałeś kilka bloków, kliknij ptaszek i twój statek zacznie niszczyć bloki.\n\n- [accent]Anuluj bloki[] z twojej kolekcji przez klikanie ich(?)\n- [accent]Usuwaj bloki na obszrze[] przez zaznacznie ich.\n- [accent]Anuluj niszcznie [] przez kliknięcie X w lewym dolnym rogu.
text.deconstruction=Wybrałeś [accent]tryb niszczenia bloków[].\n\nAby zacząć niszczenie, po prostu kliknij na blok obok twojego statku.\nKiedy wybrałeś kilka bloków, kliknij ptaszek i twój statek zacznie niszczyć bloki.\n\n- [accent]Anuluj bloki[] z twojej kolekcji przez klikanie ich(?)\n- [accent]Usuwaj bloki na obszrze[] przez zaznacznie ich.\n- [accent]Anuluj niszcznie [] przez kliknięcie X w lewym dolnym rogu.
text.showagain=Nie pokazuj tego więcej
text.unlocks=Lista przedmiotów
text.addplayers=Dodaj/Usuń graczy
@@ -216,8 +215,8 @@ text.server.kicked.banned=Zostałeś zbanowany na tym serwerze.
text.server.kicked.recentKick=Zostałeś niedawno wyrzucony.\nPoczekaj chwilę przed ponownym połączniem.
text.server.kicked.nameInUse=Ta nazwa jest już zajęta na tym serwerze.
text.server.kicked.nameEmpty=Nazwa musi zawierać przynajmniej 1 literę lub cyfrę.
text.server.kicked.idInUse=Jesteś już na serwerze! Używanie tego samego konta na 2 urzędzeniach jest zabronione.
text.server.kicked.customClient=Ten serwer nie wspomaga wersji dewelopoerskich. Pobierz orginalną wersję.
text.server.kicked.idInUse=Jesteś już na serwerze! Używanie tego samego konta na 2 urządzeniach jest zabronione.
text.server.kicked.customClient=Ten serwer nie wspomaga wersji deweloperskich. Pobierz oryginalną wersję.
text.host.info=Przycisk [accent]host[] hostuje serwer na porcie [scarlet]6567[] i [scarlet]6568.[]\nKtokolwiek z tym samym [LIGHT_GRAY]wifi lub hotspotem[] powinien zobaczyć twój server.\n\nJeśli chcesz, aby każdy z twoim IP mógł dołączyć, [accent]przekierowywanie portów[] jest potrzebne.\n\n[LIGHT_GRAY]Notka:Jeśli ktokolwiek ma problem z dołączeniem do gry, upewnij się, że udostępniłeś Mindustry dostęp do sieci.
text.join.info=Tutaj, możesz wpisać [accent]IP serwera[], aby dołączyć lub wyszukaj [accent]serwery wifi[], do których chcesz dołączyć .\nGra wieloosobowa na LAN i WAN jest wspomagana.\n\n[LIGHT_GRAY]Notka: Nie ma automatycznej listy wszystki;Jeśli chcesz dołączyć przez IP, musisz zapytać się hosta o IP.
text.trace=Zlokalizuj gracza
@@ -258,7 +257,7 @@ text.saving=[accent]Zapisywanie...
text.unknown=Nieznane
text.custom=Własne
text.builtin=Wbudowane
text.map.delete.confirm=Jesteś pewny, że chcesz usunąć tę mapę? Nie będzie można jej przywrócić
text.map.delete.confirm=Jesteś pewny, że chcesz usunąć tę mapę? Nie będzie można jej przywrócić.
text.map.random=[accent]Losowa mapa
text.map.nospawn=Ta mapa nie zawiera żadnego rdzenia! Musisz dodać [ROYAL]niebieski[] rdzeń do tej mapy.
text.editor.slope=\\
@@ -288,8 +287,8 @@ text.editor.exportfile.description=Eksportuj plik mapy
text.editor.exportimage=Eksport Obraz Terenu
text.editor.exportimage.description=Eksport plik obrazu terenu
text.editor.overwrite.confirm=[scarlet]Uwaga![] Mapa pod tą nazwą już istnieje. Jesteś pewny, że chcesz ją nadpisać?
text.fps=FPSy: {0}
text.tps=TPSy: {0}
text.fps=FPS: {0}
text.tps=TPS: {0}
text.ping=Ping: {0}ms
text.settings.rebind=Zmień przyciski
text.yes=Jasne!
@@ -327,11 +326,11 @@ text.unit.powerunits=jednostek paliwa
text.unit.degrees=stopnie
text.unit.seconds=sekundy
text.unit.none=
text.unit.items=Przemioty
text.unit.items=Przedmioty
text.category.general=Główne
text.category.power=Prąd
text.category.liquids=Płyny
text.category.items=Przemioty
text.category.items=Przedmioty
text.category.crafting=Przetwórstwo
text.category.shooting=Strzelanie
setting.fullscreen.name=Pełny ekran
@@ -345,7 +344,7 @@ mode.text.help.title=Opis trybów
mode.waves.description=Normalny tryb.Normalne surowce i fale.
mode.sandbox.description=Nieskończone surowce i fale bez odlicznia. Dla przedszkolaków!
mode.freebuild.description=Normalne surowce i fale bez odlicznia.
content.item.name=Przemioty
content.item.name=Przedmioty
content.liquid.name=Płyny
content.unit-type.name=Jednostki
content.recipe.name=Bloki
@@ -393,15 +392,15 @@ block.hail.name=Święte działko
block.lancer.name=Lancer
block.titanium-conveyor.name=Tytanowy Transporter
block.splitter.name=Rozdzielacz
block.splitter.description=Rodziela przemioty natychmiastowo w przeciwnych kierunkach.
block.splitter.description=Rozdziela przedmioty natychmiastowo w przeciwnych kierunkach.
block.router.description=żegnaj przyjacielu!
block.distributor.name=Dystrybutor
block.distributor.description=Rozdzielacz, który rozdziela przedmioty w 8 kierunkach.
block.sorter.description=Sortuje przedmioty. Jeśli przedmiot pasuje to przechodzi dalej, jeśli nie - to przechodzi na boki.
block.overflow-gate.name=Brama Przeciwprepełnieniowa
block.overflow-gate.description=Rozdzielacz, który przerzucaprzedmioty, kiedy głowna groga jest przepełniona
block.overflow-gate.name=Brama Przeciwprzepełnieniowa
block.overflow-gate.description=Rozdzielacz, który przerzuca przedmioty, kiedy główna droga jest przepełniona
block.bridgeconveyor.name=Most Transportowy
block.bridgeconveyor.description=Transorter, który może przejść nad blokami na odegłość 2 kratek
block.bridgeconveyor.description=Transporter, który może przejść nad blokami na odegłość 2 kratek
block.arc-smelter.name=Duża Huta
block.silicon-smelter.name=Huta Krzemu
block.phase-weaver.name=Fazowa Fabryka
@@ -436,10 +435,10 @@ block.powerinfinite.name=DEBUG Nieskończony Prąd
block.unloader.name=Wyciągacz
block.sortedunloader.name=Sortujący Wyciągacz
block.vault.name=Magazyn
block.wave.name=Diało Płynowe
block.wave.name=Działo Płynowe
block.swarmer.name=Działo Rojowe
block.salvo.name=Działo Salwowe
block.ripple.name=Diało falowe
block.ripple.name=Działo falowe
block.phase-conveyor.name=Fazowy Transporter
block.bridge-conveyor.name=Most Transportowy
block.plastanium-compressor.name=Kompresor Plastanu
@@ -460,9 +459,8 @@ block.liquid-junction.name=Łącznik Płynów
block.bridge-conduit.name=Most Płynów
block.rotary-pump.name=Wirowa Pompa
block.nuclear-reactor.name=Reaktor Nuklearny
text.save.old=Ten zapis jest ze starej wersji i gra nie może go teraz wczytać\n\n[LIGHT_GRAY]Wsparcie starych zapisów będzie w pełnej wersji 4.0.
text.save.old=Ten zapis jest ze starej wersji i gra nie może go teraz wczytać.\n\n[LIGHT_GRAY]Wsparcie starych zapisów będzie w pełnej wersji 4.0.
text.customgame=Własna Gra
text.campaign=Kampania
text.sectors=Sektory
text.sector=Wybrany Sektor: [LIGHT_GRAY]{0}
text.sector.time=Czas: [LIGHT_GRAY]{0}
@@ -503,8 +501,6 @@ unit.drone.name=Drone
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
unit.fabricator.name=Fabricator
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
unit.scout.name=Scout
unit.scout.description=A basic ground unit. Uses lead as ammo.
unit.titan.name=Titan
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
unit.monsoon.name=Monsoon
@@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump
block.dagger-pad.name=Dagger Pad
block.titan-pad.name=Titan Pad
block.thermal-generator.name=Thermal Generator
text.coreattack=< Core is under attack! >
text.continue=Continue
text.nextmission=Next Mission
text.server.kicked.serverClose=Server closed.
text.server.kicked.sectorComplete=Sector completed.
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
text.map.invalid=Error loading map: corrupted or invalid map file.
section.general.name=General
section.view.name=View
section.multiplayer.name=Multiplayer
block.deepwater.name=deepwater
block.water.name=water
block.lava.name=lava
block.oil.name=oil
block.blackstone.name=blackstone
block.stone.name=stone
block.dirt.name=dirt
block.sand.name=sand
block.ice.name=ice
block.snow.name=snow
block.grass.name=grass
block.shrub.name=shrub
block.rock.name=rock
block.blackrock.name=blackrock
block.icerock.name=icerock
unit.dagger.name=Dagger
unit.dagger.description=A basic ground unit. Useful in swarms.
+27 -4
View File
@@ -162,7 +162,6 @@ text.server.mismatch=Packet error: Versão do Cliente/Servidor Incompativel.\nTe
text.server.closing=[accent]Fechando servidor...
text.server.kicked.kick=Voce foi expulso do servidor!
text.server.kicked.fastShoot=Voce esta atirando rapido demais.
text.server.kicked.invalidPassword=Senha Incorreta!
text.server.kicked.clientOutdated=Cliente desatualizado! Atualize seu jogo!
text.server.kicked.serverOutdated=Servidor desatualiado! Peca ao dono para atualizar!
text.server.kicked.banned=Voce foi banido do servidor.
@@ -463,7 +462,6 @@ block.rotary-pump.name=Bomba Rotatoria
block.nuclear-reactor.name=Reator Nuclear
text.save.old=Este save é para uma versão antiga do jogo, E não pode ser usado.\n\n[LIGHT_GRAY]Salvar Versões antigas vai ser Implementado Na versão 4.0 completa
text.customgame=Jogo Customizado
text.campaign=Campanha
text.sectors=Setores
text.sector=Setor Selecionado: [LIGHT_GRAY]{0}
text.sector.time=Tempo: [LIGHT_GRAY]{0}
@@ -503,8 +501,6 @@ unit.drone.name=Drone
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
unit.fabricator.name=Fabricator
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
unit.scout.name=Scout
unit.scout.description=A basic ground unit. Uses lead as ammo.
unit.titan.name=Titan
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
unit.monsoon.name=Monsoon
@@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump
block.dagger-pad.name=Dagger Pad
block.titan-pad.name=Titan Pad
block.thermal-generator.name=Thermal Generator
text.coreattack=< Core is under attack! >
text.continue=Continue
text.nextmission=Next Mission
text.server.kicked.serverClose=Server closed.
text.server.kicked.sectorComplete=Sector completed.
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
text.map.invalid=Error loading map: corrupted or invalid map file.
section.general.name=General
section.view.name=View
section.multiplayer.name=Multiplayer
block.deepwater.name=deepwater
block.water.name=water
block.lava.name=lava
block.oil.name=oil
block.blackstone.name=blackstone
block.stone.name=stone
block.dirt.name=dirt
block.sand.name=sand
block.ice.name=ice
block.snow.name=snow
block.grass.name=grass
block.shrub.name=shrub
block.rock.name=rock
block.blackrock.name=blackrock
block.icerock.name=icerock
unit.dagger.name=Dagger
unit.dagger.description=A basic ground unit. Useful in swarms.
+67 -38
View File
@@ -1,4 +1,4 @@
text.credits.text=Создатель [ROYAL] Anuken. - [SKY]anukendev@gmail.com[]\n\nЕсть недороботки в переводе?\nПишите в офф. discord-сервер mindustry в канал #русский.
text.credits.text=Создатель [ROYAL] Anuken. - [SKY]anukendev@gmail.com[][]\n\nЕсть недороботки в переводе?\nПишите в офф. discord-сервер mindustry в канал #русский.
text.credits=Авторы
text.discord=Присоединяйтесь к нашему Discord!
text.link.discord.description=официальный discord-сервер Mindustry
@@ -12,7 +12,7 @@ text.linkfail=Не удалось открыть ссылку!\nURL-адрес
text.editor.web=Веб-версия не поддерживает редактор!\nЗагрузите игру, чтобы использовать ее.
text.web.unsupported=Веб-версия не поддерживает эту функцию! Загрузите игру, чтобы использовать её.
text.gameover=Ядро было уничтожено.
text.sector.gameover=Этот сектор потерян. Разблокировать повторно?
text.sector.gameover=Этот сектор потерян. Высадится повторно?
text.sector.retry=Повторить попытку
text.highscore=[YELLOW]Новый рекорд!
text.wave.lasted=Вы продержались до волны [accent]{0}[].
@@ -21,35 +21,37 @@ text.level.delete.title=Подтвердите удаление
text.map.delete=Вы действительно хотите удалить карту "[orange]{0}[]"?
text.level.select=Выбор уровня
text.level.mode=Режим игры:
text.construction.title=Руководство по строительству блоков
text.construction=Вы только что выбрали режим строительства [accent]блоков[].\n\nЧтобы начать размещение, просто коснитесь действительного местоположения рядом с вашим кораблем.\nПосле того, как вы выбрали несколько блоков, установите флажок, чтобы подтвердить, и ваш корабль начнет их строить.\n\n- [accent]Удалите блоки [] из вашего выбора, нажав на них.n- [accent]Shift выделение [], удерживая и перетаскивая любой блок в выборе.\n- [accent]Поместите блоки в линию [], нажимая и удерживая пустое место, а затем перетаскивая его в направлении.\n- [accent]Отмените строительство или выбор [], нажав X в левом нижнем углу.
text.construction.title=Руководство по размещения блоков
text.construction=Вы только что выбрали режим размещения[accent]блоков[].\n\nЧтобы начать размещение, просто коснитесь подходящего местоположения рядом с вашим кораблем.\nПосле того, как вы поставили несколько блоков, нажмите на галочку, чтобы подтвердить, и ваш корабль начнет их строить.\n\n- [accent]Удалите блоки [] из вашего выбора, нажав на них.n- [accent]Нажмите Shift [] и, удерживая, перетащите любой блок в выборе.\n- [accent]Поместите блоки в линию [], нажимая и удерживая пустое место, а затем перетаскивая его в направлении.\n- [accent]Отмените размещение или выбор [], нажав X в левом нижнем углу.
text.deconstruction.title=Руководство по разрушении блоков
text.deconstruction=Вы только что выбрали режим удаления[accent] блока.[].\n\nЧтобы начать ломать, просто нажмите на блок рядом с вашим кораблем.\nПосле того как вы выбрали некоторые блоки, установите флажок, чтобы подтвердить, и ваш корабль начнет их деконструкцию.\n\n- [accent]Удалите блоки [] из вашего выбора, нажав на них.\n- [accent]Удалите блоки в области [], нажав и удерживая пустое место, а затем перетащив его в направлении.\n- [accent]Отмените деконструкцию или выбор [], нажав X в левом нижнем углу.
text.deconstruction=Вы только что выбрали режим сноса[accent] блоков.[].\n\nЧтобы начать удалять, просто нажмите на блок рядом с вашим кораблем.\nПосле того как вы выбрали некоторые блоки, нажмите на галочку, чтобы подтвердить, и ваш корабль начнёт их снос.\n\n- [accent]Удалите блоки [] из вашего выбора, нажав на них.\n- [accent]Удалите блоки в области [], нажав и удерживая пустое место, а затем перетащив в нужном направлении.\n- [accent]Отменить снос или выбор [] можно нажав X в левом нижнем углу.
text.showagain=Не показывать снова до следующей сессии
text.coreattack=< Ядро находится под атакой! >
text.unlocks=Разблокированные
text.savegame=Сохранить игру
text.loadgame=Загрузить игру
text.joingame=Присоединиться
text.addplayers=Доб/удалить игроков
text.customgame=Пользовательская игра
text.campaign=Кампания
text.sectors=Секторы
text.sector=Выбранный сектор: [LIGHT_GRAY]{0}
text.sector.time=Время: [LIGHT_GRAY]{0}
text.sector.deploy=Высадиться
text.sector.resume=Продолжить
text.sector.locked=[scarlet][[Не завершено]
text.sector.unexplored=[accent][[Не изучено]
text.sector.locked=[scarlet][[Не завершён]
text.sector.unexplored=[accent][[Неисследованный]
text.mission=Миссия:[LIGHT_GRAY] {0}
text.mission.complete=Миссия выполнена!
text.mission.complete.body=Сектор {0},{1} был завоёван.
text.mission.wave=Пережено следующее количество волн:[accent]{0}[].
text.mission.wave=Пережить следующее количество волн: [accent]{0}[].
text.mission.battle=Уничтожьте базу противника.
text.mission.resource=Приобретено {0} x{1}
text.none=<ничего>
text.none=<нет>
text.close=Закрыть
text.quit=Выход
text.maps=Карты
text.continue=Продолжить
text.nextmission=След. миссия
text.maps.none=[LIGHT_GRAY]Карты не найдены!
text.about.button=Об игре
text.name=Ник:
@@ -61,7 +63,9 @@ text.server.mismatch=Ошибка пакета: возможное несоот
text.server.closing=[accent]Закрытие сервера...
text.server.kicked.kick=Вас выгнали с сервера!
text.server.kicked.fastShoot=Вы стреляете слишком быстро.
text.server.kicked.invalidPassword=Неверный пароль.
text.server.kicked.serverClose=Сервер закрыт.
text.server.kicked.sectorComplete=Сектор завершён.
text.server.kicked.sectorComplete.text=Ваша миссия завершена.\nТеперь сервер продолжит работу в следующем секторе.
text.server.kicked.clientOutdated=Устаревший клиент! Обновите игру!
text.server.kicked.serverOutdated=Устаревший сервер! Попросите хост обновить!
text.server.kicked.banned=Вы заблокированы на этом сервере.
@@ -71,7 +75,7 @@ text.server.kicked.nameEmpty=Ваше имя должно содержать х
text.server.kicked.idInUse=Вы уже на этом сервере! Соединение с двумя учетными записями не разрешено.
text.server.kicked.customClient=Этот сервер не поддерживает пользовательские сборки. Загрузите официальную версию.
text.host.info=Кнопка [accent] Сервер [] размещает сервер на порт [accent]6567[].[]\nЛюбой пользователь в той же [LIGHT_GRAY]сети или локальной сети [] должен иметь возможность видеть ваш сервер в своём списке серверов.\n\nЕсли вы хотите, чтобы люди могли подключаться из любого места по IP, то требуется переадресация(проброс) портов.[].\n\n[LIGHT_GRAY] Примечание. Если у кого-то возникают проблемы с подключением к вашей локальной сети, убедитесь, что вы разрешили Mindustry доступ к вашей локальной сети в настройках брандмауэра.
text.join.info=Здесь вы можете ввести IP-адрес [accent]сервера[] для подключения или открыть [accent]локальную сеть [] для подключения к серверам.\nПоддерживается многопользовательский режим LAN и WAN.\n\n[LIGHT_GRAY] Примечание: это не является автоматическим глобальным списком серверов; если вы хотите подключиться к кому-то по IP, вам нужно будет спросить хост о его IP-адресе.
text.join.info=Здесь вы можете ввести IP-адрес [accent]сервера[] для подключения или открыть [accent]локальную сеть [] для подключения к серверам.\nПоддерживается многопользовательский режим LAN и WAN.\n\n[LIGHT_GRAY] Примечание: это не является автоматическим глобальным списком серверов; если вы хотите подключиться к кому-то по IP, вам нужно будет спросить хост о его IP-адресе.
text.hostserver=Запустить сервер
text.host=Сервер
text.hosting=[accent]Открытие сервера...
@@ -91,7 +95,7 @@ text.trace.structureblocksbroken=Структурных блоков слома
text.trace.lastblockbroken=Последний сломанный блок:[accent]{0}
text.trace.totalblocksplaced=Всего размещено блоков: [accent]{0}
text.trace.lastblockplaced=Последний размещенный блок: [accent]{0}
text.invalidid=Недопустимый идентификатор клиента! Отправьте отчет об ошибке.
text.invalidid=Недопустимый идентификатор клиента! Отправьте отчёт об ошибке.
text.server.bans=Блокировки
text.server.bans.none=Никаких заблокированных игроков не найдено!
text.server.admins=Администраторы
@@ -175,11 +179,12 @@ text.enemies.single={0} Противник
text.loadimage=Загрузить изображение
text.saveimage=Сохранить изображение
text.unknown=Неизвестный
text.custom=Клиентский
text.builtin=Встроенный
text.custom=Клиентская
text.builtin=Встроенная
text.map.delete.confirm=Вы действительно хотите удалить эту карту? Это действие не может быть отменено!
text.map.random=[accent]Случайная карта
text.map.nospawn=Эта карта не имеет ядер, в которых игрок может появиться! Добавьте [ROYAL]blue[] ядро в эту карте в редакторе карт.
text.map.nospawn=Эта карта не имеет ядер, в которых игрок может появиться! Добавьте [ROYAL]blue[] ядро на эту карту в редакторе карт.
text.map.invalid=Ошибка загрузки карты: повреждённый или недопустимый файл карты.
text.editor.brush=Кисть
text.editor.slope=\\
text.editor.openin=Открыть в редакторе
@@ -188,7 +193,7 @@ text.editor.oregen.info=Генерация Руд:
text.editor.mapinfo=Информация о карте
text.editor.author=Автор:
text.editor.description=Описание:
text.editor.name=Ник:
text.editor.name=Название:
text.editor.teams=Команды
text.editor.elevation=возвышение
text.editor.badsize=[orange]Недопустимый формат изображения! [] \nДопустимый формат карты: {0}
@@ -200,7 +205,7 @@ text.editor.loadmap=Загрузить\nкарту
text.editor.savemap=Сохранить\nкарту
text.editor.saved=Сохранено!
text.editor.save.noname=У вашей карты нет названия! Установите его в меню «Информация о карте».
text.editor.save.overwrite=Ваша карта перезаписывает встроенную карту! Выберите другое имя в меню 'Информация о карте'.
text.editor.save.overwrite=Ваша карта перезаписывает встроенную карту! Выберите другое имя в меню «Информация о карте»
text.editor.import.exists=[scarlet]Не удалось импортировать: [] уже существует встроенная карта с именем '{0}' !
text.editor.import=Импорт...
text.editor.importmap=Импорт карты
@@ -216,7 +221,7 @@ text.editor.exportimage=Экспортировать изображение ла
text.editor.exportimage.description=Экспортировать файл изображения карты
text.editor.loadimage=Загрузить \nизображение
text.editor.saveimage=Сохранить \nизображение
text.editor.unsaved=[scarlet]У вас есть несохраненные изменения![] \nВы уверены,что хотите выйти?
text.editor.unsaved=[scarlet]У вас есть несохранённые изменения![] \nВы уверены, что хотите выйти?
text.editor.resizemap=Изменить размер карты
text.editor.mapname=Название карты:
text.editor.overwrite=[accent]Внимание! \nЭто перезапишет уже существующую карту.
@@ -307,7 +312,7 @@ text.category.items=Предметы
text.category.crafting=Создание
text.category.shooting=Cтрельба
setting.fpscap.name=Макс. FPS
setting.fpscap.none=Ничто
setting.fpscap.none=Неограниченный
setting.fpscap.text={0} FPS
setting.difficulty.easy=легко
setting.difficulty.normal=нормально
@@ -333,6 +338,9 @@ setting.mutemusic.name=Заглушить музыку
setting.sfxvol.name=Громкость звуковых эффектов
setting.mutesound.name=Заглушить звук
text.keybind.title=Переназначить клавиши
section.general.name=Oснoвнoe
section.view.name=Прoсмoтр
section.multiplayer.name=Мультиплеер
keybind.move_x.name=Движение x
keybind.move_y.name=Движение y
keybind.select.name=выбрать
@@ -360,13 +368,13 @@ content.liquid.name=Жидкости
content.unit-type.name=Боевые единицы
content.recipe.name=Блоки
item.stone.name=Камень
item.stone.description=Обычное сырье. Используется для разделения и переработки в другие материалы или плавления в лаву.
item.stone.description=Обычное сырьё. Используется для разделения и переработки в другие материалы или плавления в лаву.
item.tungsten.name=Вольфрам
item.tungsten.description=Обычный, но очень полезный строительный материал . Используется в бурах и теплостойких блоках, таких как генераторы и плавильные печи.
item.lead.name=Свинец
item.lead.description=Основной начальный материал. Широко используется в блоках электроники и транспортировки жидкости.
item.coal.name=Уголь
item.coal.description=Распростанённое и легкодоступное топливо.
item.coal.description=Распространённое и легкодоступное топливо.
item.carbide.name=Карбид
item.carbide.description=Жёсткий сплав, изготовленный из вольфрама и угля. Используется в передовых транспортных блоках и высокоуровневых бурах.
item.titanium.name=Титан
@@ -384,7 +392,7 @@ item.biomatter.description=Скопление органической каши;
item.sand.name=Песок
item.sand.description=Обычный материал, который широко используется при плавке как в сплаве, так и в виде шлака.
item.blast-compound.name=Взрывоопасное соединение
item.blast-compound.description=Летучее соединение, используемое в бомбах и взрывчатых веществах. Хотя это может сгореть в качестве топлива, но не рекомендуется этого делать.
item.blast-compound.description=Летучее соединение, используемое в бомбах и взрывчатых веществах. Хотя может гореть в качестве топлива, но не рекомендуется этого делать.
item.pyratite.name=Пиротит
item.pyratite.description=Очень огнеопасное вещество, используемое в зажигательном оружии.
liquid.water.name=Вода
@@ -401,6 +409,21 @@ text.unit.speed=[LIGHT_GRAY]Скорость: {0}
text.liquid.heatcapacity=[LIGHT_GRAY]Теплоёмкость: {0}
text.liquid.viscosity=[LIGHT_GRAY]Вязкость: {0}
text.liquid.temperature=[LIGHT_GRAY]Температура: {0}
block.deepwater.name=Глубоководье
block.water.name=Вода
block.lava.name=Лава
block.oil.name=Нeфть
block.blackstone.name=Чёрный камень
block.stone.name=Камень
block.dirt.name=Земля
block.sand.name=Песок
block.ice.name=Лёд
block.snow.name=Снег
block.grass.name=Трава
block.shrub.name=Куст
block.rock.name=Булыжник
block.blackrock.name=Чёрный булыжник
block.icerock.name=Ледяной булыжник
block.tungsten-wall.name=Вольфрамовая стена
block.tungsten-wall-large.name=Большая вольфрамовая стена
block.carbide-wall.name=Карбидная стена
@@ -416,18 +439,18 @@ block.lancer.name=Копейщик
block.conveyor.name=Конвейер
block.titanium-conveyor.name=Титановый конвейер
block.junction.name=Перекрёсток
block.splitter.name=Разветвитель
block.splitter.name=Маршрутизатор
block.splitter.description=Выводит предметы на два противоположных направления сразу после их получения.
block.router.name=Маршрутизатор
block.router.description=Распределяет предметы во все 4 направления. Может хранить элементы как буфера.
block.router.description=Распределяет предметы в 4 направления. Может хранить элементы как буфер.
block.distributor.name=Распределитель
block.distributor.description=Разветвитель, который может распределять предметы на 8 направлений.
block.sorter.name=Сортировщик
block.sorter.description=Сортирует предметы. Если предмет соответствует выбранному, то ему можно пройти. В противном случае элемент выводится слева и справа.
block.overflow-gate.name=Избыточный затвор
block.overflow-gate.description=Комбинированный разветвитель и маршрутизатор, который выводится только слева и справа, если передний путь заблокирован.
block.overflow-gate.description=Комбинированный разветвитель и маршрутизатор, который выводит только слева и справа, если передний путь заблокирован.
block.bridgeconveyor.name=Мостовой конвейер
block.bridgeconveyor.description=Конвейер, который может переходить через другие блоки, до двух блоков в сумме.
block.bridgeconveyor.description=Конвейер, который может переходить через другие блоки, до двух блоков всего.
block.smelter.name=Плавильный завод
block.arc-smelter.name=Дуговая печь
block.silicon-smelter.name=Кремниевый плавильный завод
@@ -458,7 +481,7 @@ block.conduit.name=Трубопровод
block.pulseconduit.name=Импульсный трубопровод
block.liquidrouter.name=Маршрутизатор жидкостей
block.liquidtank.name=Жидкостный резервуар
block.liquidjunction.name=Перекресток для жидкостей
block.liquidjunction.name=Перекрёсток для жидкостей
block.bridgeconduit.name=Мостовой трубопровод
block.mechanical-pump.name=Механическая помпа
block.itemsource.name=Источник предметов
@@ -470,7 +493,7 @@ block.unloader.name=Разгрузчик
block.sortedunloader.name=Сортированный разгрузчик
block.vault.name=Хранилище
block.wave.name=Волна
block.swarmer.name=Зерг
block.swarmer.name=Роевик
block.salvo.name=Залп
block.ripple.name=Волнистость
block.phase-conveyor.name=Фазовый конвейер
@@ -493,26 +516,32 @@ block.pulse-conduit.name=Импульсный трубопровод
block.phase-conduit.name=Фазовый трубопровод
block.liquid-router.name=Жидкостный маршрутизатор
block.liquid-tank.name=Жидкостный резервуар
block.liquid-junction.name=Жидкое соединение
block.liquid-junction.name=Жидкостный перекрёсток
block.bridge-conduit.name=Мостовой трубопровод
block.rotary-pump.name=Роторный насос
block.nuclear-reactor.name=Ядерный реактор
block.command-center.name=Командный центр
block.mass-driver.name=Электромагнитная катапульта
block.blast-drill.name=Буровая установка
block.thermal-pump.name=Thermal Pump
block.dagger-pad.name=Dagger Pad
block.titan-pad.name=Titan Pad
block.thermal-generator.name=Thermal Generator
block.thermal-pump.name=Тепловой насос
block.dagger-pad.name=Стартовая площадка "Кинжал"
block.titan-pad.name=Стартовая площадка Титанов
block.thermal-generator.name=Термальный генератор
unit.drone.name=Дрон
unit.drone.description=Начальный дрон. По умолчанию появляется из ядра. Автоматически добывает руды, собирает предметы, ремонтирует блоки.
unit.fabricator.name=Сборщик
unit.fabricator.description=Продвинутый дрон. Автоматически добывает руды, собирает предметы, ремонтирует блоки. Значительнее эффективней нежели обычный дрон
unit.scout.name=Разведчик
unit.scout.description=Основная наземная боевая единица. Использует свинец как боеприпасы.
unit.dagger.name=Разведчик
unit.dagger.description=Основная наземная боевая единица. Полезен в стаях.
unit.titan.name=Титан
unit.titan.description=Улучшенная бронированная наземная боевая единица. Использует карбид в качестве боеприпасов. Атакует наземные и воздушные цели.
unit.titan.description=Улучшенная бронированная наземная боевая единица. Атакует наземные и воздушные цели.
unit.monsoon.name=Муссон
unit.monsoon.description=Тяжелый ковровый бомбардировщик. Использует взрывоопасное соединение или пиратит в качестве боеприпасов.
unit.interceptor.name=Истребитель-перехватчик
unit.interceptor.description=Быстрая и ударная боевая единица, которая использует набег с отскоком. Использует свинец как боеприпасы.
unit.interceptor.description=Быстрая и ударная боевая единица, которая использует набег с отскоком.
text.server.kicked.serverClose=Server closed.
text.server.kicked.sectorComplete=Sector completed.
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
section.general.name=General
section.view.name=View
section.multiplayer.name=Multiplayer
+27 -4
View File
@@ -26,7 +26,6 @@ text.players.single={0} Oyuncu Çevrimiçi
text.server.mismatch=Paket hatası: olası istemci / sunucu sürümü uyuşmazlığı. Siz ve ev sahibi Mindustry'nin en son sürümüne sahip olduğunuzdan emin olun!
text.server.closing=[accent] Sunucu kapatılıyor ...
text.server.kicked.kick=Sunucudan kovuldun!
text.server.kicked.invalidPassword=Geçersiz şifre!
text.server.kicked.clientOutdated=Oyun sürümünüz geçerli değil. Oyununu güncelleyin!
text.server.kicked.serverOutdated=Eski sunucu! Ev sahibinden güncellemesini isteyin!
text.server.kicked.banned=Bu sunucudan yasaklandınız.
@@ -464,7 +463,6 @@ block.rotary-pump.name=Rotary Pump
block.nuclear-reactor.name=Nuclear Reactor
text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release.
text.customgame=Custom Game
text.campaign=Campaign
text.sectors=Sectors
text.sector=Selected Sector: [LIGHT_GRAY]{0}
text.sector.time=Time: [LIGHT_GRAY]{0}
@@ -503,8 +501,6 @@ unit.drone.name=Drone
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
unit.fabricator.name=Fabricator
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
unit.scout.name=Scout
unit.scout.description=A basic ground unit. Uses lead as ammo.
unit.titan.name=Titan
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
unit.monsoon.name=Monsoon
@@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump
block.dagger-pad.name=Dagger Pad
block.titan-pad.name=Titan Pad
block.thermal-generator.name=Thermal Generator
text.coreattack=< Core is under attack! >
text.continue=Continue
text.nextmission=Next Mission
text.server.kicked.serverClose=Server closed.
text.server.kicked.sectorComplete=Sector completed.
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
text.map.invalid=Error loading map: corrupted or invalid map file.
section.general.name=General
section.view.name=View
section.multiplayer.name=Multiplayer
block.deepwater.name=deepwater
block.water.name=water
block.lava.name=lava
block.oil.name=oil
block.blackstone.name=blackstone
block.stone.name=stone
block.dirt.name=dirt
block.sand.name=sand
block.ice.name=ice
block.snow.name=snow
block.grass.name=grass
block.shrub.name=shrub
block.rock.name=rock
block.blackrock.name=blackrock
block.icerock.name=icerock
unit.dagger.name=Dagger
unit.dagger.description=A basic ground unit. Useful in swarms.
+455 -432
View File
@@ -1,518 +1,541 @@
text.credits.text=Створив [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY]Перекладач — Prosta4ok_ua\n\n Є питання по грі або проблеми с перекладом? Іди в офіційний сервер discord Mindustry.
text.credits=Автори
text.discord=Приєднуйтесь до нашого Discord!
text.link.discord.description=офіційний сервер discord Mindustry
text.link.github.description=Ігровий код гри
text.link.dev-builds.description=Нестабільні розробки
text.link.trello.description=Офіційна дошка trello для запланованих функцій
text.link.itch.io.description=Itch.io сторінка з веб-версією та завантаженням для ПК
text.link.google-play.description=Google Play список магазинів
text.link.wiki.description=офіційна Mindustry вікі
text.linkfail=Не вдалося відкрити посилання!\nURL-адреса скопійовано у ваш буфер обміну.
text.editor.web=Веб-версія не підтримує редактора! \nЗавантажте гру, щоб використовувати його.
text.web.unsupported=Веб-версія не підтримує цю функцію! Завантажте гру, щоб використовувати її.
text.gameover=Ядро було зруйновано.
text.highscore=[YELLOW] Новий рекорд!
text.level.highscore=Рекорд: [accent] {0}
text.sector.gameover=Цей сектор було втрачено. Повторно висадитися?
text.sector.retry=Повторити спробу
text.highscore=[accent] Новий рекорд!
text.wave.lasted=Ви проіснували до [accent]{0}[] хвилі.
text.level.highscore=Рекорд: [accent]{0}
text.level.delete.title=Підтвердьте видалення
text.map.delete=Ви впевнені, що хочете видалити карту "[orange]{0}[]"?
text.level.select=Вибір рівня
text.level.mode=Ігровий режим
text.level.mode=Ігровий режим:
text.construction.title=Block Construction Guide
text.construction=You've just selected [accent]block construction mode[].\n\nTo begin placing, simply tap a valid location near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin constructing them.\n\\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Shift the selection[] by holding and dragging any block in the selection.\n- [accent]Place blocks in a line[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel construction or selection[] by pressing the X at the bottom left.
text.deconstruction.title=Block Deconstruction Guide
text.deconstruction=You've just selected [accent]block deconstruction mode[].\n\nTo begin breaking, simply tap a block near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Remove blocks in an area[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel deconstruction or selection[] by pressing the X at the bottom left.
text.showagain=Не показувати знову до наступного сеансу
text.coreattack=< Ядро під атакою! >
text.unlocks=Разблоковане
text.savegame=Зберегти гру
text.loadgame=Завантажити гру
text.joingame=Приєднатися\nдо гри
text.addplayers=Дод/Видалити Гравців
text.customgame=Індивідуальна гра
text.sectors=Сектори
text.sector=Сектор: [LIGHT_GRAY]{0}
text.sector.time=Час: [LIGHT_GRAY]{0}
text.sector.deploy=Висадитися
text.sector.resume=Продовжити
text.sector.locked=[scarlet][[Незавершений]
text.sector.unexplored=[accent][[Недосліджений]
text.mission=Місія:[LIGHT_GRAY] {0}
text.mission.complete=Місія завершена!
text.mission.complete.body=Сектор {0},{1} був завойований.
text.mission.wave=Пережено наступну кількість хвиль :[accent]{0}[] .
text.mission.battle=Знищити базу супротивника.
text.mission.resource=Отримано {0} x{1}
text.none=<нічого>
text.close=Закрити
text.quit=Вийти
text.about.button=Про
text.name=Назва:
text.maps=Карти
text.continue=Продовжити
text.nextmission=Наступна місія
text.maps.none=[LIGHT_GRAY]Карт не знайдено!
text.about.button=Про гру
text.name=Нік:
text.unlocked=Новий блок розблоковано!
text.unlocked.plural=Нові блоки розблоковано!
text.players={0} гравців онлайн
text.players.single={0} гравців онлайн
text.server.mismatch=Пакетна помилка: невідповідність версії версії клієнта / сервера. Переконайтеся, що ви та хост мають останню версію Mindustry!
text.server.closing=[accent] Закриття сервера ...
text.server.kicked.kick=Ви були вигнані з сервера!
text.server.kicked.invalidPassword=Невірний пароль!
text.server.kicked.clientOutdated=Застарілий клієнт! Оновіть свою гру!
text.players.single={0} гравець онлай
text.server.mismatch=Пакетна помилка: невідповідність версії клієнта / сервера. \nПереконайтеся, що ви та хост мають останню версію Mindustry!
text.server.closing=[accent]Закриття сервера...
text.server.kicked.kick=Ви були вигнані(кікнуті) з сервера!
text.server.kicked.fastShoot=Ви стріляєте занадто швидко.
text.server.kicked.serverClose=Сервер закритий.
text.server.kicked.sectorComplete=Сектор завершено.
text.server.kicked.sectorComplete.text=Ваша місія завершена. \nСервер продовжить роботу в наступному секторі.
text.server.kicked.clientOutdated=Застаріли клієнт! Оновіть свою гру!
text.server.kicked.serverOutdated=Застарілий сервер! Попросіть хост оновити!
text.hostserver=Хост-сервер
text.server.kicked.banned=Ви були заблоковані на цьому сервері.
text.server.kicked.recentKick=Нещодавно вас вигнали(кікнули). \nПочекайте, перш ніж підключитися знову.
text.server.kicked.nameInUse=На цьому сервері є хтось \nз таким ім'ям.
text.server.kicked.nameEmpty=Ваш нікнейм має містити принаймні один символ або цифру.
text.server.kicked.idInUse=Ви вже на цьому сервері! Підключення двох облікових записів не допускається.
text.server.kicked.customClient=Цей сервер не підтримує власні збірки. Завантажте офіційну версію.
text.host.info=The [accent]host[] button hosts a server on port [scarlet]6567[]. \nAnybody on the same [LIGHT_GRAY]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[LIGHT_GRAY]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings.
text.join.info=Here, you can enter a [accent]server IP[] to connect to, or discover [accent]local network[] servers to connect to.\nBoth LAN and WAN multiplayer is supported.\n\n[LIGHT_GRAY]Note: There is no automatic global server list; if you want to connect to someone by IP, you would need to ask the host for their IP.
text.hostserver=Host Server
text.host=Хост
text.hosting=[accent] Відкриття сервера ...
text.hosting=[accent]Открытие сервера ...
text.hosts.refresh=Оновити
text.hosts.discovering=Знайомство з мережевими іграми
text.server.refreshing=Оновити сервери
text.hosts.none=[lightgray] Ніяких ігор у мережі не знайдено!
text.host.invalid=[scarlet] Неможливо підключитися до хосту.
text.hosts.discovering=Пошук локальних ігор
text.server.refreshing=Оновлення серверу
text.hosts.none=[lightgray]Локальних ігр не знайдено
text.host.invalid=[scarlet]Неможливо підключитися до хосту.
text.trace=Стежити за гравцем
text.trace.playername=Ім'я гравця: [accent]{0}
text.trace.ip=IP: [accent]{0}
text.trace.id=Унікальний ідентифікатор: [accent]{0}
text.trace.android=Клієнт Android: [accent]{0}
text.trace.modclient=Користувацький клієнт: [accent]{0}
text.trace.totalblocksbroken=Всього зруйновано блоків: [accent]{0}
text.trace.structureblocksbroken=Структурних блоків зруйновано: [accent]{0}
text.trace.lastblockbroken=Останній зруйнований блок: [accent]{0}
text.trace.totalblocksplaced=Всього встановлено блоків: [accent]{0}
text.trace.lastblockplaced=Останній встановлений блок: [accent]{0}
text.invalidid=Невірний ідентифікатор клієнта! Надішліть звіт про помилку.
text.server.bans=Блокування
text.server.bans.none=Нема заблокованих гравців!
text.server.admins=Адміністратори
text.server.admins.none=Адміністраторів не знайдено
text.server.add=Додати сервер
text.server.delete=Ви впевнені, що хочете видалити цей сервер?
text.server.hostname=Хост: {0}
text.server.edit=Редагувати сервер
text.server.outdated=[crimson]Застарілий сервер![]
text.server.outdated.client=[crimson]Застарілий клієнт![]
text.server.version=[lightgray]Версія: {0}
text.server.custombuild=[yellow]Користувацька конструкція
text.confirmban=Ви впевнені, що хочете заблокувати(забанити) цього гравця?
text.confirmunban=Ви впевнені, що хочете розблокувати) цього гравця?
text.confirmadmin=Ви впевнені, що хочете зробити цього гравця адміністратором?
text.confirmunadmin=Ви впевнені, що хочете видалити статус адміністратора з цього гравця?
text.joingame.title=Приєднатися до гри
text.joingame.ip=IP
text.disconnect=Роз'єднано
text.connecting=[accent] Підключення ...
text.connecting.data=[accent] Завантаження світових даних ...
text.connectfail=[crimson] Не вдалося підключитися до сервера: [orange] {0}
text.server.port=Порт
text.joingame.ip=IP:
text.disconnect=Відключено.
text.disconnect.data=Не вдалося завантажити світові дані!
text.connecting=[accent]Підключення...
text.connecting.data=[accent]Завантаження даних світу...
text.connectfail=[crimson]Не вдалося підключитися до сервера: [orange]{0}
text.server.port=Порт:
text.server.addressinuse=Адреса вже використовується!
text.server.invalidport=Недійсний номер порту.
text.server.error=[crimson] Помилка хостингу сервера: [orange] {0}
text.server.invalidport=Недійсний номер порту!
text.server.error=[crimson]Помилка хостингу сервера: [orange]{0}
text.save.old=Це збереження для старої версії гри, і його більше не можна використовувати.\n\n [LIGHT_GRAY] Зберігати зворотну сумісність буде реалізовано у повній версії 4.0.
text.save.new=Нове збереження
text.save.overwrite=Ви впевнені, що хочете перезаписати цей слот для збереження?
text.overwrite=Перезаписати
text.save.none=Не знайдено жодних збережень!
text.saveload=[accent] Збереження ...
text.save.none=Збережень не знайдено!
text.saveload=[accent]Збереження...
text.savefail=Не вдалося зберегти гру!
text.save.delete.confirm=Ви впевнені, що хочете видалити це збереження?
text.save.delete=Видалити
text.save.export=Експорт збереження
text.save.import.invalid=[orange] Це збереження недійсне!
text.save.import.fail=[crimson] Не вдалося імпортувати збереження: [orange] {0}
text.save.export.fail=[crimson] Не вдалося експортувати збереження: [orange] {0}
text.save.import=Імпортувати збереження
text.save.newslot=Назва збереження:
text.save.rename=Переіменувати
text.save.export=Экспортувати збереження
text.save.import.invalid=[orange]Це збереження недійсне!
text.save.import.fail=[crimson]Не вдалося імпортувати збереження: [orange]{0}
text.save.export.fail=[crimson]Не вдалося экспортувати збереження: [orange]{0}
text.save.import=Імпорт збереження
text.save.newslot=Зберегти ім'я:
text.save.rename=Перейменувати
text.save.rename.text=Нова назва:
text.selectslot=Виберіть збереження.
text.slot=[accent] слот {0}
text.save.corrupted=[orange] Збережений файл пошкоджений або він невірний!
text.empty=<порожньо>
text.on=Увімкнути
text.off=Вимкнути
text.slot=[accent]Слот {0}
text.save.corrupted=[orange]Збережений файл пошкоджений або недійсний! \nЯкщо ви щойно оновили свою гру, це, мабуть, є зміною формату збереження та [scarlet] не []є помилкою.
text.sector.corrupted=[orange]Знайдено файл збереження для цього сектора, але завантаження не вдалося. \n Буде створений новий.
text.empty=<порожній>
text.on=Вкл
text.off=Выкл
text.save.autosave=Автозбереження: {0}
text.save.map=Карта
text.save.map=Карта: {0}
text.save.wave=Хвиля {0}
text.save.difficulty=Складність
text.save.date=Останнє збережено: {0}
text.save.difficulty=Рівень складності: {0}
text.save.date=Останне збереження: {0}
text.save.playtime=Час гри: {0}
text.confirm=Підтвердити
text.delete=Видалити
text.ok=ОК
text.open=Відкрити
text.cancel=Скасувати
text.openlink=Відкрити посилання
text.copylink=Скопіювати посилання
text.back=Назад
text.quit.confirm=Ти впевнений що хочеш піти?
text.loading=[accent] Завантаження ...
text.wave=[orange] хвиля {0}
text.quit.confirm=Ти впевнений що хочеш вийти?
text.changelog.title=Журнал змін
text.changelog.loading=Отримання журналу змін...
text.changelog.error.android=[orange]Зверніть увагу, що іноді журнал змін не працює на ОС Android 4.4 або на нижчій версії!\nЦе пов'язано з внутрішньою помилкою Android.
text.changelog.error.ios=[orange]Журнал змін наразі не підтримується в iOS.
text.changelog.error=[scarlet]Помилка отримання журналу змін!\nПеревірте підключення до Інтернету.
text.changelog.current=[yellow][[Поточна версія]
text.changelog.latest=[orange][[Остання версія]
text.loading=[accent]Завантаження...
text.saving=[accent]Збереження...
text.wave=[orange]Хвиля {0}
text.wave.waiting=Хвиля через {0}
text.waiting=Очікування…
text.enemies={0} Вороги
text.enemies.single=Противник
text.waiting=Очікування...
text.enemies=Ворогів:{0}
text.enemies.single={0} Ворог
text.loadimage=Завантажити зображення
text.saveimage=Зберегти зображення
text.editor.badsize=[orange] Недійсні розміри зображення! [] Дійсні розміри карти: {0}
text.editor.errorimageload=Помилка завантаження файлу зображень: [orange] {0}
text.editor.errorimagesave=Помилка збереження файлу зображення: [orange] {0}
text.editor.generate=Генератор
text.unknown=Невідома
text.custom=Користувальницька
text.builtin=Bбудована
text.map.delete.confirm=Ви впевнені, що хочете видалити цю карту? Цю дію не можна скасувати!
text.map.random=[accent]Випадкова карта
text.map.nospawn=Ця карта не має жодного ядра для спавну гравця! Додайте [ROYAL] сине[] ядро в цю карту в редакторі.
text.map.invalid=Помилка завантаження карти: пошкоджений або невірний файл карти.
text.editor.brush=Пензлик
text.editor.slope=\\
text.editor.openin=Відкрити в редакторі
text.editor.oregen=Генерація руд
text.editor.oregen.info=Генерація руд:
text.editor.mapinfo=Інформація про карту
text.editor.author=Автор:
text.editor.description=Опис:
text.editor.name=Назва:
text.editor.teams=Команди
text.editor.elevation=Bисочина
text.editor.badsize=[orange]Недійсні розміри зображення! [] \n Дійсні розміри карти: {0}
text.editor.errorimageload=Помилка завантаження файлу:\n[orange]{0}
text.editor.errorimagesave=Помилка збереження файлу:\n[orange]{0}
text.editor.generate=Генерувати
text.editor.resize=Змінити розмір
text.editor.loadmap=// Завантажити карту
text.editor.loadmap=Завантажити карту
text.editor.savemap=Зберегти карту
text.editor.loadimage=Завантажити зображення
text.editor.saveimage=Зберегти зображення
text.editor.unsaved=[scarlet] У вас є незбережені зміни! [] Ви впевнені, що хочете вийти?
text.editor.saved=Збережено!
text.editor.save.noname=Ваша карта не має імені! Встановіть його в меню "інформація про карту".
text.editor.save.overwrite=Ваша карта перезаписує вбудовану карту! Виберіть інше ім'я в меню "інформація про карту".
text.editor.import.exists=[scarlet]Неможливо імпортувати: [] вбудована карта з назвою "{0}" вже існує!
text.editor.import=Імпорт...
text.editor.importmap=Імпортувати карту
text.editor.importmap.description=Імпортуйте вже існуючої карти
text.editor.importfile=Імпортувати файл
text.editor.importfile.description=Імпортуйте зовнішній файл карти
text.editor.importimage=Імпорт зображення місцевості
text.editor.importimage.description=Імпорт зовнішнього файла зображення карти
text.editor.export=Експорт...
text.editor.exportfile=Експорт файлу
text.editor.exportfile.description=Експортувати файл карти
text.editor.exportimage=Експорт зображення місцевості
text.editor.exportimage.description=Експорт файла з зображенням карти
text.editor.loadimage=Імпорт місцевості
text.editor.saveimage=Екпорт місцевості
text.editor.unsaved=[scarlet]У вас є незбережені зміни![]\nВи впевнені, що хочете вийти?
text.editor.resizemap=Змінити розмір карти
text.editor.mapname=Назва карти:
text.editor.overwrite=[accent] Попередження! Це перезаписує існуючу карту.
text.editor.selectmap=Виберіть карту для завантаження:
text.width=Ширина
text.height=Висота
text.editor.overwrite=[accent]Попередження!\nЦе перезаписує існуючу карту.
text.editor.overwrite.confirm=[scarlet]Попередження![] Карта з такою назвою вже існує. Ви впевнені, що хочете переписати її?
text.editor.selectmap=Select a map to load:
text.width=Ширина:
text.height=Висота:
text.menu=Меню
text.play=Відтворити
text.play=Грати
text.load=Завантаження
text.save=Зберегти
text.language.restart=Будь ласка, перезапустіть свою гру, щоб налаштування мови набули чинності.
text.settings.language=Мова
text.fps=FPS: {0}
text.tps=TPS: {0}
text.ping=Пінг: {0} мс
text.language.restart=Будь ласка, перезапустіть свою гру, щоб налаштування мови набули чинності.text.settings.language=Language
text.settings=Налаштування
text.tutorial=Навчальний\nпосібник
text.editor=Редактор
text.mapeditor=Редактор карт
text.donate=Підтримати проект
text.donate=Пожертвувати
text.settings.reset=Скинути до стандартних
text.settings.rebind=Переназн.
text.settings.controls=Елементи управління
text.settings.game=Гра
text.settings.sound=Звук
text.settings.graphics=Графіка
text.paused=Пауза
text.info.title=[accent] інформація
text.error.title=[crimson] Виникла помилка
text.yes=Так
text.no=Ні
text.info.title=[accent]Інформація
text.error.title=[crimson]Виникла помилка
text.error.crashtitle=Виникла помилка
text.blocks.blockinfo=Блокування інформації
text.blocks.powercapacity=Потужність
text.blocks.powershot=Потужність / постріл
text.blocks.blockinfo=Інформація про блок
text.blocks.powercapacity=Місткість енергії
text.blocks.powershot=Енергія/постріл
text.blocks.targetsair=Атакуе повітряних ворогів?
text.blocks.itemspeed=Переміщення одиниць
text.blocks.shootrange=Діапазон
text.blocks.size=Розмір
text.blocks.liquidcapacity=Ємкість рідини
text.blocks.maxitemssecond=Макс. Елементи / секунду
text.blocks.powerrange=Радіус потужності
text.blocks.itemcapacity=Ємкість предмету
text.blocks.inputliquid=Ввід речовини
text.blocks.inputitem=Вхідний матеріал
text.blocks.liquidcapacity=Місткість рідини
text.blocks.maxitemssecond=Макс. кількість предметів/секунду
text.blocks.powerrange=Діапазон потужності енергії
text.blocks.poweruse=Енергії використовується
text.blocks.inputitemcapacity=Ємність вхідних елементів
text.blocks.outputitemcapacity=Ємність вихідних елементів
text.blocks.itemcapacity=Місткість предметів
text.blocks.maxpowergeneration=Максимальна потужність
text.blocks.powertransferspeed=Передача енергії
text.blocks.craftspeed=Швидкість виробництва
text.blocks.inputliquid=Прийом рідини
text.blocks.inputliquidaux=Допоміжна рідина
text.blocks.inputitem=Вхідний предмет
text.blocks.inputitems=Вхідні предмети
text.blocks.outputitem=Вихідний предмет
text.blocks.drilltier=Видобуває
text.blocks.drillspeed=Базова швидкість свердління
text.blocks.liquidoutput=Вихідна рідина
text.blocks.liquiduse=Використовуеться рідина
text.blocks.coolant=Охолоджуюча рідина
text.blocks.coolantuse=Охолодж. рідини використовуеться
text.blocks.inputliquidfuel=Рідке паливо
text.blocks.liquidfueluse=Рідкого палива використовуеться
text.blocks.explosive=Вибухонебезпечний!
text.blocks.health=Здоров'я
text.blocks.inaccuracy=Неточність
text.blocks.inaccuracy=Розкид
text.blocks.shots=Постріли
text.blocks.inputcapacity=Вхідна ємність
text.blocks.outputcapacity=Випускна ємність
setting.difficulty.easy=Легкий
setting.difficulty.normal=Нормальний
setting.difficulty.hard=Важкий
setting.difficulty.insane=Божевільний
setting.difficulty.purge=Очистити
setting.difficulty.name=Складність
setting.screenshake.name=Тряска екрана
setting.indicators.name=Індикатори ворога
setting.effects.name=Ефекти відображення
text.blocks.reload=Перезарядка
text.blocks.inputfuel=Паливо
text.blocks.fuelburntime=Час горіння топлива
text.blocks.inputcapacity=Вміщення вводу
text.blocks.outputcapacity=Вміщення виводу
text.unit.blocks=блоки
text.unit.powersecond=одиниць енергії/секунду
text.unit.liquidsecond=рідких одиниць/секунду
text.unit.itemssecond=предметів/секунду
text.unit.pixelssecond=пікселів/секунду
text.unit.liquidunits=рідин. одиниць
text.unit.powerunits=енерг. одиниць
text.unit.degrees=град.
text.unit.seconds=сек.
text.unit.none=
text.unit.items=предм.
text.category.general=Загальне
text.category.power=Енергетичне
text.category.liquids=Рідинне
text.category.items=Елементи
text.category.crafting=Створення
text.category.shooting=Стрільба
setting.fpscap.name=Макс. FPS
setting.fpscap.none=Необмежений
setting.fpscap.text={0} FPS
setting.difficulty.easy=легкий
setting.difficulty.normal=нормальний
setting.difficulty.hard=важкий
setting.difficulty.insane=божевільний
setting.difficulty.purge=зачистка
setting.difficulty.name=Рівень складності:
setting.screenshake.name=Потрясіння екрану
setting.indicators.name=Індикатор ворога
setting.effects.name=Ефекти на екрані
setting.sensitivity.name=Чутливість контролера
setting.saveinterval.name=Інтервал автозбереження
setting.seconds={0} секунд
setting.fullscreen.name=Повноекранний
setting.multithread.name=Багатопотоковий [scarlet] (нестабільний!)
setting.seconds={0} сек.
setting.fullscreen.name=Повний екран
setting.multithread.name=Багатопотоковість
setting.fps.name=Показати FPS
setting.vsync.name=VSunc
setting.vsync.name=Вертикальна синхронізація
setting.lasers.name=Показати енергетичні лазери
setting.healthbars.name=Показати здоров'я
setting.healthbars.name=Показати смужки здоров'я об'єкта
setting.minimap.name=Показати мінікарту
setting.musicvol.name=Гучність музики
setting.mutemusic.name=Вимкнути музику
setting.sfxvol.name=Гучність ефектів
setting.mutesound.name=Вимкнути звук
text.keybind.title=Ключ перемотки
keybind.move_x.name=move_x
keybind.move_y.name=move_y
keybind.select.name=Вибрати
keybind.break.name={0}break{/0}{1}; {/1}
setting.mutemusic.name=Заглушити музику
setting.sfxvol.name=Гучність звукових ефектів
setting.mutesound.name=Заглушити звук
text.keybind.title=Переназначити клавіші
keybind.move_x.name=Переміщення по осі x
keybind.move_y.name=Переміщення по осі y
keybind.select.name=Виберіть
keybind.break.name=Зламати
keybind.shoot.name=Постріл
keybind.zoom_hold.name=zoom_hold
keybind.zoom_hold.name=Утримувати масштаб
keybind.zoom.name=Збільшити
keybind.menu.name=Меню
keybind.pause.name=Пауза
keybind.dash.name=Тире
keybind.chat.name=Чат
keybind.player_list.name=Список гравців
keybind.console.name=// Консоль 1
keybind.rotate.name=Повернути
mode.waves.name=Хвилі
mode.sandbox.name=Пісочниця
keybind.console.name=консоль
keybind.rotate.name=Повертати
mode.text.help.title=Опис режимів
mode.waves.name=хвилі
mode.waves.description=нормальний режим. обмежені ресурси та автоматичні хвилі.
mode.sandbox.name=пісочниця
mode.sandbox.description=нескінченні ресурси і нема таймера для хвиль.
mode.sandbox.warning=Зверніть увагу, що блоки не можуть бути використані в режимі "пісочниця", доки вони не розблоковані в інших режимах.\n\n [LIGHT_GRAY] Якщо ви не розблокували будь-які блоки, нічого не з'явиться.
mode.freebuild.name=Вільний режим
mode.freebuild.description=обмежені ресурси і немає таймера для хвиль.
content.item.name=Предмети
content.liquid.name=Рідини
content.unit-type.name=Бойові одиниці
content.recipe.name=Блоки
item.stone.name=Камінь
item.coal.name=Вугівалля
item.stone.description=Загальна сировина. Використовується для розділення та переробки в інші матеріали або плавки в лаву.
item.tungsten.name=Вольфрам
item.tungsten.description=Звичайний, але дуже корисний структурнй матеріал. Використовується в свердлах та термостійких блоках, таких як генератори та плавильні.
item.lead.name=Свинець
item.lead.description=Базовий стартовий матеріал. Широко використовується в блоках електроніки та транспорту рідини.
item.coal.name=Вугілля
item.coal.description=Загальне та легкодоступне паливо.
item.carbide.name=Карбід
item.carbide.description=Жорсткий сплав з вольфрамом та карбідом. Використовується в передових транспортних блоках та високорівневих свердлах.
item.titanium.name=Титан
item.thorium.name=Уран
item.titanium.description=Рідкий суперлегкий метал широко використовується в рідкому транспорті, свердлах та літальних апаратах.
item.thorium.name=Торій
item.thorium.description=Густий, радіоактивний метал, що використовується як структурна підтримка та ядерне паливо.
item.silicon.name=Кремній
item.silcion.description=Надзвичайно корисний напівпровідник з застосуванням в сонячних батареях та багатьох складних електроніках.
item.plastanium.name=Пластиній
item.plastanium.description=Легкий, пластичний матеріал, що використовується в сучасних літальних апаратах, та боєприпаси для фрагментації.
item.phase-matter.name=Фазова матерія
item.surge-alloy.name=Хвилястий сплав
item.biomatter.name=Біоматерія
item.biomatter.description=Скупчення органічної муси; використовується для перетворення в нафту або як основне паливо.
item.sand.name=Пісок
item.sand.description=Загальний матеріал, який широко використовується при плавленні, як у процесі плавки, так і в відходах.
item.blast-compound.name=Вибухонебезпечне з'єднання
item.blast-compound.description=Нестійкий склад, що використовується в бомбах та вибухових речовинах. Хоча воно може спалюватися як паливо, та це не рекомендується.
item.pyratite.name=Піратит
item.pyratite.description=Вкрай легкозаймиста речовина, що використовується у запальному озброєнні.
liquid.water.name=Вода
liquid.lava.name=Лава
liquid.oil.name=Нафта
liquid.cryofluid.name=Кріогенна рідина
text.item.explosiveness=[LIGHT_GRAY]Вибухонебезпечність: {0}
text.item.flammability=[LIGHT_GRAY]Вогненебезпечність: {0}
text.item.radioactivity=[LIGHT_GRAY]Радіоактивність: {0}
text.item.fluxiness=[LIGHT_GRAY]Осадковість: {0}
text.item.hardness=[LIGHT_GRAY]Міцність: {0}
text.unit.health=[LIGHT_GRAY]Здоров'я: {0}
text.unit.speed=[LIGHT_GRAY]Швидкість: {0}
text.liquid.heatcapacity=[LIGHT_GRAY]Теплоємність: {0}
text.liquid.viscosity=[LIGHT_GRAY]В'язкість: {0}
text.liquid.temperature=[LIGHT_GRAY]Темпаратура: {0}
block.deepwater.name=глибокі води
block.water.name=вода
block.lava.name=лава
block.oil.name=нафта
block.blackstone.name=чорний-камінь
block.stone.name=камінь
block.dirt.name=земля
block.sand.name=пісок
block.ice.name=лід
block.snow.name=сніг
block.grass.name=трава
block.shrub.name=кущ
block.rock.name=кругляк
block.blackrock.name=чорний-кругляк
block.icerock.name=льодяний-кругляк
block.tungsten-wall.name=Вольфрамова стіна
block.tungsten-wall-large.name=Велика вольфрамова стіна
block.carbide-wall.name=Карбідна стіна
block.carbide-wall-large.name=Велика карбідна стіна
block.thorium-wall.name=Торієва стіна
block.thorium-wall-large.name=Велика Торнієва стіна
block.door.name=Двері
block.door-large.name=Великі двері
block.conduit.name=Трубопровід
block.pulseconduit.name=Імпульсний канал
block.liquidrouter.name=маршрутизатор для рідини
block.duo.name=Подвійна
block.scorch.name=Випалювач
block.hail.name=Град
block.lancer.name=Списоносець
block.conveyor.name=Конвеєр
block.titanium-conveyor.name=Титановий конвеєр
block.junction.name=Перехрестя
block.splitter.name=Розгалужувач
block.splitter.description=Виводить елементи у три різні напрямки після їх отримання.
block.router.name=Маршрутизатор
block.junction.name=Міст
block.liquidjunction.name=Міст для рідини
block.router.description=Розбиває елементи на всі 4 напрямки. Можна зберігати елементи як буфер.
block.distributor.name=розподілювач
block.distributor.description=Розгалужувач, який може виводити елементи на 8 напрямків.
block.sorter.name=Сортувальник
block.smelter.name=Плавильня
text.credits=Credits
text.link.discord.description=the official Mindustry discord chatroom
text.link.github.description=Game source code
text.link.dev-builds.description=Unstable development builds
text.link.trello.description=Official trello board for planned features
text.link.itch.io.description=itch.io page with PC downloads and web version
text.link.google-play.description=Google Play store listing
text.link.wiki.description=official Mindustry wiki
text.linkfail=Failed to open link!\nThe URL has been copied to your cliboard.
text.editor.web=The web version does not support the editor!\nDownload the game to use it.
text.web.unsupported=The web version does not support this feature! Download the game to use it.
text.map.delete=Are you sure you want to delete the map "[orange]{0}[]"?
text.construction.title=Block Construction Guide
text.construction=You've just selected [accent]block construction mode[].\n\nTo begin placing, simply tap a valid location near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Shift the selection[] by holding and dragging any block in the selection.\n- [accent]Place blocks in a line[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel construction or selection[] by pressing the X at the bottom left.
text.deconstruction.title=Block Deconstruction Guide
text.deconstruction=You've just selected [accent]block deconstruction mode[].\n\nTo begin breaking, simply tap a block near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Remove blocks in an area[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel deconstruction or selection[] by pressing the X at the bottom left.
text.showagain=Don't show again next session
text.unlocks=Unlocks
text.addplayers=Add/Remove Players
text.maps=Maps
text.maps.none=[LIGHT_GRAY]No maps found!
text.unlocked=New Block Unlocked!
text.unlocked.plural=New Blocks Unlocked!
text.server.kicked.fastShoot=You are shooting too quickly.
text.server.kicked.banned=You are banned on this server.
text.server.kicked.recentKick=You have been kicked recently.\nWait before connecting again.
text.server.kicked.nameInUse=There is someone with that name\nalready on this server.
text.server.kicked.nameEmpty=Your name must contain at least one character or number.
text.server.kicked.idInUse=You are already on this server! Connecting with two accounts is not permitted.
text.server.kicked.customClient=This server does not support custom builds. Download an official version.
text.host.info=The [accent]host[] button hosts a server on ports [scarlet]6567[] and [scarlet]6568.[]\nAnybody on the same [LIGHT_GRAY]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[LIGHT_GRAY]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings.
text.join.info=Here, you can enter a [accent]server IP[] to connect to, or discover [accent]local network[] servers to connect to.\nBoth LAN and WAN multiplayer is supported.\n\n[LIGHT_GRAY]Note: There is no automatic global server list; if you want to connect to someone by IP, you would need to ask the host for their IP.
text.trace=Trace Player
text.trace.playername=Player name: [accent]{0}
text.trace.ip=IP: [accent]{0}
text.trace.id=Unique ID: [accent]{0}
text.trace.android=Android Client: [accent]{0}
text.trace.modclient=Custom Client: [accent]{0}
text.trace.totalblocksbroken=Total blocks broken: [accent]{0}
text.trace.structureblocksbroken=Structure blocks broken: [accent]{0}
text.trace.lastblockbroken=Last block broken: [accent]{0}
text.trace.totalblocksplaced=Total blocks placed: [accent]{0}
text.trace.lastblockplaced=Last block placed: [accent]{0}
text.invalidid=Invalid client ID! Submit a bug report.
text.server.bans=Bans
text.server.bans.none=No banned players found!
text.server.admins=Admins
text.server.admins.none=No admins found!
text.server.outdated=[crimson]Outdated Server![]
text.server.outdated.client=[crimson]Outdated Client![]
text.server.version=[lightgray]Version: {0}
text.server.custombuild=[yellow]Custom Build
text.confirmban=Are you sure you want to ban this player?
text.confirmunban=Are you sure you want to unban this player?
text.confirmadmin=Are you sure you want to make this player an admin?
text.confirmunadmin=Are you sure you want to remove admin status from this player?
text.disconnect.data=Failed to load world data!
text.copylink=Copy Link
text.changelog.title=Changelog
text.changelog.loading=Getting changelog...
text.changelog.error.android=[orange]Note that the changelog sometimes does not work on Android 4.4 and below!\nThis is due to an internal Android bug.
text.changelog.error.ios=[orange]The changelog is currently not supported in iOS.
text.changelog.error=[scarlet]Error getting changelog!\nCheck your internet connection.
text.changelog.current=[yellow][[Current version]
text.changelog.latest=[orange][[Latest version]
text.saving=[accent]Saving...
text.unknown=Unknown
text.custom=Custom
text.builtin=Built-In
text.map.delete.confirm=Are you sure you want to delete this map? This action cannot be undone!
text.map.random=[accent]Random Map
text.map.nospawn=This map does not have any cores for the player to spawn in! Add a [ROYAL]blue[] core to this map in the editor.
text.editor.slope=\\
text.editor.openin=Open In Editor
text.editor.oregen=Ore Generation
text.editor.oregen.info=Ore Generation:
text.editor.mapinfo=Map Info
text.editor.author=Author:
text.editor.description=Description:
text.editor.name=Name:
text.editor.teams=Teams
text.editor.elevation=Elevation
text.editor.saved=Saved!
text.editor.save.noname=Your map does not have a name! Set one in the 'map info' menu.
text.editor.save.overwrite=Your map overwrites a built-in map! Pick a different name in the 'map info' menu.
text.editor.import.exists=[scarlet]Unable to import:[] a built-in map named '{0}' already exists!
text.editor.import=Import...
text.editor.importmap=Import Map
text.editor.importmap.description=Import an already existing map
text.editor.importfile=Import File
text.editor.importfile.description=Import an external map file
text.editor.importimage=Import Terrain Image
text.editor.importimage.description=Import an external map image file
text.editor.export=Export...
text.editor.exportfile=Export File
text.editor.exportfile.description=Export a map file
text.editor.exportimage=Export Terrain Image
text.editor.exportimage.description=Export a map image file
text.editor.overwrite.confirm=[scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
text.fps=FPS: {0}
text.tps=TPS: {0}
text.ping=Ping: {0}ms
text.settings.rebind=Rebind
text.yes=Yes
text.no=No
text.blocks.targetsair=Targets Air
text.blocks.itemspeed=Units Moved
text.blocks.shootrange=Range
text.blocks.poweruse=Power Use
text.blocks.inputitemcapacity=Input Item Capacity
text.blocks.outputitemcapacity=Input Item Capacity
text.blocks.maxpowergeneration=Max Power Generation
text.blocks.powertransferspeed=Power Transfer
text.blocks.craftspeed=Production Speed
text.blocks.inputliquidaux=Aux Liquid
text.blocks.inputitems=Input Items
text.blocks.outputitem=Output Item
text.blocks.drilltier=Drillables
text.blocks.drillspeed=Base Drill Speed
text.blocks.liquidoutput=Liquid Output
text.blocks.liquiduse=Liquid Use
text.blocks.coolant=Coolant
text.blocks.coolantuse=Coolant Use
text.blocks.inputliquidfuel=Fuel Liquid
text.blocks.liquidfueluse=Liquid Fuel Use
text.blocks.reload=Reload
text.blocks.inputfuel=Fuel
text.blocks.fuelburntime=Fuel Burn Time
text.unit.blocks=blocks
text.unit.powersecond=power units/second
text.unit.liquidsecond=liquid units/second
text.unit.itemssecond=items/second
text.unit.pixelssecond=pixels/second
text.unit.liquidunits=liquid units
text.unit.powerunits=power units
text.unit.degrees=degrees
text.unit.seconds=seconds
text.unit.none=
text.unit.items=items
text.category.general=General
text.category.power=Power
text.category.liquids=Liquids
text.category.items=Items
text.category.crafting=Crafting
text.category.shooting=Shooting
setting.minimap.name=Show Minimap
mode.text.help.title=Description of modes
mode.waves.description=the normal mode. limited resources and automatic incoming waves.
mode.sandbox.description=infinite resources and no timer for waves.
mode.freebuild.description=limited resources and no timer for waves.
content.item.name=Items
content.liquid.name=Liquids
content.unit-type.name=Units
content.recipe.name=Blocks
item.stone.description=A common raw material. Used for separating and refining into other materials, or melting into lava.
item.tungsten.name=Tungsten
item.tungsten.description=A common, but very useful structure material. Used in drills and heat-resistant blocks such as generators and smelteries.
item.lead.name=Lead
item.lead.description=A basic starter material. Used extensively in electronics and liquid transportation blocks.
item.coal.description=A common and readily available fuel.
item.carbide.name=Carbide
item.carbide.description=A tough alloy made with tungsten and carbon. Used in advanced transportation blocks and high-tier drills.
item.titanium.description=A rare super-light metal used extensively in liquid transportation, drills and aircraft.
item.thorium.description=A dense, radioactive metal used as structural support and nuclear fuel.
item.silicon.name=Silicon
item.silcion.description=An extremely useful semiconductor, with applications in solar panels and many complex electronics.
item.plastanium.name=Plastanium
item.plastanium.description=A light, ductile material used in advanced aircraft and fragmentation ammunition.
item.phase-matter.name=Phase Matter
item.surge-alloy.name=Surge Alloy
item.biomatter.name=Biomatter
item.biomatter.description=A clump of organic mush; used for conversion into oil or as a basic fuel.
item.sand.description=A common material that is used extensively in smelting, both in alloying and as a flux.
item.blast-compound.name=Blast Compound
item.blast-compound.description=A volatile compound used in bombs and explosives. While it can burned as fuel, this is not advised.
item.pyratite.name=Pyratite
item.pyratite.description=An extremely flammable substance used in incendiary weapons.
liquid.cryofluid.name=Cryofluid
text.item.explosiveness=[LIGHT_GRAY]Explosiveness: {0}
text.item.flammability=[LIGHT_GRAY]Flammability: {0}
text.item.radioactivity=[LIGHT_GRAY]Radioactivity: {0}
text.item.fluxiness=[LIGHT_GRAY]Flux Power: {0}
text.item.hardness=[LIGHT_GRAY]Hardness: {0}
text.liquid.heatcapacity=[LIGHT_GRAY]Heat Capacity: {0}
text.liquid.viscosity=[LIGHT_GRAY]Viscosity: {0}
text.liquid.temperature=[LIGHT_GRAY]Temperature: {0}
block.tungsten-wall.name=Tungsten Wall
block.tungsten-wall-large.name=Large Tungsten Wall
block.carbide-wall.name=Carbide Wall
block.carbide-wall-large.name=Large Carbide Wall
block.thorium-wall.name=Thorium Wall
block.thorium-wall-large.name=Large Thorium Wall
block.duo.name=Duo
block.scorch.name=Scorch
block.hail.name=Hail
block.lancer.name=Lancer
block.titanium-conveyor.name=Titanium Conveyor
block.splitter.name=Splitter
block.splitter.description=Outputs items into two opposite directions immediately after they are recieved.
block.router.description=Splits items into all 4 directions. Can store items as a buffer.
block.distributor.name=Distributor
block.distributor.description=A splitter that can split items into 8 directions.
block.sorter.description=Sorts items. If an item matches the selection, it is allowed to pass. Otherwise, the item is outputted to the left and right.
block.overflow-gate.name=Overflow Gate
block.overflow-gate.description=A combination splitter and router that only outputs to the left and right if the front path is blocked.
block.bridgeconveyor.name=Bridge Conveyor
block.bridgeconveyor.description=A conveyor that can go over other blocks, for up to two total blocks.
block.arc-smelter.name=Arc Smelter
block.silicon-smelter.name=Silicon Smelter
block.phase-weaver.name=Phase Weaver
block.pulverizer.name=Pulverizer
block.cryofluidmixer.name=Cryofluid Mixer
block.melter.name=Melter
block.incinerator.name=Incinerator
block.biomattercompressor.name=Biomatter Compressor
block.separator.name=Separator
block.sorter.description=Сортує предмети. Якщо товар відповідає виділенню, йому можна пройти. В іншому випадку предмет виводиться ліворуч і праворуч.
block.overflow-gate.name=Надмірний затвор
block.overflow-gate.description=Комбінований розгалужувач і маршрутизатор, який виводить тільки вліво та вправо, якщо передній шлях заблоковано.
block.bridgeconveyor.name=Мостовий конвеєр
block.bridgeconveyor.description=Конвеєр, який може пройти повз інші блоки, до двох блоків усього.
block.smelter.name=Плавильний завод
block.arc-smelter.name=Дуговий плавильний завод
block.silicon-smelter.name=Кремнієвий завод
block.phase-weaver.name=Фазовий ткач
block.pulverizer.name=Розпилювач
block.cryofluidmixer.name=Змішувач кріогненної рідини
block.melter.name=Плавильня
block.incinerator.name=Сміттєспалювальний завод
block.biomattercompressor.name=Біоматерний компресор
block.separator.name=Сепаратор
block.centrifuge.name=Centrifuge
block.power-node.name=Power Node
block.power-node-large.name=Large Power Node
block.battery.name=Battery
block.battery-large.name=Large Battery
block.combustion-generator.name=Combustion Generator
block.turbine-generator.name=Turbine Generator
block.tungsten-drill.name=Tungsten Drill
block.carbide-drill.name=Carbide Drill
block.laser-drill.name=Laser Drill
block.water-extractor.name=Water Extractor
block.cultivator.name=Cultivator
block.dart-ship-factory.name=Dart Ship Factory
block.delta-mech-factory.name=Delta Mech Factory
block.repairpoint.name=Repair Point
block.resupplypoint.name=Resupply Point
block.liquidtank.name=Liquid Tank
block.bridgeconduit.name=Bridge Conduit
block.mechanical-pump.name=Mechanical Pump
block.itemsource.name=Item Source
block.itemvoid.name=Item Void
block.liquidsource.name=Liquid Source
block.powervoid.name=Power Void
block.powerinfinite.name=Power Infinite
block.unloader.name=Unloader
block.sortedunloader.name=Sorted Unloader
block.vault.name=Vault
block.wave.name=Wave
block.swarmer.name=Swarmer
block.salvo.name=Salvo
block.ripple.name=Ripple
block.phase-conveyor.name=Phase Conveyor
block.power-node.name=Енергійний вузол
block.power-node-large.name=Великий енергетичний вузол
block.battery.name=Акумулятор
block.battery-large.name=Великий акумулятор
block.combustion-generator.name=Генератор горіння
block.turbine-generator.name=Турбогенератор
block.tungsten-drill.name=Вольфрамовий дриль
block.carbide-drill.name=Карбідовий дриль
block.laser-drill.name=Лазерний дриль
block.water-extractor.name=Екстрактор води
block.cultivator.name=Культиватор
block.dart-ship-factory.name=Завод дротикових кораблів
block.delta-mech-factory.name=Завод механічного дельта броньовика
block.javelin-ship-factory.name=Завод кораблів Javelin
block.repairpoint.name=Ремонтний пункт
block.resupplypoint.name=Постачальна точка
block.conduit.name=Трубопровід
block.pulseconduit.name=Імпульсний трубопровід
block.liquidrouter.name=Рідкий маршрутизатор
block.liquidtank.name=Рідкий резервуар
block.liquidjunction.name=Рідкий з'єднання
block.bridgeconduit.name=Мостовий трубопровід
block.mechanical-pump.name=Механічний насос
block.itemsource.name=Джерело предметів
block.itemvoid.name=Предметний вакуум
block.liquidsource.name=Рідке джерело
block.powervoid.name=Енергетичний вакуум
block.powerinfinite.name=Нескінченна енергія
block.unloader.name=Розвантажувач
block.sortedunloader.name=Сортований розвантажувач
block.vault.name=Сховище
block.wave.name=Хвиля
block.swarmer.name=Ройевик
block.salvo.name=Залп
block.ripple.name=Хвилястість
block.phase-conveyor.name=Фазовий конвеєр
block.bridge-conveyor.name=Bridge Conveyor
block.plastanium-compressor.name=Plastanium Compressor
block.pyratite-mixer.name=Pyratite Mixer
block.blast-mixer.name=Blast Mixer
block.solidifer.name=Solidifer
block.solar-panel.name=Solar Panel
block.solar-panel-large.name=Large Solar Panel
block.oil-extractor.name=Oil Extractor
block.javelin-ship-factory.name=Javelin Ship factory
block.repair-point.name=Repair Point
block.resupply-point.name=Resupply Point
block.pulse-conduit.name=Pulse Conduit
block.phase-conduit.name=Phase Conduit
block.liquid-router.name=Liquid Router
block.liquid-tank.name=Liquid Tank
block.liquid-junction.name=Liquid Junction
block.bridge-conduit.name=Bridge Conduit
block.rotary-pump.name=Rotary Pump
block.nuclear-reactor.name=Nuclear Reactor
text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release.
text.customgame=Custom Game
text.campaign=Campaign
text.sectors=Sectors
text.sector=Selected Sector: [LIGHT_GRAY]{0}
text.sector.time=Time: [LIGHT_GRAY]{0}
text.sector.deploy=Deploy
text.sector.resume=Resume
text.sector.locked=[scarlet][[Incomplete]
text.sector.unexplored=[accent][[Unexplored]
text.close=Close
text.save.playtime=Playtime: {0}
text.editor.brush=Brush
text.credits.text=Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!)
text.sector.gameover=This sector has been lost. Re-deploy?
text.sector.retry=Retry
text.wave.lasted=You lasted until wave [accent]{0}[].
setting.fpscap.name=Max FPS
setting.fpscap.none=None
setting.fpscap.text={0} FPS
block.command-center.name=Command Center
text.mission=Mission:[LIGHT_GRAY] {0}
text.mission.wave=Survive [accent]{0}[] waves.
text.mission.battle=Destroy the enemy base.
text.none=<none>
text.sector.corrupted=[orange]A save file for this sector was found, but loading failed.\nA new one has been created.
text.mission.complete=Mission complete!
text.mission.complete.body=Sector {0},{1} has been conquered.
text.mission.resource=Obtain {0} x{1}
text.unit.health=[LIGHT_GRAY]Health: {0}
text.unit.speed=[LIGHT_GRAY]Speed: {0}
block.drone-pad.name=Drone Pad
block.fabricator-pad.name=Fabricator Pad
block.interceptor-pad.name=Interceptor Pad
block.monsoon-pad.name=Monsoon Pad
block.mass-driver.name=Mass Driver
block.blast-drill.name=Blast Drill
unit.drone.name=Drone
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
unit.fabricator.name=Fabricator
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
unit.scout.name=Scout
unit.scout.description=A basic ground unit. Uses lead as ammo.
unit.titan.name=Titan
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
unit.monsoon.name=Monsoon
unit.monsoon.description=A heavy carpet bomber. Uses blast compound or pyratite as ammo.
unit.interceptor.name=Interceptor
unit.interceptor.description=A fast, hit-and-run strike unit. Uses lead as ammo.
mode.sandbox.warning=Note that blocks cannot be used in sandbox mode until they are unlocked in other modes.\n\n[LIGHT_GRAY]If you have not unlocked any blocks, none will appear.
block.thermal-pump.name=Thermal Pump
block.dagger-pad.name=Dagger Pad
block.titan-pad.name=Titan Pad
block.thermal-generator.name=Thermal Generator
block.plastanium-compressor.name=Пластиновий компресор
block.pyratite-mixer.name=Змішувач піратиту
block.blast-mixer.name=Доменний змішувач
block.solidifer.name=Затверджувач
block.solar-panel.name=Сонячна панель
block.solar-panel-large.name=Велика сонячна панель
block.oil-extractor.name=Екстрактор нафти
block.drone-pad.name=Стартовий майданчик дронів
block.fabricator-pad.name=Стартовий майданчик складальників
block.interceptor-pad.name=Стартовий майданчик винищувачів-перехоплювачів
block.monsoon-pad.name=Стартовий майданчик мусонів
block.repair-point.name=Ремонтний пункт
block.resupply-point.name=постачальна точка
block.pulse-conduit.name=Імпульсний водовід
block.phase-conduit.name=Фазовий водопровід
block.liquid-router.name=Рідкий маршрутизатор
block.liquid-tank.name=Рідкий резервуар
block.liquid-junction.name=Рідкий з'єднання
block.bridge-conduit.name=Мостовий водопровід
block.rotary-pump.name=Роторний насос
block.nuclear-reactor.name=Ядерний реактор
block.command-center.name=Командний центр
block.mass-driver.name=Електромагнітна катапульта
block.blast-drill.name=Бурова установка
block.thermal-pump.name=Тепловий насос
block.dagger-pad.name=Стартовий майданчик дронів
block.titan-pad.name=Стартовий майданчик титанів
block.thermal-generator.name=Тепловий генератор
unit.drone.name=Дрон
unit.drone.description=Стартова бойова одиниця. З'являеться в основному за замовчуванням. Автоматично видобуває руди, збирає предмети і відновлює блоки.
unit.fabricator.name=Складальник
unit.fabricator.description=Покращений дрон. Автоматично видобуває руди, збирає предмети і відновлює блоки. Значно ефективніший, ніж дрон.
unit.dagger.name=Кинджал
unit.dagger.description=Базова наземна бойова одиниця. Корисна у купі.
unit.titan.name=Титан
unit.titan.description=Просунута броньована наземна одиниця. Атакуе наземні та повітряні цілі.
unit.monsoon.name=Мусон
unit.monsoon.description=Важкий килимовий бомбардувальник. Використовує вибухонебезпечну речовину або піратит як боєприпаси.
unit.interceptor.name=Винищувач-перехполювач
unit.interceptor.description=Швидка, ударна бойова одиниця, котра використовує набіг з відскоком
text.settings.language=Language
section.general.name=General
section.view.name=View
section.multiplayer.name=Multiplayer
+27 -4
View File
@@ -32,7 +32,6 @@ text.loadgame=载入游戏
text.joingame=加入游戏
text.addplayers=增加/删除玩家
text.customgame=自定义游戏
text.campaign=战役
text.sectors=区域
text.sector=区域: [LIGHT_GRAY]{0}
text.sector.time=时间: [LIGHT_GRAY]{0}
@@ -59,7 +58,6 @@ text.server.mismatch=Packet error: 可能是客户端/服务器版本不匹配\n
text.server.closing=[accent]正在关闭服务器...
text.server.kicked.kick=你被踢出服务器了!
text.server.kicked.fastShoot=你发射得太快了!
text.server.kicked.invalidPassword=无效的密码!
text.server.kicked.clientOutdated=客户端版本过旧!请升级!
text.server.kicked.serverOutdated=服务器版本过旧!请联系房主升级!
text.server.kicked.banned=你被这个服务器拉黑了。
@@ -497,8 +495,6 @@ unit.drone.name=无人机
unit.drone.description=初始的无人机单位.自动在核心生成,自动采矿,收集物品,修复方块
unit.fabricator.name=装配工
unit.fabricator.description=高级无人机单位,自动采矿,收集物品和修复方块.比普通无人机快很多.
unit.scout.name=侦察机
unit.scout.description=基础地面单位,使用钨作为弹药.
unit.titan.name=泰坦
unit.titan.description=高级的有武装地面单位,使用电石作为弹药.攻击地面单位和空中单位.
unit.monsoon.name=狂风
@@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump
block.dagger-pad.name=Dagger Pad
block.titan-pad.name=Titan Pad
block.thermal-generator.name=Thermal Generator
text.coreattack=< Core is under attack! >
text.continue=Continue
text.nextmission=Next Mission
text.server.kicked.serverClose=Server closed.
text.server.kicked.sectorComplete=Sector completed.
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
text.map.invalid=Error loading map: corrupted or invalid map file.
section.general.name=General
section.view.name=View
section.multiplayer.name=Multiplayer
block.deepwater.name=deepwater
block.water.name=water
block.lava.name=lava
block.oil.name=oil
block.blackstone.name=blackstone
block.stone.name=stone
block.dirt.name=dirt
block.sand.name=sand
block.ice.name=ice
block.snow.name=snow
block.grass.name=grass
block.shrub.name=shrub
block.rock.name=rock
block.blackrock.name=blackrock
block.icerock.name=icerock
unit.dagger.name=Dagger
unit.dagger.description=A basic ground unit. Useful in swarms.
+27 -4
View File
@@ -27,7 +27,6 @@ text.server.mismatch=封包錯誤:客戶端與伺服器版本可能不相符
text.server.closing=[accent] 正在關閉伺服器...
text.server.kicked.kick=您已被踢出伺服器!
text.server.kicked.fastShoot=您射擊的太快了!
text.server.kicked.invalidPassword=密碼無效!
text.server.kicked.clientOutdated=客戶端版本過舊!請更新遊戲!
text.server.kicked.serverOutdated=伺服器版本過舊!請聯絡伺服主更新伺服器!
text.server.kicked.banned=您已經從這個伺服器被封禁。
@@ -464,7 +463,6 @@ block.bridge-conduit.name=Bridge Conduit
block.rotary-pump.name=Rotary Pump
block.nuclear-reactor.name=Nuclear Reactor
text.customgame=Custom Game
text.campaign=Campaign
text.sectors=Sectors
text.sector=Selected Sector: [LIGHT_GRAY]{0}
text.sector.time=Time: [LIGHT_GRAY]{0}
@@ -503,8 +501,6 @@ unit.drone.name=Drone
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
unit.fabricator.name=Fabricator
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
unit.scout.name=Scout
unit.scout.description=A basic ground unit. Uses lead as ammo.
unit.titan.name=Titan
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
unit.monsoon.name=Monsoon
@@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump
block.dagger-pad.name=Dagger Pad
block.titan-pad.name=Titan Pad
block.thermal-generator.name=Thermal Generator
text.coreattack=< Core is under attack! >
text.continue=Continue
text.nextmission=Next Mission
text.server.kicked.serverClose=Server closed.
text.server.kicked.sectorComplete=Sector completed.
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
text.map.invalid=Error loading map: corrupted or invalid map file.
section.general.name=General
section.view.name=View
section.multiplayer.name=Multiplayer
block.deepwater.name=deepwater
block.water.name=water
block.lava.name=lava
block.oil.name=oil
block.blackstone.name=blackstone
block.stone.name=stone
block.dirt.name=dirt
block.sand.name=sand
block.ice.name=ice
block.snow.name=snow
block.grass.name=grass
block.shrub.name=shrub
block.rock.name=rock
block.blackrock.name=blackrock
block.icerock.name=icerock
unit.dagger.name=Dagger
unit.dagger.description=A basic ground unit. Useful in swarms.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 138 KiB

+2446 -2542
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 756 KiB

After

Width:  |  Height:  |  Size: 85 KiB

+1 -2
View File
@@ -93,8 +93,7 @@ LabelStyle: {
TextFieldStyle: {
default: {font: default-font-chat, fontColor: white, disabledFontColor: gray, selection: selection, background: button, cursor: cursor, messageFont: default-font, messageFontColor: gray }
textarea: {font: default-font-chat, fontColor: white, disabledFontColor: gray, selection: selection, background: textarea, cursor: cursor, messageFont: default-font, messageFontColor: gray }
}
},
CheckBoxStyle: {
default: {checkboxOn: check-on, checkboxOff: check-off, checkboxOnOver: check-on-over, checkboxOver: check-over, font: default-font, fontColor: white, disabledFontColor: gray }
}
+2
View File
@@ -34,6 +34,8 @@ public class Vars{
public static final float wavespace = 60 * 60 * 1.5f;
//set ridiculously high for now
public static final float coreBuildRange = 800999f;
public static final float enemyCoreBuildRange = 400f;
//discord group URL
public static final String discordURL = "https://discord.gg/BKADYds";
public static final String releasesURL = "https://api.github.com/repos/Anuken/Mindustry/releases";
@@ -119,7 +119,7 @@ public class BlockIndexer{
* Get all allied blocks with a flag.
*/
public ObjectSet<Tile> getAllied(Team team, BlockFlag type){
return (state.teams.get(team).ally ? allyMap : enemyMap).get(type, emptyArray);
return state.teams.has(team) ? (state.teams.get(team).ally ? allyMap : enemyMap).get(type, emptyArray) : emptyArray;
}
/**
@@ -142,7 +142,7 @@ public class BlockIndexer{
for(int ty = ry * structQuadrantSize; ty < (ry + 1) * structQuadrantSize && ty < world.height(); ty++){
Tile other = world.tile(tx, ty);
if(other == null || other.entity == null || !pred.test(other)) continue;
if(other == null || other.entity == null || other.getTeam() != team || !pred.test(other)) continue;
TileEntity e = other.entity;
@@ -246,7 +246,6 @@ public class BlockIndexer{
int quadrantX = tile.x / structQuadrantSize;
int quadrantY = tile.y / structQuadrantSize;
int index = quadrantX + quadrantY * quadWidth();
//Log.info("Updating quadrant: {0} {1}", quadrantX, quadrantY);
for(TeamData data : state.teams.getTeams()){
@@ -16,7 +16,6 @@ import io.anuke.mindustry.world.meta.BlockFlag;
import io.anuke.ucore.core.Events;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.util.Geometry;
import io.anuke.ucore.util.Log;
import static io.anuke.mindustry.Vars.state;
import static io.anuke.mindustry.Vars.world;
@@ -182,8 +181,6 @@ public class Pathfinder{
}
state.spawner.checkAllQuadrants();
Log.info("Elapsed calculation time: {0}", Timers.elapsed());
}
class PathData{
@@ -1,7 +1,6 @@
package io.anuke.mindustry.ai;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Bits;
import io.anuke.mindustry.entities.units.BaseUnit;
import io.anuke.mindustry.entities.units.Squad;
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
@@ -10,6 +9,7 @@ import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.game.Waves;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Events;
import io.anuke.ucore.util.GridBits;
import io.anuke.ucore.util.Mathf;
import java.io.DataInput;
@@ -21,7 +21,7 @@ import static io.anuke.mindustry.Vars.*;
public class WaveSpawner{
private static final int quadsize = 4;
private Bits quadrants;
private GridBits quadrants;
private Array<SpawnGroup> groups;
@@ -166,7 +166,7 @@ public class WaveSpawner{
private void reset(){
flySpawns.clear();
groundSpawns.clear();
quadrants = new Bits(quadWidth() * quadHeight());
quadrants = new GridBits(quadWidth(), quadHeight());
if(world.getSector() == null){
groups = Waves.getSpawns();
@@ -176,15 +176,13 @@ public class WaveSpawner{
}
private boolean getQuad(int quadx, int quady){
return quadrants.get(quadx + quady * quadWidth());
return quadrants.get(quadx, quady);
}
private void setQuad(int quadx, int quady, boolean valid){
if(valid){
quadrants.set(quadx + quady * quadWidth());
}else{
quadrants.clear(quadx + quady * quadWidth());
}
if(quadrants == null) quadrants = new GridBits(quadWidth(), quadHeight());
quadrants.set(quadx, quady, valid);
}
//TODO instead of randomly scattering locations around the map, find spawns close to each other
@@ -3,6 +3,7 @@ package io.anuke.mindustry.content;
import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.content.blocks.*;
import io.anuke.mindustry.game.Content;
import io.anuke.mindustry.game.GameMode;
import io.anuke.mindustry.type.ContentList;
import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.type.Recipe;
@@ -131,15 +132,15 @@ public class Recipes implements ContentList{
new Recipe(units, UnitBlocks.dronePad, new ItemStack(Items.tungsten, 70), new ItemStack(Items.lead, 110), new ItemStack(Items.silicon, 130));
new Recipe(units, UnitBlocks.fabricatorPad, new ItemStack(Items.carbide, 90), new ItemStack(Items.thorium, 80), new ItemStack(Items.lead, 110), new ItemStack(Items.silicon, 210));
new Recipe(units, UnitBlocks.daggerPad, new ItemStack(Items.lead, 90), new ItemStack(Items.silicon, 80));
new Recipe(units, UnitBlocks.titanPad, new ItemStack(Items.thorium, 90), new ItemStack(Items.lead, 140), new ItemStack(Items.silicon, 90));
new Recipe(units, UnitBlocks.daggerPad, new ItemStack(Items.lead, 90), new ItemStack(Items.silicon, 80)).setMode(GameMode.noWaves);
new Recipe(units, UnitBlocks.titanPad, new ItemStack(Items.thorium, 90), new ItemStack(Items.lead, 140), new ItemStack(Items.silicon, 90)).setMode(GameMode.noWaves);
new Recipe(units, UnitBlocks.interceptorPad, new ItemStack(Items.titanium, 60), new ItemStack(Items.lead, 80), new ItemStack(Items.silicon, 90));
new Recipe(units, UnitBlocks.monsoonPad, new ItemStack(Items.plastanium, 80), new ItemStack(Items.titanium, 100), new ItemStack(Items.lead, 130), new ItemStack(Items.silicon, 220));
new Recipe(units, UnitBlocks.interceptorPad, new ItemStack(Items.titanium, 60), new ItemStack(Items.lead, 80), new ItemStack(Items.silicon, 90)).setMode(GameMode.noWaves);
new Recipe(units, UnitBlocks.monsoonPad, new ItemStack(Items.plastanium, 80), new ItemStack(Items.titanium, 100), new ItemStack(Items.lead, 130), new ItemStack(Items.silicon, 220)).setMode(GameMode.noWaves);
new Recipe(units, UnitBlocks.repairPoint, new ItemStack(Items.lead, 30), new ItemStack(Items.tungsten, 30), new ItemStack(Items.silicon, 30));
new Recipe(units, UnitBlocks.resupplyPoint, new ItemStack(Items.lead, 30), new ItemStack(Items.tungsten, 30), new ItemStack(Items.silicon, 30));
new Recipe(units, UnitBlocks.commandCenter, new ItemStack(Items.lead, 100), new ItemStack(Items.carbide, 100), new ItemStack(Items.silicon, 200));
new Recipe(units, UnitBlocks.commandCenter, new ItemStack(Items.lead, 100), new ItemStack(Items.carbide, 100), new ItemStack(Items.silicon, 200)).setMode(GameMode.noWaves);
//LIQUIDS
new Recipe(liquid, LiquidBlocks.conduit, new ItemStack(Items.lead, 1))
@@ -106,7 +106,7 @@ public class Blocks extends BlockList implements ContentList{
stone = new Floor("stone"){{
hasOres = true;
drops = new ItemStack(Items.stone, 1);
blends = block -> block != this && !(block instanceof Ore);
blends = block -> block != this && !(block instanceof OreBlock);
minimapColor = Color.valueOf("323232");
playerUnmineable = true;
}};
@@ -21,11 +21,11 @@ public class CraftingBlocks extends BlockList implements ContentList{
health = 70;
result = Items.carbide;
craftTime = 45f;
burnDuration = 45f;
burnDuration = 46f;
useFlux = true;
consumes.items(new ItemStack[]{new ItemStack(Items.tungsten, 3)});
consumes.item(Items.coal);
consumes.item(Items.coal).optional(true);
}};
arcsmelter = new PowerSmelter("arc-smelter"){{
@@ -164,13 +164,13 @@ public class CraftingBlocks extends BlockList implements ContentList{
separator = new Separator("separator"){{
results = new Item[]{
null, null, null, null, null, null, null, null, null, null,
Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand,
Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone,
Items.tungsten, Items.tungsten, Items.tungsten, Items.tungsten,
Items.lead, Items.lead,
Items.coal, Items.coal,
Items.titanium
null, null, null, null, null, null, null, null, null, null,
Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand,
Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone,
Items.tungsten, Items.tungsten, Items.tungsten, Items.tungsten,
Items.lead, Items.lead,
Items.coal, Items.coal,
Items.titanium
};
filterTime = 40f;
itemCapacity = 40;
@@ -182,14 +182,14 @@ public class CraftingBlocks extends BlockList implements ContentList{
centrifuge = new Separator("centrifuge"){{
results = new Item[]{
null, null, null, null, null, null, null, null, null, null, null, null, null,
Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand,
Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone,
Items.tungsten, Items.tungsten, Items.tungsten, Items.tungsten, Items.tungsten,
Items.lead, Items.lead, Items.lead,
Items.coal, Items.coal, Items.coal,
Items.titanium, Items.titanium,
Items.thorium,
null, null, null, null, null, null, null, null, null, null, null, null, null,
Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand,
Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone, Items.stone,
Items.tungsten, Items.tungsten, Items.tungsten, Items.tungsten, Items.tungsten,
Items.lead, Items.lead, Items.lead,
Items.coal, Items.coal, Items.coal,
Items.titanium, Items.titanium,
Items.thorium,
};
hasPower = true;
@@ -212,7 +212,7 @@ public class CraftingBlocks extends BlockList implements ContentList{
itemCapacity = 50;
craftTime = 25f;
outputLiquid = Liquids.oil;
outputLiquidAmount = 0.9f;
outputLiquidAmount = 1.2f;
size = 2;
health = 320;
hasLiquids = true;
@@ -22,7 +22,7 @@ public class PowerBlocks extends BlockList implements ContentList{
thermalGenerator = new LiquidHeatGenerator("thermal-generator"){{
maxLiquidGenerate = 0.5f;
powerCapacity = 40f;
powerPerLiquid = 0.55f;
powerPerLiquid = 1.5f;
generateEffect = BlockFx.redgeneratespark;
size = 2;
}};
@@ -179,13 +179,13 @@ public class TurretBullets extends BulletList implements ContentList{
}
};
driverBolt = new BulletType(5f, 50){
driverBolt = new BulletType(5.3f, 50){
{
collidesTiles = false;
lifetime = 200f;
despawneffect = BlockFx.smeltsmoke;
hiteffect = BulletFx.hitBulletBig;
drag = 0.02f;
drag = 0.01f;
}
@Override
+68 -56
View File
@@ -31,8 +31,10 @@ import io.anuke.ucore.util.Pooling;
import io.anuke.ucore.util.Timer;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.Random;
import java.util.zip.InflaterInputStream;
import static io.anuke.mindustry.Vars.*;
@@ -134,7 +136,7 @@ public class NetClient extends Module{
Net.handleClient(WorldStream.class, data -> {
Log.info("Recieved world data: {0} bytes.", data.stream.available());
NetworkIO.loadWorld(data.stream);
NetworkIO.loadWorld(new InflaterInputStream(data.stream));
finishConnecting();
});
@@ -149,7 +151,13 @@ public class NetClient extends Module{
public static void onKick(KickReason reason){
netClient.disconnectQuietly();
state.set(State.menu);
if(!reason.quiet) ui.showError("$text.server.kicked." + reason.name());
if(!reason.quiet){
if(reason.extraText() != null){
ui.showText(reason.toString(), reason.extraText());
}else{
ui.showText("$text.disconnect", reason.toString());
}
}
ui.loadfrag.hide();
}
@@ -243,68 +251,72 @@ public class NetClient extends Module{
//get data input for reading from the stream
DataInputStream input = netClient.dataStream;
//read wave info
state.wavetime = input.readFloat();
state.wave = input.readInt();
byte cores = input.readByte();
for(int i = 0; i < cores; i++){
int pos = input.readInt();
world.tile(pos).entity.items.read(input);
}
long timestamp = input.readLong();
byte totalGroups = input.readByte();
//for each group...
for(int i = 0; i < totalGroups; i++){
//read group info
byte groupID = input.readByte();
short amount = input.readShort();
EntityGroup group = Entities.getGroup(groupID);
//go through each entity
for(int j = 0; j < amount; j++){
int position = netClient.byteStream.position(); //save position to check read/write correctness
int id = input.readInt();
byte typeID = input.readByte();
SyncTrait entity = (SyncTrait) group.getByID(id);
boolean add = false;
//entity must not be added yet, so create it
if(entity == null){
entity = (SyncTrait) TypeTrait.getTypeByID(typeID).get(); //create entity from supplier
entity.resetID(id);
if(!netClient.isEntityUsed(entity.getID())){
add = true;
}
}
//read the entity
entity.read(input, timestamp);
byte readLength = input.readByte();
if(netClient.byteStream.position() - position - 1 != readLength){
throw new RuntimeException("Error reading entity of type '" + group.getType() + "': Read length mismatch [write=" + readLength + ", read=" + (netClient.byteStream.position() - position - 1) + "]");
}
if(add){
entity.add();
netClient.addRemovedEntity(entity.getID());
}
}
}
netClient.readSnapshot(input);
//confirm that snapshot has been recieved
netClient.lastSnapshotBaseID = snapshotID;
}catch(Exception e){
throw new RuntimeException(e);
}
}
public void readSnapshot(DataInputStream input) throws IOException{
//read wave info
state.wavetime = input.readFloat();
state.wave = input.readInt();
byte cores = input.readByte();
for(int i = 0; i < cores; i++){
int pos = input.readInt();
world.tile(pos).entity.items.read(input);
}
long timestamp = input.readLong();
byte totalGroups = input.readByte();
//for each group...
for(int i = 0; i < totalGroups; i++){
//read group info
byte groupID = input.readByte();
short amount = input.readShort();
EntityGroup group = Entities.getGroup(groupID);
//go through each entity
for(int j = 0; j < amount; j++){
int position = netClient.byteStream.position(); //save position to check read/write correctness
int id = input.readInt();
byte typeID = input.readByte();
SyncTrait entity = (SyncTrait) group.getByID(id);
boolean add = false;
//entity must not be added yet, so create it
if(entity == null){
entity = (SyncTrait) TypeTrait.getTypeByID(typeID).get(); //create entity from supplier
entity.resetID(id);
if(!netClient.isEntityUsed(entity.getID())){
add = true;
}
}
//read the entity
entity.read(input, timestamp);
byte readLength = input.readByte();
//if(netClient.byteStream.position() - position - 1 != readLength){
// throw new RuntimeException("Error reading entity of type '" + group.getType() + "': Read length mismatch [write=" + readLength + ", read=" + (netClient.byteStream.position() - position - 1) + "]");
//}
if(add){
entity.add();
netClient.addRemovedEntity(entity.getID());
}
}
}
}
@Override
public void update(){
if(!Net.client()) return;
+86 -66
View File
@@ -9,8 +9,10 @@ import com.badlogic.gdx.utils.TimeUtils;
import io.anuke.annotations.Annotations.Loc;
import io.anuke.annotations.Annotations.Remote;
import io.anuke.mindustry.content.Mechs;
import io.anuke.mindustry.content.blocks.Blocks;
import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.Player;
import io.anuke.mindustry.entities.traits.BuilderTrait.BuildRequest;
import io.anuke.mindustry.entities.traits.SyncTrait;
import io.anuke.mindustry.game.Version;
import io.anuke.mindustry.gen.Call;
@@ -35,6 +37,7 @@ import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.zip.DeflaterOutputStream;
import static io.anuke.mindustry.Vars.*;
@@ -43,7 +46,7 @@ public class NetServer extends Module{
public final static boolean showSnapshotSize = false;
private final static byte[] reusableSnapArray = new byte[maxSnapshotSize];
private final static float serverSyncTime = 5, kickDuration = 30 * 1000;
private final static float serverSyncTime = 4, kickDuration = 30 * 1000;
private final static Vector2 vector = new Vector2();
/**If a play goes away of their server-side coordinates by this distance, they get teleported back.*/
private final static float correctDist = 16f;
@@ -169,7 +172,8 @@ public class NetServer extends Module{
//TODO try DeflaterOutputStream
ByteArrayOutputStream stream = new ByteArrayOutputStream();
NetworkIO.writeWorld(player, stream);
DeflaterOutputStream def = new DeflaterOutputStream(stream);
NetworkIO.writeWorld(player, def);
WorldStream data = new WorldStream();
data.stream = new ByteArrayInputStream(stream.toByteArray());
Net.sendStream(id, data);
@@ -200,8 +204,14 @@ public class NetServer extends Module{
player.isBoosting = packet.boosting;
player.isShooting = packet.shooting;
player.getPlaceQueue().clear();
if(packet.currentRequest != null){
player.getPlaceQueue().addLast(packet.currentRequest);
for(BuildRequest req : packet.requests){
//auto-skip done requests
if(req.remove && world.tile(req.x, req.y).block() == Blocks.air){
continue;
}else if(!req.remove && world.tile(req.x, req.y).block() == req.recipe.result && (!req.recipe.result.rotate || world.tile(req.x, req.y).getRotation() == req.rotation)){
continue;
}
player.getPlaceQueue().addLast(req);
}
vector.set(packet.x - player.getInterpolator().target.x, packet.y - player.getInterpolator().target.y);
@@ -363,6 +373,12 @@ public class NetServer extends Module{
admins.clearTraces();
}
public void kickAll(KickReason reason){
for(NetConnection con : Net.getConnections()){
kick(con.id, reason);
}
}
public void kick(int connection, KickReason reason){
NetConnection con = Net.getConnection(connection);
if(con == null){
@@ -387,6 +403,71 @@ public class NetServer extends Module{
admins.save();
}
public void writeSnapshot(Player player, DataOutputStream dataStream) throws IOException{
//write wave datas
dataStream.writeFloat(state.wavetime);
dataStream.writeInt(state.wave);
Array<Tile> cores = state.teams.get(player.getTeam()).cores;
dataStream.writeByte(cores.size);
//write all core inventory data
for(Tile tile : cores){
dataStream.writeInt(tile.packedPosition());
tile.entity.items.write(dataStream);
}
//write timestamp
dataStream.writeLong(TimeUtils.millis());
int totalGroups = 0;
for(EntityGroup<?> group : Entities.getAllGroups()){
if(!group.isEmpty() && (group.all().get(0) instanceof SyncTrait)) totalGroups++;
}
//write total amount of serializable groups
dataStream.writeByte(totalGroups);
//check for syncable groups
for(EntityGroup<?> group : Entities.getAllGroups()){
//TODO range-check sync positions to optimize?
if(group.isEmpty() || !(group.all().get(0) instanceof SyncTrait)) continue;
//make sure mapping is enabled for this group
if(!group.mappingEnabled()){
throw new RuntimeException("Entity group '" + group.getType() + "' contains SyncTrait entities, yet mapping is not enabled. In order for syncing to work, you must enable mapping for this group.");
}
int amount = 0;
for(Entity entity : group.all()){
if(((SyncTrait) entity).isSyncing()){
amount++;
}
}
//write group ID + group size
dataStream.writeByte(group.getID());
dataStream.writeShort(amount);
for(Entity entity : group.all()){
if(!((SyncTrait) entity).isSyncing()) continue;
int position = syncStream.position();
//write all entities now
dataStream.writeInt(entity.getID()); //write id
dataStream.writeByte(((SyncTrait) entity).getTypeID()); //write type ID
((SyncTrait) entity).write(dataStream); //write entity
int length = syncStream.position() - position; //length must always be less than 127 bytes
if(length > 127)
throw new RuntimeException("Write size for entity of type " + group.getType() + " must not exceed 127!");
dataStream.writeByte(length);
}
}
}
String getUUID(int connectionID){
return connections.get(connectionID).uuid;
}
@@ -458,68 +539,7 @@ public class NetServer extends Module{
//reset stream to begin writing
syncStream.reset();
//write wave datas
dataStream.writeFloat(state.wavetime);
dataStream.writeInt(state.wave);
Array<Tile> cores = state.teams.get(player.getTeam()).cores;
dataStream.writeByte(cores.size);
//write all core inventory data
for(Tile tile : cores){
dataStream.writeInt(tile.packedPosition());
tile.entity.items.write(dataStream);
}
//write timestamp
dataStream.writeLong(TimeUtils.millis());
int totalGroups = 0;
for(EntityGroup<?> group : Entities.getAllGroups()){
if(!group.isEmpty() && (group.all().get(0) instanceof SyncTrait)) totalGroups++;
}
//write total amount of serializable groups
dataStream.writeByte(totalGroups);
//check for syncable groups
for(EntityGroup<?> group : Entities.getAllGroups()){
//TODO range-check sync positions to optimize?
if(group.isEmpty() || !(group.all().get(0) instanceof SyncTrait)) continue;
//make sure mapping is enabled for this group
if(!group.mappingEnabled()){
throw new RuntimeException("Entity group '" + group.getType() + "' contains SyncTrait entities, yet mapping is not enabled. In order for syncing to work, you must enable mapping for this group.");
}
int amount = 0;
for(Entity entity : group.all()){
if(((SyncTrait) entity).isSyncing()){
amount++;
}
}
//write group ID + group size
dataStream.writeByte(group.getID());
dataStream.writeShort(amount);
for(Entity entity : group.all()){
if(!((SyncTrait) entity).isSyncing()) continue;
int position = syncStream.position();
//write all entities now
dataStream.writeInt(entity.getID()); //write id
dataStream.writeByte(((SyncTrait) entity).getTypeID()); //write type ID
((SyncTrait) entity).write(dataStream); //write entity
int length = syncStream.position() - position; //length must always be less than 127 bytes
if(length > 127)
throw new RuntimeException("Write size for entity of type " + group.getType() + " must not exceed 127!");
dataStream.writeByte(length);
}
}
writeSnapshot(player, dataStream);
byte[] bytes = syncStream.toByteArray();
@@ -132,6 +132,8 @@ public class Renderer extends RendererModule{
@Override
public void update(){
//TODO hack, find source of this bug
Color.WHITE.set(1f, 1f, 1f, 1f);
if(Core.cameraScale != targetscale){
float targetzoom = (float) Core.cameraScale / targetscale;
@@ -195,6 +197,10 @@ public class Renderer extends RendererModule{
@Override
public void draw(){
camera.update();
if(Float.isNaN(Core.camera.position.x) || Float.isNaN(Core.camera.position.y)){
Core.camera.position.x = players[0].x;
Core.camera.position.y = players[0].y;
}
Graphics.clear(clearColor);
@@ -278,6 +284,7 @@ public class Renderer extends RendererModule{
drawAndInterpolate(playerGroup, p -> !p.isDead() && !p.isLocal, Player::drawName);
EntityDraw.setClip(true);
Graphics.end();
Draw.color();
}
private void drawFlyerShadows(){
+7
View File
@@ -283,6 +283,13 @@ public class UI extends SceneModule{
}}.show();
}
public void showText(String title, String text){
new Dialog(title, "dialog"){{
content().margin(15).add(text).width(400f).wrap().get().setAlignment(Align.center, Align.center);
buttons().addButton("$text.ok", this::hide).size(90, 50).pad(4);
}}.show();
}
public void showConfirm(String title, String text, Runnable confirmed){
FloatingDialog dialog = new FloatingDialog(title);
dialog.content().add(text).width(400f).wrap().pad(4f).get().setAlignment(Align.center, Align.center);
+13 -5
View File
@@ -237,12 +237,9 @@ public class World extends Module{
EntityPhysics.resizeTree(0, 0, width * tilesize, height * tilesize);
Timers.mark();
generator.generateMap(tiles, sector);
endMapLoad();
Log.info("Full time to generate: {0}", Timers.elapsed());
}
public void loadMap(Map map){
@@ -256,7 +253,18 @@ public class World extends Module{
EntityPhysics.resizeTree(0, 0, width * tilesize, height * tilesize);
generator.loadTileData(tiles, MapIO.readTileData(map, true), map.meta.hasOreGen(), 0);
try{
generator.loadTileData(tiles, MapIO.readTileData(map, true), map.meta.hasOreGen(), 0);
} catch(Exception e){
Log.err(e);
if(!headless){
ui.showError("$text.map.invalid");
threads.runDelay(() -> state.set(State.menu));
invalidMap = true;
}
generating = false;
return;
}
if(!headless && state.teams.get(players[0].getTeam()).cores.size == 0){
ui.showError("$text.map.nospawn");
@@ -289,7 +297,7 @@ public class World extends Module{
}
public void setBlock(Tile tile, Block block, Team team){
tile.setBlock(block);
tile.setBlock(block, team);
if(block.isMultiblock()){
int offsetx = -(block.size - 1) / 2;
int offsety = -(block.size - 1) / 2;
@@ -82,14 +82,6 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
//region unit and event overrides, utility methods
@Remote(targets = Loc.server, called = Loc.server)
public static void onPlayerDamage(Player player, float amount){
if(player == null) return;
player.hitTime = hitDuration;
player.health -= amount;
}
@Remote(targets = Loc.server, called = Loc.server)
public static void onPlayerDeath(Player player){
if(player == null) return;
@@ -227,7 +219,10 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
@Override
public void damage(float amount){
Call.onPlayerDamage(this, calculateDamage(amount));
hitTime = hitDuration;
if(!Net.client()){
health -= amount;
}
if(health <= 0 && !dead){
Call.onPlayerDeath(this);
@@ -365,9 +360,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
public void drawOver(){
if(dead) return;
if(!isShooting()){
drawBuilding(this);
}
drawBuilding(this);
if(mech.flying || boostHeat > 0.001f){
float wobblyness = 0.6f;
@@ -443,6 +436,13 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
public void update(){
hitTime = Math.max(0f, hitTime - Timers.delta());
if(Float.isNaN(x) || Float.isNaN(y)){
TileEntity core = getClosestCore();
if(core != null){
set(core.x, core.y);
}
}
if(isDead()){
isBoosting = false;
boostHeat = 0f;
@@ -478,9 +478,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
avoidOthers(8f);
}
if(!isShooting()){
updateBuilding(this);
}
updateBuilding(this);
x = Mathf.clamp(x, 0, world.width() * tilesize);
y = Mathf.clamp(y, 0, world.height() * tilesize);
@@ -33,17 +33,11 @@ import static io.anuke.mindustry.Vars.state;
import static io.anuke.mindustry.Vars.world;
public abstract class Unit extends DestructibleEntity implements SaveTrait, TargetTrait, SyncTrait, DrawTrait, TeamTrait, CarriableTrait, InventoryTrait{
/**
* total duration of hit flash effect
*/
/**Total duration of hit flash effect*/
public static final float hitDuration = 9f;
/**
* Percision divisor of velocity, used when writing. For example a value of '2' would mean the percision is 1/2 = 0.5-size chunks.
*/
/**Percision divisor of velocity, used when writing. For example a value of '2' would mean the percision is 1/2 = 0.5-size chunks.*/
public static final float velocityPercision = 8f;
/**
* Maximum absolute value of a velocity vector component.
*/
/**Maximum absolute value of a velocity vector component.*/
public static final float maxAbsVelocity = 127f / velocityPercision;
private static final Vector2 moveVector = new Vector2();
@@ -147,11 +147,14 @@ public class Units{
}
}
/**
* Returns the closest target enemy. First, units are checked, then tile entities.
*/
/**Returns the closest target enemy. First, units are checked, then tile entities.*/
public static TargetTrait getClosestTarget(Team team, float x, float y, float range){
Unit unit = getClosestEnemy(team, x, y, range, u -> true);
return getClosestTarget(team, x, y, range, u -> true);
}
/**Returns the closest target enemy. First, units are checked, then tile entities.*/
public static TargetTrait getClosestTarget(Team team, float x, float y, float range, Predicate<Unit> unitPred){
Unit unit = getClosestEnemy(team, x, y, range, unitPred);
if(unit != null){
return unit;
}else{
@@ -179,7 +179,7 @@ public class Puddle extends BaseEntity implements SaveTrait, Poolable, DrawTrait
float deposited = Math.min((amount - maxLiquid / 1.5f) / 4f, 0.3f) * Timers.delta();
for(GridPoint2 point : Geometry.d4){
Tile other = world.tile(tile.x + point.x, tile.y + point.y);
if(other.block() == Blocks.air && !other.hasCliffs()){
if(other != null && other.block() == Blocks.air && !other.hasCliffs()){
deposit(other, tile, liquid, deposited, generation + 1);
amount -= deposited / 2f; //tweak to speed up/slow down puddle propagation
}
@@ -10,6 +10,7 @@ import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.entities.Unit;
import io.anuke.mindustry.gen.Call;
import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.Recipe;
import io.anuke.mindustry.world.Build;
@@ -71,6 +72,7 @@ public interface BuilderTrait extends Entity{
if(request != null){
output.writeByte(request.remove ? 1 : 0);
output.writeInt(world.toPacked(request.x, request.y));
output.writeFloat(request.progress);
if(!request.remove){
output.writeByte(request.recipe.id);
output.writeByte(request.rotation);
@@ -91,6 +93,7 @@ public interface BuilderTrait extends Entity{
byte type = input.readByte();
if(type != -1){
int position = input.readInt();
float progress = input.readFloat();
BuildRequest request;
if(type == 1){ //remove
@@ -101,8 +104,12 @@ public interface BuilderTrait extends Entity{
request = new BuildRequest(position % world.width(), position / world.width(), rotation, Recipe.getByID(recipe));
}
request.progress = progress;
if(applyChanges){
getPlaceQueue().addLast(request);
}else if(isBuilding()){
getCurrentRequest().progress = progress;
}
}
}
@@ -144,6 +151,10 @@ public interface BuilderTrait extends Entity{
return;
}
}
Tile tile = world.tile(place.x, place.y);
if(tile != null && tile.entity instanceof BuildEntity){
place.progress = tile.<BuildEntity>entity().progress;
}
getPlaceQueue().addLast(place);
}
}
@@ -202,17 +213,28 @@ public interface BuilderTrait extends Entity{
//otherwise, update it.
BuildEntity entity = tile.entity();
//deconstructing is 2x as fast
if(current.remove){
entity.deconstruct(unit, core, 2f / entity.buildCost * Timers.delta() * getBuildPower(tile));
}else{
entity.construct(unit, core, 1f / entity.buildCost * Timers.delta() * getBuildPower(tile));
if(entity == null){
getPlaceQueue().removeFirst();
return;
}
if(unit.distanceTo(tile) <= placeDistance){
unit.rotation = Mathf.slerpDelta(unit.rotation, unit.angleTo(entity), 0.4f);
}
current.progress = entity.progress();
//progress is synced, thus not updated clientside
if(!Net.client()){
//deconstructing is 2x as fast
if(current.remove){
entity.deconstruct(unit, core, 2f / entity.buildCost * Timers.delta() * getBuildPower(tile));
}else{
entity.construct(unit, core, 1f / entity.buildCost * Timers.delta() * getBuildPower(tile));
}
current.progress = entity.progress();
}else{
entity.progress = current.progress;
}
}
/**Do not call directly.*/
@@ -133,7 +133,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
}
public boolean targetHasFlag(BlockFlag flag){
return target instanceof TileEntity &&
return target instanceof TileEntity && ((TileEntity) target).tile.block().flags != null &&
((TileEntity) target).tile.block().flags.contains(flag);
}
@@ -3,6 +3,7 @@ package io.anuke.mindustry.entities.units;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.content.Items;
import io.anuke.mindustry.entities.effect.ItemDrop;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.type.Item;
import io.anuke.ucore.util.Mathf;
@@ -11,7 +12,7 @@ public class UnitDrops{
private static Item[] dropTable;
public static void dropItems(BaseUnit unit){
if(Vars.itemGroup.size() > maxItems){
if(Vars.itemGroup.size() > maxItems || unit.getTeam() != Team.red){
return;
}
@@ -190,7 +190,7 @@ public class Drone extends FlyingUnit implements BuilderTrait{
public void update(){
ItemDrop item = (ItemDrop) target;
if(inventory.isFull() || !inventory.canAcceptItem(item.getItem(), 1)){
if(item == null || inventory.isFull() || !inventory.canAcceptItem(item.getItem(), 1)){
setState(drop);
return;
}
@@ -329,6 +329,10 @@ public class Drone extends FlyingUnit implements BuilderTrait{
public void update(){
super.update();
if(state.is(repair) && target != null && target.getTeam() != team){
target = null;
}
if(Net.client() && state.is(repair) && target instanceof TileEntity){
TileEntity entity = (TileEntity) target;
entity.health += type.healSpeed * Timers.delta();
@@ -429,7 +433,7 @@ public class Drone extends FlyingUnit implements BuilderTrait{
@Override
public void write(DataOutput data) throws IOException{
super.write(data);
data.writeInt(mineTile == null ? -1 : mineTile.packedPosition());
data.writeInt(mineTile == null || !state.is(mine) ? -1 : mineTile.packedPosition());
data.writeInt(state.is(repair) && target instanceof TileEntity ? ((TileEntity)target).tile.packedPosition() : -1);
writeBuilding(data);
}
+10 -1
View File
@@ -162,6 +162,8 @@ public class Saves{
}
public void save(){
long time = totalPlaytime;
threads.runGraphics(() -> {
//Renderer fog needs to be written on graphics thread, but save() can run on logic thread
//thus, runGraphics is required here
@@ -169,9 +171,16 @@ public class Saves{
//save on the logic thread
threads.run(() -> {
long prev = totalPlaytime;
totalPlaytime = time;
SaveIO.saveToSlot(index);
meta = SaveIO.getData(index);
current = this;
if(!state.is(State.menu)){
current = this;
}
totalPlaytime = prev;
});
});
}
@@ -144,7 +144,7 @@ public class MinimapRenderer implements Disposable{
private int colorFor(Tile tile){
tile = tile.target();
return ColorMapper.colorFor(tile.floor(), tile.block(), tile.getTeam(), tile.getElevation());
return ColorMapper.colorFor(tile.floor(), tile.block(), tile.getTeam(), tile.getElevation(), tile.getCliffs());
}
@Override
@@ -24,6 +24,7 @@ import io.anuke.ucore.util.Mathf;
import static io.anuke.mindustry.Vars.*;
public class OverlayRenderer{
private float buildFadeTime;
public void drawBottom(){
for(Player player : players){
@@ -58,6 +59,24 @@ public class OverlayRenderer{
input.drawTop();
buildFadeTime = Mathf.lerpDelta(buildFadeTime, input.isPlacing() ? 1f : 0f, 0.06f);
Draw.reset();
Lines.stroke(buildFadeTime*2f);
if(buildFadeTime > 0.005f){
for(TeamData data : state.teams.enemyDataOf(player.getTeam())){
for(Tile core : data.cores){
float dst = Vector2.dst(player.x, player.y, core.drawx(), core.drawy());
if(dst < enemyCoreBuildRange * 1.5f){
Draw.color(Color.DARK_GRAY);
Lines.poly(core.drawx(), core.drawy() - 2, 200, enemyCoreBuildRange);
Draw.color(Palette.accent, data.team.color, 0.5f + Mathf.absin(Timers.time(), 10f, 0.5f));
Lines.poly(core.drawx(), core.drawy(), 200, enemyCoreBuildRange);
}
}
}
}
Draw.reset();
//draw selected block bars and info
@@ -83,6 +83,7 @@ public abstract class InputHandler extends InputAdapter{
int sent = Mathf.clamp(accepted / 4, 1, 8);
int removed = accepted / sent;
int[] remaining = {accepted, accepted};
Block block = tile.block();
for(int i = 0; i < sent; i++){
boolean end = i == sent - 1;
@@ -92,6 +93,7 @@ public abstract class InputHandler extends InputAdapter{
ItemTransfer.create(stack.item,
player.x + Angles.trnsx(player.rotation + 180f, backTrns), player.y + Angles.trnsy(player.rotation + 180f, backTrns),
new Translator(tile.drawx() + stackTrns.x, tile.drawy() + stackTrns.y), () -> {
if(tile.block() != block || tile.entity == null) return;
tile.block().handleStack(stack.item, removed, tile, player);
remaining[1] -= removed;
@@ -584,6 +584,11 @@ public class MobileInput extends InputHandler implements GestureListener{
@Override
public void update(){
if(state.is(State.menu)){
selection.clear();
removals.clear();
mode = none;
}
//reset state when not placing
if(mode == none){
+1 -1
View File
@@ -105,7 +105,7 @@ public class TypeIO{
@WriteClass(CarryTrait.class)
public static void writeCarry(ByteBuffer buffer, CarryTrait unit){
if(unit == null){
if(unit == null || unit.getGroup() == null){
buffer.put((byte) -1);
return;
}
@@ -76,7 +76,9 @@ public class Save16 extends SaveFileVersion{
short width = stream.readShort();
short height = stream.readShort();
if(map == null){
if(world.getSector() != null){
world.setMap(new Map("Sector " + world.getSector().x + ", " + world.getSector().y, width, height));
}else if(map == null){
world.setMap(new Map("unknown", width, height));
}
@@ -182,7 +182,7 @@ public class Sectors{
GenResult result = world.generator().generateTile(sector.x, sector.y, toX, toY, false);
int color = ColorMapper.colorFor(result.floor, result.wall, Team.none, result.elevation);
int color = ColorMapper.colorFor(result.floor, result.wall, Team.none, result.elevation, (byte)0);
pixmap.drawPixel(x, pixmap.getHeight() - 1 - y, color);
}
}
@@ -33,8 +33,6 @@ public class FortressGenerator{
private static void init(){
if(structures != null) return;
String vaults = "BQMADWNhcmJpZGUtZHJpbGwCAA10dW5nc3Rlbi13YWxsAQATdHVuZ3N0ZW4td2FsbC1sYXJnZQAAA2FpcgQABXZhdWx0CQUAAgABAAEAAQABAAIAAAABAAAAAAACAAAAAQAAAAABAQABAgEBAQAAAAIAAgMBAAEAAAICAAAAAAAAAgACAgAABAIAAAIAAgIAAAAAAAACAAICAgMCAwIDAgM=";
structures = new Structure[]{
//tiny duo outpost
new Structure(0.03f, Items.tungsten, "BAMADnR1bmdzdGVuLWRyaWxsAgADZHVvAQANdHVuZ3N0ZW4td2FsbAAAA2FpcgMFAQABAwEDAQMBAAEAAgMDAwIDAQABAAEBAQEBAQEA"),
@@ -51,9 +49,6 @@ public class FortressGenerator{
//resupply point
new Structure(0.03f, Items.lead, "BgEADXR1bmdzdGVuLXdhbGwCAAtzb2xhci1wYW5lbAUAA2R1bwMADnJlc3VwcGx5LXBvaW50AAADYWlyBAANY2FyYmlkZS1kcmlsbAUFAQABAAEAAAAAAAEAAgMBAQEBAQABAAMDBAEFAQEAAQACAwEBAQEBAAEBAQEBAQAAAAA="),
//lead storage
new Structure(0.02f, Items.lead, vaults),
//mini dagger outpost
new Structure(0.02f, Items.lead, "CwIADXR1bmdzdGVuLXdhbGwGAAhjb252ZXlvcgUAA2R1bwgACmRhZ2dlci1wYWQBABN0dW5nc3Rlbi13YWxsLWxhcmdlBwAIc3BsaXR0ZXIDAA5yZXN1cHBseS1wb2ludAoADHJlcGFpci1wb2ludAkADnR1bmdzdGVuLWRyaWxsAAADYWlyBAALc29sYXItcGFuZWwHCQAAAAABAAABAgECAQIBAAAAAAEAAAMAAwADAwEEAAIBAgICAgAAAAAFAwYDBwMCAQIBBQECAgAAAAAIAAAACQMGAQYBBwMCAgAAAAAAAAAAAQMAAAIDBQECAgEAAAAKAQQBAAAAAAIBAgECAgAAAAACAQIBAgEAAAAAAAAAAA=="),
@@ -63,9 +58,6 @@ public class FortressGenerator{
//advanced laser outpost
new Structure(0.03f, null, "BQIABmxhbmNlcgEAEmNhcmJpZGUtd2FsbC1sYXJnZQQAEXNvbGFyLXBhbmVsLWxhcmdlAAADYWlyAwALc29sYXItcGFuZWwLCwAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMAAwAAAAAAAwABAAAAAAABAAAAAgAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAQAAAACAAAAAQAAAAAAAQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAIAAAADAAMAAQAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"),
//titanium storage
new Structure(0.02f, Items.titanium, vaults),
//2x interceptor outpost
new Structure(0.02f, Items.lead, "CgMAEXNvbGFyLXBhbmVsLWxhcmdlBgADZHVvAgAPaW50ZXJjZXB0b3ItcGFkBAASY2FyYmlkZS13YWxsLWxhcmdlBwAOcmVzdXBwbHktcG9pbnQAAANhaXIFAAtzb2xhci1wYW5lbAEADGNhcmJpZGUtd2FsbAkAC2Rpc3RyaWJ1dG9yCAALbGFzZXItZHJpbGwKCAEAAQMBAwEDAQMBAwECAAABAAIDAAAAAAAAAAABAgAAAQAAAAAAAAADAQAAAQIBAgQDAAAFAAAAAAAAAAYCAQMAAAAABwAIAAAACQAAAAECBAMAAAEAAAAAAAABAAABAgAAAAAFAAAAAAAAAAYCAQIBAAIDAAAAAAMBAAABAgECAQAAAAAAAAAAAAAAAQIAAAEAAQEBAQEBAQEBAQEBAAA="),
@@ -80,9 +72,6 @@ public class FortressGenerator{
//fabricator outpost
new Structure(0.02f, Items.tungsten, "BgUADWNhcmJpZGUtZHJpbGwBABJ0aG9yaXVtLXdhbGwtbGFyZ2UCAAx0aG9yaXVtLXdhbGwEAANkdW8AAANhaXIDAA5mYWJyaWNhdG9yLXBhZAkJAAAAAAEDAAACAwEDAAAAAAAAAAACAwADAAMCAwADAAMCAgAAAQMAAAMCAAACAAMCAAABAwAAAAAAAAAAAAAEAgAAAAAAAgAAAgMCAAIBBAIFAAQCAgMCAgIDAQMAAAMCAAAEAgMCAAABAwAAAAAAAAAAAAACAQAAAAAAAgAAAAACAAEDAAECAQEDAAECAQAAAAAAAAAAAAACAwACAAAAAAAA"),
//coal storage
new Structure(0.02f, Items.coal, vaults),
};
bases = new Structure[]{
@@ -139,7 +128,7 @@ public class FortressGenerator{
int maxIndex = (int)(1 + ((float)gen.sector.difficulty / maxDifficulty * (structures.length-2)));
for(int i = maxIndex/2; i < maxIndex; i++){
selected.add(structures[i]);
selected.add(structures[Math.min(i, structures.length-1)]);
}
float baseChance = 0.8f / selected.size;
@@ -198,7 +187,7 @@ public class FortressGenerator{
Block fixBlock(Block result){
if(result == UnitBlocks.resupplyPoint) result = DefenseBlocks.tungstenWall;
if(result == UnitBlocks.monsoonPad) result = DefenseBlocks.tungstenWallLarge;
if(result == UnitBlocks.dronePad) result = DefenseBlocks.tungstenWallLarge;
if(result == UnitBlocks.fabricatorPad) result = DefenseBlocks.tungstenWallLarge;
return result;
}
@@ -283,8 +283,10 @@ public class WorldGenerator{
if(iceridge > 0.25 && minDst > lerpDst/1.5f){
elevation ++;
}
}else{
}else if(minDst > lerpDst/1.5f){
floor = Blocks.lava;
}else{
floor = Blocks.blackstone;
}
if(temp < 0.6f){
@@ -19,7 +19,6 @@ public class WaveMission implements Mission{
@Override
public Array<SpawnGroup> getWaves(Sector sector){
Array<SpawnGroup> spawns = new Array<>();
return Waves.getSpawns();
}
+7 -1
View File
@@ -10,6 +10,8 @@ import com.badlogic.gdx.utils.IntMap;
import com.badlogic.gdx.utils.ObjectMap;
import com.badlogic.gdx.utils.reflect.ClassReflection;
import io.anuke.mindustry.core.Platform;
import io.anuke.mindustry.gen.Call;
import io.anuke.mindustry.net.Packets.KickReason;
import io.anuke.mindustry.net.Packets.StreamBegin;
import io.anuke.mindustry.net.Packets.StreamChunk;
import io.anuke.mindustry.net.Streamable.StreamBuilder;
@@ -88,7 +90,7 @@ public class Net{
}
/**
* Host a server at an address
* Host a server at an address.
*/
public static void host(int port) throws IOException{
serverProvider.host(port);
@@ -102,6 +104,10 @@ public class Net{
* Closes the server.
*/
public static void closeServer(){
for(NetConnection con : getConnections()){
Call.onKick(con.id, KickReason.serverClose);
}
serverProvider.close();
server = false;
active = false;
@@ -129,6 +129,9 @@ public class NetworkIO{
}
}
//now write a snapshot.
netServer.writeSnapshot(player, stream);
}catch(IOException e){
throw new RuntimeException(e);
}
@@ -185,10 +188,10 @@ public class NetworkIO{
int height = stream.readShort();
//TODO send advanced map meta such as author, etc
//TODO scan for cores
Map currentMap = new Map(map, new MapMeta(0, new ObjectMap<>(), width, height, null), true, () -> null);
currentMap.meta.tags.clear();
currentMap.meta.tags.putAll(tags);
world.setSector(null);
world.setMap(currentMap);
Tile[][] tiles = world.createTiles(width, height);
@@ -270,6 +273,9 @@ public class NetworkIO{
world.endMapLoad();
//read raw snapshot
netClient.readSnapshot(stream);
}catch(IOException e){
throw new RuntimeException(e);
}
+25 -12
View File
@@ -1,5 +1,6 @@
package io.anuke.mindustry.net;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Base64Coder;
import com.badlogic.gdx.utils.TimeUtils;
import io.anuke.mindustry.Vars;
@@ -10,6 +11,7 @@ import io.anuke.mindustry.game.Version;
import io.anuke.mindustry.type.Recipe;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.io.IOUtils;
import io.anuke.ucore.util.Bundles;
import io.anuke.ucore.util.Mathf;
import java.nio.ByteBuffer;
@@ -22,16 +24,27 @@ import static io.anuke.mindustry.Vars.world;
public class Packets{
public enum KickReason{
kick, invalidPassword, clientOutdated, serverOutdated, banned, gameover(true), recentKick, nameInUse, idInUse, fastShoot, nameEmpty, customClient;
kick, clientOutdated, serverOutdated, banned, gameover(true), recentKick,
nameInUse, idInUse, nameEmpty, customClient, sectorComplete, serverClose;
public final boolean quiet;
KickReason(){
quiet = false;
this(false);
}
KickReason(boolean quiet){
this.quiet = quiet;
}
@Override
public String toString(){
return Bundles.get("text.server.kicked." + name());
}
public String extraText(){
return Bundles.getOrNull("text.server.kicked." + name() + ".text");
}
}
public enum AdminAction{
@@ -143,7 +156,7 @@ public class Packets{
public float x, y, pointerX, pointerY, rotation, baseRotation, xv, yv;
public Tile mining;
public boolean boosting, shooting;
public BuildRequest currentRequest;
public Array<BuildRequest> requests = new Array<>();
@Override
public void write(ByteBuffer buffer){
@@ -168,17 +181,14 @@ public class Packets{
buffer.putInt(player.getMineTile() == null ? -1 : player.getMineTile().packedPosition());
BuildRequest request = player.getCurrentRequest();
if(request != null){
buffer.putShort((short)player.getPlaceQueue().size);
for(BuildRequest request : player.getPlaceQueue()){
buffer.put(request.remove ? (byte) 1 : 0);
buffer.putInt(world.toPacked(request.x, request.y));
if(!request.remove){
buffer.put((byte) request.recipe.id);
buffer.put((byte) request.rotation);
}
}else{
buffer.put((byte) -1);
}
}
@@ -199,10 +209,13 @@ public class Packets{
rotation = buffer.getShort() / 2f;
baseRotation = buffer.getShort() / 2f;
mining = world.tile(buffer.getInt());
requests.clear();
byte type = buffer.get();
if(type != -1){
short reqamount = buffer.getShort();
for(int i = 0; i < reqamount; i++){
byte type = buffer.get();
int position = buffer.getInt();
BuildRequest currentRequest;
if(type == 1){ //remove
currentRequest = new BuildRequest(position % world.width(), position / world.width());
@@ -211,8 +224,8 @@ public class Packets{
byte rotation = buffer.get();
currentRequest = new BuildRequest(position % world.width(), position / world.width(), rotation, Recipe.getByID(recipe));
}
}else{
currentRequest = null;
requests.add(currentRequest);
}
}
}
@@ -6,6 +6,7 @@ import com.badlogic.gdx.utils.ObjectMap;
import com.badlogic.gdx.utils.OrderedMap;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.game.Content;
import io.anuke.mindustry.game.GameMode;
import io.anuke.mindustry.game.UnlockableContent;
import io.anuke.mindustry.ui.ContentDisplay;
import io.anuke.mindustry.world.Block;
@@ -33,6 +34,8 @@ public class Recipe implements UnlockableContent{
public final float cost;
public boolean desktopOnly = false, debugOnly = false;
//the only gamemode in which the recipe shows up
public GameMode targetMode;
private Block[] dependencies;
private Recipe[] recipeDependencies;
@@ -101,6 +104,11 @@ public class Recipe implements UnlockableContent{
}
}
public Recipe setMode(GameMode mode){
this.targetMode = mode;
return this;
}
public Recipe setDesktop(){
desktopOnly = true;
return this;
@@ -96,8 +96,6 @@ public class ContentDisplay{
table.row();
table.add(Bundles.format("text.item.fluxiness", (int) (item.fluxiness * 100)));
table.row();
table.add(Bundles.format("text.item.hardness", item.hardness));
table.row();
}
public static void displayLiquid(Table table, Liquid liquid){
@@ -128,6 +128,7 @@ public class CustomGameDialog extends FloatingDialog{
pane.setFadeScrollBars(false);
table.row();
for(GameMode mode : GameMode.values()){
if(mode.hidden) continue;
table.labelWrap("[accent]" + mode.toString() + ":[] [lightgray]" + mode.description()).width(400f);
table.row();
}
@@ -82,7 +82,7 @@ public class GenViewDialog extends FloatingDialog{
for(int i = 0; i < sectorSize; i++){
for(int j = 0; j < sectorSize; j++){
world.generator().generateTile(result, wx, wy, i, j, true, null);
pixmap.drawPixel(i, sectorSize - 1 - j, ColorMapper.colorFor(result.floor, result.wall, Team.none, result.elevation));
pixmap.drawPixel(i, sectorSize - 1 - j, ColorMapper.colorFor(result.floor, result.wall, Team.none, result.elevation, (byte)0));
}
}
Gdx.app.postRunnable(() -> map.put(wx, wy, new Texture(pixmap)));
@@ -12,10 +12,7 @@ import io.anuke.mindustry.net.Net;
import io.anuke.ucore.core.Settings;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.scene.style.Drawable;
import io.anuke.ucore.scene.ui.Dialog;
import io.anuke.ucore.scene.ui.ImageButton;
import io.anuke.ucore.scene.ui.ScrollPane;
import io.anuke.ucore.scene.ui.TextButton;
import io.anuke.ucore.scene.ui.*;
import io.anuke.ucore.scene.ui.layout.Cell;
import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.ucore.scene.utils.UIUtils;
@@ -49,10 +46,12 @@ public class JoinDialog extends FloatingDialog{
add = new FloatingDialog("$text.joingame.title");
add.content().add("$text.joingame.ip").padRight(5f).left();
Platform.instance.addDialog(add.content().addField(Settings.getString("ip"), text -> {
TextField field = add.content().addField(Settings.getString("ip"), text -> {
Settings.putString("ip", text);
Settings.save();
}).size(320f, 54f).get(), 100);
}).size(320f, 54f).get();
Platform.instance.addDialog(field, 100);
add.content().row();
add.buttons().defaults().size(140f, 60f).pad(4f);
@@ -75,6 +74,9 @@ public class JoinDialog extends FloatingDialog{
add.shown(() -> {
add.getTitleLabel().setText(renaming != null ? "$text.server.edit" : "$text.server.add");
if(renaming != null){
field.setText(renaming.ip);
}
});
shown(() -> {
@@ -41,7 +41,8 @@ public class SectorsDialog extends FloatingDialog{
+ (selected.saveID == -1 ? " " + Bundles.get("text.sector.unexplored") :
(selected.hasSave() ? " [accent]/[white] " + Bundles.format("text.sector.time", selected.getSave().getPlayTime()) : ""))));
content().row();
content().label(() -> Bundles.format("text.mission", selected == null || selected.completedMissions >= selected.missions.size ? Bundles.get("text.none") : selected.missions.get(selected.completedMissions).displayString())
content().label(() -> Bundles.format("text.mission", selected == null || selected.completedMissions >= selected.missions.size
? Bundles.get("text.none") : selected.missions.get(selected.completedMissions).displayString())
+ " [WHITE]" + (selected == null ? "" : Bundles.format("text.save.difficulty", "[LIGHT_GRAY]" + selected.getDifficulty().toString())));
content().row();
content().add(new SectorView()).grow();
@@ -89,7 +89,7 @@ public class BlockInventoryFragment extends Fragment{
table.background("inventory");
table.setTouchable(Touchable.enabled);
table.update(() -> {
if(tile == null || tile.entity == null || !tile.block().isAccessible() || tile.entity.items.total() == 0){
if(state.is(State.menu) || tile == null || tile.entity == null || !tile.block().isAccessible() || tile.entity.items.total() == 0){
hide();
}else{
if(holding && lastItem != null){
@@ -7,11 +7,13 @@ import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
import io.anuke.mindustry.input.InputHandler;
import io.anuke.mindustry.type.Category;
import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.type.Recipe;
import io.anuke.ucore.core.Core;
import io.anuke.ucore.core.Events;
import io.anuke.ucore.core.Graphics;
import io.anuke.ucore.scene.Element;
import io.anuke.ucore.scene.Group;
@@ -63,13 +65,13 @@ public class BlocksFragment extends Fragment{
//add top description table
descTable = new Table("button");
descTable.visible(() -> hoverRecipe != null || input.recipe != null); //make sure it's visible when necessary
descTable.visible(() -> (hoverRecipe != null || input.recipe != null) && shown); //make sure it's visible when necessary
descTable.update(() -> {
// note: This is required because there is no direct connection between input.recipe and the description ui.
// If input.recipe gets set to null, a proper cleanup of the ui elements is required.
boolean anyRecipeShown = input.recipe != null || hoverRecipe != null;
boolean descriptionTableClean = descTable.getChildren().size == 0;
boolean cleanupRequired = !anyRecipeShown && !descriptionTableClean;
boolean cleanupRequired = (!anyRecipeShown && !descriptionTableClean);
if(cleanupRequired){
descTable.clear();
}
@@ -87,6 +89,8 @@ public class BlocksFragment extends Fragment{
}).bottom().right().get();
});
Events.on(WorldLoadEvent.class, this::rebuild);
rebuild();
}
@@ -165,7 +169,7 @@ public class BlocksFragment extends Fragment{
//add actual recipes
for(Recipe r : recipes){
if((r.debugOnly && !debug) || (r.desktopOnly && mobile)) continue;
if((r.debugOnly && !debug) || (r.desktopOnly && mobile) || (r.targetMode != null && r.targetMode != state.mode)) continue;
ImageButton image = new ImageButton(new TextureRegion(), "select");
@@ -59,10 +59,15 @@ public class ChatFragment extends Table{
visible(() -> !state.is(State.menu) && Net.active());
update(() -> {
if(!Net.active() && chatOpen){
hide();
if(!Net.active()){
clearMessages();
if(chatOpen){
hide();
}
}
if(Net.active() && Inputs.keyTap("chat")){
toggle();
}
@@ -103,8 +108,8 @@ public class ChatFragment extends Table{
chatfield = new TextField("", new TextField.TextFieldStyle(skin.get(TextField.TextFieldStyle.class)));
chatfield.setTextFieldFilter((field, c) -> field.getText().length() < Vars.maxTextLength);
chatfield.getStyle().background = null;
chatfield.getStyle().fontColor = Color.WHITE;
chatfield.getStyle().font = skin.getFont("default-font-chat");
chatfield.getStyle().fontColor = Color.WHITE;
chatfield.setStyle(chatfield.getStyle());
Platform.instance.addDialog(chatfield, Vars.maxTextLength);
@@ -127,8 +132,9 @@ public class ChatFragment extends Table{
batch.setColor(shadowColor);
if(chatOpen)
if(chatOpen){
batch.draw(skin.getRegion("white"), offsetx, chatfield.getY(), chatfield.getWidth() + 15f, chatfield.getHeight() - 1);
}
super.draw(batch, alpha);
@@ -84,7 +84,7 @@ public abstract class BaseBlock{
}
public boolean acceptItem(Item item, Tile tile, Tile source){
return tile.entity != null && consumes.has(ConsumeItem.class) && consumes.item() == item && tile.entity.items.total() < itemCapacity;
return tile.entity != null && consumes.has(ConsumeItem.class) && consumes.item() == item && tile.entity.items.get(item) < getMaximumAccepted(tile, item);
}
public boolean acceptLiquid(Tile tile, Tile source, Liquid liquid, float amount){
@@ -121,7 +121,7 @@ public abstract class BaseBlock{
Tile other = proximity.get((i + dump) % proximity.size);
Tile in = Edges.getFacingEdge(tile, other);
if(other.block().hasLiquids && canDumpLiquid(tile, other, liquid)){
if(other.getTeamID() == tile.getTeamID() && other.block().hasLiquids && canDumpLiquid(tile, other, liquid)){
float ofract = other.entity.liquids.get(liquid) / other.block().liquidCapacity;
float fract = tile.entity.liquids.get(liquid) / liquidCapacity;
@@ -149,7 +149,7 @@ public abstract class BaseBlock{
next = next.target();
if(next.block().hasLiquids && tile.entity.liquids.get(liquid) > 0f){
if(next.getTeamID() == tile.getTeamID() && next.block().hasLiquids && tile.entity.liquids.get(liquid) > 0f){
if(next.block().acceptLiquid(next, tile, liquid, 0f)){
float ofract = next.entity.liquids.get(liquid) / next.block().liquidCapacity;
@@ -199,7 +199,7 @@ public abstract class BaseBlock{
incrementDump(tile, proximity.size);
Tile other = proximity.get((i + dump) % proximity.size);
Tile in = Edges.getFacingEdge(tile, other);
if(other.block().acceptItem(item, other, in) && canDump(tile, other, item)){
if(other.getTeamID() == tile.getTeamID() && other.block().acceptItem(item, other, in) && canDump(tile, other, item)){
other.block().handleItem(item, other, in);
return;
}
@@ -239,7 +239,7 @@ public abstract class BaseBlock{
for(int ii = 0; ii < Item.all().size; ii++){
Item item = Item.getByID(ii);
if(entity.items.has(item) && other.block().acceptItem(item, other, in) && canDump(tile, other, item)){
if(other.getTeamID() == tile.getTeamID() && entity.items.has(item) && other.block().acceptItem(item, other, in) && canDump(tile, other, item)){
other.block().handleItem(item, other, in);
tile.entity.items.remove(item, 1);
incrementDump(tile, proximity.size);
@@ -248,7 +248,7 @@ public abstract class BaseBlock{
}
}else{
if(other.block().acceptItem(todump, other, in) && canDump(tile, other, todump)){
if(other.getTeamID() == tile.getTeamID() && other.block().acceptItem(todump, other, in) && canDump(tile, other, todump)){
other.block().handleItem(todump, other, in);
tile.entity.items.remove(todump, 1);
incrementDump(tile, proximity.size);
@@ -274,7 +274,7 @@ public abstract class BaseBlock{
/** Try offloading an item to a nearby container in its facing direction. Returns true if success.*/
public boolean offloadDir(Tile tile, Item item){
Tile other = tile.getNearby(tile.getRotation());
if(other != null && other.block().acceptItem(item, other, tile)){
if(other != null && other.target().getTeamID() == tile.getTeamID() && other.block().acceptItem(item, other, tile)){
other.block().handleItem(item, other, tile);
return true;
}
+1 -1
View File
@@ -42,7 +42,7 @@ public class Block extends BaseBlock implements Content{
/** internal ID */
public final int id;
/** display name */
public final String formalName;
public String formalName;
/** Detailed description of the block. Can be as long as necesary. */
public final String fullDescription;
/** whether this block has a tile entity that updates */
@@ -1,10 +1,12 @@
package io.anuke.mindustry.world;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
import io.anuke.mindustry.content.blocks.Blocks;
import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.game.EventType.BlockBuildEvent;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.game.TeamInfo.TeamData;
import io.anuke.mindustry.type.Recipe;
import io.anuke.mindustry.world.blocks.BuildBlock.BuildEntity;
import io.anuke.ucore.core.Events;
@@ -135,6 +137,15 @@ public class Build{
}
}
//check for enemy cores
for(TeamData data : state.teams.enemyDataOf(team)){
for(Tile core : data.cores){
if(Vector2.dst(x*tilesize + type.offset(), y*tilesize + type.offset(), core.drawx(), core.drawy()) < enemyCoreBuildRange + type.size*tilesize/2f){
return false;
}
}
}
Tile tile = world.tile(x, y);
if(tile == null) return false;
@@ -7,6 +7,7 @@ import com.badlogic.gdx.utils.ObjectIntMap;
import io.anuke.mindustry.game.Content;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.type.ContentList;
import io.anuke.ucore.util.Mathf;
public class ColorMapper implements ContentList{
private static IntMap<Block> blockMap = new IntMap<>();
@@ -21,7 +22,7 @@ public class ColorMapper implements ContentList{
return colorMap.get(block, 0);
}
public static int colorFor(Block floor, Block wall, Team team, int elevation){
public static int colorFor(Block floor, Block wall, Team team, int elevation, byte cliffs){
if(wall.synthetic()){
return team.intColor;
}
@@ -33,6 +34,9 @@ public class ColorMapper implements ContentList{
tmpColor.set(color);
float maxMult = 1f/Math.max(Math.max(tmpColor.r, tmpColor.g), tmpColor.b) ;
float mul = Math.min(1.1f + elevation / 4f, maxMult);
if((cliffs & Mathf.pow2(6)) != 0){
mul -= 0.5f;
}
tmpColor.mul(mul, mul, mul, 1f);
color = Color.rgba8888(tmpColor);
}
+10 -5
View File
@@ -8,6 +8,7 @@ import io.anuke.mindustry.content.blocks.Blocks;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.entities.traits.TargetTrait;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.world.blocks.BlockPart;
import io.anuke.mindustry.world.blocks.Floor;
import io.anuke.mindustry.world.modules.ConsumeModule;
import io.anuke.mindustry.world.modules.InventoryModule;
@@ -166,8 +167,13 @@ public class Tile implements PosTrait, TargetTrait{
}
public void setBlock(Block type, Team team){
setBlock(type);
setTeam(team);
synchronized(tileSetLock){
preChanged();
this.wall = type;
this.team = (byte)team.ordinal();
this.link = 0;
changed();
}
}
public void setBlock(Block type){
@@ -392,6 +398,7 @@ public class Tile implements PosTrait, TargetTrait{
if(entity != null){
entity.removeFromProximity();
}
team = 0;
}
}
@@ -403,8 +410,6 @@ public class Tile implements PosTrait, TargetTrait{
entity = null;
}
team = 0;
Block block = block();
if(block.hasEntity()){
@@ -414,7 +419,7 @@ public class Tile implements PosTrait, TargetTrait{
if(block.hasLiquids) entity.liquids = new LiquidModule();
if(block.hasPower) entity.power = new PowerModule();
entity.updateProximity();
}else{
}else if(!(block instanceof BlockPart)){
//since the entity won't update proximity for us, update proximity for all nearby tiles manually
for(GridPoint2 p : Geometry.d4){
Tile tile = world.tile(x + p.x, y + p.y);
@@ -53,9 +53,8 @@ public class BuildBlock extends Block{
@Remote(called = Loc.server)
public static void onConstructFinish(Tile tile, Block block, int builderID, byte rotation, Team team){
world.setBlock(tile, block, team);
tile.setRotation(rotation);
tile.setTeam(team);
world.setBlock(tile, block, team);
Effects.effect(Fx.placeBlock, tile.drawx(), tile.drawy(), block.size);
//last builder was this local client player, call placed()
@@ -218,6 +217,9 @@ public class BuildBlock extends Block{
if(recipe != null){
ItemStack[] requirements = recipe.requirements;
if(requirements.length != accumulator.length || totalAccumulator.length != requirements.length){
setDeconstruct(previous);
}
for(int i = 0; i < requirements.length; i++){
accumulator[i] += Math.min(requirements[i].amount * amount / 2f, requirements[i].amount/2f - totalAccumulator[i]); //add scaled amount progressed to the accumulator
@@ -225,7 +227,7 @@ public class BuildBlock extends Block{
int accumulated = (int) (accumulator[i]); //get amount
if(amount > 0){ //if it's positive, add it to the core
if(amount > 0 && accumulated > 0){ //if it's positive, add it to the core
int accepting = core.tile.block().acceptStack(requirements[i].item, accumulated, core.tile, builder);
core.tile.block().handleStack(requirements[i].item, accepting, core.tile, builder);
@@ -236,7 +238,7 @@ public class BuildBlock extends Block{
progress = Mathf.clamp(progress - amount);
if(progress <= 0 || debug || state.mode.infiniteResources){
if(progress <= 0 || state.mode.infiniteResources){
Call.onDeconstructFinish(tile, this.recipe == null ? previous : this.recipe.result);
}
}
@@ -1,12 +0,0 @@
package io.anuke.mindustry.world.blocks;
import io.anuke.mindustry.content.blocks.Blocks;
public class Ore extends Floor{
public Ore(String name){
super(name);
blends = block -> block != this && block != Blocks.stone;
}
}
@@ -14,6 +14,7 @@ public class OreBlock extends Floor{
public OreBlock(Item ore, Floor base){
super("ore-" + ore.name + "-" + base.name);
this.formalName = ore.localizedName() + " " + base.formalName;
this.drops = new ItemStack(ore, 1);
this.base = base;
this.variants = 3;
@@ -7,10 +7,10 @@ import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.content.fx.Fx;
import io.anuke.mindustry.entities.Predict;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.entities.Unit;
import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.entities.bullet.Bullet;
import io.anuke.mindustry.entities.bullet.BulletType;
import io.anuke.mindustry.entities.traits.TargetTrait;
import io.anuke.mindustry.graphics.Layer;
import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.type.AmmoEntry;
@@ -37,7 +37,7 @@ import java.io.IOException;
import static io.anuke.mindustry.Vars.tilesize;
public abstract class Turret extends Block{
protected static final int targetInterval = 15;
protected static final int targetInterval = 20;
protected final int timerTarget = timers++;
@@ -188,11 +188,11 @@ public abstract class Turret extends Block{
if(hasAmmo(tile)){
if(entity.timer.get(timerTarget, targetInterval)){
entity.target = Units.getClosestEnemy(tile.getTeam(),
entity.target = Units.getClosestTarget(tile.getTeam(),
tile.drawx(), tile.drawy(), range, e -> !e.isDead() && (!e.isFlying() || targetAir));
}
if(entity.target != null){
if(!Units.invalidateTarget(entity.target, tile.getTeam(), tile.drawx(), tile.drawy())){
AmmoType type = peekAmmo(tile);
float speed = type.bullet.speed;
if(speed < 0.1f) speed = 9999999f;
@@ -322,7 +322,7 @@ public abstract class Turret extends Block{
public float recoil = 0f;
public float heat;
public int shots;
public Unit target;
public TargetTrait target;
@Override
public void write(DataOutputStream stream) throws IOException{
@@ -77,6 +77,12 @@ public class Conveyor extends Block{
@Override
public void drawShadow(Tile tile){
//fixes build block crash
if(!(tile.entity instanceof ConveyorEntity)){
super.drawShadow(tile);
return;
}
ConveyorEntity entity = tile.entity();
if(entity.blendshadowrot == -1){
@@ -92,7 +98,7 @@ public class Conveyor extends Block{
byte rotation = tile.getRotation();
int frame = entity.clogHeat <= 0.5f ? (int) ((Timers.time() / 4f) % 4) : 0;
Draw.rect(regions[entity.blendbits][frame], tile.drawx(), tile.drawy(),
Draw.rect(regions[Mathf.clamp(entity.blendbits, 0, regions.length - 1)][Mathf.clamp(frame, 0, regions[0].length - 1)], tile.drawx(), tile.drawy(),
tilesize * entity.blendsclx, tilesize * entity.blendscly, rotation*90);
}
@@ -128,9 +134,8 @@ public class Conveyor extends Block{
Tile other = tile.getNearby(Mathf.mod(tile.getRotation() - direction, 4));
if(other != null) other = other.target();
if(other == null || !other.block().outputsItems()) return false;
return (tile.getNearby(tile.getRotation()) == other)
|| (!other.block().rotate || other.getNearby(other.getRotation()) == tile);
return other != null && other.block().outputsItems()
&& ((tile.getNearby(tile.getRotation()) == other) || (!other.block().rotate || other.getNearby(other.getRotation()) == tile));
}
@Override
@@ -299,7 +304,7 @@ public class Conveyor extends Block{
@Override
public synchronized int acceptStack(Item item, int amount, Tile tile, Unit source){
ConveyorEntity entity = tile.entity();
return (int)(entity.minitem / itemSpace);
return Math.min((int)(entity.minitem / itemSpace), amount);
}
@Override
@@ -238,7 +238,7 @@ public class MassDriver extends Block{
protected boolean linkValid(Tile tile){
MassDriverEntity entity = tile.entity();
if(entity.link == -1) return false;
if(entity == null || entity.link == -1) return false;
Tile link = world.tile(entity.link);
return link != null && link.block() instanceof MassDriver && tile.distanceTo(link) <= range;
@@ -35,6 +35,7 @@ public class OverflowGate extends Splitter{
int from = tile.relativeTo(src.x, src.y);
if(from == -1) return null;
Tile to = tile.getNearby((from + 2) % 4);
if(to == null) return null;
Tile edge = Edges.getFacingEdge(tile, to);
if(!to.block().acceptItem(item, to, edge) || (to.block() instanceof OverflowGate)){
@@ -1,6 +1,8 @@
package io.anuke.mindustry.world.blocks.power;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.meta.BlockStat;
import io.anuke.mindustry.world.meta.StatUnit;
public class LiquidHeatGenerator extends LiquidGenerator{
@@ -8,6 +10,13 @@ public class LiquidHeatGenerator extends LiquidGenerator{
super(name);
}
@Override
public void setStats(){
super.setStats();
stats.add(BlockStat.maxPowerGeneration, maxLiquidGenerate * powerPerLiquid * 60f * 0.4f, StatUnit.powerSecond);
}
@Override
protected float getEfficiency(Liquid liquid){
return liquid.temperature - 0.5f;
@@ -53,7 +53,7 @@ public class PowerDistributor extends PowerBlock{
protected boolean shouldDistribute(Tile tile, Tile other){
other = other.target();
//only generators can distribute to other generators
return (!(other.block() instanceof PowerGenerator) || tile.block() instanceof PowerGenerator)
return other.getTeamID() == tile.getTeamID() && (!(other.block() instanceof PowerGenerator) || tile.block() instanceof PowerGenerator)
&& other.entity != null
&& other.block().hasPower
&& other.entity.power.amount / other.block().powerCapacity < tile.entity.power.amount / powerCapacity;
@@ -53,6 +53,7 @@ public class PowerNode extends PowerBlock{
@Remote(targets = Loc.both, called = Loc.server, forward = true)
public static void linkPowerDistributors(Player player, Tile tile, Tile other){
if(!(tile.entity instanceof DistributorEntity)) return;
DistributorEntity entity = tile.entity();
@@ -60,7 +61,7 @@ public class PowerNode extends PowerBlock{
entity.links.add(other.packedPosition());
}
if(other.block() instanceof PowerNode){
if(other.getTeamID() == tile.getTeamID() && other.block() instanceof PowerNode){
DistributorEntity oe = other.entity();
if(!oe.links.contains(tile.packedPosition())){
@@ -71,6 +72,8 @@ public class PowerNode extends PowerBlock{
@Remote(targets = Loc.both, called = Loc.server, forward = true)
public static void unlinkPowerDistributors(Player player, Tile tile, Tile other){
if(!(tile.entity instanceof DistributorEntity)) return;
DistributorEntity entity = tile.entity();
entity.links.removeValue(other.packedPosition());
@@ -224,12 +227,12 @@ public class PowerNode extends PowerBlock{
}
protected boolean shouldDistribute(Tile tile, Tile other){
return other.entity.power.amount / other.block().powerCapacity <= tile.entity.power.amount / powerCapacity &&
return other != null && other.entity != null && other.block().hasPower && other.getTeamID() == tile.getTeamID() && other.entity.power.amount / other.block().powerCapacity <= tile.entity.power.amount / powerCapacity &&
!(other.block() instanceof PowerGenerator); //do not distribute to power generators
}
protected boolean shouldLeechPower(Tile tile, Tile other){
return !(other.block() instanceof PowerNode)
return other.getTeamID() == tile.getTeamID() && !(other.block() instanceof PowerNode)
&& other.block() instanceof PowerDistributor //only suck power from batteries and power generators
&& other.entity.power.amount / other.block().powerCapacity > tile.entity.power.amount / powerCapacity;
}
@@ -282,7 +285,7 @@ public class PowerNode extends PowerBlock{
}
protected boolean linkValid(Tile tile, Tile link, boolean checkMaxNodes){
if(!(tile != link && link != null && link.block().hasPower)) return false;
if(!(tile != link && link != null && link.block().hasPower) || tile.getTeamID() != link.getTeamID()) return false;
if(link.block() instanceof PowerNode){
DistributorEntity oe = link.entity();
@@ -8,6 +8,7 @@ import io.anuke.mindustry.content.fx.BlockFx;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.graphics.Layer;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.consumers.ConsumeLiquid;
@@ -158,7 +159,7 @@ public class Drill extends Block{
}
for(Tile other : tile.getLinkedTiles(tempTiles)){
if(isValid(other) && other.floor().dropsItem(entity.dominantItem)){
if(isValid(other) && getDrop(other) == entity.dominantItem){
entity.dominantItems ++;
}
}
@@ -233,7 +234,9 @@ public class Drill extends Block{
}
protected boolean isValid(Tile tile){
return tile.floor().drops != null && tile.floor().drops.item.hardness <= tier;
if(tile == null) return false;
ItemStack drops = tile.floor().drops;
return drops != null && drops.item.hardness <= tier;
}
public static class DrillEntity extends TileEntity{
@@ -9,7 +9,7 @@ import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
public class Fracker extends SolidPump{
protected float itemUseTime = 100f;
protected final float itemUseTime = 100f;
protected TextureRegion liquidRegion;
protected TextureRegion rotatorRegion;
@@ -63,7 +63,7 @@ public class Fracker extends SolidPump{
FrackerEntity entity = tile.entity();
Item item = consumes.item();
while(entity.accumulator > itemUseTime && entity.items.has(item, 1)){
while(entity.accumulator >= itemUseTime && entity.items.has(item, 1)){
entity.items.remove(item, 1);
entity.accumulator -= itemUseTime;
}
@@ -81,7 +81,7 @@ public class GenericCrafter extends Block{
public void update(Tile tile){
GenericCrafterEntity entity = tile.entity();
if(entity.cons.valid()){
if(entity.cons.valid() && tile.entity.items.get(output) < itemCapacity){
entity.progress += 1f / craftTime * Timers.delta();
entity.totalProgress += Timers.delta();
@@ -114,6 +114,11 @@ public class GenericCrafter extends Block{
return new GenericCrafterEntity();
}
@Override
public int getMaximumAccepted(Tile tile, Item item){
return itemCapacity;
}
public static class GenericCrafterEntity extends TileEntity{
public float progress;
public float totalProgress;
@@ -107,6 +107,7 @@ public class SolidPump extends Pump{
@Override
protected boolean isValid(Tile tile){
if(tile == null) return false;
return !tile.floor().isLiquid;
}

Some files were not shown because too many files have changed in this diff Show More