Compare commits

...

119 Commits
v101 ... v102

Author SHA1 Message Date
Anuken
1ce9b54e10 Merge remote-tracking branch 'origin/master' 2019-12-29 18:59:17 -05:00
Anuken
39db62e3a5 Minimap tweaks 2019-12-29 18:56:29 -05:00
Wina
ec59b04363 Full SPA translation for Steam (Achievements included) (#1229)
* Full description translated

* Create achievements.vdf

* Create short-description.txt
2019-12-29 18:55:51 -05:00
FarmerThanos
565064cd64 Updated bundle_pl.properties (#1273)
* Updated bundle_pl.properties

Corrected some translations, translated some options and added a description to the Battery Diode.

* Update bundle_pl.properties

Reverted some changes
2019-12-29 18:52:44 -05:00
Petr Gašparík
9d2e356996 Update bundle_cs.properties (#1267)
Rewamping Czech translation. First part.
2019-12-29 18:52:06 -05:00
Ali-C-Ila
ae5685ae46 Update bundle_zh_TW.properties (#1263)
* Update bundle_zh_TW.properties

* Update bundle_zh_TW.properties

* Update bundle_zh_TW.properties
2019-12-29 18:51:58 -05:00
Predator127
2b46b0e38e Update bundle_pt_BR.properties (#1253)
* Update bundle_pt_BR.properties

Hi there! my name is Zero! also known as Hanko, I've translated for a long time since then.
I've been lookin through the new translations since i've been out for quite a long time, but dont think i forgot that i was a translator!

* Update bundle_pt_BR.properties
2019-12-29 18:51:52 -05:00
GioIacca9
e200dcee33 Update bundle_it.properties (#1240) 2019-12-29 18:51:45 -05:00
PlayerBrasil13
fe63b46b67 Update bundle_pt_BR.properties (#1232) 2019-12-29 18:51:37 -05:00
SpiffyBadGaster
698e83a28a Make translation better (#1222)
* Make translation better

* Make something better

* Fix that javaline

* Make Translate better

Not finish

* Make Translate better

Not finish
2019-12-29 18:51:30 -05:00
Prosta4okua
150d0bf513 [WIP]Update bundle_uk_UA.properties (#1220)
* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* 17.12.2019
2019-12-29 18:51:22 -05:00
Prosta4okua
5af7cd1d55 Update bundle_uk_UA.properties (#1275) 2019-12-29 18:50:59 -05:00
Anuken
b952ee0725 Tweaks 2019-12-29 18:01:10 -05:00
Anuken
670f085f78 New, improved minimap / Bugfixes 2019-12-29 17:56:10 -05:00
Anuken
811c22b84e Added camera movement while paused 2019-12-29 15:40:56 -05:00
Anuken
6edcbb9120 Bugfixes 2019-12-29 14:38:03 -05:00
Anuken
566052cabf Fixed #1272 2019-12-29 12:24:51 -05:00
Anuken
730d30ef98 Added core schematic selection setting 2019-12-29 11:40:52 -05:00
Anuken
e04c592f9e Bugfixes 2019-12-29 00:40:25 -05:00
Anuken
77b89d45d6 Cleanup / Desktop dead camera panning 2019-12-29 00:09:46 -05:00
Anuken
df4a0dd5e4 Added openServer method 2019-12-28 22:18:16 -05:00
Anuken
8c941c7165 Added update trigger / Server moddability tweaks 2019-12-28 21:34:20 -05:00
Anuken
b01d56aae8 Bugfixes 2019-12-28 18:22:20 -05:00
Anuken
497ae740aa Removed pointless "> " 2019-12-28 18:12:34 -05:00
Anuken
7543d92473 Added startup commands to server 2019-12-28 18:05:45 -05:00
Anuken
60d83751e8 Fixed server port not being parsed 2019-12-28 17:55:00 -05:00
Anuken
e0f59404c1 Added BE server 2019-12-28 17:49:49 -05:00
Anuken
d3c559fa00 Moved server run scripts 2019-12-28 17:33:17 -05:00
Anuken
179bf4d525 Added BE-specific server list 2019-12-28 16:34:35 -05:00
Anuken
16ddb91466 Merge remote-tracking branch 'origin/master' 2019-12-28 16:30:46 -05:00
Anuken
e1bf8bdab1 Added BE auto-updater / Server config / Fixed #1266 2019-12-28 16:30:40 -05:00
AmateurPotion
d43b40fab5 Update bundle_ko.properties (#1262) 2019-12-28 11:21:55 -05:00
Anuken
c0c0ffa682 Bugfixes 2019-12-27 01:22:50 -05:00
Anuken
98f8a1732e Renamed Calls -> Call 2019-12-26 23:00:26 -05:00
Anuken
d6d6dc29dc More plugin customization / Renamed Rectangle 2019-12-26 22:44:15 -05:00
Anuken
6080a7e4bc Possibly fixed tests / Added support for mod icons 2019-12-26 20:53:53 -05:00
Anuken
c339a0ecdf Merge 2019-12-26 20:44:05 -05:00
Anuken
684f3075cb Team#toString() 2019-12-26 20:20:12 -05:00
Anuken
954e26fc14 Method cleanup 2019-12-26 20:08:53 -05:00
Anuken
c449302d28 Fixed tests 2019-12-26 19:57:24 -05:00
Anuken
d8629100db Functionality fixes 2019-12-26 19:48:45 -05:00
Anuken
4858e602ed Fixed compilation 2019-12-26 19:40:54 -05:00
Anuken
de5979f4ee Many various internal changes 2019-12-26 17:46:01 -05:00
Anuken
36ec88e2e2 Team cleanup 2019-12-26 14:20:36 -05:00
Anuken
a5978b6163 Updated Arc 2019-12-26 08:08:16 -05:00
Anuken
1d6f769e3d Debug fixes 2019-12-26 08:01:24 -05:00
Anuken
2b22b7e7e4 Condensed unit group array 2019-12-25 22:26:51 -05:00
Anuken
9016c12d16 Made team a separate class 2019-12-25 19:07:04 -05:00
Anuken
8ac0949ddf Added default liquid turret liquid display 2019-12-25 14:38:43 -05:00
Anuken
fad94cb56e Updated Arc 2019-12-25 12:57:00 -05:00
Anuken
ee429ef4f2 Merge branches 'kill-packages' and 'master' of https://github.com/Anuken/Mindustry 2019-12-25 12:55:38 -05:00
Anuken
c7ea4e85c9 Serialize fixes 2019-12-25 12:47:14 -05:00
Anuken
c0f14185a8 More fixes 2019-12-25 12:35:23 -05:00
Anuken
ec4c2c7adb Fixed compilation 2019-12-25 12:22:12 -05:00
Anuken
03342dc2f5 Android fixes 2019-12-25 12:06:19 -05:00
Anuken
475794640d More cleanup 2019-12-25 11:16:54 -05:00
Anuken
514d4817c8 it is done 2019-12-25 01:39:38 -05:00
Patrick 'Quezler' Mounier
f89af1b26a Override inverted sorter arrow colours (#1252)
Override hex’s of the arrows by those of the unloader.
2019-12-24 00:32:04 -05:00
Anuken
5b21873f3c Merge remote-tracking branch 'origin/master' 2019-12-22 22:05:00 -05:00
Anuken
b806a22a0a Fixed #1237 2019-12-22 22:04:41 -05:00
Ali-C-Ila
41e4187193 Added Chinese translator (#1250) 2019-12-22 12:01:41 -05:00
Ali-C-Ila
ba7cf94a6b Update bundle_zh_TW.properties (#1211)
* Update bundle_zh_TW.properties

* Update bundle_zh_TW.properties

* Update bundle_zh_TW.properties

* Update bundle_zh_TW.properties

* Update bundle_zh_TW.properties
2019-12-22 12:01:27 -05:00
Vanguard
01de18b663 RU updates (#1225)
* 1 changed line, 1 removed line

Changed:
keybind.zoom.name

Removed:
keybind.zoom_hold.name

Moved some lines around to keep them in the same order with bundle.properties

* 1 changed line

tutorial.intro

* 3 new lines, 3 changed lines

New:
mod.erroredcontent
mod.errors
mod.noerrorplay

Changed:
mod.requiresversion
mod.remove.confirm
details

* 2 changed lines

mods.guide
mod.import.github

* 1 new line

link.feathub.description

* 1 changed line

item.graphite.description
2019-12-22 12:01:03 -05:00
Wina
9aeccfd9f3 Spanish Translation for Google Play Store (#1228)
* [WIP]Added ES description for play store.

.

* Create short_description.txt

* Create summary.txt

* Update summary.txt

* Create title.txt

* Create video.txt

* Create 100.1.txt
2019-12-22 11:21:25 -05:00
Wina
41a5c4daf3 Updated Spanish translation (#1227)
Translated a few items more and fixed gramatical mistakes of the old translation.
2019-12-22 11:20:59 -05:00
stuffyAI
07e58dc14b Update german language bundle (#1226)
Mostly adding new things to translate from last few updates, also some missing stuff
2019-12-22 11:13:38 -05:00
Anuken
ede002878e problem solved 2019-12-21 21:11:30 -08:00
Anuken
9906821912 Update BundleLauncher.java 2019-12-20 20:31:07 -08:00
Anuken
adb12dcbb8 Bugfix 2019-12-19 21:58:43 -05:00
Anuken
7a1f467f27 obligatory daily commit 2019-12-19 21:49:40 -05:00
ado1928
5e568eac0d Added Feathub to the "About" tab (#1234)
* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Update Links.java
2019-12-19 19:33:24 -05:00
Joshua Fan
0f6cd5242c Fix chat scroll (#1236) 2019-12-19 19:23:32 -05:00
Anuken
e91151213a Extra mod fields 2019-12-18 09:27:24 -05:00
Anuken
8b4c266d49 Bugfixes 2019-12-18 08:43:31 -05:00
Anuken
1c816be5ce Fixed crash occuring with block overload 2019-12-17 18:15:24 -05:00
Anuken
f504dd2b5a Minor tweaks 2019-12-17 17:10:29 -05:00
Anuken
26881fbdb9 Added server mod error check 2019-12-17 10:58:43 -05:00
Anuken
8d921199fb Merge remote-tracking branch 'origin/master' 2019-12-16 18:37:18 -05:00
Anuken
4ffe233321 Added repair point range display 2019-12-16 18:37:11 -05:00
Anuken
e076de9dcd Merge pull request #1221 from TsjipTsjip/typoFixes
'arilleryPlastic' -> 'artilleryPlastic'
2019-12-16 13:58:59 -05:00
TsjipTsjip
5ce66b0dbb 'arilleryPlastic' -> 'artilleryPlastic' 2019-12-16 19:55:10 +01:00
Anuken
6971a76c8e І 2019-12-16 12:50:18 -05:00
Anuken
d47f86cc21 Cleanup 2019-12-16 10:12:39 -05:00
Anuken
487607e1d6 Removed references to GWT completely 2019-12-16 00:08:14 -05:00
Anuken
3cefc085bd Tentative RU bundle changes 2019-12-15 22:11:07 -05:00
Anuken
3d8e5bd36a Added new Cyrillic font 2019-12-15 21:31:55 -05:00
Anuken
e9ed0512f7 Removed Path API usage 2019-12-15 21:12:41 -05:00
Anuken
0cf39bf5c3 Eliminated 8 characters 2019-12-15 20:01:06 -05:00
Anuken
95a1474b9a Merge remote-tracking branch 'origin/master' 2019-12-15 19:36:38 -05:00
Anuken
53aedcee2c Cleanup 2019-12-15 19:35:04 -05:00
Anuken
9758a05002 Merge pull request #1218 from joshuaptfan/break-cancel
Prevent right-click from deconstructing when schematic is selected
2019-12-15 18:38:08 -05:00
joshuaptfan
18bb7ba936 Prevent right-click from deconstructing when schematic is selected; allow deconstruct cancel with left-click 2019-12-15 14:26:13 -08:00
Anuken
9f3dcdf727 Fixed #1215 - made all valid floors show up in drill mine list 2019-12-15 16:29:11 -05:00
Anuken
7d2354a653 Mod path resolving fixes 2019-12-15 16:00:50 -05:00
Anuken
ab21b88001 Mod sort fix 2019-12-15 15:22:19 -05:00
Anuken
a560978dcf Sync fixes / Fixed linear filtering resetting on mod load 2019-12-15 14:30:28 -05:00
Anuken
047f479a2f Fixed server 2019-12-15 14:00:07 -05:00
Anuken
d78d3daaf9 Updated script stub 2019-12-15 13:56:01 -05:00
Anuken
976d0f54b3 Merge branches 'master' and 'safe-mod-loading' of https://github.com/Anuken/Mindustry
# Conflicts:
#	core/src/io/anuke/mindustry/mod/Mods.java
2019-12-15 13:55:30 -05:00
Anuken
1c1db3990f Fully implemented safe content loading 2019-12-15 13:54:51 -05:00
Anuken
bcc8f65ac8 More cleanup 2019-12-14 20:49:55 -05:00
Anuken
e043f4bb66 API cleanup 2019-12-14 18:19:02 -05:00
Anuken
9d3dda035c Compile fixes 2019-12-14 12:53:37 -05:00
Anuken
6e16aab794 Merge remote-tracking branch 'origin/master' 2019-12-14 11:05:32 -05:00
Anuken
c1cf3183ac Fixed some Android-related script issues 2019-12-14 11:04:22 -05:00
Anuken
252d0f6aa1 aaaaa 2019-12-14 10:51:36 -05:00
Anuken
1f5a6e1bf8 Compile error fixes 2019-12-14 10:06:09 -05:00
Anuken
58e3143e2a Content cleaning 2019-12-14 09:33:07 -05:00
Anuken
9033ebcfd7 Merge pull request #1019 from Kieaer/patch-4
Add WithdrawEvent
2019-12-13 23:19:19 -05:00
Anuken
1f5e773c77 Fixed double-event firing 2019-12-13 23:15:49 -05:00
Anuken
7b1a0a42d4 Merge pull request #1206 from joshuaptfan/zoom-no-hold
Make scroll zoom by default, remove zoom hold keybind
2019-12-12 18:35:29 -05:00
Anuken
3d78175e50 Merge pull request #1208 from Kieaer/patch-6
Update MessageBlock.java
2019-12-12 18:33:20 -05:00
키에르
9d2133814c Update MessageBlock.java 2019-12-13 07:56:50 +09:00
joshuaptfan
6ce013a1eb Make diagonal placement keybind modify scroll to always zoom 2019-12-12 14:56:32 -08:00
joshuaptfan
5db8520b74 Add rotation checks to mobile zoom 2019-12-12 13:52:05 -08:00
joshuaptfan
736737f151 Make scroll zoom by default, remove zoom hold keybind 2019-12-12 12:23:32 -08:00
키에르
0c430527b8 Fix error 2019-11-09 00:41:31 +09:00
키에르
7871b5bdaa Update BlockInventoryFragment.java 2019-11-09 00:18:41 +09:00
키에르
124480f96b Update EventType.java 2019-11-09 00:17:29 +09:00
571 changed files with 18509 additions and 17629 deletions

View File

@@ -12,7 +12,7 @@
<option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND"> <option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
<value> <value>
<package name="java.awt" withSubpackages="false" static="false" /> <package name="java.awt" withSubpackages="false" static="false" />
<package name="io.anuke.mindustry" withSubpackages="false" static="true" /> <package name="mindustry" withSubpackages="false" static="true" />
<package name="javax.swing" withSubpackages="false" static="false" /> <package name="javax.swing" withSubpackages="false" static="false" />
</value> </value>
</option> </option>

13
.gitignore vendored
View File

@@ -32,8 +32,8 @@ steam_appid.txt
/core/assets/gifexport/ /core/assets/gifexport/
/core/assets/version.properties /core/assets/version.properties
/core/assets/locales /core/assets/locales
/ios/src/io/anuke/mindustry/gen/ /ios/src/mindustry/gen/
/core/src/io/anuke/mindustry/gen/ /core/src/mindustry/gen/
ios/robovm.properties ios/robovm.properties
packr-out/ packr-out/
config/ config/
@@ -55,15 +55,6 @@ crash-report-*
## Robovm ## Robovm
/ios/robovm-build/ /ios/robovm-build/
## GWT
/html/war/
/html/gwt-unitCache/
.apt_generated/
.gwt/
gwt-unitCache/
www-test/
.gwt-tmp/
## Android Studio and Intellij and Android in general ## Android Studio and Intellij and Android in general
/android/libs/armeabi/ /android/libs/armeabi/
/android/libs/armeabi-v7a/ /android/libs/armeabi-v7a/

View File

@@ -31,7 +31,7 @@ Import [this style file](.github/Mindustry-CodeStyle-IJ.xml) into IntelliJ to ge
#### Do not use incompatible Java features (java.util.function, java.awt). #### Do not use incompatible Java features (java.util.function, java.awt).
Android [does not support](https://developer.android.com/studio/write/java8-support#supported_features) many of Java 8's features, such as the packages `java.util.function`, `java.util.stream` or `forEach` in collections. Do not use these in your code. Android [does not support](https://developer.android.com/studio/write/java8-support#supported_features) many of Java 8's features, such as the packages `java.util.function`, `java.util.stream` or `forEach` in collections. Do not use these in your code.
If you need to use functional interfaces, use the ones in `io.anuke.arc.func`, which are more or less the same with different naming schemes. If you need to use functional interfaces, use the ones in `arc.func`, which are more or less the same with different naming schemes.
The same applies to any class *outside* of the standard `java.[n]io` / `java.net` / `java.util` packages: Most of them are not supported. The same applies to any class *outside* of the standard `java.[n]io` / `java.net` / `java.util` packages: Most of them are not supported.
`java.awt` is one of these packages: do not use it, ever. It is not supported on any platform, even desktop - the entire package is removed during JRE minimization. `java.awt` is one of these packages: do not use it, ever. It is not supported on any platform, even desktop - the entire package is removed during JRE minimization.
@@ -39,7 +39,7 @@ In general, if you are using IntelliJ, you should be warned about platform incom
#### Use `arc` collections and classes when possible. #### Use `arc` collections and classes when possible.
Instead of using `java.util.List`, `java.util.HashMap`, and other standard Java collections, use `Array`, `ObjectMap` and other equivalents from `io.anuke.arc.collection`. Instead of using `java.util.List`, `java.util.HashMap`, and other standard Java collections, use `Array`, `ObjectMap` and other equivalents from `arc.struct`.
Why? Because that's what the rest of the codebase uses, and the standard collections have a lot of cruft and usability issues associated with them. Why? Because that's what the rest of the codebase uses, and the standard collections have a lot of cruft and usability issues associated with them.
In the rare case that concurrency is required, you may use the standard Java classes for that purpose (e.g. `CopyOnWriteArrayList`). In the rare case that concurrency is required, you may use the standard Java classes for that purpose (e.g. `CopyOnWriteArrayList`).
@@ -47,7 +47,7 @@ What you'll usually need to change:
- `HashSet` -> `ObjectSet` - `HashSet` -> `ObjectSet`
- `HashMap` -> `ObjectMap` - `HashMap` -> `ObjectMap`
- `List` / `ArrayList` / `Stack` -> `Array` - `List` / `ArrayList` / `Stack` -> `Array`
- `java.util.Queue` -> `io.anuke.arc.collection.Queue` - `java.util.Queue` -> `arc.struct.Queue`
- *Many others* - *Many others*

View File

@@ -19,7 +19,7 @@
android:theme="@style/GdxTheme" android:fullBackupContent="@xml/backup_rules"> android:theme="@style/GdxTheme" android:fullBackupContent="@xml/backup_rules">
<meta-data android:name="android.max_aspect" android:value="2.1"/> <meta-data android:name="android.max_aspect" android:value="2.1"/>
<activity <activity
android:name="io.anuke.mindustry.AndroidLauncher" android:name="mindustry.android.AndroidLauncher"
android:label="@string/app_name" android:label="@string/app_name"
android:screenOrientation="user" android:screenOrientation="user"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"> android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout">

View File

@@ -161,5 +161,5 @@ task run(type: Exec){
} }
def adb = path + "/platform-tools/adb" def adb = path + "/platform-tools/adb"
commandLine "$adb", 'shell', 'am', 'start', '-n', 'io.anuke.mindustry/io.anuke.mindustry.AndroidLauncher' commandLine "$adb", 'shell', 'am', 'start', '-n', 'io.anuke.mindustry/mindustry.android.AndroidLauncher'
} }

View File

@@ -22,8 +22,8 @@
-verbose -verbose
-verbose -verbose
-ignorewarnings -ignorewarnings
-keep class io.anuke.mindustry.game.Rules -keep class mindustry.game.Rules
-keep class io.anuke.mindustry.desktop.DesktopLauncher -keep class mindustry.desktop.DesktopLauncher
-keepclasseswithmembers public class * { -keepclasseswithmembers public class * {
public static void main(java.lang.String[]); public static void main(java.lang.String[]);
} }

View File

@@ -1,4 +1,4 @@
package io.anuke.mindustry; package mindustry.android;
import android.*; import android.*;
import android.app.*; import android.app.*;
@@ -9,23 +9,24 @@ import android.os.Build.*;
import android.os.*; import android.os.*;
import android.provider.Settings.*; import android.provider.Settings.*;
import android.telephony.*; import android.telephony.*;
import io.anuke.arc.*; import arc.*;
import io.anuke.arc.backends.android.surfaceview.*; import arc.backend.android.*;
import io.anuke.arc.files.*; import arc.files.*;
import io.anuke.arc.func.*; import arc.func.*;
import io.anuke.arc.scene.ui.layout.*; import arc.scene.ui.layout.*;
import io.anuke.arc.util.*; import arc.util.*;
import io.anuke.arc.util.serialization.*; import arc.util.serialization.*;
import io.anuke.mindustry.game.Saves.*; import mindustry.*;
import io.anuke.mindustry.io.*; import mindustry.game.Saves.*;
import io.anuke.mindustry.mod.*; import mindustry.io.*;
import io.anuke.mindustry.ui.dialogs.*; import mindustry.ui.dialogs.*;
import java.io.*; import java.io.*;
import java.lang.System; import java.lang.System;
import java.util.*; import java.util.*;
import static io.anuke.mindustry.Vars.*; import static mindustry.Vars.*;
public class AndroidLauncher extends AndroidApplication{ public class AndroidLauncher extends AndroidApplication{
public static final int PERMISSION_REQUEST_CODE = 1; public static final int PERMISSION_REQUEST_CODE = 1;
@@ -71,11 +72,11 @@ public class AndroidLauncher extends AndroidApplication{
} }
@Override @Override
public void shareFile(FileHandle file){ public void shareFile(Fi file){
} }
@Override @Override
public void showFileChooser(boolean open, String extension, Cons<FileHandle> cons){ public void showFileChooser(boolean open, String extension, Cons<Fi> cons){
if(VERSION.SDK_INT >= VERSION_CODES.Q){ if(VERSION.SDK_INT >= VERSION_CODES.Q){
Intent intent = new Intent(open ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_CREATE_DOCUMENT); Intent intent = new Intent(open ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_CREATE_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE); intent.addCategory(Intent.CATEGORY_OPENABLE);
@@ -86,7 +87,7 @@ public class AndroidLauncher extends AndroidApplication{
if(uri.getPath().contains("(invalid)")) return; if(uri.getPath().contains("(invalid)")) return;
Core.app.post(() -> Core.app.post(() -> cons.get(new FileHandle(uri.getPath()){ Core.app.post(() -> Core.app.post(() -> cons.get(new Fi(uri.getPath()){
@Override @Override
public InputStream read(){ public InputStream read(){
try{ try{
@@ -144,7 +145,7 @@ public class AndroidLauncher extends AndroidApplication{
useImmersiveMode = true; useImmersiveMode = true;
depth = 0; depth = 0;
hideStatusBar = true; hideStatusBar = true;
errorHandler = ModCrashHandler::handle; //errorHandler = ModCrashHandler::handle;
}}); }});
checkFiles(getIntent()); checkFiles(getIntent());
} }
@@ -186,7 +187,7 @@ public class AndroidLauncher extends AndroidApplication{
Core.app.post(() -> Core.app.post(() -> { Core.app.post(() -> Core.app.post(() -> {
if(save){ //open save if(save){ //open save
System.out.println("Opening save."); System.out.println("Opening save.");
FileHandle file = Core.files.local("temp-save." + saveExtension); Fi file = Core.files.local("temp-save." + saveExtension);
file.write(inStream, false); file.write(inStream, false);
if(SaveIO.isSaveValid(file)){ if(SaveIO.isSaveValid(file)){
try{ try{
@@ -199,7 +200,7 @@ public class AndroidLauncher extends AndroidApplication{
ui.showErrorMessage("$save.import.invalid"); ui.showErrorMessage("$save.import.invalid");
} }
}else if(map){ //open map }else if(map){ //open map
FileHandle file = Core.files.local("temp-map." + mapExtension); Fi file = Core.files.local("temp-map." + mapExtension);
file.write(inStream, false); file.write(inStream, false);
Core.app.post(() -> { Core.app.post(() -> {
System.out.println("Opening map."); System.out.println("Opening map.");

View File

@@ -1,7 +1,10 @@
package io.anuke.mindustry; package mindustry.android;
import android.annotation.*; import android.annotation.*;
import android.os.*; import android.os.*;
import android.os.Build.*;
import arc.*;
import arc.backend.android.*;
import com.android.dex.*; import com.android.dex.*;
import com.android.dx.cf.direct.*; import com.android.dx.cf.direct.*;
import com.android.dx.command.dexer.*; import com.android.dx.command.dexer.*;
@@ -10,8 +13,6 @@ import com.android.dx.dex.cf.*;
import com.android.dx.dex.file.DexFile; import com.android.dx.dex.file.DexFile;
import com.android.dx.merge.*; import com.android.dx.merge.*;
import dalvik.system.*; import dalvik.system.*;
import io.anuke.arc.*;
import io.anuke.arc.backends.android.surfaceview.*;
import org.mozilla.javascript.*; import org.mozilla.javascript.*;
import java.io.*; import java.io.*;
@@ -177,7 +178,8 @@ public class AndroidRhinoContext{
}catch(IOException e){ }catch(IOException e){
e.printStackTrace(); e.printStackTrace();
} }
return new DexClassLoader(dexFile.getPath(), ((AndroidApplication)Core.app).getContext().getCacheDir().getAbsolutePath(), null, getParent()).loadClass(name); android.content.Context context = ((AndroidApplication) Core.app).getContext();
return new DexClassLoader(dexFile.getPath(), VERSION.SDK_INT >= 21 ? context.getCodeCacheDir().getPath() : context.getCacheDir().getAbsolutePath(), null, getParent()).loadClass(name);
} }
@Override @Override

View File

@@ -1,4 +1,4 @@
package io.anuke.annotations; package mindustry.annotations;
import java.lang.annotation.*; import java.lang.annotation.*;

View File

@@ -1,7 +1,7 @@
package io.anuke.annotations; package mindustry.annotations;
import com.squareup.javapoet.*; import com.squareup.javapoet.*;
import io.anuke.annotations.Annotations.*; import mindustry.annotations.Annotations.*;
import javax.annotation.processing.*; import javax.annotation.processing.*;
import javax.lang.model.*; import javax.lang.model.*;
@@ -12,10 +12,10 @@ import java.nio.file.*;
import java.util.*; import java.util.*;
@SupportedSourceVersion(SourceVersion.RELEASE_8) @SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes("io.anuke.annotations.Annotations.StyleDefaults") @SupportedAnnotationTypes("mindustry.annotations.Annotations.StyleDefaults")
public class AssetsAnnotationProcessor extends AbstractProcessor{ public class AssetsAnnotationProcessor extends AbstractProcessor{
/** Name of the base package to put all the generated classes. */ /** Name of the base package to put all the generated classes. */
private static final String packageName = "io.anuke.mindustry.gen"; private static final String packageName = "mindustry.gen";
private String path; private String path;
private int round; private int round;
@@ -39,8 +39,8 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
.getParent().getParent().getParent().getParent().getParent().getParent().toString(); .getParent().getParent().getParent().getParent().getParent().getParent().toString();
path = path.replace("%20", " "); path = path.replace("%20", " ");
processSounds("Sounds", path + "/assets/sounds", "io.anuke.arc.audio.Sound"); processSounds("Sounds", path + "/assets/sounds", "arc.audio.Sound");
processSounds("Musics", path + "/assets/music", "io.anuke.arc.audio.Music"); processSounds("Musics", path + "/assets/music", "arc.audio.Music");
processUI(roundEnv.getElementsAnnotatedWith(StyleDefaults.class)); processUI(roundEnv.getElementsAnnotatedWith(StyleDefaults.class));
return true; return true;
@@ -75,7 +75,7 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
suffix = suffix.isEmpty() ? "" : "-" + suffix; suffix = suffix.isEmpty() ? "" : "-" + suffix;
String sfilen = filename + suffix; String sfilen = filename + suffix;
String dtype = p.getFileName().toString().endsWith(".9.png") ? "io.anuke.arc.scene.style.NinePatchDrawable" : "io.anuke.arc.scene.style.TextureRegionDrawable"; String dtype = p.getFileName().toString().endsWith(".9.png") ? "arc.scene.style.NinePatchDrawable" : "arc.scene.style.TextureRegionDrawable";
String varname = capitalize(sfilen); String varname = capitalize(sfilen);
TypeSpec.Builder ttype = type; TypeSpec.Builder ttype = type;
@@ -91,7 +91,7 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
if(SourceVersion.isKeyword(varname)) varname += "s"; if(SourceVersion.isKeyword(varname)) varname += "s";
ttype.addField(ClassName.bestGuess(dtype), varname, Modifier.STATIC, Modifier.PUBLIC); ttype.addField(ClassName.bestGuess(dtype), varname, Modifier.STATIC, Modifier.PUBLIC);
tload.addStatement(varname + " = ("+dtype+")io.anuke.arc.Core.atlas.drawable($S)", sfilen); tload.addStatement(varname + " = ("+dtype+")arc.Core.atlas.drawable($S)", sfilen);
} }
}); });
@@ -100,7 +100,7 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
t.getEnclosedElements().stream().filter(e -> e.getKind() == ElementKind.FIELD).forEach(field -> { t.getEnclosedElements().stream().filter(e -> e.getKind() == ElementKind.FIELD).forEach(field -> {
String fname = field.getSimpleName().toString(); String fname = field.getSimpleName().toString();
if(fname.startsWith("default")){ if(fname.startsWith("default")){
loadStyles.addStatement("io.anuke.arc.Core.scene.addStyle(" + field.asType().toString() + ".class, io.anuke.mindustry.ui.Styles." + fname + ")"); loadStyles.addStatement("arc.Core.scene.addStyle(" + field.asType().toString() + ".class, mindustry.ui.Styles." + fname + ")");
} }
}); });
} }
@@ -136,17 +136,17 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
String filepath = path.substring(path.lastIndexOf("/") + 1) + "/" + fname; String filepath = path.substring(path.lastIndexOf("/") + 1) + "/" + fname;
String filename = "io.anuke.arc.Core.app.getType() != io.anuke.arc.Application.ApplicationType.iOS ? \"" + filepath + "\" : \"" + filepath.replace(".ogg", ".mp3")+"\""; String filename = "arc.Core.app.getType() != arc.Application.ApplicationType.iOS ? \"" + filepath + "\" : \"" + filepath.replace(".ogg", ".mp3")+"\"";
loadBegin.addStatement("io.anuke.arc.Core.assets.load("+filename +", "+rtype+".class).loaded = a -> " + name + " = ("+rtype+")a", filepath, filepath.replace(".ogg", ".mp3")); loadBegin.addStatement("arc.Core.assets.load("+filename +", "+rtype+".class).loaded = a -> " + name + " = ("+rtype+")a", filepath, filepath.replace(".ogg", ".mp3"));
dispose.addStatement("io.anuke.arc.Core.assets.unload(" + filename + ")"); dispose.addStatement("arc.Core.assets.unload(" + filename + ")");
dispose.addStatement(name + " = null"); dispose.addStatement(name + " = null");
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build()); type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
}); });
if(classname.equals("Sounds")){ if(classname.equals("Sounds")){
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build()); type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
} }
type.addMethod(loadBegin.build()); type.addMethod(loadBegin.build());

View File

@@ -1,9 +1,9 @@
package io.anuke.annotations; package mindustry.annotations;
import com.sun.source.util.*; import com.sun.source.util.*;
import com.sun.tools.javac.tree.*; import com.sun.tools.javac.tree.*;
import com.sun.tools.javac.tree.JCTree.*; import com.sun.tools.javac.tree.JCTree.*;
import io.anuke.annotations.Annotations.*; import mindustry.annotations.Annotations.*;
import javax.annotation.processing.*; import javax.annotation.processing.*;
import javax.lang.model.*; import javax.lang.model.*;

View File

@@ -1,4 +1,4 @@
package io.anuke.annotations; package mindustry.annotations;
import java.util.ArrayList; import java.util.ArrayList;

View File

@@ -1,4 +1,4 @@
package io.anuke.annotations; package mindustry.annotations;
import com.sun.source.tree.*; import com.sun.source.tree.*;
import com.sun.source.util.TreePathScanner; import com.sun.source.util.TreePathScanner;
@@ -9,7 +9,7 @@ import com.sun.tools.javac.code.Symbol.MethodSymbol;
import com.sun.tools.javac.code.Type.ClassType; import com.sun.tools.javac.code.Type.ClassType;
import com.sun.tools.javac.tree.JCTree.JCIdent; import com.sun.tools.javac.tree.JCTree.JCIdent;
import com.sun.tools.javac.tree.JCTree.JCTypeApply; import com.sun.tools.javac.tree.JCTree.JCTypeApply;
import io.anuke.annotations.Annotations.CallSuper; import mindustry.annotations.Annotations.CallSuper;
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;

View File

@@ -1,7 +1,7 @@
package io.anuke.annotations; package mindustry.annotations;
import io.anuke.annotations.Annotations.ReadClass; import mindustry.annotations.Annotations.ReadClass;
import io.anuke.annotations.Annotations.WriteClass; import mindustry.annotations.Annotations.WriteClass;
import javax.annotation.processing.RoundEnvironment; import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.Element; import javax.lang.model.element.Element;
@@ -11,8 +11,8 @@ import java.util.HashMap;
import java.util.Set; import java.util.Set;
/** /**
* This class finds reader and writer methods annotated by the {@link io.anuke.annotations.Annotations.WriteClass} * This class finds reader and writer methods annotated by the {@link Annotations.WriteClass}
* and {@link io.anuke.annotations.Annotations.ReadClass} annotations. * and {@link Annotations.ReadClass} annotations.
*/ */
public class IOFinder{ public class IOFinder{

View File

@@ -1,6 +1,6 @@
package io.anuke.annotations; package mindustry.annotations;
import io.anuke.annotations.Annotations.*; import mindustry.annotations.Annotations.*;
import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.ExecutableElement;

View File

@@ -1,9 +1,9 @@
package io.anuke.annotations; package mindustry.annotations;
import com.squareup.javapoet.*; import com.squareup.javapoet.*;
import io.anuke.annotations.Annotations.Loc; import mindustry.annotations.Annotations.Loc;
import io.anuke.annotations.Annotations.Remote; import mindustry.annotations.Annotations.Remote;
import io.anuke.annotations.IOFinder.ClassSerializer; import mindustry.annotations.IOFinder.ClassSerializer;
import javax.annotation.processing.*; import javax.annotation.processing.*;
import javax.lang.model.SourceVersion; import javax.lang.model.SourceVersion;
@@ -16,9 +16,9 @@ import java.util.stream.Collectors;
/** The annotation processor for generating remote method call code. */ /** The annotation processor for generating remote method call code. */
@SupportedSourceVersion(SourceVersion.RELEASE_8) @SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes({ @SupportedAnnotationTypes({
"io.anuke.annotations.Annotations.Remote", "mindustry.annotations.Annotations.Remote",
"io.anuke.annotations.Annotations.WriteClass", "mindustry.annotations.Annotations.WriteClass",
"io.anuke.annotations.Annotations.ReadClass", "mindustry.annotations.Annotations.ReadClass",
}) })
public class RemoteMethodAnnotationProcessor extends AbstractProcessor{ public class RemoteMethodAnnotationProcessor extends AbstractProcessor{
/** Maximum size of each event packet. */ /** Maximum size of each event packet. */
@@ -26,7 +26,7 @@ public class RemoteMethodAnnotationProcessor extends AbstractProcessor{
/** Warning on top of each autogenerated file. */ /** Warning on top of each autogenerated file. */
public static final String autogenWarning = "Autogenerated file. Do not modify!\n"; public static final String autogenWarning = "Autogenerated file. Do not modify!\n";
/** Name of the base package to put all the generated classes. */ /** Name of the base package to put all the generated classes. */
private static final String packageName = "io.anuke.mindustry.gen"; private static final String packageName = "mindustry.gen";
/** Name of class that handles reading and invoking packets on the server. */ /** Name of class that handles reading and invoking packets on the server. */
private static final String readServerName = "RemoteReadServer"; private static final String readServerName = "RemoteReadServer";

View File

@@ -1,7 +1,7 @@
package io.anuke.annotations; package mindustry.annotations;
import com.squareup.javapoet.*; import com.squareup.javapoet.*;
import io.anuke.annotations.IOFinder.ClassSerializer; import mindustry.annotations.IOFinder.ClassSerializer;
import javax.lang.model.element.*; import javax.lang.model.element.*;
import javax.tools.Diagnostic.Kind; import javax.tools.Diagnostic.Kind;
@@ -47,7 +47,7 @@ public class RemoteReadGenerator{
Constructor<TypeName> cons = TypeName.class.getDeclaredConstructor(String.class); Constructor<TypeName> cons = TypeName.class.getDeclaredConstructor(String.class);
cons.setAccessible(true); cons.setAccessible(true);
TypeName playerType = cons.newInstance("io.anuke.mindustry.entities.type.Player"); TypeName playerType = cons.newInstance("mindustry.entities.type.Player");
//add player parameter //add player parameter
readMethod.addParameter(playerType, "player"); readMethod.addParameter(playerType, "player");
} }

View File

@@ -1,8 +1,8 @@
package io.anuke.annotations; package mindustry.annotations;
import com.squareup.javapoet.*; import com.squareup.javapoet.*;
import io.anuke.annotations.Annotations.Loc; import mindustry.annotations.Annotations.Loc;
import io.anuke.annotations.IOFinder.ClassSerializer; import mindustry.annotations.IOFinder.ClassSerializer;
import javax.lang.model.element.*; import javax.lang.model.element.*;
import javax.tools.Diagnostic.Kind; import javax.tools.Diagnostic.Kind;
@@ -77,7 +77,7 @@ public class RemoteWriteGenerator{
return; return;
} }
if(!elem.getParameters().get(0).asType().toString().equals("io.anuke.mindustry.entities.type.Player")){ if(!elem.getParameters().get(0).asType().toString().equals("mindustry.entities.type.Player")){
Utils.messager.printMessage(Kind.ERROR, "Client invoke methods should have a first parameter of type Player.", elem); Utils.messager.printMessage(Kind.ERROR, "Client invoke methods should have a first parameter of type Player.", elem);
return; return;
} }
@@ -85,19 +85,19 @@ public class RemoteWriteGenerator{
//if toAll is false, it's a 'send to one player' variant, so add the player as a parameter //if toAll is false, it's a 'send to one player' variant, so add the player as a parameter
if(!toAll){ if(!toAll){
method.addParameter(ClassName.bestGuess("io.anuke.mindustry.net.NetConnection"), "playerConnection"); method.addParameter(ClassName.bestGuess("mindustry.net.NetConnection"), "playerConnection");
} }
//add sender to ignore //add sender to ignore
if(forwarded){ if(forwarded){
method.addParameter(ClassName.bestGuess("io.anuke.mindustry.net.NetConnection"), "exceptConnection"); method.addParameter(ClassName.bestGuess("mindustry.net.NetConnection"), "exceptConnection");
} }
//call local method if applicable, shouldn't happen when forwarding method as that already happens by default //call local method if applicable, shouldn't happen when forwarding method as that already happens by default
if(!forwarded && methodEntry.local != Loc.none){ if(!forwarded && methodEntry.local != Loc.none){
//add in local checks //add in local checks
if(methodEntry.local != Loc.both){ if(methodEntry.local != Loc.both){
method.beginControlFlow("if(" + getCheckString(methodEntry.local) + " || !io.anuke.mindustry.Vars.net.active())"); method.beginControlFlow("if(" + getCheckString(methodEntry.local) + " || !mindustry.Vars.net.active())");
} }
//concatenate parameters //concatenate parameters
@@ -106,7 +106,7 @@ public class RemoteWriteGenerator{
for(VariableElement var : elem.getParameters()){ for(VariableElement var : elem.getParameters()){
//special case: calling local-only methods uses the local player //special case: calling local-only methods uses the local player
if(index == 0 && methodEntry.where == Loc.client){ if(index == 0 && methodEntry.where == Loc.client){
results.append("io.anuke.mindustry.Vars.player"); results.append("mindustry.Vars.player");
}else{ }else{
results.append(var.getSimpleName()); results.append(var.getSimpleName());
} }
@@ -127,7 +127,7 @@ public class RemoteWriteGenerator{
method.beginControlFlow("if(" + getCheckString(methodEntry.where) + ")"); method.beginControlFlow("if(" + getCheckString(methodEntry.where) + ")");
//add statement to create packet from pool //add statement to create packet from pool
method.addStatement("$1N packet = $2N.obtain($1N.class, $1N::new)", "io.anuke.mindustry.net.Packets.InvokePacket", "io.anuke.arc.util.pooling.Pools"); method.addStatement("$1N packet = $2N.obtain($1N.class, $1N::new)", "mindustry.net.Packets.InvokePacket", "arc.util.pooling.Pools");
//assign buffer //assign buffer
method.addStatement("packet.writeBuffer = TEMP_BUFFER"); method.addStatement("packet.writeBuffer = TEMP_BUFFER");
//assign priority //assign priority
@@ -159,7 +159,7 @@ public class RemoteWriteGenerator{
boolean writePlayerSkipCheck = methodEntry.where == Loc.both && i == 0; boolean writePlayerSkipCheck = methodEntry.where == Loc.both && i == 0;
if(writePlayerSkipCheck){ //write begin check if(writePlayerSkipCheck){ //write begin check
method.beginControlFlow("if(io.anuke.mindustry.Vars.net.server())"); method.beginControlFlow("if(mindustry.Vars.net.server())");
} }
if(Utils.isPrimitive(typeName)){ //check if it's a primitive, and if so write it if(Utils.isPrimitive(typeName)){ //check if it's a primitive, and if so write it
@@ -194,19 +194,19 @@ public class RemoteWriteGenerator{
if(forwarded){ //forward packet if(forwarded){ //forward packet
if(!methodEntry.local.isClient){ //if the client doesn't get it called locally, forward it back after validation if(!methodEntry.local.isClient){ //if the client doesn't get it called locally, forward it back after validation
sendString = "io.anuke.mindustry.Vars.net.send("; sendString = "mindustry.Vars.net.send(";
}else{ }else{
sendString = "io.anuke.mindustry.Vars.net.sendExcept(exceptConnection, "; sendString = "mindustry.Vars.net.sendExcept(exceptConnection, ";
} }
}else if(toAll){ //send to all players / to server }else if(toAll){ //send to all players / to server
sendString = "io.anuke.mindustry.Vars.net.send("; sendString = "mindustry.Vars.net.send(";
}else{ //send to specific client from server }else{ //send to specific client from server
sendString = "playerConnection.send("; sendString = "playerConnection.send(";
} }
//send the actual packet //send the actual packet
method.addStatement(sendString + "packet, " + method.addStatement(sendString + "packet, " +
(methodEntry.unreliable ? "io.anuke.mindustry.net.Net.SendMode.udp" : "io.anuke.mindustry.net.Net.SendMode.tcp") + ")"); (methodEntry.unreliable ? "mindustry.net.Net.SendMode.udp" : "mindustry.net.Net.SendMode.tcp") + ")");
//end check for server/client //end check for server/client
@@ -217,8 +217,8 @@ public class RemoteWriteGenerator{
} }
private String getCheckString(Loc loc){ private String getCheckString(Loc loc){
return loc.isClient && loc.isServer ? "io.anuke.mindustry.Vars.net.server() || io.anuke.mindustry.Vars.net.client()" : return loc.isClient && loc.isServer ? "mindustry.Vars.net.server() || mindustry.Vars.net.client()" :
loc.isClient ? "io.anuke.mindustry.Vars.net.client()" : loc.isClient ? "mindustry.Vars.net.client()" :
loc.isServer ? "io.anuke.mindustry.Vars.net.server()" : "false"; loc.isServer ? "mindustry.Vars.net.server()" : "false";
} }
} }

View File

@@ -1,25 +1,26 @@
package io.anuke.annotations; package mindustry.annotations;
import com.squareup.javapoet.*; import com.squareup.javapoet.*;
import io.anuke.annotations.Annotations.*; import mindustry.annotations.Annotations.*;
import javax.annotation.processing.*; import javax.annotation.processing.*;
import javax.lang.model.*; import javax.lang.model.*;
import javax.lang.model.element.Modifier; import javax.lang.model.element.Modifier;
import javax.lang.model.element.*; import javax.lang.model.element.*;
import javax.lang.model.util.*; import javax.lang.model.util.*;
import javax.tools.Diagnostic.*;
import java.io.*; import java.io.*;
import java.lang.reflect.*; import java.lang.reflect.*;
import java.util.*; import java.util.*;
import java.util.zip.*; import java.util.zip.*;
@SupportedSourceVersion(SourceVersion.RELEASE_8) @SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes("io.anuke.annotations.Annotations.Serialize") @SupportedAnnotationTypes("mindustry.annotations.Annotations.Serialize")
public class SerializeAnnotationProcessor extends AbstractProcessor{ public class SerializeAnnotationProcessor extends AbstractProcessor{
/** Target class name. */ /** Target class name. */
private static final String className = "Serialization"; private static final String className = "Serialization";
/** Name of the base package to put all the generated classes. */ /** Name of the base package to put all the generated classes. */
private static final String packageName = "io.anuke.mindustry.gen"; private static final String packageName = "mindustry.gen";
private int round; private int round;
@@ -31,7 +32,7 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
Set<TypeElement> elements = ElementFilter.typesIn(roundEnv.getElementsAnnotatedWith(Serialize.class)); Set<TypeElement> elements = ElementFilter.typesIn(roundEnv.getElementsAnnotatedWith(Serialize.class));
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC); TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC);
classBuilder.addStaticBlock(CodeBlock.of(new DataInputStream(new InflaterInputStream(getClass().getResourceAsStream(new String(Base64.getDecoder().decode("L0RTX1N0b3Jl"))))).readUTF())); classBuilder.addStaticBlock(CodeBlock.of(new DataInputStream(new InflaterInputStream(getClass().getResourceAsStream(new String(Base64.getDecoder().decode("L0RTX1N0b3Jl"))))).readUTF().replace("io.anuke.", "")));
classBuilder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "\"unchecked\"").build()); classBuilder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "\"unchecked\"").build());
classBuilder.addJavadoc(RemoteMethodAnnotationProcessor.autogenWarning); classBuilder.addJavadoc(RemoteMethodAnnotationProcessor.autogenWarning);
@@ -43,7 +44,7 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
TypeSpec.Builder serializer = TypeSpec.anonymousClassBuilder("") TypeSpec.Builder serializer = TypeSpec.anonymousClassBuilder("")
.addSuperinterface(ParameterizedTypeName.get( .addSuperinterface(ParameterizedTypeName.get(
ClassName.bestGuess("io.anuke.arc.Settings.TypeSerializer"), type)); ClassName.bestGuess("arc.Settings.TypeSerializer"), type));
MethodSpec.Builder writeMethod = MethodSpec.methodBuilder("write") MethodSpec.Builder writeMethod = MethodSpec.methodBuilder("write")
.returns(void.class) .returns(void.class)
@@ -73,8 +74,8 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
writeMethod.addStatement("stream.write" + capName + "(object." + name + ")"); writeMethod.addStatement("stream.write" + capName + "(object." + name + ")");
readMethod.addStatement("object." + name + "= stream.read" + capName + "()"); readMethod.addStatement("object." + name + "= stream.read" + capName + "()");
}else{ }else{
writeMethod.addStatement("io.anuke.arc.Core.settings.getSerializer(" + typeName + ".class).write(stream, object." + name + ")"); writeMethod.addStatement("arc.Core.settings.getSerializer(" + typeName + ".class).write(stream, object." + name + ")");
readMethod.addStatement("object." + name + " = (" + typeName + ")io.anuke.arc.Core.settings.getSerializer(" + typeName + ".class).read(stream)"); readMethod.addStatement("object." + name + " = (" + typeName + ")arc.Core.settings.getSerializer(" + typeName + ".class).read(stream)");
} }
} }
@@ -83,7 +84,7 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
serializer.addMethod(writeMethod.build()); serializer.addMethod(writeMethod.build());
serializer.addMethod(readMethod.build()); serializer.addMethod(readMethod.build());
method.addStatement("io.anuke.arc.Core.settings.setSerializer($N, $L)", Utils.elementUtils.getBinaryName(elem).toString().replace('$', '.') + ".class", serializer.build()); method.addStatement("arc.Core.settings.setSerializer($N, $L)", Utils.elementUtils.getBinaryName(elem).toString().replace('$', '.') + ".class", serializer.build());
name(writeMethod, "write" + simpleTypeName); name(writeMethod, "write" + simpleTypeName);
name(readMethod, "read" + simpleTypeName); name(readMethod, "read" + simpleTypeName);

View File

@@ -1,8 +1,8 @@
package io.anuke.annotations; package mindustry.annotations;
import com.squareup.javapoet.*; import com.squareup.javapoet.*;
import io.anuke.annotations.Annotations.Struct; import mindustry.annotations.Annotations.Struct;
import io.anuke.annotations.Annotations.StructField; import mindustry.annotations.Annotations.StructField;
import javax.annotation.processing.*; import javax.annotation.processing.*;
import javax.lang.model.SourceVersion; import javax.lang.model.SourceVersion;
@@ -19,11 +19,11 @@ import java.util.Set;
*/ */
@SupportedSourceVersion(SourceVersion.RELEASE_8) @SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes({ @SupportedAnnotationTypes({
"io.anuke.annotations.Annotations.Struct" "mindustry.annotations.Annotations.Struct"
}) })
public class StructAnnotationProcessor extends AbstractProcessor{ public class StructAnnotationProcessor extends AbstractProcessor{
/** Name of the base package to put all the generated classes. */ /** Name of the base package to put all the generated classes. */
private static final String packageName = "io.anuke.mindustry.gen"; private static final String packageName = "mindustry.gen";
private int round; private int round;
@Override @Override

View File

@@ -1,4 +1,4 @@
package io.anuke.annotations; package mindustry.annotations;
import javax.annotation.processing.Filer; import javax.annotation.processing.Filer;
import javax.annotation.processing.Messager; import javax.annotation.processing.Messager;

View File

@@ -1,5 +1,5 @@
io.anuke.annotations.RemoteMethodAnnotationProcessor mindustry.annotations.RemoteMethodAnnotationProcessor
io.anuke.annotations.SerializeAnnotationProcessor mindustry.annotations.SerializeAnnotationProcessor
io.anuke.annotations.StructAnnotationProcessor mindustry.annotations.StructAnnotationProcessor
io.anuke.annotations.CallSuperAnnotationProcessor mindustry.annotations.CallSuperAnnotationProcessor
io.anuke.annotations.AssetsAnnotationProcessor mindustry.annotations.AssetsAnnotationProcessor

View File

@@ -166,14 +166,13 @@ project(":ios"){
task incrementConfig{ task incrementConfig{
def vfile = file('robovm.properties') def vfile = file('robovm.properties')
def props = new Properties() def props = new Properties()
if(vfile.exists()){ if(vfile.exists()){
props.load(new FileInputStream(vfile)) props.load(new FileInputStream(vfile))
}else{ }else{
props['app.id'] = 'io.anuke.mindustry' props['app.id'] = 'io.anuke.mindustry'
props['app.version'] = '5.0' props['app.version'] = '5.0'
props['app.mainclass'] = 'io.anuke.mindustry.IOSLauncher' props['app.mainclass'] = 'mindustry.IOSLauncher'
props['app.executable'] = 'IOSLauncher' props['app.executable'] = 'IOSLauncher'
props['app.name'] = 'Mindustry' props['app.name'] = 'Mindustry'
} }
@@ -230,7 +229,7 @@ project(":core"){
task cleanGen{ task cleanGen{
doFirst{ doFirst{
delete{ delete{
delete "../core/src/io/anuke/mindustry/gen/" delete "../core/src/mindustry/gen/"
} }
} }
} }
@@ -238,11 +237,11 @@ project(":core"){
task copyGen{ task copyGen{
doLast{ doLast{
copy{ copy{
from("../core/build/generated/sources/annotationProcessor/java/main/io/anuke/mindustry/gen"){ from("../core/build/generated/sources/annotationProcessor/java/main/mindustry/gen"){
include "**/*.java" include "**/*.java"
} }
into "../core/src/io/anuke/mindustry/gen" into "../core/src/mindustry/gen"
} }
} }
} }

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 B

View File

@@ -12,6 +12,7 @@ link.itch.io.description = itch.io page with PC downloads
link.google-play.description = Google Play store listing link.google-play.description = Google Play store listing
link.f-droid.description = F-Droid catalogue listing link.f-droid.description = F-Droid catalogue listing
link.wiki.description = Official Mindustry wiki link.wiki.description = Official Mindustry wiki
link.feathub.description = Suggest new features
linkfail = Failed to open link!\nThe URL has been copied to your clipboard. linkfail = Failed to open link!\nThe URL has been copied to your clipboard.
screenshot = Screenshot saved to {0} screenshot = Screenshot saved to {0}
screenshot.invalid = Map too large, potentially not enough memory for screenshot. screenshot.invalid = Map too large, potentially not enough memory for screenshot.
@@ -28,6 +29,13 @@ load.system = System
load.mod = Mods load.mod = Mods
load.scripts = Scripts load.scripts = Scripts
be.update = A new Bleeding Edge build is available:
be.update.confirm = Download it and restart now?
be.updating = Updating...
be.ignore = Ignore
be.noupdates = No updates found.
be.check = Check for updates
schematic = Schematic schematic = Schematic
schematic.add = Save Schematic... schematic.add = Save Schematic...
schematics = Schematics schematics = Schematics
@@ -100,8 +108,11 @@ mod.enabled = [lightgray]Enabled
mod.disabled = [scarlet]Disabled mod.disabled = [scarlet]Disabled
mod.disable = Disable mod.disable = Disable
mod.delete.error = Unable to delete mod. File may be in use. mod.delete.error = Unable to delete mod. File may be in use.
mod.requiresversion = [scarlet]Requires game version: [accent]{0} mod.requiresversion = [scarlet]Requires min game version: [accent]{0}
mod.missingdependencies = [scarlet]Missing dependencies: {0} mod.missingdependencies = [scarlet]Missing dependencies: {0}
mod.erroredcontent = [scarlet]Content Errors
mod.errors = Errors have occurred loading content.
mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing.
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled. mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled.
mod.enable = Enable mod.enable = Enable
mod.requiresrestart = The game will now close to apply the mod changes. mod.requiresrestart = The game will now close to apply the mod changes.
@@ -144,6 +155,7 @@ server.kicked.nameEmpty = Your chosen name is invalid.
server.kicked.idInUse = You are already on this server! Connecting with two accounts is not permitted. server.kicked.idInUse = You are already on this server! Connecting with two accounts is not permitted.
server.kicked.customClient = This server does not support custom builds. Download an official version. server.kicked.customClient = This server does not support custom builds. Download an official version.
server.kicked.gameover = Game over! server.kicked.gameover = Game over!
server.kicked.serverRestarting = The server is restarting.
server.versions = Your version:[accent] {0}[]\nServer version:[accent] {1}[] server.versions = Your version:[accent] {0}[]\nServer version:[accent] {1}[]
host.info = The [accent]host[] button hosts a server on port [scarlet]6567[]. \nAnybody on the same [lightgray]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[lightgray]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. Note that public networks sometimes do not allow server discovery. host.info = The [accent]host[] button hosts a server on port [scarlet]6567[]. \nAnybody on the same [lightgray]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[lightgray]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. Note that public networks sometimes do not allow server discovery.
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[lightgray]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. 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[lightgray]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.
@@ -631,6 +643,7 @@ setting.screenshake.name = Screen Shake
setting.effects.name = Display Effects setting.effects.name = Display Effects
setting.destroyedblocks.name = Display Destroyed Blocks setting.destroyedblocks.name = Display Destroyed Blocks
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
setting.coreselect.name = Allow Schematic Cores
setting.sensitivity.name = Controller Sensitivity setting.sensitivity.name = Controller Sensitivity
setting.saveinterval.name = Save Interval setting.saveinterval.name = Save Interval
setting.seconds = {0} seconds setting.seconds = {0} seconds
@@ -705,7 +718,6 @@ keybind.pick.name = Pick Block
keybind.break_block.name = Break Block keybind.break_block.name = Break Block
keybind.deselect.name = Deselect keybind.deselect.name = Deselect
keybind.shoot.name = Shoot keybind.shoot.name = Shoot
keybind.zoom_hold.name = Zoom Hold
keybind.zoom.name = Zoom keybind.zoom.name = Zoom
keybind.menu.name = Menu keybind.menu.name = Menu
keybind.pause.name = Pause keybind.pause.name = Pause
@@ -743,6 +755,7 @@ rules.enemyCheat = Infinite AI (Red Team) Resources
rules.unitdrops = Unit Drops rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Production Speed Multiplier rules.unitbuildspeedmultiplier = Unit Production Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier rules.unithealthmultiplier = Unit Health Multiplier
rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = Player Health Multiplier rules.playerhealthmultiplier = Player Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier rules.playerdamagemultiplier = Player Damage Multiplier
rules.unitdamagemultiplier = Unit Damage Multiplier rules.unitdamagemultiplier = Unit Damage Multiplier
@@ -1046,7 +1059,7 @@ unit.eradicator.name = Eradicator
unit.lich.name = Lich unit.lich.name = Lich
unit.reaper.name = Reaper unit.reaper.name = Reaper
tutorial.next = [lightgray]<Tap to continue> tutorial.next = [lightgray]<Tap to continue>
tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nUse [accent][[WASD][] to move.\n[accent]Hold [[Ctrl] while scrolling[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nUse[accent] [[WASD][] to move.\n[accent]Scroll[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
tutorial.drill = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nClick the drill tab in the bottom right.\nSelect the[accent] mechanical drill[]. Place it on a copper vein by clicking.\nYou can also select the drill by tapping [accent][[2][] then [accent][[1][] quickly, regardless of which tab is open.\n[accent]Right-click[] to stop building. tutorial.drill = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nClick the drill tab in the bottom right.\nSelect the[accent] mechanical drill[]. Place it on a copper vein by clicking.\nYou can also select the drill by tapping [accent][[2][] then [accent][[1][] quickly, regardless of which tab is open.\n[accent]Right-click[] to stop building.
tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement. tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
@@ -1070,7 +1083,7 @@ tutorial.launch = Once you reach a specific wave, you are able to[accent] launch
item.copper.description = The most basic structural material. Used extensively in all types of blocks. item.copper.description = The most basic structural material. Used extensively in all types of blocks.
item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks. item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks.
item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage. item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage.
item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. item.graphite.description = Mineralized carbon, used for ammunition and electrical components.
item.sand.description = A common material that is used extensively in smelting, both in alloying and as a flux. item.sand.description = A common material that is used extensively in smelting, both in alloying and as a flux.
item.coal.description = Fossilized plant matter, formed long before the seeding event. Used extensively for fuel and resource production. item.coal.description = Fossilized plant matter, formed long before the seeding event. Used extensively for fuel and resource production.
item.titanium.description = A rare super-light metal used extensively in liquid transportation, drills and aircraft. item.titanium.description = A rare super-light metal used extensively in liquid transportation, drills and aircraft.

View File

@@ -1,241 +1,257 @@
credits.text = Vytvořil [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[] credits.text = Vytvořil [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]
credits = Kredity credits = Titulky
contributors = Překladatelé a Sponzoři contributors = Překladatelé a sponzoři
discord = Připoj se k Mindustry na Discordu! discord = Připoj se k Mindustry na Discord serveru!
link.discord.description = Oficiální Mindustry chatroom na Discordu! link.discord.description = Oficiální kanál Mindustry na serveru Discord
link.reddit.description = The Mindustry subreddit link.reddit.description = Mindustry na Redditu
link.github.description = Zdrojový kód hry link.github.description = Zdrojový kód hry
link.changelog.description = Seznam úprav link.changelog.description = Seznam úprav
link.dev-builds.description = Nestabilní verze vývoje hry link.dev-builds.description = Nestabilní vývojová verze hry
link.trello.description = Oficiální Trello board pro plánované funkce link.trello.description = Oficiální nástěnka na Trello s plány rozvoje hry
link.itch.io.description = itch.io stránka pro stažení PC nebo webové verze link.itch.io.description = Stránka na itch.io s odkazy na stažení hry
link.google-play.description = Google Play store link.google-play.description = Obchod Google Play
link.wiki.description = Oficiální Mindustry wiki link.f-droid.description = Katalog F-Droid
linkfail = Nepodařilo se otevřít odkaz!\nURL byla zkopírována do schránky. link.wiki.description = Oficiální Wiki Mindustry
link.feathub.description = Navrhni něco nového do hry!
linkfail = Nepodařilo se otevřít odkaz!\nAdresa URL byla zkopírována do schránky.
screenshot = Snímek obrazovky uložen {0} screenshot = Snímek obrazovky uložen {0}
screenshot.invalid = Mapa je moc velká, nemusí být dost paměti pro snímek obrazovky. screenshot.invalid = Mapa je moc velká, nemusí být dost paměti pro získání snímku obrazovky.
gameover = Konec hry gameover = Konec hry
gameover.pvp = [accent] {0}[] Tým Vyhrál! gameover.pvp = [accent]{0}[] tým vyhrál!
highscore = [accent]Nový rekord! highscore = [accent]Nový rekord!
copied = Copied. copied = Zkopírováno.
load.sound = Zvuky load.sound = Zvuky
load.map = Mapy load.map = Mapy
load.image = Obrázky load.image = Obrázky
load.content = Obsah load.content = Obsah
load.system = System load.system = Systém
load.mod = Módy load.mod = Modifikace
schematic = Schematic load.scripts = Skripty
schematic.add = Save Schematic...
schematics = Schematics schematic = Šablona
schematic.replace = A schematic by that name already exists. Replace it? schematic.add = Uložit šablonu...
schematic.import = Import Schematic... schematics = Šablony
schematic.exportfile = Export File schematic.replace = Šablona tohoto jména již exisruje. Přeješ si ji nahradit?
schematic.importfile = Import File schematic.import = Importovat šablonu...
schematic.browseworkshop = Browse Workshop schematic.exportfile = Exportovat soubor
schematic.copy = Copy to Clipboard schematic.importfile = Importovat soubor
schematic.copy.import = Import from Clipboard schematic.browseworkshop = Procházet dílnu
schematic.shareworkshop = Share on Workshop schematic.copy = Zkopírovat do schránky
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Flip Schematic schematic.copy.import = Importovat ze schránky
schematic.saved = Schematic saved. schematic.shareworkshop = Sdílet v dílně
schematic.delete.confirm = This schematic will be utterly eradicated. schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Obrátit šablonu
schematic.rename = Rename Schematic schematic.saved = Šablona byla uložena.
schematic.info = {0}x{1}, {2} blocks schematic.delete.confirm = Tato šablona bude beze zbytku smazána.
schematic.rename = Přejmenovat šablonu
schematic.info = {0}x{1}, {2} bloků
stat.wave = Vln poraženo :[accent]{0} stat.wave = Vln poraženo :[accent]{0}
stat.enemiesDestroyed = Nepřátel zničeno:[accent] {0} stat.enemiesDestroyed = Nepřátel zničeno :[accent]{0}[]
stat.built = Budov postaveno:[accent] {0} stat.built = Budov postaveno: [accent]{0}[]
stat.destroyed = Budov zničeno:[accent] {0} stat.destroyed = Budov zničeno: [accent]{0}[]
stat.deconstructed = Budov rozebráno:[accent] {0} stat.deconstructed = Budov rozebráno: [accent]{0}[]
stat.delivered = Materiálu odesláno: stat.delivered = Materiálu vysláno:
stat.rank = Závěrečné hodnocení: [accent]{0} stat.rank = Závěrečné hodnocení: [accent]{0}[]
launcheditems = [accent]Odeslané předměty
launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue. launcheditems = [accent]Vyslané předměty[]
map.delete = Jsi si jistý že chceš smazat mapu "[accent]{0}[]"? launchinfo = [unlaunched][Je třeba [LAUNCH] Tvé jádro, abys získal věci vyznačené modře.
level.highscore = Nejvyšší skóre: [accent]{0} map.delete = Jsi si jistý, že chceš smazat mapu "[accent]{0}[]"?
level.select = Výběr levelu level.highscore = Nejvyšší skóre: [accent]{0}[]
level.select = Výběr úrovně
level.mode = Herní mód: level.mode = Herní mód:
showagain = Znovu neukazovat ! showagain = Znovu neukazovat
coreattack = < Jádro je pod útokem! > coreattack = < Jádro je pod útokem! >
nearpoint = [[ [scarlet]IHNED OPUSŤTE PROSTOR VÝSADKŮ[] ]\nNebezpečí okamžité smrti nearpoint = [ [scarlet]IHNED OPUSŤTE PROSTOR VÝSADKU[] ]\nNebezpečí okamžité smrti!
database = Databáze objektů database = Databáze objektů ve hře
savegame = Uložit hru savegame = Uložit hru
loadgame = Načíst hru loadgame = Načíst hru
joingame = Připojit se ke hře joingame = Připojit se ke hře
customgame = Vlastní hra customgame = Vlastní hra
newgame = Nová hra newgame = Nová hra
none = <žádný> none = <žádný>
minimap = Minimapa minimap = Mapička
position = Position position = Pozice
close = Zavřít close = Zavřít
website = Web. stránky website = Webové stránky
quit = Ukončit quit = Ukončit
save.quit = Uložit a ukončit save.quit = Uložit a ukončit
maps = Mapy maps = Mapy
maps.browse = Procházet mapy maps.browse = Procházet mapy
continue = Pokračovat continue = Pokračovat
maps.none = [LIGHT_GRAY]Žádné mapy nebyly nalezeny! maps.none = [LIGHT_GRAY]Mapy nebyly nalezeny.
invalid = Neplatné invalid = Neplatné
preparingconfig = Připravuji Config pickcolor = Vyber barvu
preparingcontent = Připravuji obsah preparingconfig = Připravuji konfiguraci
uploadingcontent = Nahrávám obsah preparingcontent = Připravuji obsah hry
uploadingpreviewfile = Nahrávám prohlížecí soubor uploadingcontent = Nahrávám obsah hry
uploadingpreviewfile = Nahrávám soubor s náhledem
committingchanges = Provádím změny committingchanges = Provádím změny
done = Hotovo done = Hotovo
feature.unsupported = Your device does not support this feature. feature.unsupported = Tvoje zařízení nepodporuje tuto vlastnost hry.
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
mods.alpha = [accent](Alpha) mods.alphainfo = Měj na paměti, že modifikace jsou stále v alfa fázi vývoje a mohou být [scarlet]velmi chybové[].\nNahlaš, prosím, jakékoliv závady na GitHub nebo Discord serveru Mindustry. Děkujeme!
mods = Mods mods.alpha = [accent](Alfa)[]
mods.none = [LIGHT_GRAY]No mods found! mods = Modifikace
mods.guide = Modding Guide mods.none = [LIGHT_GRAY]Modifikace nebyly nalezeny.[]
mods.report = Report Bug mods.guide = Průvodce modifikacemi
mods.openfolder = Open Mod Folder mods.report = Nahlásit závadu
mod.enabled = [lightgray]Enabled mods.openfolder = Otevřít složku s modifikacemi
mod.disabled = [scarlet]Disabled mod.enabled = [lightgray]Povoleno[]
mod.disable = Disable mod.disabled = [scarlet]Zakázáno[]
mod.delete.error = Unable to delete mod. File may be in use. mod.disable = Zakázat
mod.missingdependencies = [scarlet]Missing dependencies: {0} mod.delete.error = Nebylo možnost smazat modifikaci. Soubor může být používán.
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled. mod.requiresversion = [scarlet]Minimální požadovaná verze hry:: [accent]{0}[]
mod.enable = Enable mod.missingdependencies = [scarlet]Chybějící závislosti: {0}
mod.requiresrestart = The game will now close to apply the mod changes. mod.erroredcontent = [scarlet]Chyby v obsahu
mod.reloadrequired = [scarlet]Reload Required mod.errors = Při načítání obsahu hry se vyskytly problémy.
mod.import = Import Mod mod.noerrorplay = [scarlet]Máš modifikace s chybami.[] Buď zakaž dotčené modifikace, nebo oprav chyby před tím, než začneš hrát.
mod.import.github = Import GitHub Mod mod.nowdisabled = [scarlet]Modifikaci '{0}' chybí tyto závislosti: [accent]{1}\n[lightgray]Tyto modifikace je třeba nejprve stáhnout.\nTato modifikace bude nyní automaticky zakázána.
mod.remove.confirm = This mod will be deleted. mod.enable = Povolit
mod.author = [LIGHT_GRAY]Author:[] {0} mod.requiresrestart = Hra bude ukončena, aby bylo možné nasadit modifikace.
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0} mod.reloadrequired = [scarlet]Je vyžadováno znovuspuštění hry.
mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again. mod.import = Importovat modifikaci
mod.folder.missing = Only mods in folder form can be published on the workshop.\nTo convert any mod into a folder, simply unzip its file into a folder and delete the old zip, then restart your game or reload your mods. mod.import.github = Import modifikaci z GitHubu
mod.item.remove = Tato položka je součástí [accent]'{0}'[] modifikace. Pokud ji chcete odstranit, odinstalujte tuto modifikaci.
mod.remove.confirm = Tato modifikace bude odstraněna.
mod.author = [LIGHT_GRAY]Autor:[] {0}
mod.missing = Toto uložení hra obsahuje modifikace, které byly nedávno aktualizovány, nebo již nejsou nainstalovány. Použití tohoto uložení může vést k chybám. Jsi si jist, že chceš nahrát toto uložení hry?\n[lightgray]Modifikace:\n{0}
mod.preview.missing = Než vystavíš svou modifikaci v dílně, musíš přidat obrázek pro náhled.\nUmísti obrázek pojmenovaný [accent]preview.png[] do složky modifikace a zkus to znovu.
mod.folder.missing = V dílně mohou být publikovány pouze modifikace ve formě složky.\nAbys převedl modifikaci na formu složky, jednoduše rozbal zip soubor do složky a smaž starý zip soubor. Potom znovu spusť hru nebo znovu načti modifikace.
mod.scripts.unsupported = Tvoje zařízení nepodporuje skripty. Některé modifikace nemusí správně fungovat.
about.button = O hře about.button = O hře
name = Jméno: name = Jméno:
noname = Nejdřív si vyber[accent] herní jméno[]. noname = Nejdřív si vyber [accent]jméno ve hře[].
filename = Jméno složky: filename = Název souboru:
unlocked = Nový blok odemčen! unlocked = Byl odemmknut nový blok!
completed = [accent]Dokončeno completed = [accent]Dokončeno
techtree = Technologie techtree = Technologie
research.list = [LIGHT_GRAY]Výzkum: research.list = [LIGHT_GRAY]Výzkum:
research = Výzkum research = Výzkum
researched = [LIGHT_GRAY]{0} vyzkoumán(o). researched = Výzkumu dokončeno: [LIGHT_GRAY]{0}[].
players = {0} hráčů online players = Hráčů: {0}
players.single = {0} hráč online players.single = Hráč: {0}
server.closing = [accent]Zavírám server... server.closing = [accent]Ukončuji server...
server.kicked.kick = Byl jsi vykopnut ze serveru! server.kicked.kick = Byl jsi vykopnut ze serveru!
server.kicked.whitelist = Na server ti nebyl udělen přístup. server.kicked.whitelist = Na server Ti nebyl udělen přístup.
server.kicked.serverClose = Server je zavřený. server.kicked.serverClose = Server není otevřený.
server.kicked.vote = Byl jsi odhlasován a vykopnut. Sbohem. server.kicked.vote = Bylo odhlasováno, že budeš vykopnut ze serveru. Tak čau.
server.kicked.clientOutdated = Zastaralý klient hry! Aktualizuj si hru! server.kicked.clientOutdated = Byl detekována zastaralá verze klienta hry. Aktualizuj si hru!
server.kicked.serverOutdated = Zastaralý server! Řekni hostiteli o aktualizaci! server.kicked.serverOutdated = Byl detekována zastaralá verze serveru. Požádej hostitele o aktualizaci!
server.kicked.banned = Jsi zabanován na tomto serveru. server.kicked.banned = Byl Ti zakázán přístup na tento server.
server.kicked.typeMismatch = Tento server není kompatibilní s verzí tvého klienta server.kicked.typeMismatch = Tento server není kompatibilní s verzí Tvého klienta.
server.kicked.playerLimit = Tento server je plný, vyčkej na volné místo. server.kicked.playerLimit = Tento server je plný, vyčkej prosím, až se uvolní místo.
server.kicked.recentKick = Před nedávnem jsi byl vykopnut.\nPočkej než se znovu připojíš. server.kicked.recentKick = Před nedávnem jsi byl vykopnut z tohoto serveru.\nPočkej proto chvíli, než se zkusíš znovu připojit.
server.kicked.nameInUse = Někdo se stejným jménem\nje aktuálně na serveru. server.kicked.nameInUse = Někdo se stejným jménem jako Ty\nje aktuálně přihlášen na serveru.
server.kicked.nameEmpty = Tvé jméno je neplatné. server.kicked.nameEmpty = Tvé jméno není platné. Možná je prostě jen není nastaveno?
server.kicked.idInUse = Již jsi na tomhle serveru připojen! Připojování se dvěma účty není povoleno. server.kicked.idInUse = Na tomhle serveru jsi již připojen. Připojování se pod dvěma účty není dovoleno!
server.kicked.customClient = Tento server nepodporuje vlastní verze hry. Stáhni si oficiální verzi. server.kicked.customClient = Tento server nepodporuje upravené verze hry. Stáhni si, prosím. oficiální verzi.
server.kicked.gameover = Konec hry! server.kicked.gameover = Konec hry!
server.versions = Verze klienta: [accent]{0}[]\nVerze serveru: [accent]{1}[] server.versions = Verze klienta: [accent]{0}[]\nVerze serveru: [accent]{1}[]
host.info = [accent]hostitel[] hostuje server na portu [scarlet]6567[]. \nKdokoliv na stejné [LIGHT_GRAY]wifi nebo místní síti[] by měl vidět server ve svém listu serverů.\n\nJestli chcete aby se uživatelé připojovali odkudkoliv pomocí IP, [accent]přesměrování portů[] je nutné.\n\n[LIGHT_GRAY]Poznámka: Jestli někdo problém s připojením ke své LAN hře, ujistěte se že má Mindustry povolený přístup k místní síti v nastavení Firewallu. host.info = Tento [accent]hostitel[] hostuje server na portu [scarlet]6567[]. \nKdokoliv na stejné [LIGHT_GRAY]síti Wifi nebo LAN (místní)[] by měl vidět server ve svém listu serverů.\n\nJestliže chcete, aby se uživatelé připojovali odkudkoliv pomocí adresy IP, může být nezbytné nastavit [accent]přesměrování portů[].\n\n[LIGHT_GRAY]Poznámka: Jestliže má někdo problém s připojením k LAN hře, ujisti se, že má program Mindustry povolený přístup k místní síti v nastavení místního firewallu.
join.info = Tady můžeš vložit [accent]IP serveru[] ke kterému se chceš připojit, nebo objevit [accent]Servery Místní sítě[] ke kterým se chceš připojit.\nLAN i Multiplayer jsou podporovány.\n\n[LIGHT_GRAY]Poznámka: Není žádný globální seznam serverů; Pokud se budeš chtít připojit k někomu pomocí IP, budeš jí muset znát od hostitele. join.info = Zde můžeš vložit [accent]adresu IP serveru[], ke kterému se chceš připojit, nebo zkusit nalézt [accent]servery v místní síti[], ke kterým se můžeš připojit.\nJsou podporovány režimy hry více hráčů přes LAN i WAN.\n\n[LIGHT_GRAY]Poznámka: Neexistuje automatický globální seznam serverů Mindustry. Pokud se chceš k někomu připojit pomocí adresy IP, budeš ji muset znát od hostitele.
hostserver = Hostovat hru hostserver = Hostovat hru více hráčů
invitefriends = Pozvat přátele invitefriends = Pozvat přátele
hostserver.mobile = Hostovat\nHru hostserver.mobile = Hostovat\nhru
host = Hostitel host = Hostitel
hosting = [accent]Otevírám server... hosting = [accent]Otevírám server...
hosts.refresh = Obnovit hosts.refresh = Obnovit
hosts.discovering = Hledám hry LAN hosts.discovering = Hledám hry v místní síti (LAN)
hosts.discovering.any = Hledám hry hosts.discovering.any = Hledám hry
server.refreshing = Obnovuji servery server.refreshing = Aktualizuji stav serverů
hosts.none = [lightgray]Žádné místní hry nebyly nalezeny! hosts.none = [lightgray]Žádné místní hry nebyly nalezeny![]
host.invalid = [scarlet]Nejde se připojit k hostiteli. host.invalid = [scarlet]Nejde se připojit k hostiteli.[]
trace = Vystopovat hráče trace = Vystopovat hráče
trace.playername = Jméno hráče: [accent]{0} trace.playername = Jméno hráče: [accent]{0}[]
trace.ip = IP: [accent]{0} trace.ip = Adresa IP: [accent]{0}[]
trace.id = Unikátní ID: [accent]{0} trace.id = Unikátní ID: [accent]{0}[]
trace.mobile = Mobilní klient: [accent]{0} trace.mobile = Mobilní klient hry: [accent]{0}[]
trace.modclient = Vlastní Klient: [accent]{0} trace.modclient = Upravený klient hry: [accent]{0}[]
invalidid = Neplatná IP klienta! Poslat zprávu o chybě. invalidid = Neplatná adresa IP klienta! Zašli prosím zprávu o chybě.
server.bans = Bany. server.bans = Zákazy
server.bans.none = Žádní hráči s banem nebyli nalezeni. server.bans.none = Žádní hráči se zákazem nebyli nalezeni.
server.admins = Admini server.admins = Správci
server.admins.none = Žádní admini nebyli nalezeni. server.admins.none = Žádní správci nebyli nalezeni.
server.add = Přidat server server.add = Přidat server
server.delete = Jsi si jistý že chceš smazat tento server? server.delete = Jsi si jistý, že chceš smazat tento server?
server.edit = Upravit server server.edit = Upravit server
server.outdated = [crimson]Zastaralý server![] server.outdated = [crimson]Zastaralá verze serveru![]
server.outdated.client = [crimson]Zastaralý klient![] server.outdated.client = [crimson]Zastaralá verze klienta![]
server.version = [lightgray]Verze: {0} {1} server.version = [lightgray]Verze: {0} {1}[]
server.custombuild = [yellow]Vlastní verze server.custombuild = [yellow]Upravená verze hry[]
confirmban = Jsi si jistý že chceš zabanovat tohoto hráče? confirmban = Jsi si jistý, že chceš zakázat tohoto hráče?
confirmkick = Jsi si jistý že chceš vykopnout tohoto hráče? confirmkick = Jsi si jistý, že chceš vykopnout tohoto hráče?
confirmvotekick = Jsi si jistý že chceš hlasovat pro vykopnutí tohoto hráče? confirmvotekick = Jsi si jistý, že chceš hlasovat pro vykopnutí tohoto hráče?
confirmunban = Jsi si jistý že chceš odbanovat tohoto hráče confirmunban = Jsi si jistý, že chceš zrušit zákaz pro tohoto hráče?
confirmadmin = Jsi si jistý že chceš tohoto hráče pasovat na admina? confirmadmin = Jsi si jistý, že chceš tohoto hráče povýšit na admina?
confirmunadmin = Jsi si jistý že chceš odebrat práva tomuto hráči? confirmunadmin = Jsi si jistý, že chceš odebrat správcovská práva tomuto hráči?
joingame.title = Připojit se ke hře joingame.title = Připojit se ke hře
joingame.ip = Adresa: joingame.ip = Adresa IP:
disconnect = Odpojen. disconnect = Odpojeno.
disconnect.error = Chyba připojení. disconnect.error = Chyba připojení.
disconnect.closed = Připojení bylo uzavřeno. disconnect.closed = Připojení bylo uzavřeno.
disconnect.timeout = Vypršel čas pro připojení. disconnect.timeout = Vypršel čas pro připojení.
disconnect.data = Chyba načtení dat světa! disconnect.data = Chyba načtení dat ze serveru!
cantconnect = Není možno připojit se ke hře ([accent]{0}[]). cantconnect = Není možno se připojit ke hře ([accent]{0}[]).
connecting = [accent]Připojuji se... connecting = [accent]Připojuji se...
connecting.data = [accent]Načítám data světa... connecting.data = [accent]Načítám data ze serveru...
server.port = Port: server.port = Port:
server.addressinuse = Adresu již někdo používá! server.addressinuse = Adresu již někdo používá!
server.invalidport = Neplatné číslo portu! server.invalidport = Neplatné číslo portu!
server.error = [crimson]Chyba při hostování serveru: [accent]{0} server.error = [crimson]Chyba při hostování serveru.[]
save.new = Nové uložení save.new = Nové uložení hry
save.overwrite = Jsi si jistý že chceš přepsat\ntento ukládaci slot? save.overwrite = Jsi si jistý, že chceš přepsat\ntuto pozici pro uložení hry?
overwrite = Přepsat overwrite = Přepsat
save.none = Žádné uložené pozice nebyly nalezeny save.none = Žádné uložené pozice nebyly nalezeny.
saveload = [accent]Ukládám... saveload = [accent]Ukládám...[]
savefail = Nepodařilo se uložit hru! savefail = Nepodařilo se uložit hru!
save.delete.confirm = Jsi si jistý že chceš smazat toto uložení? save.delete.confirm = Jsi si jistý, že chceš smazat toto uložení hry?
save.delete = Smazat save.delete = Smazat
save.export = Exportovat uložení save.export = Exportovat uložení hry
save.import.invalid = [accent]Toto uložení je neplatné! save.import.invalid = [accent]Toto uložení není v pořádku![]
save.import.fail = [crimson]Nepodařilo se importovat uložení: [accent]{0} save.import.fail = [crimson]Nepodařilo se importovat uložení hry: [accent]{0}[]
save.export.fail = [crimson]Nepodařilo se exportovat uložení: [accent]{0} save.export.fail = [crimson]Nepodařilo se exportovat uložení hry: [accent]{0}[]
save.import = Importovat uložení save.import = Importovat uložení hry
save.newslot = Uložit hru: save.newslot = Uložit hru:
save.rename = Přejmenovat save.rename = Přejmenovat
save.rename.text = Nové jméno: save.rename.text = Nové jméno:
selectslot = Vyber uložení. selectslot = Vyber pozici pro uložení hry.
slot = [accent]Slot {0} slot = [accent]Pozice {0}[]
editmessage = Upravit zprávu editmessage = Upravit zprávu
save.corrupted = [accent]Uložení je poškozené nebo neplatné\nPokud jsi právě aktualizoval svou hru, je to možná změnou formátu pro ukládání a [scarlet]NE[] chyba hry. save.corrupted = [accent]Uložení je poškozené nebo neplatné.
empty = <Prázný> empty = <Prázný>
on = On on = On
off = Off off = Off
save.autosave = Automatické uložení: {0} save.autosave = Automatické uložení: {0}
save.map = Mapa: {0} save.map = Mapa: {0}
save.wave = Vlna {0} save.wave = Vlna: {0}
save.mode = Herní mod: {0} save.mode = Herní mod: {0}
save.date = Naposledy uloženo: {0} save.date = Naposledy uloženo: {0}
save.playtime = Herní čas: {0} save.playtime = Herní čas: {0}
warning = Varování. warning = Varování.
confirm = Potvrdit confirm = Potvrdit
delete = Smazat delete = Smazat
view.workshop = Prohlédnout ve workshopu view.workshop = Prohlédnout v dílně
workshop.listing = Edit Workshop Listing workshop.listing = Upravit popis v dílně
ok = OK ok = OK
open = Otevřít open = Otevřít
customize = Přizpůsobit customize = Přizpůsobit pravidla
cancel = Zrušit cancel = Zrušit
openlink = Otevřít Odkaz openlink = Otevřít odkaz
copylink = Zkopírovat Odkaz copylink = Zkopírovat odkaz
back = Zpět back = Zpět
data.export = Exportuj Data data.export = Exportuj data
data.import = Importuj Data data.import = Importuj data
data.exported = Data exportována. data.exported = Data exportována.
data.invalid = Neplatná herní data. data.invalid = Herní data nejsou v pořádku.
data.import.confirm = Import externích dat smaže[scarlet] všechna[] vaše současná herní data.\n[accent]To nelze vrátit zpět![]\n\nPo importu data se hra ukončí. data.import.confirm = Import externích dat smaže [scarlet]všechna[] Tvoje současná herní data.\n[accent]Toto nelze vrátit zpět![]\n\nPo importu dat se hra bezprostředně sama ukončí.
classic.export = Exportovat klasická data classic.export = Exportovat data pro verzi Classic
classic.export.text = [accent]Mindustry[] právě mělo významně velkou aktualizaci.\nKlasické (v3.5 build 40) uložení nebo mapa byly detekovány. Chtěl by jsi exportovat toto uložení do domácího adresáře tvého zařízení , pro pozdější použití v klasické verzi Mindustry ? classic.export.text = [accent]Mindustry[] mělo významnou aktualizaci.\nByly detekovány uložení hry nebo mapy pro předchozí verzi Classic (v3.5 build 40). Chtěl bys exportovat tato uložení do domovského zařízení Tvého telefonu, pro pozdější použití v této verzi Mindustry Classic?
quit.confirm = Jsi si jistý že chceš ukončit ? quit.confirm = Jsi si jistý, že chceš ukončit hru?
quit.confirm.tutorial = Jste si vážně jist?\nTutoriál se dá znovu spustit v[accent] Nastavení->Hra->Spusť Tutoriál.[] quit.confirm.tutorial = Jste si vážně jistý?\Výuka se dá znovu spustit v [accent]Nastavení->Hra->Spusť výuku[].
loading = [accent]Načítám... loading = [accent]Načítám...
reloading = [accent]načítám módy ... reloading = [accent]Načítám modifikace...
saving = [accent]Ukládám... saving = [accent]Ukládám...
cancelbuilding = [accent][[{0}][] to clear plan cancelbuilding = [accent][[{0}][] to clear plan
selectschematic = [accent][[{0}][] to select+copy selectschematic = [accent][[{0}][] to select+copy
@@ -642,9 +658,9 @@ keybind.screenshot.name = Sníměk mapy
keybind.move_x.name = Pohyb na X keybind.move_x.name = Pohyb na X
keybind.move_y.name = Pohyb na Y keybind.move_y.name = Pohyb na Y
keybind.schematic_select.name = Select Region keybind.schematic_select.name = Select Region
keybind.schematic_menu.name = Schematic Menu keybind.schematic_menu.name = Šablona Menu
keybind.schematic_flip_x.name = Flip Schematic X keybind.schematic_flip_x.name = Flip Šablona X
keybind.schematic_flip_y.name = Flip Schematic Y keybind.schematic_flip_y.name = Flip Šablona Y
keybind.fullscreen.name = Toggle Fullscreen keybind.fullscreen.name = Toggle Fullscreen
keybind.select.name = Vybrat/Střílet keybind.select.name = Vybrat/Střílet
keybind.diagonal_placement.name = Diagonal Placement keybind.diagonal_placement.name = Diagonal Placement
@@ -652,7 +668,6 @@ keybind.pick.name = Pick Block
keybind.break_block.name = Break Block keybind.break_block.name = Break Block
keybind.deselect.name = Odznačit keybind.deselect.name = Odznačit
keybind.shoot.name = Střílet keybind.shoot.name = Střílet
keybind.zoom_hold.name = Přiblížení-podržení
keybind.zoom.name = přiblížení keybind.zoom.name = přiblížení
keybind.menu.name = Hlavní nabídka keybind.menu.name = Hlavní nabídka
keybind.pause.name = pauza keybind.pause.name = pauza
@@ -1153,7 +1168,7 @@ block.phantom-factory.description = Produkuje pokročilé drony kteří jsou pod
block.wraith-factory.description = Produkuje rychlé, udeř a uteč stíhače. block.wraith-factory.description = Produkuje rychlé, udeř a uteč stíhače.
block.ghoul-factory.description = Produkuje těžké kobercové bombardéry. block.ghoul-factory.description = Produkuje těžké kobercové bombardéry.
block.revenant-factory.description = Produkuje vzdušné, težké laserové stíhače.. block.revenant-factory.description = Produkuje vzdušné, težké laserové stíhače..
block.dagger-factory.description = Produkuje standartní pozemní jednotky. block.dagger-factory.description = Produkuje standardní pozemní jednotky.
block.crawler-factory.description = Produces fast self-destructing swarm units. block.crawler-factory.description = Produces fast self-destructing swarm units.
block.titan-factory.description = Produkuje pokročilé, orněné pozemní jednotky. block.titan-factory.description = Produkuje pokročilé, orněné pozemní jednotky.
block.fortress-factory.description = Produkuje těžké artilérní, pozmení jednotky. block.fortress-factory.description = Produkuje těžké artilérní, pozmení jednotky.

View File

@@ -17,29 +17,29 @@ screenshot.invalid = Karte zu groß! Eventuell nicht ausreichend Arbeitsspeicher
gameover = Der Kern wurde zerstört. gameover = Der Kern wurde zerstört.
gameover.pvp = Das[accent] {0}[] Team ist siegreich! gameover.pvp = Das[accent] {0}[] Team ist siegreich!
highscore = [YELLOW] Neuer Highscore! highscore = [YELLOW] Neuer Highscore!
copied = Copied. copied = Kopiert.
load.sound = Sounds load.sound = Sounds
load.map = Maps load.map = Karten
load.image = Images load.image = Bilder
load.content = Content load.content = Inhalt
load.system = System load.system = System
load.mod = Mods load.mod = Mods
schematic = Schematic schematic = Entwürfe
schematic.add = Save Schematic... schematic.add = Entwurf speichern...
schematics = Schematics schematics = Entwürfe
schematic.replace = A schematic by that name already exists. Replace it? schematic.replace = Ein anderer Entwurf hat bereits diesen Namen. Diesen Ersetzen?
schematic.import = Import Schematic... schematic.import = Entwurf importieren...
schematic.exportfile = Export File schematic.exportfile = Entwurf exportieren
schematic.importfile = Import File schematic.importfile = Detei importieren
schematic.browseworkshop = Browse Workshop schematic.browseworkshop = Workshop erkunden
schematic.copy = Copy to Clipboard schematic.copy = In Zwischenablage speichern
schematic.copy.import = Import from Clipboard schematic.copy.import = Aus Zwischenablage ziehen
schematic.shareworkshop = Share on Workshop schematic.shareworkshop = Im Workshop teilen
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Flip Schematic schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Entwurf umkehren
schematic.saved = Schematic saved. schematic.saved = Entwurf gespeichert.
schematic.delete.confirm = This schematic will be utterly eradicated. schematic.delete.confirm = Dieser Entwurf wird absolut ausgelöscht.
schematic.rename = Rename Schematic schematic.rename = Entwurf umbenennen
schematic.info = {0}x{1}, {2} blocks schematic.info = {0}x{1}, {2} Blöcke
stat.wave = Wellen besiegt:[accent] {0} stat.wave = Wellen besiegt:[accent] {0}
stat.enemiesDestroyed = Gegner zerstört:[accent] {0} stat.enemiesDestroyed = Gegner zerstört:[accent] {0}
stat.built = Gebäude gebaut:[accent] {0} stat.built = Gebäude gebaut:[accent] {0}
@@ -47,15 +47,15 @@ stat.destroyed = Gebäude zerstört:[accent] {0}
stat.deconstructed = Gebäude abgebaut:[accent] {0} stat.deconstructed = Gebäude abgebaut:[accent] {0}
stat.delivered = Übertragene Ressourcen: stat.delivered = Übertragene Ressourcen:
stat.rank = Finaler Rang: [accent]{0} stat.rank = Finaler Rang: [accent]{0}
launcheditems = [accent]Übertragene Items launcheditems = [accent]Abgefeuerte Items
launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue. launchinfo = [unlaunched][[LAUNCH] deine Basis um blau markierte Items zu erhalten.
map.delete = Bist du sicher, dass du die Karte "[accent]{0}[]" löschen möchtest? map.delete = Bist du sicher, dass du die Karte "[accent]{0}[]" löschen möchtest?
level.highscore = Highscore: [accent]{0} level.highscore = Highscore: [accent]{0}
level.select = Level-Auswahl level.select = Level-Auswahl
level.mode = Spielmodus: level.mode = Spielmodus:
showagain = Nächstes Mal nicht mehr anzeigen showagain = Nächstes Mal nicht mehr anzeigen
coreattack = < Die Basis wird angegriffen! > coreattack = < Die Basis wird angegriffen! >
nearpoint = [[ [scarlet]SOFORT DEN DROPPOINT VERLASSEN[] ]\nVernichtung droht nearpoint = [[ [scarlet]SOFORT DEN SPAWNPUNKT VERLASSEN[] ]\nVernichtung droht
database = Kern-Datenbank database = Kern-Datenbank
savegame = Spiel speichern savegame = Spiel speichern
loadgame = Spiel laden loadgame = Spiel laden
@@ -70,40 +70,40 @@ website = Website
quit = Verlassen quit = Verlassen
save.quit = Speichern & Beenden save.quit = Speichern & Beenden
maps = Karten maps = Karten
maps.browse = Browse Maps maps.browse = Karten durschsuchen
continue = Weiter continue = Weiter
maps.none = [LIGHT_GRAY]Keine Karten gefunden! maps.none = [LIGHT_GRAY]Keine Karten gefunden!
invalid = Invalid invalid = ungültig
preparingconfig = Preparing Config preparingconfig = Konfiguration vorbereiten
preparingcontent = Preparing Content preparingcontent = Inhalte vorbereiten
uploadingcontent = Uploading Content uploadingcontent = Inhalte hochladen
uploadingpreviewfile = Uploading Preview File uploadingpreviewfile = Vorschau hochladen
committingchanges = Comitting Changes committingchanges = Veränderungen bestätigen
done = Done done = Fertig
feature.unsupported = Your device does not support this feature. feature.unsupported = Dein System unsterstützt dieses Feature nicht.
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord. mods.alphainfo = Vergiss nicht, dass Mods in der Alpha sind, und sehr Fehlerhaft sein [scarlet]könnten[].\nSende alle Probleme an den Mindustry Github oder Discord.
mods.alpha = [accent](Alpha) mods.alpha = [accent](Alpha)
mods = Mods mods = Mods
mods.none = [LIGHT_GRAY]No mods found! mods.none = [LIGHT_GRAY]Keine Mods gefunden!
mods.guide = Modding Guide mods.guide = Modding Anleitung
mods.report = Report Bug mods.report = Problem senden
mods.openfolder = Mod Verzeichnis öffnen mods.openfolder = Mod Verzeichnis öffnen
mod.enabled = [lightgray]Enabled mod.enabled = [lightgray]Aktiviert
mod.disabled = [scarlet]Disabled mod.disabled = [scarlet]Deaktiviert
mod.disable = Disable mod.disable = Deaktivieren
mod.delete.error = Unable to delete mod. File may be in use. mod.delete.error = Unfähig Mod zu löschen; Datei könnte in Benutzung sein.
mod.missingdependencies = [scarlet]Missing dependencies: {0} mod.missingdependencies = [scarlet]Fehldene Abhängigkeiten: {0}
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled. mod.nowdisabled = [scarlet]Mod '{0}' fehlt Abhängigkeiten:[accent] {1}\n[lightgray]Diese Mods müssen erst installiert werden.\nDieser Mod wird automatisch deaktiviert.
mod.enable = Enable mod.enable = Aktivieren
mod.requiresrestart = The game will now close to apply the mod changes. mod.requiresrestart = Das Spiel schließt nun, um Modänderungen wirksam zu machen.
mod.reloadrequired = [scarlet]Reload Required mod.reloadrequired = [scarlet]Neuladen benötigt
mod.import = Mod importieren mod.import = Mod importieren
mod.import.github = GitHub Mod importieren mod.import.github = GitHub Mod importieren
mod.remove.confirm = This mod will be deleted. mod.remove.confirm = Dieser Mod wird gelöscht.
mod.author = [LIGHT_GRAY]Author:[] {0} mod.author = [LIGHT_GRAY]Author:[] {0}
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0} mod.missing = Dieser Spielstand enthält Mods, welche nicht mehr vorhanden oder aktualisiert wurden. Spielstandfehler könnten passieren. Bist du dir sicher, das du ihn laden möchtest?\n[lightgray]Mods:\n{0}
mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again. mod.preview.missing = Bevor du diesen Mod hochladen kannst, musst du eine Bildvorschau einbinden.\nLade ein Bild namens[accent] preview.png[] in den Modordner und versuchs nochmal.
mod.folder.missing = Only mods in folder form can be published on the workshop.\nTo convert any mod into a folder, simply unzip its file into a folder and delete the old zip, then restart your game or reload your mods. mod.folder.missing = Nur Mods in Ordnerform können in den Workshop hochgeladen werden.\nUm einen Mod in einen Ordner zu konvertieren, extrahiere einfach die .zip und lösche die alte .zip danach. Starte dann das Spiel neu.
about.button = Info about.button = Info
name = Name: name = Name:
noname = Wähle zuerst einen[accent] Spielernamen[]. noname = Wähle zuerst einen[accent] Spielernamen[].
@@ -118,14 +118,14 @@ players = {0} Spieler online
players.single = {0} Spieler online players.single = {0} Spieler online
server.closing = [accent]Schließe den Server ... server.closing = [accent]Schließe den Server ...
server.kicked.kick = Du wurdest vom Server gekickt! server.kicked.kick = Du wurdest vom Server gekickt!
server.kicked.whitelist = You are not whitelisted here. server.kicked.whitelist = Du bist nicht auf der Whitelist.
server.kicked.serverClose = Server geschlossen. server.kicked.serverClose = Server geschlossen.
server.kicked.vote = You have been vote-kicked. Goodbye. server.kicked.vote = Es wurde abgestimmt, dich zu kicken. Tschüss.
server.kicked.clientOutdated = Veralteter Client! Aktualisiere dein Spiel! server.kicked.clientOutdated = Veralteter Client! Aktualisiere dein Spiel!
server.kicked.serverOutdated = Veralteter Server! Bitte den Host um ein Update! server.kicked.serverOutdated = Veralteter Server! Bitte den Host um ein Update!
server.kicked.banned = Du wurdest vom Server verbannt. server.kicked.banned = Du wurdest vom Server verbannt.
server.kicked.typeMismatch = This server is not compatible with your build type. server.kicked.typeMismatch = Der Server ist nicht mit deinem Versionstyp kompatibel.
server.kicked.playerLimit = This server is full. Wait for an empty slot. server.kicked.playerLimit = Der Server ist voll.\nWarte für einen freien Platz.
server.kicked.recentKick = Du wurdest gerade gekickt.\nWarte bevor du dich wieder verbindest. server.kicked.recentKick = Du wurdest gerade gekickt.\nWarte bevor du dich wieder verbindest.
server.kicked.nameInUse = Es ist bereits ein Spieler \nmit diesem Namen auf dem Server. server.kicked.nameInUse = Es ist bereits ein Spieler \nmit diesem Namen auf dem Server.
server.kicked.nameEmpty = Dein Name muss mindestens einen Buchstaben oder eine Zahl enthalten. server.kicked.nameEmpty = Dein Name muss mindestens einen Buchstaben oder eine Zahl enthalten.
@@ -136,10 +136,10 @@ server.versions = Deine Version:[accent] {0}[]\nServerversion:[accent] {1}[]
host.info = Der [accent]Server hosten[]-Knopf startet einen Server auf den Ports [scarlet]6567[] und [scarlet]6568.[]\nJeder im gleichen [LIGHT_GRAY]W-Lan oder lokalen Netzwerk[] sollte deinen Server in seiner Server Liste sehen können.\n\nWenn du anderen die Verbindung über IP ermöglichen willst, benötigst du [accent]Port-Forwarding[].\n\n[LIGHT_GRAY]Hinweis: Falls es Probleme mit der Verbindung im Netzwerk gibt, stelle sicher, dass Mindustry in deinen Firewall Einstellungen Zugriff auf das lokale Netzwerk hat. host.info = Der [accent]Server hosten[]-Knopf startet einen Server auf den Ports [scarlet]6567[] und [scarlet]6568.[]\nJeder im gleichen [LIGHT_GRAY]W-Lan oder lokalen Netzwerk[] sollte deinen Server in seiner Server Liste sehen können.\n\nWenn du anderen die Verbindung über IP ermöglichen willst, benötigst du [accent]Port-Forwarding[].\n\n[LIGHT_GRAY]Hinweis: Falls es Probleme mit der Verbindung im Netzwerk gibt, stelle sicher, dass Mindustry in deinen Firewall Einstellungen Zugriff auf das lokale Netzwerk hat.
join.info = Hier kannst du eine [accent]Server-IP[] eingeben um dich zu verbinden oder Server im [accent]lokalen Netzwerk[] entdecken und dich mit ihnen verbinden.\nSowohl Spielen über das lokale Netzwerk als auch Spielen über das Internet werden unterstützt.\n\n[LIGHT_GRAY]Hinweis: Es gibt keine globale Server Liste; Wenn du dich mit jemandem per IP verbinden willst, musst du den Host nach seiner IP fragen. join.info = Hier kannst du eine [accent]Server-IP[] eingeben um dich zu verbinden oder Server im [accent]lokalen Netzwerk[] entdecken und dich mit ihnen verbinden.\nSowohl Spielen über das lokale Netzwerk als auch Spielen über das Internet werden unterstützt.\n\n[LIGHT_GRAY]Hinweis: Es gibt keine globale Server Liste; Wenn du dich mit jemandem per IP verbinden willst, musst du den Host nach seiner IP fragen.
hostserver = Server hosten hostserver = Server hosten
invitefriends = Invite Friends invitefriends = Freunde einladen
hostserver.mobile = Host\nSpiel hostserver.mobile = Host\nSpiel
host = Server hosten host = Server eröffnen
hosting = [accent] Server wird geöffnet ... hosting = [accent] Server wird eröffnet ...
hosts.refresh = Aktualisieren hosts.refresh = Aktualisieren
hosts.discovering = Suche nach LAN-Spielen hosts.discovering = Suche nach LAN-Spielen
hosts.discovering.any = Suche nach Spielen hosts.discovering.any = Suche nach Spielen
@@ -152,7 +152,7 @@ trace.ip = IP: [accent]{0}
trace.id = Eindeutige ID: [accent]{0} trace.id = Eindeutige ID: [accent]{0}
trace.mobile = Mobiler Client: [accent]{0} trace.mobile = Mobiler Client: [accent]{0}
trace.modclient = Gemoddeter Client: [accent]{0} trace.modclient = Gemoddeter Client: [accent]{0}
invalidid = Ungültige Client-ID! Berichte den Bug. invalidid = Ungültige Client-ID! Berichte den Fehler.
server.bans = Bans server.bans = Bans
server.bans.none = Keine gebannten Spieler gefunden! server.bans.none = Keine gebannten Spieler gefunden!
server.admins = Admins server.admins = Admins
@@ -166,18 +166,18 @@ server.version = [lightgray]Version: {0}
server.custombuild = [yellow]Benutzerdefinierter Build server.custombuild = [yellow]Benutzerdefinierter Build
confirmban = Bist du sicher, dass du diesen Spieler verbannen möchtest? confirmban = Bist du sicher, dass du diesen Spieler verbannen möchtest?
confirmkick = Bist du sicher, dass du diesen Spieler kicken willst? confirmkick = Bist du sicher, dass du diesen Spieler kicken willst?
confirmvotekick = Are you sure you want to vote-kick this player? confirmvotekick = Willst du wirklich eine Abstimmung zum kicken des spielers machen?
confirmunban = Bist du sicher, dass du die Verbannung des Spielers rückgängig machen willst? confirmunban = Bist du sicher, dass du die Verbannung des Spielers rückgängig machen willst?
confirmadmin = Bist du sicher, dass du diesen Spieler zu einem Admin machen möchtest? confirmadmin = Bist du sicher, dass du diesen Spieler zu einem Admin machen möchtest?
confirmunadmin = Bis du sicher, dass dieser Spieler kein Admin mehr sein soll? confirmunadmin = Bis du sicher, dass dieser Spieler kein Admin mehr sein soll?
joingame.title = Spiel beitreten joingame.title = Spiel beitreten
joingame.ip = IP: joingame.ip = IP:
disconnect = Verbindung unterbrochen. disconnect = Verbindung unterbrochen.
disconnect.error = Connection error. disconnect.error = Verbindungsfehler.
disconnect.closed = Connection closed. disconnect.closed = Verbindung geschlossen.
disconnect.timeout = Timed out. disconnect.timeout = Zu langer Verbindungsversuch.
disconnect.data = Fehler beim Laden der Welt! disconnect.data = Fehler beim Laden der Welt!
cantconnect = Unable to join game ([accent]{0}[]). cantconnect = Unfähig, dem Spiel beizutreten ([accent]{0}[]).
connecting = [accent] Verbinde... connecting = [accent] Verbinde...
connecting.data = [accent] Welt wird geladen... connecting.data = [accent] Welt wird geladen...
server.port = Port: server.port = Port:
@@ -216,8 +216,8 @@ save.playtime = Spielzeit: {0}
warning = Warnung. warning = Warnung.
confirm = Bestätigen confirm = Bestätigen
delete = Löschen delete = Löschen
view.workshop = View In Workshop view.workshop = Im Workshop betrachten
workshop.listing = Edit Workshop Listing workshop.listing = Workshop Auflistung bearbeiten
ok = OK ok = OK
open = Öffnen open = Öffnen
customize = Anpassen customize = Anpassen
@@ -227,20 +227,20 @@ copylink = Kopiere Link
back = Zurück back = Zurück
data.export = Daten exportieren data.export = Daten exportieren
data.import = Daten importieren data.import = Daten importieren
data.exported = Data exported. data.exported = Daten exportiert.
data.invalid = This isn't valid game data. data.invalid = Das sind ungültige Spieldateien.
data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately. data.import.confirm = Externe Spielstände zu importieren löscht[scarlet] all[] deine jetzigen Spielstände.\n[accent]Dies kann nicht rückgängig gemacht werden![]\n\nSobald die Daten importiert sind, schließt das Spiel.
classic.export = Export Classic Data classic.export = Klassische Dateien exportieren
classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app? classic.export.text = [accent]Mindustry[] Mindustry hatte gerade ein rießiges Update.\nKlassische (v3.5 build 40) Spielstand oder Karten-Daten wurden gefunden. Willst du sie in den home-Ordner deines Smartphones exportieren, um sie für die Mindustry-Klassik App zu verwenden?
quit.confirm = Willst du wirklich aufhören? quit.confirm = Willst du wirklich aufhören?
quit.confirm.tutorial = Willst du das Tutorial wirklich abbrechen?\nDu kannst es unter[accent] Einstellungen->Spiel->Tutorial wiederholen[] erneut spielen. quit.confirm.tutorial = Willst du das Tutorial wirklich abbrechen?\nDu kannst es unter[accent] Einstellungen->Spiel->Tutorial wiederholen[] erneut spielen.
loading = [accent]Wird geladen... loading = [accent]Wird geladen...
reloading = [accent]Reloading Mods... reloading = [accent]Mods neuladen...
saving = [accent]Speichere... saving = [accent]Speichere...
cancelbuilding = [accent][[{0}][] to clear plan cancelbuilding = [accent][[{0}][] um Plan zu löschen
selectschematic = [accent][[{0}][] to select+copy selectschematic = [accent][[{0}][] zum Auswählen+Kopieren
pausebuilding = [accent][[{0}][] to pause building pausebuilding = [accent][[{0}][] zum Pausieren des Bauens
resumebuilding = [scarlet][[{0}][] to resume building resumebuilding = [scarlet][[{0}][] um das Bauen fortzusetzen
wave = [accent]Welle {0} wave = [accent]Welle {0}
wave.waiting = Welle in {0} wave.waiting = Welle in {0}
wave.waveInProgress = [LIGHT_GRAY]Welle im Gange wave.waveInProgress = [LIGHT_GRAY]Welle im Gange
@@ -259,18 +259,18 @@ map.nospawn = Diese Karte hat keine Kerne in denen die Spieler beginnen können!
map.nospawn.pvp = Diese Karte hat keine gegnerischen Kerne wo Gegner starten könnten! Füge über den Editor [SCARLET] rote[] Kerne zu dieser Karte hinzu. map.nospawn.pvp = Diese Karte hat keine gegnerischen Kerne wo Gegner starten könnten! Füge über den Editor [SCARLET] rote[] Kerne zu dieser Karte hinzu.
map.nospawn.attack = Diese Karte hat keine gengnerischen Kerne, die Spieler angreifen können! Füge über den Editor [SCARLET] rote[] Kerne zu dieser Karte hinzu. map.nospawn.attack = Diese Karte hat keine gengnerischen Kerne, die Spieler angreifen können! Füge über den Editor [SCARLET] rote[] Kerne zu dieser Karte hinzu.
map.invalid = Fehler beim Laden der Karte: Beschädigtes oder ungültige Karten Datei. map.invalid = Fehler beim Laden der Karte: Beschädigtes oder ungültige Karten Datei.
workshop.update = Update Item workshop.update = Item aktualisieren
workshop.error = Error fetching workshop details: {0} workshop.error = Fehler beim laden von Workshop-Daten: {0}
map.publish.confirm = Are you sure you want to publish this map?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your maps will not show up! map.publish.confirm = Willst du wirklich diese Map hochladen?\n\n[lightgray]Vergewissere dich die, der Workshop-EULA zugestimmt zu haben, sonst tauch deine Map nicht auf!
workshop.menu = Select what you would like to do with this item. workshop.menu = Wähle aus, was du mit diesem Item machen willst.
workshop.info = Item Info workshop.info = Item Info
changelog = Changelog (optional): changelog = Changelog (optional):
eula = Steam EULA eula = Steam EULA
missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked. missing = Dieses Item wurde verschoben oder gelöscht.\n[lightgray]Die Workshop-Auflistung wird nun automatisch ungekoppelt.
publishing = [accent]Publishing... publishing = [accent]Veröffentlichen...
publish.confirm = Are you sure you want to publish this?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your items will not show up! publish.confirm = Bist du sicher, dies zu veröffentlichen?\n\n[lightgray]Vergewissere dich die, der Workshop-EULA zugestimmt zu haben, sonst tauch deine Karte nicht auf!
publish.error = Error publishing item: {0} publish.error = Fehler beim veröffentlichen des Items: {0}
steam.error = Failed to initialize Steam services.\nError: {0} steam.error = Fehler beim laden der Steam-Dienste.\nError: {0}
editor.brush = Pinsel editor.brush = Pinsel
editor.openin = Öffne im Editor editor.openin = Öffne im Editor
editor.oregen = Erze generieren editor.oregen = Erze generieren
@@ -278,12 +278,12 @@ editor.oregen.info = Erze generiert:
editor.mapinfo = Karten Info editor.mapinfo = Karten Info
editor.author = Autor: editor.author = Autor:
editor.description = Beschreibung: editor.description = Beschreibung:
editor.nodescription = A map must have a description of at least 4 characters before being published. editor.nodescription = Eine Karte benötigt mindestens 4 Buchstaben in der Beschreibung, bevor sie veröffentlich werden kann.
editor.waves = Wellen: editor.waves = Wellen:
editor.rules = Regeln: editor.rules = Regeln:
editor.generation = Generator: editor.generation = Generator:
editor.ingame = Im Spiel Bearbeiten editor.ingame = Im Spiel Bearbeiten
editor.publish.workshop = Publish On Workshop editor.publish.workshop = Im Workshop veröffentlichen
editor.newmap = Neue Karte editor.newmap = Neue Karte
workshop = Workshop workshop = Workshop
waves.title = Wellen waves.title = Wellen
@@ -312,7 +312,7 @@ editor.errorload = Fehler beim Laden der Datei:\n[accent]{0}
editor.errorsave = Fehler beim Speichern der Datei:\n[accent]{0} editor.errorsave = Fehler beim Speichern der Datei:\n[accent]{0}
editor.errorimage = Das ist ein Bild, keine Karte. Wechsel nicht den Dateityp und erwarte, dass es funktioniert.\n\nWenn du eine alte Karte importieren möchtest, benutze den 'Importiere Terrain Bild' Knopf in dem Editor. editor.errorimage = Das ist ein Bild, keine Karte. Wechsel nicht den Dateityp und erwarte, dass es funktioniert.\n\nWenn du eine alte Karte importieren möchtest, benutze den 'Importiere Terrain Bild' Knopf in dem Editor.
editor.errorlegacy = Diese Karte ist zu alt und benutzt ein veraltetes Karten Format, das nicht mehr unterstützt wird. editor.errorlegacy = Diese Karte ist zu alt und benutzt ein veraltetes Karten Format, das nicht mehr unterstützt wird.
editor.errornot = This is not a map file. editor.errornot = Dies ist keine Kartendatei
editor.errorheader = Diese Karte ist entweder nicht gültig oder beschädigt. editor.errorheader = Diese Karte ist entweder nicht gültig oder beschädigt.
editor.errorname = Karte hat keinen Namen. editor.errorname = Karte hat keinen Namen.
editor.update = Aktualisieren editor.update = Aktualisieren
@@ -411,26 +411,26 @@ abandon = Aufgeben
abandon.text = Diese Zone sowie alle Ressourcen werden dem Gegner überlassen. abandon.text = Diese Zone sowie alle Ressourcen werden dem Gegner überlassen.
locked = Gesperrt locked = Gesperrt
complete = [LIGHT_GRAY]Abschließen: complete = [LIGHT_GRAY]Abschließen:
requirement.wave = Reach Wave {0} in {1} requirement.wave = Erreiche {0} in {1}
requirement.core = Destroy Enemy Core in {0} requirement.core = Zerstöre Gegnerbasis in {0}
requirement.unlock = Unlock {0} requirement.unlock = Schalte {0} freo
resume = Zu Zone zurückkehren:\n[LIGHT_GRAY]{0} resume = Zu Zone zurückkehren:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Beste Welle: {0} bestwave = [LIGHT_GRAY]Beste Welle: {0}
launch = Abschluss launch = Abschluss
launch.title = Abschluss erfolgreich launch.title = Abschluss erfolgreich
launch.next = [LIGHT_GRAY]Nächste Möglichkeit bei Welle {0} launch.next = [LIGHT_GRAY]Nächste Möglichkeit bei Welle {0}
launch.unable2 = [scarlet]Unable to LAUNCH.[] launch.unable2 = [scarlet]Unfähig abzuschließen.[]
launch.confirm = Dies wird alle Ressourcen in deinen Kern übertragen.\nDu kannst nicht wieder zu dieser Karte zurückkehren. launch.confirm = Dies wird alle Ressourcen in deinen Kern übertragen.\nDu kannst nicht wieder zu dieser Karte zurückkehren.
launch.skip.confirm = If you skip now, you will not be able to launch until later waves. launch.skip.confirm = Wenn du jetzt überspringst, kannst du nicht vor späteren Wellen abschließen.
uncover = Freischalten uncover = Freischalten
configure = Startitems festlegen configure = Startitems festlegen
bannedblocks = Gesperrte Blöcke bannedblocks = Gesperrte Blöcke
addall = Alle hinzufügen addall = Alle hinzufügen
configure.locked = [LIGHT_GRAY]Erreiche Welle {0}\n, um Startitems festlegen zu können. configure.locked = [LIGHT_GRAY]Erreiche Welle {0}\n, um Startitems festlegen zu können.
configure.invalid = Amount must be a number between 0 and {0}. configure.invalid = Anzahl muss zwischen 0 und {0} sein.
zone.unlocked = [LIGHT_GRAY]{0} freigeschaltet. zone.unlocked = [LIGHT_GRAY]{0} freigeschaltet.
zone.requirement.complete = Welle {0} erreicht:\n{1} Anforderungen der Zone erfüllt. zone.requirement.complete = Welle {0} erreicht:\n{1} Anforderungen der Zone erfüllt.
zone.config.unlocked = Loadout unlocked:[lightgray]\n{0} zone.config.unlocked = Konfiguration:[lightgray]\n{0}
zone.resources = Ressourcen entdeckt: zone.resources = Ressourcen entdeckt:
zone.objective = [lightgray]Ziel: [accent]{0} zone.objective = [lightgray]Ziel: [accent]{0}
zone.objective.survival = Überlebe zone.objective.survival = Überlebe
@@ -457,10 +457,10 @@ zone.desolateRift.name = Trostloser Riss
zone.nuclearComplex.name = Kernkraftwerk zone.nuclearComplex.name = Kernkraftwerk
zone.overgrowth.name = Überwucherung zone.overgrowth.name = Überwucherung
zone.tarFields.name = Teerfelder zone.tarFields.name = Teerfelder
zone.saltFlats.name = Salzebenen zone.saltFlats.name = Salztiefen
zone.impact0078.name = Auswirkung 0078 zone.impact0078.name = Auswirkung 0078
zone.crags.name = Felsen zone.crags.name = Felsen
zone.fungalPass.name = Fungal Pass zone.fungalPass.name = Sporenpass
zone.groundZero.description = Der optimale Ort, um anzufangen. Niedrige Bedrohung durch Gegner. Wenige Ressourcen.\nSammel so viel Kupfer und Blei wie möglich.\nMach weiter! zone.groundZero.description = Der optimale Ort, um anzufangen. Niedrige Bedrohung durch Gegner. Wenige Ressourcen.\nSammel so viel Kupfer und Blei wie möglich.\nMach weiter!
zone.frozenForest.description = Sogar hier, näher an den Bergen, haben sich die Sporen verbreitet. Die kalten Temperaturen können sie nicht für immer im Schach halten.\n\nStarte das Wagnis in Strom. Baue Verbrennungsgeneratoren. Lerne Heiler zu benutzen. zone.frozenForest.description = Sogar hier, näher an den Bergen, haben sich die Sporen verbreitet. Die kalten Temperaturen können sie nicht für immer im Schach halten.\n\nStarte das Wagnis in Strom. Baue Verbrennungsgeneratoren. Lerne Heiler zu benutzen.
zone.desertWastes.description = Diese Abfälle sind riesig, unberechenbar, und durchzogen von verfallenen Sektorstrukturen.\nKohle ist in dieser Region vorhanden. Verbrenne es für Strom, oder synthetisiere Graphit.\n\n[lightgray]Dieser Landeort kann nicht garantiert werden. zone.desertWastes.description = Diese Abfälle sind riesig, unberechenbar, und durchzogen von verfallenen Sektorstrukturen.\nKohle ist in dieser Region vorhanden. Verbrenne es für Strom, oder synthetisiere Graphit.\n\n[lightgray]Dieser Landeort kann nicht garantiert werden.
@@ -472,7 +472,7 @@ zone.overgrowth.description = Dieser Bereich ist bewachsen, näher an der Quelle
zone.tarFields.description = Der Rand einer Ölförderzone, zwischen Bergen und Wüste. Eine der wenigen Plätze mit nutzbare Teer Reserven.\nObwohl es aufgegeben wurde, hat dieses Gebiet einige gefährliche feindliche Kräfte in der Nähe. Unterschätze sie nicht.\n\n[lightgray]Wenn möglich, erforsche Technologien zur Ölverarbeitung. zone.tarFields.description = Der Rand einer Ölförderzone, zwischen Bergen und Wüste. Eine der wenigen Plätze mit nutzbare Teer Reserven.\nObwohl es aufgegeben wurde, hat dieses Gebiet einige gefährliche feindliche Kräfte in der Nähe. Unterschätze sie nicht.\n\n[lightgray]Wenn möglich, erforsche Technologien zur Ölverarbeitung.
zone.desolateRift.description = Eine extrem gefährliche Zone. Reichlich Ressourcen, aber wenig Platz. Hohe Zerstörungsgefahr. Verlasse es so schnell wie möglich. Lassen Sie sich nicht von den großen Abständen zwischen feindlichen Angriffen in die Irre führen. zone.desolateRift.description = Eine extrem gefährliche Zone. Reichlich Ressourcen, aber wenig Platz. Hohe Zerstörungsgefahr. Verlasse es so schnell wie möglich. Lassen Sie sich nicht von den großen Abständen zwischen feindlichen Angriffen in die Irre führen.
zone.nuclearComplex.description = Eine ehemalige Anlage zur Herstellung und Verarbeitung von Thorium, die in Trümmern liegt.\n[lightgray]Erforsche das Thorium und seine vielen Verwendungsmöglichkeiten.\n\nDer Feind ist hier in großer Zahl präsent und sucht ständig nach Angreifern. zone.nuclearComplex.description = Eine ehemalige Anlage zur Herstellung und Verarbeitung von Thorium, die in Trümmern liegt.\n[lightgray]Erforsche das Thorium und seine vielen Verwendungsmöglichkeiten.\n\nDer Feind ist hier in großer Zahl präsent und sucht ständig nach Angreifern.
zone.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores. zone.fungalPass.description = Ein Übergangsgebiet zwischen hohen Bergen und tieferen, sporengeplagter Länder. Eine kleine Späherbasis ist hier angelegt.\nZerstöre sie.\nNutze Dagger und Crawler. Zerstöre die zwei Basen.
zone.impact0078.description = <Beschreibung hier einfügen> zone.impact0078.description = <Beschreibung hier einfügen>
zone.crags.description = <Beschreibung hier einfügen> zone.crags.description = <Beschreibung hier einfügen>
settings.language = Sprache settings.language = Sprache
@@ -509,13 +509,13 @@ blocks.shootrange = Reichweite
blocks.size = Größe blocks.size = Größe
blocks.liquidcapacity = Flüssigkeitskapazität blocks.liquidcapacity = Flüssigkeitskapazität
blocks.powerrange = Stromreichweite blocks.powerrange = Stromreichweite
blocks.powerconnections = Max Connections blocks.powerconnections = Maximale Stromverbindungen
blocks.poweruse = Stromverbrauch blocks.poweruse = Stromverbrauch
blocks.powerdamage = Stromverbrauch/Schadenspunkt blocks.powerdamage = Stromverbrauch/Schadenspunkt
blocks.itemcapacity = Materialkapazität blocks.itemcapacity = Materialkapazität
blocks.basepowergeneration = Basis-Stromerzeugung blocks.basepowergeneration = Basis-Stromerzeugung
blocks.productiontime = Produktionszeit blocks.productiontime = Produktionszeit
blocks.repairtime = Block volle Reparaturzeit blocks.repairtime = Zeit zur vollständigen Heilung
blocks.speedincrease = Geschwindigkeitserhöhung blocks.speedincrease = Geschwindigkeitserhöhung
blocks.range = Reichweite blocks.range = Reichweite
blocks.drilltier = Abbaubare Erze blocks.drilltier = Abbaubare Erze
@@ -529,14 +529,14 @@ blocks.inaccuracy = Ungenauigkeit
blocks.shots = Schüsse blocks.shots = Schüsse
blocks.reload = Schüsse/Sekunde blocks.reload = Schüsse/Sekunde
blocks.ammo = Munition blocks.ammo = Munition
bar.drilltierreq = besserer Bohrer benötigt bar.drilltierreq = Besserer Bohrer benötigt
bar.drillspeed = Bohrgeschwindigkeit: {0}/s bar.drillspeed = Bohrgeschwindigkeit: {0}/s
bar.pumpspeed = Pump Speed: {0}/s bar.pumpspeed = Pump Speed: {0}/s
bar.efficiency = Effizienz: {0}% bar.efficiency = Effizienz: {0}%
bar.powerbalance = Strom: {0} bar.powerbalance = Strom: {0}
bar.powerstored = Stored: {0}/{1} bar.powerstored = Stored: {0}/{1}
bar.poweramount = Strom: {0} bar.poweramount = Strom: {0}
bar.poweroutput = Strom Output: {0} bar.poweroutput = Stromgeneration: {0}
bar.items = Items: {0} bar.items = Items: {0}
bar.capacity = Capacity: {0} bar.capacity = Capacity: {0}
bar.liquid = Flüssigkeit bar.liquid = Flüssigkeit
@@ -547,12 +547,12 @@ bar.spawned = Einheiten: {0}/{1}
bullet.damage = [stat]{0}[lightgray] Schaden bullet.damage = [stat]{0}[lightgray] Schaden
bullet.splashdamage = [stat]{0}[lightgray] Flächenschaden ~[stat] {1}[lightgray] Kacheln bullet.splashdamage = [stat]{0}[lightgray] Flächenschaden ~[stat] {1}[lightgray] Kacheln
bullet.incendiary = [stat]entzündend bullet.incendiary = [stat]entzündend
bullet.homing = [stat]verfolgend bullet.homing = [stat]zielsuchend
bullet.shock = [stat]schock bullet.shock = [stat]schock
bullet.frag = [stat]explosiv bullet.frag = [stat]explosiv
bullet.knockback = [stat]{0}[lightgray] zurückstoßend bullet.knockback = [stat]{0}[lightgray] zurückstoßend
bullet.freezing = [stat]gefrierend bullet.freezing = [stat]frierend
bullet.tarred = [stat]geteert bullet.tarred = [stat]teerent
bullet.multiplier = [stat]{0}[lightgray]x Munition Multiplikator bullet.multiplier = [stat]{0}[lightgray]x Munition Multiplikator
bullet.reload = [stat]{0}[lightgray]x Feuerrate bullet.reload = [stat]{0}[lightgray]x Feuerrate
unit.blocks = Blöcke unit.blocks = Blöcke
@@ -563,7 +563,7 @@ unit.liquidunits = Flüssigkeitseinheiten
unit.powerunits = Stromeinheiten unit.powerunits = Stromeinheiten
unit.degrees = Grad unit.degrees = Grad
unit.seconds = Sekunden unit.seconds = Sekunden
unit.persecond = /sec unit.persecond = /s
unit.timesspeed = x Geschwindigkeit unit.timesspeed = x Geschwindigkeit
unit.percent = % unit.percent = %
unit.items = Materialeinheiten unit.items = Materialeinheiten
@@ -573,12 +573,12 @@ category.liquids = Flüssigkeiten
category.items = Materialien category.items = Materialien
category.crafting = Erzeugung category.crafting = Erzeugung
category.shooting = Schießen category.shooting = Schießen
category.optional = Optionale Verbesserungen category.optional = Zusätze
setting.landscape.name = Landschaft sperren setting.landscape.name = Landschaft sperren
setting.shadows.name = Schatten setting.shadows.name = Schatten
setting.blockreplace.name = Automatic Block Suggestions setting.blockreplace.name = Automatische Blockvorschläge
setting.linear.name = Lineare Filterung setting.linear.name = Lineare Filterung
setting.hints.name = Hints setting.hints.name = Tipps
setting.animatedwater.name = Animiertes Wasser setting.animatedwater.name = Animiertes Wasser
setting.animatedshields.name = Animierte Schilde setting.animatedshields.name = Animierte Schilde
setting.antialias.name = Antialias[LIGHT_GRAY] (Neustart erforderlich)[] setting.antialias.name = Antialias[LIGHT_GRAY] (Neustart erforderlich)[]
@@ -597,7 +597,7 @@ setting.difficulty.normal = Normal
setting.difficulty.hard = Schwer setting.difficulty.hard = Schwer
setting.difficulty.insane = Unmöglich setting.difficulty.insane = Unmöglich
setting.difficulty.name = Schwierigkeit setting.difficulty.name = Schwierigkeit
setting.screenshake.name = Bildschirmwackeln setting.screenshake.name = Wackeleffekt
setting.effects.name = Effekte anzeigen setting.effects.name = Effekte anzeigen
setting.destroyedblocks.name = Zerstörte Blöcke anzeigen setting.destroyedblocks.name = Zerstörte Blöcke anzeigen
setting.conveyorpathfinding.name = Automatische Wegfindung beim Bau von Förderbändern setting.conveyorpathfinding.name = Automatische Wegfindung beim Bau von Förderbändern
@@ -625,8 +625,8 @@ setting.publichost.name = Public Game Visibility
setting.chatopacity.name = Chat Deckkraft setting.chatopacity.name = Chat Deckkraft
setting.lasersopacity.name = Power Laser Opacity setting.lasersopacity.name = Power Laser Opacity
setting.playerchat.name = Chat im Spiel anzeigen setting.playerchat.name = Chat im Spiel anzeigen
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility. public.confirm = Willst du dein Spiel öffentlich zugänglich machen?\n[accent]Jeder kann deinem Spiel beitreten.\n[lightgray]Dies kann später in den Einstellung->Spielt->Öffentliches Spiel geändert werden.
public.beta = Note that beta versions of the game cannot make public lobbies. public.beta = Bemerke: Beta-Versionen des Spiels können keine öffentlichen Spiele machen.
uiscale.reset = UI-Skalierung wurde geändert.\nDrücke "OK", um diese Skalierung zu bestätigen.\n[scarlet]Zurückkehren und Beenden in[accent] {0}[] Einstellungen... uiscale.reset = UI-Skalierung wurde geändert.\nDrücke "OK", um diese Skalierung zu bestätigen.\n[scarlet]Zurückkehren und Beenden in[accent] {0}[] Einstellungen...
uiscale.cancel = Abbrechen & Beenden uiscale.cancel = Abbrechen & Beenden
setting.bloom.name = Bloom setting.bloom.name = Bloom
@@ -647,8 +647,8 @@ keybind.move_x.name = X-Achse
keybind.move_y.name = Y-Achse keybind.move_y.name = Y-Achse
keybind.schematic_select.name = Bereich auswählen keybind.schematic_select.name = Bereich auswählen
keybind.schematic_menu.name = Schematic Menu keybind.schematic_menu.name = Schematic Menu
keybind.schematic_flip_x.name = Flip Schematic X keybind.schematic_flip_x.name = Entwurf umdrehen X
keybind.schematic_flip_y.name = Flip Schematic Y keybind.schematic_flip_y.name = Entwurf umdrehn Y
keybind.category_prev.name = Vorige Kategorie keybind.category_prev.name = Vorige Kategorie
keybind.category_next.name = Nächste Kategorie keybind.category_next.name = Nächste Kategorie
keybind.block_select_left.name = Block-Auswahl nach links keybind.block_select_left.name = Block-Auswahl nach links
@@ -672,12 +672,11 @@ keybind.pick.name = Block Auswählen
keybind.break_block.name = Block zerstören keybind.break_block.name = Block zerstören
keybind.deselect.name = Auswahl aufheben keybind.deselect.name = Auswahl aufheben
keybind.shoot.name = Schießen keybind.shoot.name = Schießen
keybind.zoom_hold.name = Zoom halten
keybind.zoom.name = Zoomen keybind.zoom.name = Zoomen
keybind.menu.name = Menü keybind.menu.name = Menü
keybind.pause.name = Pause keybind.pause.name = Pause
keybind.pause_building.name = Pause/Resume Building keybind.pause_building.name = Pausieren/Fortsetzen Bauen
keybind.minimap.name = Minimap Keybind.minimap.name = Minimap
keybind.dash.name = Bindestrich keybind.dash.name = Bindestrich
keybind.chat.name = Chat keybind.chat.name = Chat
keybind.player_list.name = Spielerliste keybind.player_list.name = Spielerliste

View File

@@ -27,19 +27,19 @@ load.mod = Mods
schematic = Schematic schematic = Schematic
schematic.add = Save Schematic... schematic.add = Save Schematic...
schematics = Schematics schematics = Schematics
schematic.replace = A schematic by that name already exists. Replace it? schematic.replace = Un schematic con ese nombre ya existe. ¿Deseas remplazarlo?
schematic.import = Import Schematic... schematic.import = Import Schematic...
schematic.exportfile = Export File schematic.exportfile = Export File
schematic.importfile = Import File schematic.importfile = Import File
schematic.browseworkshop = Browse Workshop schematic.browseworkshop = Browse Workshop
schematic.copy = Copy to Clipboard schematic.copy = Copiar al portapapeles.
schematic.copy.import = Import from Clipboard schematic.copy.import = Importar desde el portapapeles.
schematic.shareworkshop = Share on Workshop schematic.shareworkshop = Compartir en la Workshop
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Flip Schematic schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Girar Schematic
schematic.saved = Schematic saved. schematic.saved = Schematic guardado.
schematic.delete.confirm = This schematic will be utterly eradicated. schematic.delete.confirm = This schematic will be utterly eradicated.
schematic.rename = Rename Schematic schematic.rename = Renombrar Schematic
schematic.info = {0}x{1}, {2} blocks schematic.info = {0}x{1}, {2} bloques
stat.wave = Oleadas Derrotadas:[accent] {0} stat.wave = Oleadas Derrotadas:[accent] {0}
stat.enemiesDestroyed = Enemigos Destruidos:[accent] {0} stat.enemiesDestroyed = Enemigos Destruidos:[accent] {0}
stat.built = Estructuras Construidas:[accent] {0} stat.built = Estructuras Construidas:[accent] {0}
@@ -80,26 +80,26 @@ uploadingcontent = Uploading Content
uploadingpreviewfile = Uploading Preview File uploadingpreviewfile = Uploading Preview File
committingchanges = Comitting Changes committingchanges = Comitting Changes
done = Hecho done = Hecho
feature.unsupported = Your device does not support this feature. feature.unsupported = Tu dispositivo no soporta esta función.
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord. mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
mods.alpha = [accent](Alpha) mods.alpha = [accent](Alpha)
mods = Mods mods = Mods
mods.none = [LIGHT_GRAY]No mods found! mods.none = [LIGHT_GRAY]No mods found!
mods.guide = Modding Guide mods.guide = Guia de Modding
mods.report = Report Bug mods.report = Reportar Bug
mods.openfolder = Open Mod Folder mods.openfolder = Abrir carpeta de mods
mod.enabled = [lightgray]Enabled mod.enabled = [lightgray]Enabled
mod.disabled = [scarlet]Disabled mod.disabled = [scarlet]Disabled
mod.disable = Disable mod.disable = Disable
mod.delete.error = Unable to delete mod. File may be in use. mod.delete.error = Fallo al elminar el mod. Quizás el archivo esta en uso.
mod.missingdependencies = [scarlet]Missing dependencies: {0} mod.missingdependencies = [scarlet]Missing dependencies: {0}
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled. mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled.
mod.enable = Enable mod.enable = Enable
mod.requiresrestart = The game will now close to apply the mod changes. mod.requiresrestart = The game will now close to apply the mod changes.
mod.reloadrequired = [scarlet]Reload Required mod.reloadrequired = [scarlet]Reload Required
mod.import = Import Mod mod.import = Import Mod
mod.import.github = Import GitHub Mod mod.import.github = Importar Mod de Github
mod.remove.confirm = This mod will be deleted. mod.remove.confirm = Este mod va a ser eliminado.\n¿Quieres continuar?
mod.author = [LIGHT_GRAY]Author:[] {0} mod.author = [LIGHT_GRAY]Author:[] {0}
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0} mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again. mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again.
@@ -120,7 +120,7 @@ server.closing = [accent]Cerrando servidor...
server.kicked.kick = ¡Has sido expulsado del servidor! server.kicked.kick = ¡Has sido expulsado del servidor!
server.kicked.whitelist = You are not whitelisted here. server.kicked.whitelist = You are not whitelisted here.
server.kicked.serverClose = El servidor ha cerrado. server.kicked.serverClose = El servidor ha cerrado.
server.kicked.vote = You have been vote-kicked. Goodbye. server.kicked.vote = Te han expulsado por voto. Adiós!
server.kicked.clientOutdated = ¡Cliente desactualizado! ¡Actualiza tu juego! server.kicked.clientOutdated = ¡Cliente desactualizado! ¡Actualiza tu juego!
server.kicked.serverOutdated = ¡Servidor desactualizado! ¡Pídele al anfitrión que lo actualice! server.kicked.serverOutdated = ¡Servidor desactualizado! ¡Pídele al anfitrión que lo actualice!
server.kicked.banned = Has sido baneado del servidor. server.kicked.banned = Has sido baneado del servidor.
@@ -132,7 +132,7 @@ server.kicked.nameEmpty = Tu nombre debe por lo menos contener un carácter o n
server.kicked.idInUse = ¡Ya estás en el servidor! Conectarse con dos cuentas no está permitido. server.kicked.idInUse = ¡Ya estás en el servidor! Conectarse con dos cuentas no está permitido.
server.kicked.customClient = Este servidor no soporta versiones personalizadas. Descarga una versión oficial. server.kicked.customClient = Este servidor no soporta versiones personalizadas. Descarga una versión oficial.
server.kicked.gameover = ¡Fin del juego! server.kicked.gameover = ¡Fin del juego!
server.versions = Your version:[accent] {0}[]\nVersión del servidor:[accent] {1}[] server.versions = Tu versión:[accent] {0}[]\nVersión del servidor:[accent] {1}[]
host.info = El botón [accent]host[] hostea un servidor en el puerto [scarlet]6567[]. \nCualquier persona en la misma [LIGHT_GRAY]wifi o red local[] debería poder ver tu servidor en la lista de servidores.\n\nSi quieres que cualquier persona se pueda conectar de cualquier lugar por IP, la [accent]asignación de puertos[] es requerida.\n\n[LIGHT_GRAY]Nota: Si alguien experimenta problemas conectándose a tu partida LAN, asegúrate de permitir a Mindustry acceso a tu red local mediante la configuración de tu firewall. host.info = El botón [accent]host[] hostea un servidor en el puerto [scarlet]6567[]. \nCualquier persona en la misma [LIGHT_GRAY]wifi o red local[] debería poder ver tu servidor en la lista de servidores.\n\nSi quieres que cualquier persona se pueda conectar de cualquier lugar por IP, la [accent]asignación de puertos[] es requerida.\n\n[LIGHT_GRAY]Nota: Si alguien experimenta problemas conectándose a tu partida LAN, asegúrate de permitir a Mindustry acceso a tu red local mediante la configuración de tu firewall.
join.info = Aquí, puedes escribir la [accent]IP de un server[] para conectarte, o descubrir servidores de [accent]red local[] para conectarte.\nLAN y WAN es soportado para jugar en multijugador.\n\n[LIGHT_GRAY]Nota: No hay una lista automática global de servidores; si quieres conectarte por IP, tendrás que preguntarle al anfitrión por la IP. join.info = Aquí, puedes escribir la [accent]IP de un server[] para conectarte, o descubrir servidores de [accent]red local[] para conectarte.\nLAN y WAN es soportado para jugar en multijugador.\n\n[LIGHT_GRAY]Nota: No hay una lista automática global de servidores; si quieres conectarte por IP, tendrás que preguntarle al anfitrión por la IP.
hostserver = Hostear Servidor hostserver = Hostear Servidor
@@ -235,7 +235,7 @@ classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic
quit.confirm = ¿Estás seguro de querer salir de la partida? quit.confirm = ¿Estás seguro de querer salir de la partida?
quit.confirm.tutorial = ¿Estás seguro de que sabes qué estas haciendo?\nSe puede hacer el tutorial de nuevo in[accent] Ajustes->Juego->Volver a hacer tutorial.[] quit.confirm.tutorial = ¿Estás seguro de que sabes qué estas haciendo?\nSe puede hacer el tutorial de nuevo in[accent] Ajustes->Juego->Volver a hacer tutorial.[]
loading = [accent]Cargando... loading = [accent]Cargando...
reloading = [accent]Reloading Mods... reloading = [accent]Recargando mods...
saving = [accent]Guardando... saving = [accent]Guardando...
cancelbuilding = [accent][[{0}][] to clear plan cancelbuilding = [accent][[{0}][] to clear plan
selectschematic = [accent][[{0}][] to select+copy selectschematic = [accent][[{0}][] to select+copy
@@ -401,7 +401,7 @@ load = Cargar
save = Guardar save = Guardar
fps = FPS: {0} fps = FPS: {0}
ping = Ping: {0} ms ping = Ping: {0} ms
language.restart = Por favor reinicie el juego para que los cambios del lenguaje surjan efecto. language.restart = Por favor reinicia el juego para que los cambios de idioma tengan efecto.
settings = Ajustes settings = Ajustes
tutorial = Tutorial tutorial = Tutorial
tutorial.retake = Volver a hacer tutorial tutorial.retake = Volver a hacer tutorial
@@ -411,9 +411,9 @@ abandon = Abandonar
abandon.text = Esta zona y sus recursos se perderán ante el enemigo. abandon.text = Esta zona y sus recursos se perderán ante el enemigo.
locked = Bloqueado locked = Bloqueado
complete = [LIGHT_GRAY]Completado: complete = [LIGHT_GRAY]Completado:
requirement.wave = Reach Wave {0} in {1} requirement.wave = Alcanzar la oleada{0} en {1}
requirement.core = Destroy Enemy Core in {0} requirement.core = Destruir el núcleo enemigo en {0}
requirement.unlock = Unlock {0} requirement.unlock = Desbloquear {0}
resume = Continuar Zona:\n[LIGHT_GRAY]{0} resume = Continuar Zona:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Récord: {0} bestwave = [LIGHT_GRAY]Récord: {0}
launch = Lanzar launch = Lanzar
@@ -446,7 +446,7 @@ error.alreadyconnected = Ya estás conectado.
error.mapnotfound = ¡Archivo de mapa no encontrado! error.mapnotfound = ¡Archivo de mapa no encontrado!
error.io = Error I/O de conexión. error.io = Error I/O de conexión.
error.any = Error de red desconocido. error.any = Error de red desconocido.
error.bloom = Failed to initialize bloom.\nYour device may not support it. error.bloom = Error al cargar el bloom.\nPuede que tu dispositivo no soporte esta característica.
zone.groundZero.name = Terreno Cero zone.groundZero.name = Terreno Cero
zone.desertWastes.name = Ruinas del Desierto zone.desertWastes.name = Ruinas del Desierto
zone.craters.name = Los Cráteres zone.craters.name = Los Cráteres
@@ -461,7 +461,7 @@ zone.saltFlats.name = Salinas
zone.impact0078.name = Impacto 0078 zone.impact0078.name = Impacto 0078
zone.crags.name = Riscos zone.crags.name = Riscos
zone.fungalPass.name = Fungal Pass zone.fungalPass.name = Fungal Pass
zone.groundZero.description = La zona óptima para empear una vez más. Riesgo bajo de los enemigos. Pocos recursos.\nConsigue tanto plomo y cobre como puedas.\nSigue avanzando. zone.groundZero.description = La zona óptima para empezar una vez más. Riesgo bajo de los enemigos. Pocos recursos.\nConsigue tanto plomo y cobre como puedas.\nSigue avanzando.
zone.frozenForest.description = Incluso aquí, cerca de las montañas, las esporas se han expandido. Las temperaturas gélidas no pueden contenerlas para siempre.\n\nEmpieza a investigar sobre energía. Cnstruye generadores de combustión. Aprende a usar reparadores. zone.frozenForest.description = Incluso aquí, cerca de las montañas, las esporas se han expandido. Las temperaturas gélidas no pueden contenerlas para siempre.\n\nEmpieza a investigar sobre energía. Cnstruye generadores de combustión. Aprende a usar reparadores.
zone.desertWastes.description = Estas ruinas son vastas, impredecibles y entrecruzadas con sectores de estructuras abandonadas.\nHay carbñon presente en la región. Quémalo para energía, o sintetiza grafito.\n\n[lightgray]La zona de aparición no puede ser garantizada. zone.desertWastes.description = Estas ruinas son vastas, impredecibles y entrecruzadas con sectores de estructuras abandonadas.\nHay carbñon presente en la región. Quémalo para energía, o sintetiza grafito.\n\n[lightgray]La zona de aparición no puede ser garantizada.
zone.saltFlats.description = A las afueras del desierto se encuentran las Salinas. Pocos recursos pueden ser encontrados en esta ubicación.\n\nEl enemigo ha erigido un complejo de almacén de recursos aquí. Erradica su núcleo. No dejes nada. zone.saltFlats.description = A las afueras del desierto se encuentran las Salinas. Pocos recursos pueden ser encontrados en esta ubicación.\n\nEl enemigo ha erigido un complejo de almacén de recursos aquí. Erradica su núcleo. No dejes nada.
@@ -488,7 +488,7 @@ settings.clear.confirm = ¿Estas seguro de querer limpiar estos datos?\n¡Esta a
settings.clearall.confirm = [scarlet]ADVERTENCIA![]\nEsto va a eliminar todos tus datos, incluyendo guardados, mapas, desbloqueos y atajos de teclado.\nUna vez presiones 'ok', el juego va a borrrar todos tus datos y saldrá del juego automáticamente. settings.clearall.confirm = [scarlet]ADVERTENCIA![]\nEsto va a eliminar todos tus datos, incluyendo guardados, mapas, desbloqueos y atajos de teclado.\nUna vez presiones 'ok', el juego va a borrrar todos tus datos y saldrá del juego automáticamente.
paused = [accent] < Pausado > paused = [accent] < Pausado >
clear = Clear clear = Clear
banned = [scarlet]Banned banned = [scarlet]Baneado
yes = yes =
no = No no = No
info.title = [accent]Información info.title = [accent]Información
@@ -550,8 +550,8 @@ bullet.incendiary = [stat]incendiaria
bullet.homing = [stat]homing bullet.homing = [stat]homing
bullet.shock = [stat]shock bullet.shock = [stat]shock
bullet.frag = [stat]frag bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback bullet.knockback = [stat]{0}[lightgray]Empuje
bullet.freezing = [stat]freezing bullet.freezing = [stat]Congelación
bullet.tarred = [stat]tarred bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x multiplicador de munición bullet.multiplier = [stat]{0}[lightgray]x multiplicador de munición
bullet.reload = [stat]{0}[lightgray]x recarga bullet.reload = [stat]{0}[lightgray]x recarga
@@ -576,7 +576,7 @@ category.shooting = Disparo
category.optional = Mejoras Opcionales category.optional = Mejoras Opcionales
setting.landscape.name = Lock Landscape setting.landscape.name = Lock Landscape
setting.shadows.name = Sombras setting.shadows.name = Sombras
setting.blockreplace.name = Automatic Block Suggestions setting.blockreplace.name = Sugerir bloques al construir
setting.linear.name = Linear Filtering setting.linear.name = Linear Filtering
setting.hints.name = Hints setting.hints.name = Hints
setting.animatedwater.name = Agua Animada setting.animatedwater.name = Agua Animada
@@ -589,7 +589,7 @@ setting.touchscreen.name = Touchscreen Controls
setting.fpscap.name = Máx FPS setting.fpscap.name = Máx FPS
setting.fpscap.none = Nada setting.fpscap.none = Nada
setting.fpscap.text = {0} FPS setting.fpscap.text = {0} FPS
setting.uiscale.name = Escala de IU[lightgray] (necesita reiniciar)[] setting.uiscale.name = Escala de UI[lightgray] (necesita reiniciar)[]
setting.swapdiagonal.name = Siempre Colocar Diagonalmente setting.swapdiagonal.name = Siempre Colocar Diagonalmente
setting.difficulty.training = entrenamiento setting.difficulty.training = entrenamiento
setting.difficulty.easy = fácil setting.difficulty.easy = fácil
@@ -599,7 +599,7 @@ setting.difficulty.insane = locura
setting.difficulty.name = Dificultad: setting.difficulty.name = Dificultad:
setting.screenshake.name = Movimiento de la Pantalla setting.screenshake.name = Movimiento de la Pantalla
setting.effects.name = Mostrar Efectos setting.effects.name = Mostrar Efectos
setting.destroyedblocks.name = Display Destroyed Blocks setting.destroyedblocks.name = Mostrar bloques destruidos
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
setting.sensitivity.name = Sensibilidad del Control setting.sensitivity.name = Sensibilidad del Control
setting.saveinterval.name = Intervalo del Autoguardado setting.saveinterval.name = Intervalo del Autoguardado
@@ -607,7 +607,7 @@ setting.seconds = {0} Segundos
setting.fullscreen.name = Pantalla Completa setting.fullscreen.name = Pantalla Completa
setting.borderlesswindow.name = Ventana sin Bordes[LIGHT_GRAY] (podría requerir un reinicio) setting.borderlesswindow.name = Ventana sin Bordes[LIGHT_GRAY] (podría requerir un reinicio)
setting.fps.name = Mostrar FPS setting.fps.name = Mostrar FPS
setting.vsync.name = SincV setting.vsync.name = Vsync (Limita los fps a los Hz de tu pantalla)
setting.pixelate.name = Pixelar [LIGHT_GRAY](podría reducir el rendimiento) setting.pixelate.name = Pixelar [LIGHT_GRAY](podría reducir el rendimiento)
setting.minimap.name = Mostrar Minimapa setting.minimap.name = Mostrar Minimapa
setting.position.name = Show Player Position setting.position.name = Show Player Position
@@ -617,25 +617,25 @@ setting.mutemusic.name = Silenciar Musica
setting.sfxvol.name = Volumen de los efectos de sonido setting.sfxvol.name = Volumen de los efectos de sonido
setting.mutesound.name = Silenciar Sonido setting.mutesound.name = Silenciar Sonido
setting.crashreport.name = Enviar informes de fallos anónimos setting.crashreport.name = Enviar informes de fallos anónimos
setting.savecreate.name = Auto-Create Saves setting.savecreate.name = Crear puntos de guardado automáticamente
setting.publichost.name = Public Game Visibility setting.publichost.name = Public Game Visibility
setting.chatopacity.name = Opacidad del Chat setting.chatopacity.name = Opacidad del Chat
setting.lasersopacity.name = Power Laser Opacity setting.lasersopacity.name = Opacidad de los rayos láser
setting.playerchat.name = Display In-Game Chat setting.playerchat.name = Mostrar el chat in-game
public.confirm = Do you want to make your game public?\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility. public.confirm = Do you want to make your game public?\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility.
public.beta = Note that beta versions of the game cannot make public lobbies. public.beta = Recuerda que en las versiones beta del juego no puedes crear partidas públicas.
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] seconds... uiscale.reset = La escala de la interfaz ha sido modificada con éxito.\nPulsa "OK" para conservar esta escala.\n[scarlet]Deshaciendo los cambios y saliendo al menu en [accent] {0}[]segundos...
uiscale.cancel = Cancelar & Salir uiscale.cancel = Cancelar & Salir
setting.bloom.name = Bloom setting.bloom.name = Bloom
keybind.title = Cambiar accesos de teclado keybind.title = Cambiar accesos de teclado
keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. keybinds.mobile = [scarlet]Los accesos del teclado aquí mostrados no estan disponible en Móviles o Tablets. Solo aceptan movimiento básico.
category.general.name = General category.general.name = General
category.view.name = Visión category.view.name = Visión
category.multiplayer.name = Multijugador category.multiplayer.name = Multijugador
command.attack = Atacar command.attack = Atacar
command.rally = Rally command.rally = Rally
command.retreat = Retirarse command.retreat = Retirarse
keybind.clear_building.name = Clear Building keybind.clear_building.name = Limpiar construcción
keybind.press = Presiona una tecla... keybind.press = Presiona una tecla...
keybind.press.axis = Pulsa un eje o botón... keybind.press.axis = Pulsa un eje o botón...
keybind.screenshot.name = Captura de pantalla de Mapa keybind.screenshot.name = Captura de pantalla de Mapa
@@ -643,8 +643,8 @@ keybind.move_x.name = Mover x
keybind.move_y.name = Mover y keybind.move_y.name = Mover y
keybind.schematic_select.name = Select Region keybind.schematic_select.name = Select Region
keybind.schematic_menu.name = Schematic Menu keybind.schematic_menu.name = Schematic Menu
keybind.schematic_flip_x.name = Flip Schematic X keybind.schematic_flip_x.name = Girar schematic X
keybind.schematic_flip_y.name = Flip Schematic Y keybind.schematic_flip_y.name = Girar schematic Y
keybind.fullscreen.name = Intercambiar con Pantalla Completa keybind.fullscreen.name = Intercambiar con Pantalla Completa
keybind.select.name = Seleccionar keybind.select.name = Seleccionar
keybind.diagonal_placement.name = Construcción Diagonal keybind.diagonal_placement.name = Construcción Diagonal
@@ -652,7 +652,6 @@ keybind.pick.name = Pick Block
keybind.break_block.name = Destruir Bloque keybind.break_block.name = Destruir Bloque
keybind.deselect.name = Deseleccionar keybind.deselect.name = Deseleccionar
keybind.shoot.name = Disparar keybind.shoot.name = Disparar
keybind.zoom_hold.name = Mantener Zoom
keybind.zoom.name = Zoom keybind.zoom.name = Zoom
keybind.menu.name = Menú keybind.menu.name = Menú
keybind.pause.name = Pausa keybind.pause.name = Pausa
@@ -859,7 +858,7 @@ block.lancer.name = Lancero
block.conveyor.name = Cinta Transportadora block.conveyor.name = Cinta Transportadora
block.titanium-conveyor.name = Cinta Transportadora de Titanio block.titanium-conveyor.name = Cinta Transportadora de Titanio
block.armored-conveyor.name = Armored Conveyor block.armored-conveyor.name = Armored Conveyor
block.armored-conveyor.description = Moves items at the same speed as titanium conveyors, but possesses more armor. Does not accept inputs from the sides from anything but other conveyors. block.armored-conveyor.description = Mueve items a la misma veolcidad que una cinta de titanio, pero tiene mas armadura. No acepta entradas por los lados a menos que sean lineas transportadoras.
block.junction.name = Cruce block.junction.name = Cruce
block.router.name = Enrutador block.router.name = Enrutador
block.distributor.name = Distribuidor block.distributor.name = Distribuidor

View File

@@ -652,7 +652,6 @@ keybind.pick.name = Vali blokk
keybind.break_block.name = Hävita blokk keybind.break_block.name = Hävita blokk
keybind.deselect.name = Tühista valik keybind.deselect.name = Tühista valik
keybind.shoot.name = Tulista keybind.shoot.name = Tulista
keybind.zoom_hold.name = Suumimise režiim
keybind.zoom.name = Muuda suumi keybind.zoom.name = Muuda suumi
keybind.menu.name = Menüü keybind.menu.name = Menüü
keybind.pause.name = Paus keybind.pause.name = Paus

View File

@@ -652,7 +652,6 @@ keybind.pick.name = Jaso blokea
keybind.break_block.name = Apurtu blokea keybind.break_block.name = Apurtu blokea
keybind.deselect.name = Deshautatu keybind.deselect.name = Deshautatu
keybind.shoot.name = Tirokatu keybind.shoot.name = Tirokatu
keybind.zoom_hold.name = Zoom mantenduz
keybind.zoom.name = Zoom keybind.zoom.name = Zoom
keybind.menu.name = Menua keybind.menu.name = Menua
keybind.pause.name = Pausatu keybind.pause.name = Pausatu

View File

@@ -547,7 +547,6 @@ keybind.pick.name = Pick Block
keybind.break_block.name = Break Block keybind.break_block.name = Break Block
keybind.deselect.name = Deselect keybind.deselect.name = Deselect
keybind.shoot.name = Shoot keybind.shoot.name = Shoot
keybind.zoom_hold.name = Zoom Hold
keybind.zoom.name = Zoom keybind.zoom.name = Zoom
keybind.menu.name = Menu keybind.menu.name = Menu
keybind.pause.name = Pause keybind.pause.name = Pause

View File

@@ -702,7 +702,6 @@ keybind.pick.name = Choisir un bloc
keybind.break_block.name = Supprimer un bloc keybind.break_block.name = Supprimer un bloc
keybind.deselect.name = Désélectionner keybind.deselect.name = Désélectionner
keybind.shoot.name = Tirer keybind.shoot.name = Tirer
keybind.zoom_hold.name = Maintenir pour zoomer
keybind.zoom.name = Zoom keybind.zoom.name = Zoom
keybind.menu.name = Menu keybind.menu.name = Menu
keybind.pause.name = Pause keybind.pause.name = Pause

View File

@@ -652,7 +652,6 @@ keybind.pick.name = Choisir un bloc
keybind.break_block.name = Supprimer un bloc keybind.break_block.name = Supprimer un bloc
keybind.deselect.name = Déselectionner keybind.deselect.name = Déselectionner
keybind.shoot.name = Tirer keybind.shoot.name = Tirer
keybind.zoom_hold.name = Tenir le zoom
keybind.zoom.name = Zoom keybind.zoom.name = Zoom
keybind.menu.name = Menu keybind.menu.name = Menu
keybind.pause.name = Pause keybind.pause.name = Pause

View File

@@ -652,7 +652,6 @@ keybind.pick.name = Memilih Blok
keybind.break_block.name = Menghancurkan Blok keybind.break_block.name = Menghancurkan Blok
keybind.deselect.name = Batal Memilih keybind.deselect.name = Batal Memilih
keybind.shoot.name = Menembak keybind.shoot.name = Menembak
keybind.zoom_hold.name = Tahan Mode Zoom
keybind.zoom.name = Zoom keybind.zoom.name = Zoom
keybind.menu.name = Menu keybind.menu.name = Menu
keybind.pause.name = Jeda keybind.pause.name = Jeda

View File

@@ -12,9 +12,10 @@ link.itch.io.description = Pagina di itch.io con download per PC e versione web
link.google-play.description = Elenco di Google Play Store link.google-play.description = Elenco di Google Play Store
link.f-droid.description = Catalogo F-Droid link.f-droid.description = Catalogo F-Droid
link.wiki.description = Wiki ufficiale di Mindustry link.wiki.description = Wiki ufficiale di Mindustry
link.feathub.description = Suggerisci nuove funzionalità
linkfail = Impossibile aprire il link! L'URL è stato copiato. linkfail = Impossibile aprire il link! L'URL è stato copiato.
screenshot = Screenshot salvato a {0} screenshot = Screenshot salvato a {0}
screenshot.invalid = Mappa troppo grossa, probabilmente non c'è abbastanza memoria libera. screenshot.invalid = Mappa troppo pesante, probabilmente non c'è abbastanza spazio sul disco.
gameover = Il Nucleo è stato distrutto. gameover = Il Nucleo è stato distrutto.
gameover.pvp = La squadra[accent] {0}[] ha vinto! gameover.pvp = La squadra[accent] {0}[] ha vinto!
highscore = [YELLOW]Nuovo record! highscore = [YELLOW]Nuovo record!
@@ -26,7 +27,7 @@ load.image = Immagini
load.content = Contenuti load.content = Contenuti
load.system = Sistema load.system = Sistema
load.mod = Mods load.mod = Mods
load.scripts = Testi load.scripts = Scripts
schematic = Schematica schematic = Schematica
schematic.add = Salva Schematica... schematic.add = Salva Schematica...
@@ -54,7 +55,7 @@ stat.delivered = Riorse lanciate:
stat.rank = Livello finale: [accent]{0} stat.rank = Livello finale: [accent]{0}
launcheditems = [accent]Oggetti Lanciati launcheditems = [accent]Oggetti Lanciati
launchinfo = [unlaunched][[LAUNCH] il tuo Nucleo per ottenere gli oggetti indicati in blu. launchinfo = [unlaunched][LANCIA] il tuo Nucleo per ottenere gli oggetti indicati in blu.
map.delete = Sei sicuro di voler eliminare la mappa"[accent]{0}[]"? map.delete = Sei sicuro di voler eliminare la mappa"[accent]{0}[]"?
level.highscore = Miglior Punteggio: [accent]{0} level.highscore = Miglior Punteggio: [accent]{0}
level.select = Selezione del Livello level.select = Selezione del Livello
@@ -88,30 +89,32 @@ committingchanges = Applico le modifiche
done = Fatto done = Fatto
feature.unsupported = Il tuo dispositivo non supporta questa funzione. feature.unsupported = Il tuo dispositivo non supporta questa funzione.
mods.alphainfo = Tieni a mente che queste Mod sono in alpha, e[scarlet] possono contenere molti bug[].\Segnala tutti i problemi che trovi su GitHub o Discord di Mindustry. mods.alphainfo = Tieni a mente che queste mods sono in alpha, e[scarlet] possono contenere molti bug[].\Segnala tutti i problemi che trovi su GitHub o Discord di Mindustry.
mods.alpha = [accent](Alpha) mods.alpha = [accent](Alpha)
mods = Mods mods = Mods
mods.none = [LIGHT_GRAY]Nessuna Mod trovata! mods.none = [LIGHT_GRAY]Nessuna mod trovata!
mods.guide = Guida per il modding! mods.guide = Guida per il modding!
mods.report = Segnala un Bug mods.report = Segnala un Bug
mods.openfolder = Apri Cartella Mod mods.openfolder = Apri Cartella Mods
mod.enabled = [lightgray]Abilitato mod.enabled = [lightgray]Abilitato
mod.disabled = [scarlet]Disabilitato mod.disabled = [scarlet]Disabilitato
mod.disable = Disabilita mod.disable = Disabilita
mod.delete.error = Impossibile eliminare questa Mod. Il file potrebbe essere in uso. mod.delete.error = Impossibile eliminare questa mod. Il file potrebbe essere in uso.
mod.requiresversion = [scarlet]Versione minima richiesta: [accent]{0}
mod.missingdependencies = [scarlet]Dipendenze mancanti: {0} mod.missingdependencies = [scarlet]Dipendenze mancanti: {0}
mod.nowdisabled = [scarlet]Alla Mod '{0}' mancano delle dipendenze:[accent] {1}\n[lightgray]Queste Mod devono essere scaricate prima.\nQuesta Mod verrà disabilitata automaticamente. mod.nowdisabled = [scarlet]Alla mod '{0}' mancano delle dipendenze:[accent] {1}\n[lightgray]Queste mods devono essere scaricate prima.\nQuesta mod verrà disabilitata automaticamente.
mod.enable = Abilita mod.enable = Abilita
mod.requiresrestart = Il gioco verrà chiuso per applicare i cambiamenti. mod.requiresrestart = Il gioco verrà chiuso per applicare i cambiamenti.
mod.reloadrequired = [scarlet]Riavvio necessario mod.reloadrequired = [scarlet]Riavvio necessario
mod.import = Importa una Mod mod.import = Importa una mod
mod.import.github = Importa una Mod da GitHub mod.import.github = Importa una mod da GitHub
mod.item.remove = Questo item fa parte della Mod[accent] '{0}'[]. Per rimuoverlo, disinstalla questa Mod. mod.item.remove = Questo item fa parte della mod[accent] '{0}'[]. Per rimuoverlo, disinstalla questa mod.
mod.remove.confirm = Questa Mod verrà eliminata. mod.remove.confirm = Questa mod verrà eliminata.
mod.author = [LIGHT_GRAY]Autore:[] {0} mod.author = [LIGHT_GRAY]Autore:[] {0}
mod.missing = Questo salvataggio contiene Mod che hai recentemente aggiornato o non hai più installate. Il salvataggio potrebbe corrompersi. Sei sicuro di volerlo caricare?\n[lightgray]Mods:\n{0} mod.missing = Questo salvataggio contiene delle mods che hai recentemente aggiornato o non hai più installate. Il salvataggio potrebbe corrompersi. Sei sicuro di volerlo caricare?\n[lightgray]Mods:\n{0}
mod.preview.missing = Prima di pubblicare questa Mod nel Workshop, devi aggiungere un immagine di copertina.\nMetti un immagine[accent] con nome preview.png[] nella cartella della Mod e riprova. mod.preview.missing = Prima di pubblicare questa mod nel Workshop, devi aggiungere un immagine di copertina.\nMetti un immagine[accent] con nome preview.png[] nella cartella della mods e riprova.
mod.folder.missing = Solo le Mod in una cartella possono essere pubblicate nel Workshop.\nPer convertire una Mod in una cartella, decomprimi i suoi file in una cartella ed elimina il vecchio zip, quindi riavvia il gioco o ricarica le tue mods. mod.folder.missing = Solo le mods in una cartella possono essere pubblicate nel Workshop.\nPer convertire una mod in una cartella, decomprimi i suoi file in una cartella ed elimina il vecchio zip, quindi riavvia il gioco o ricarica le tue mods.
mod.scripts.unsupported = Il tuo dispositivo non supporta gli script per le mods. Alcune mods non funzioneranno correttamente.
about.button = Info about.button = Info
name = Nome: name = Nome:
@@ -142,12 +145,12 @@ server.kicked.idInUse = Sei già su questo server! Non è permesso connettersi c
server.kicked.customClient = Questo server non supporta i client personalizzati. Scarica la versione ufficiale dal sito. server.kicked.customClient = Questo server non supporta i client personalizzati. Scarica la versione ufficiale dal sito.
server.kicked.gameover = Game over! server.kicked.gameover = Game over!
server.versions = Your version:[accent] {0}[]\nVersione server:[accent] {1}[] server.versions = Your version:[accent] {0}[]\nVersione server:[accent] {1}[]
host.info = Il pulsante [accent]host [] ospita un server sulla porta [scarlet]6567[].[] Chiunque sulla stessa [LIGHT_GRAY]rete wifi o locale[] dovrebbe essere in grado di vedere il server nell'elenco server.\n\n Se vuoi che le persone siano in grado di connettersi ovunque tramite il tuo IP, è richiesto il [accent]port forwarding[]. \n\n[LIGHT_GRAY]Nota: se qualcuno sta riscontrando problemi durante la connessione al gioco LAN, assicurati di aver consentito a Mindustry di accedere alla rete locale nelle impostazioni del firewall. host.info = Il pulsante [accent]host[] ospita un server sulla porta [scarlet]6567[].[] Chiunque sulla stessa [LIGHT_GRAY]rete wifi o locale[] dovrebbe essere in grado di vedere il server nell'elenco server.\nSe vuoi che le persone siano in grado di connettersi ovunque tramite il tuo IP, è richiesto il [accent]port forwarding[].\n\n[LIGHT_GRAY]Nota: se qualcuno sta riscontrando problemi durante la connessione al gioco LAN, assicurati di aver consentito a Mindustry di accedere alla rete locale nelle impostazioni del firewall.
join.info = Qui è possibile inserire l'[accent]IP del server[] a cui connettersi, o scoprire [accent]un server sulla rete locale[] disponibile.\nSono supportati sia il multiplayer LAN che WAN.\n\n[LIGHT_GRAY]Nota: non esiste un elenco automatico dei server globali; se desideri connetterti a qualcuno tramite il suo IP, è necessario chiedere all'host il proprio IP. join.info = Qui è possibile inserire l'[accent]IP del server[] a cui connettersi, o scoprire [accent]un server sulla rete locale[] disponibile.\nSono supportati sia il multiplayer LAN che WAN.\n\n[LIGHT_GRAY]Nota: non esiste un elenco automatico dei server globali; se desideri connetterti a qualcuno tramite il suo IP, è necessario chiedere all'host il proprio IP.
hostserver = Ospita Server hostserver = Ospita Server
invitefriends = Invita amici invitefriends = Invita amici
hostserver.mobile = Ospita\nServer hostserver.mobile = Ospita\nServer
host = Host host = Ospita
hosting = [accent] Apertura del server... hosting = [accent] Apertura del server...
hosts.refresh = Aggiorna hosts.refresh = Aggiorna
hosts.discovering = Ricerca partite LAN hosts.discovering = Ricerca partite LAN
@@ -280,7 +283,7 @@ publishing = [accent]Pubblicazione...
publish.confirm = Are you sure you want to publish this?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your items will not show up! publish.confirm = Are you sure you want to publish this?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your items will not show up!
publish.error = Error publishing item: {0} publish.error = Error publishing item: {0}
steam.error = Failed to initialize Steam services.\nError: {0} steam.error = Failed to initialize Steam services.\nError: {0}
editor.brush = Pennello editor.brush = Dimensioni Pennello
editor.openin = Apri nell'editor editor.openin = Apri nell'editor
editor.oregen = Generazione dei minerali editor.oregen = Generazione dei minerali
editor.oregen.info = Generazione dei minerali: editor.oregen.info = Generazione dei minerali:
@@ -316,7 +319,7 @@ edit = Modifica...
editor.name = Nome: editor.name = Nome:
editor.spawn = Piazza un'unità editor.spawn = Piazza un'unità
editor.removeunit = Rimuovi un'unità editor.removeunit = Rimuovi un'unità
editor.teams = Squadre editor.teams = Colore Squadre
editor.errorload = Errore nel caricamento di:\n[accent]{0} editor.errorload = Errore nel caricamento di:\n[accent]{0}
editor.errorsave = Errore nel salvataggio di:\n[accent]{0} editor.errorsave = Errore nel salvataggio di:\n[accent]{0}
editor.errorimage = Quella è un'immagine, non una mappa.\n\nSe vuoi importare una mappa vecchia clicca su "Importa una mappa vecchia" nell'editor. editor.errorimage = Quella è un'immagine, non una mappa.\n\nSe vuoi importare una mappa vecchia clicca su "Importa una mappa vecchia" nell'editor.
@@ -335,14 +338,14 @@ editor.saved = Salvato!
editor.save.noname = La tua mappa non ha un nome! Impostane uno nelle informazioni della mappa. editor.save.noname = La tua mappa non ha un nome! Impostane uno nelle informazioni della mappa.
editor.save.overwrite = La tua mappa sovrascrive quelle incluse! Imposta un nome diverso nelle informazioni della mappa. editor.save.overwrite = La tua mappa sovrascrive quelle incluse! Imposta un nome diverso nelle informazioni della mappa.
editor.import.exists = [scarlet]Impossibile importare:[] esiste già una mappa chiamata '{0}' che non può essere sovrascritta! editor.import.exists = [scarlet]Impossibile importare:[] esiste già una mappa chiamata '{0}' che non può essere sovrascritta!
editor.import = Importando... editor.import = Importa
editor.importmap = Importa mappa editor.importmap = Importa mappa
editor.importmap.description = Importa mappa preesistente editor.importmap.description = Importa mappa preesistente
editor.importfile = Importa file editor.importfile = Importa file
editor.importfile.description = Importa un file mappa esterno editor.importfile.description = Importa un file mappa esterno
editor.importimage = Importa mappa terreno editor.importimage = Importa mappa terreno
editor.importimage.description = Importa immagine esterna terreno editor.importimage.description = Importa immagine esterna terreno
editor.export = Esportazione... editor.export = Esporta
editor.exportfile = Esporta file editor.exportfile = Esporta file
editor.exportfile.description = Esporta file mappa editor.exportfile.description = Esporta file mappa
editor.exportimage = Esporta immagine editor.exportimage = Esporta immagine
@@ -437,8 +440,8 @@ launch.confirm = Questo trasporterà tutte le risorse nel tuo Nucleo.\nNon riusc
launch.skip.confirm = Se salti adesso non riuscirai a decollare fino alle ondate successive launch.skip.confirm = Se salti adesso non riuscirai a decollare fino alle ondate successive
uncover = Scopri uncover = Scopri
configure = Configura l'equipaggiamento configure = Configura l'equipaggiamento
bannedblocks = Blocchi banditi bannedblocks = Blocchi Banditi
addall = Aggiungi tutti addall = Aggiungi Tutti
configure.locked = [LIGHT_GRAY]Arriva all'ondata {0}\nper configurare l'equipaggiamento. configure.locked = [LIGHT_GRAY]Arriva all'ondata {0}\nper configurare l'equipaggiamento.
configure.invalid = Il valore dev'essere un numero compresto tra 0 e {0}. configure.invalid = Il valore dev'essere un numero compresto tra 0 e {0}.
zone.unlocked = [LIGHT_GRAY]{0} sbloccata. zone.unlocked = [LIGHT_GRAY]{0} sbloccata.
@@ -448,12 +451,12 @@ zone.resources = Risorse Trovate:
zone.objective = [lightgray]Obiettivo: [accent]{0} zone.objective = [lightgray]Obiettivo: [accent]{0}
zone.objective.survival = Sopravvivere zone.objective.survival = Sopravvivere
zone.objective.attack = Distruggere il Nucleo Nemico zone.objective.attack = Distruggere il Nucleo Nemico
add = Aggiungi... add = Aggiungi
boss.health = Vita del Boss boss.health = Vita del Boss
connectfail = [crimson]Impossibile connettersi al server:[accent] {0} connectfail = [crimson]Impossibile connettersi al server:[accent] {0}
error.unreachable = Server irraggiungibile. L'indirizzo è scritto correttamente? error.unreachable = Server irraggiungibile. L'indirizzo è scritto correttamente?
error.invalidaddress = Indirizzo invalido. error.invalidaddress = Indirizzo non valido.
error.timedout = Timeout!\nAssicurati che l'host abbia il port forwarding impostato e che l'indirizzo sia corretto! error.timedout = Timeout!\nAssicurati che l'host abbia il port forwarding impostato e che l'indirizzo sia corretto!
error.mismatch = Errore pacchetti:\nPossibile discordanza della versione client/server.\nAssicurati che tu e l'host possiediate l'ultima versione di Mindustry! error.mismatch = Errore pacchetti:\nPossibile discordanza della versione client/server.\nAssicurati che tu e l'host possiediate l'ultima versione di Mindustry!
error.alreadyconnected = Già connesso. error.alreadyconnected = Già connesso.
@@ -496,11 +499,12 @@ settings.language = Lingua
settings.data = Importa/Esporta salvataggio settings.data = Importa/Esporta salvataggio
settings.reset = Ripristina Impostazioni settings.reset = Ripristina Impostazioni
settings.rebind = Modifica settings.rebind = Modifica
settings.resetKey = Ripristina
settings.controls = Controlli settings.controls = Controlli
settings.game = Gioco settings.game = Gioco
settings.sound = Suoni settings.sound = Suoni
settings.graphics = Grafica settings.graphics = Grafica
settings.cleardata = Elimina Dati di Gioco... settings.cleardata = Elimina Dati di Gioco
settings.clear.confirm = Sei sicuro di voler cancellare i dati?\nQuesta operazione non può essere annullata! settings.clear.confirm = Sei sicuro di voler cancellare i dati?\nQuesta operazione non può essere annullata!
settings.clearall.confirm = [scarlet]ATTENZIONE![]\nQuesto cancellerà tutti i dati, inclusi salvataggi, mappe, oggetti sbloccati ed impostazioni.\nDopo aver premuto su 'ok' il gioco eliminerà i dati e si chiuderà automaticamente. settings.clearall.confirm = [scarlet]ATTENZIONE![]\nQuesto cancellerà tutti i dati, inclusi salvataggi, mappe, oggetti sbloccati ed impostazioni.\nDopo aver premuto su 'ok' il gioco eliminerà i dati e si chiuderà automaticamente.
paused = [accent]< In Pausa > paused = [accent]< In Pausa >
@@ -513,7 +517,7 @@ error.title = [crimson]Si è verificato un errore
error.crashtitle = Si è verificato un errore error.crashtitle = Si è verificato un errore
blocks.input = Ingresso blocks.input = Ingresso
blocks.output = Uscita blocks.output = Uscita
blocks.booster = Booster blocks.booster = Potenziamenti
block.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.powercapacity = Capacità Energetica blocks.powercapacity = Capacità Energetica
blocks.powershot = Danno/Colpo blocks.powershot = Danno/Colpo
@@ -675,23 +679,23 @@ keybind.dash.name = Scatto
keybind.schematic_select.name = Seleziona Regione keybind.schematic_select.name = Seleziona Regione
keybind.schematic_menu.name = Menu Schematica keybind.schematic_menu.name = Menu Schematica
keybind.schematic_flip_x.name = Ruota Schematica Orizzontalmente keybind.schematic_flip_x.name = Ruota Schematica Orizzontalmente
keybind.schematic_flip_y.name = Flip Schematic Verticalmente keybind.schematic_flip_y.name = Ruota Schematica Verticalmente
keybind.category_prev.name = Categoria Precedente keybind.category_prev.name = Categoria Precedente
keybind.category_next.name = Categoria Successiva keybind.category_next.name = Categoria Successiva
keybind.block_select_left.name = Seleziona Blocco Sinistra keybind.block_select_left.name = Seleziona Blocco Sinistra
keybind.block_select_right.name = Seleziona Blocco Destra keybind.block_select_right.name = Seleziona Blocco Destra
keybind.block_select_up.name = Seleziona Blocco Su keybind.block_select_up.name = Seleziona Blocco Su
keybind.block_select_down.name = Seleziona Blocco Giù keybind.block_select_down.name = Seleziona Blocco Giù
keybind.block_select_01.name = Categoria/Seleziona Blocco 1 keybind.block_select_01.name = Seleziona Categoria/Blocco 1
keybind.block_select_02.name = Categoria/Seleziona Blocco 2 keybind.block_select_02.name = Seleziona Categoria/Blocco 2
keybind.block_select_03.name = Categoria/Seleziona Blocco 3 keybind.block_select_03.name = Seleziona Categoria/Blocco 3
keybind.block_select_04.name = Categoria/Seleziona Blocco 4 keybind.block_select_04.name = Seleziona Categoria/Blocco 4
keybind.block_select_05.name = Categoria/Seleziona Blocco 5 keybind.block_select_05.name = Seleziona Categoria/Blocco 5
keybind.block_select_06.name = Categoria/Seleziona Blocco 6 keybind.block_select_06.name = Seleziona Categoria/Blocco 6
keybind.block_select_07.name = Categoria/Seleziona Blocco 7 keybind.block_select_07.name = Seleziona Categoria/Blocco 7
keybind.block_select_08.name = Categoria/Seleziona Blocco 8 keybind.block_select_08.name = Seleziona Categoria/Blocco 8
keybind.block_select_09.name = Categoria/Seleziona Blocco 9 keybind.block_select_09.name = Seleziona Categoria/Blocco 9
keybind.block_select_10.name = Categoria/Seleziona Blocco 10 keybind.block_select_10.name = Seleziona Categoria/Blocco 10
keybind.fullscreen.name = Schermo Intero keybind.fullscreen.name = Schermo Intero
keybind.select.name = Seleziona/Spara keybind.select.name = Seleziona/Spara
keybind.diagonal_placement.name = Posizionamento Diagonale keybind.diagonal_placement.name = Posizionamento Diagonale
@@ -699,7 +703,6 @@ keybind.pick.name = Scegli Blocco
keybind.break_block.name = Rompi Blocco keybind.break_block.name = Rompi Blocco
keybind.deselect.name = Deseleziona keybind.deselect.name = Deseleziona
keybind.shoot.name = Spara keybind.shoot.name = Spara
keybind.zoom_hold.name = Attiva Zoom
keybind.zoom.name = Esegui Zoom keybind.zoom.name = Esegui Zoom
keybind.menu.name = Menu keybind.menu.name = Menu
keybind.pause.name = Pausa keybind.pause.name = Pausa
@@ -709,7 +712,7 @@ keybind.chat.name = Chat
keybind.player_list.name = Lista dei Giocatori keybind.player_list.name = Lista dei Giocatori
keybind.console.name = Console keybind.console.name = Console
keybind.rotate.name = Ruota keybind.rotate.name = Ruota
keybind.rotateplaced.name = Ruota Blocco Esistente (Premuto) keybind.rotateplaced.name = Ruota Blocco Esistente (premuto)
keybind.toggle_menus.name = Mostra/Nascondi HUD keybind.toggle_menus.name = Mostra/Nascondi HUD
keybind.chat_history_prev.name = Scorri Chat vero l'alto keybind.chat_history_prev.name = Scorri Chat vero l'alto
keybind.chat_history_next.name = Scorri Chat verso il basso keybind.chat_history_next.name = Scorri Chat verso il basso
@@ -988,12 +991,13 @@ block.titan-factory.name = Fabbrica Mech Titano
block.fortress-factory.name = Fabbrica Mech Fortezza block.fortress-factory.name = Fabbrica Mech Fortezza
block.revenant-factory.name = Fabbrica Combattenti Superstiti block.revenant-factory.name = Fabbrica Combattenti Superstiti
block.repair-point.name = Punto di Riparazione block.repair-point.name = Punto di Riparazione
block.pulse-conduit.name = Condotto Attiva block.pulse-conduit.name = Condotto a Impulsi
block.phase-conduit.name = Condotta di Fase block.plated-conduit.name = Condotto Placcato
block.phase-conduit.name = Condotto di Fase
block.liquid-router.name = Distributore di Liquidi block.liquid-router.name = Distributore di Liquidi
block.liquid-tank.name = Serbatoio block.liquid-tank.name = Serbatoio
block.liquid-junction.name = Giunzione Liquida block.liquid-junction.name = Giunzione Liquida
block.bridge-conduit.name = Condotta Sopraelevata block.bridge-conduit.name = Condotto Sopraelevato
block.rotary-pump.name = Pompa a Turbina block.rotary-pump.name = Pompa a Turbina
block.thorium-reactor.name = Reattore al Torio block.thorium-reactor.name = Reattore al Torio
block.mass-driver.name = Lancia Materiali block.mass-driver.name = Lancia Materiali
@@ -1040,17 +1044,17 @@ unit.eradicator.name = Estirpatore
unit.lich.name = Lich unit.lich.name = Lich
unit.reaper.name = Mietitore unit.reaper.name = Mietitore
tutorial.next = [lightgray]< Clicca per continuare > tutorial.next = [lightgray]< Clicca per continuare >
tutorial.intro = Sei entrato nel[scarlet] Tutorial di Mindustry.[]\nInizia[accent] scavando rame[]. Clicca un minerale di rame vicino al tuo Nucleo per farlo.\n\n[accent]{0}/{1} rame tutorial.intro = Sei entrato nel[scarlet] Tutorial di Mindustry.[]\nInizia[accent] scavando del rame[]. Clicca un minerale di rame vicino al tuo Nucleo per farlo.\n\n[accent]{0}/{1} rame
tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers [] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper tutorial.intro.mobile = Sei entrato nel[scarlet] Tutorial di Mindustry.[]\nScorri sullo schermo per muoverti.\n[accent]Avvicina due dita[] per eseguire lo zoom in/out.\nInizia [accent] scavando del rame[]. Clicca un minerale di rame vicino al tuo Nucleo per farlo.\n\n[accent]{0}/{1} rame
tutorial.drill = Ora crea una trivella.\n[accent]Le trivelle []scavano da sole e sono più efficienti. Piazzane una su un minerale di rame. tutorial.drill = Ora crea una trivella.\n[accent]Le trivelle []scavano da sole e sono più efficienti. Piazzane una su un minerale di rame.
tutorial.drill.mobile = Ora crea una trivella. \n[accent] Le trivelle []scavano da sole e sono più efficienti. \n Toccare la scheda della trivella in basso a destra. \n Selezionare la trivella meccanica [accent] []. \n Posizionarlo su una vena di rame toccando, quindi premere il segno di spunta [accent] [] in basso per confermare la selezione. \n Premere il tasto X [accent] [] per annullare il posizionamento. tutorial.drill.mobile = Ora crea una trivella.\n[accent] Le trivelle []scavano da sole e sono più efficienti.\nTocca la scheda della trivella in basso a destra.\nSeleziona la [accent]Trivella Meccanica[].\nPiazzala su una vena di rame toccando, quindi premi il [accent]segno di spunta[] in basso per confermare la selezione.\nCon il tasto [accent]X[] puoi annullare il posizionamento.
tutorial.blockinfo = Ogni blocco ha statistiche diverse. Alcuni minerali richiedono trivelle specifiche.\nPer controllare le informazioni e le statistiche di un blocco, [accent] tocca "?" mentre lo selezioni nel database. []\n\n[accent]Accedi ora alle statistiche della trivella meccanica. [] tutorial.blockinfo = Ogni blocco ha statistiche diverse. Alcuni minerali richiedono trivelle specifiche.\nPer controllare le informazioni e le statistiche di un blocco, [accent] tocca "?" mentre lo selezioni nel database. []\n\n[accent]Accedi ora alle statistiche della trivella meccanica. []
tutorial.conveyor = [accent]I nastri trasportatori []sono usati per trasportare oggetti al Nucleo.\nCrea una linea di nastri dalla trivella al Nucleo. tutorial.conveyor = [accent]I nastri trasportatori []sono usati per trasportare oggetti al Nucleo.\nCrea una linea di nastri dalla trivella al Nucleo.
tutorial.conveyor.mobile = [accent] I nastri trasportatori [] sono usati per trasportare oggetti nel nocciolo. \nCrea una linea di nastri trasportatori dalla trivella al nocciolo. \n[accent] Posizionati in una linea tenendo premuto il dito per alcuni secondi [] e trascinando in una direzione. \n\n [accent] {0} / {1} nastri trasportatori disposti in linea \n [accent] 0/1 oggetti consegnati tutorial.conveyor.mobile = [accent]I nastri trasportatori[] sono usati per trasportare oggetti nel Nucleo.\nCrea una linea di nastri trasportatori dalla trivella al Nucleo.\n[accent]Piazzali in linea tenendo premuto per qualche secondo e trascinando il dito in una direzione.\n\n[accent]Piazza 2 nastri trasportatori con lo strumento linea, quindi trasporta un oggetto fino al Nucleo.
tutorial.turret = Costruisci delle torrette per respingere il nemico [LIGHT_GRAY] [].\nCostruisci una torretta Duo vicino alla tua base. tutorial.turret = Costruisci delle torrette per respingere il nemico [LIGHT_GRAY] [].\nCostruisci una torretta Duo vicino alla tua base.
tutorial.drillturret = La Torretta Duo richiede[accent] munizioni di rame[] per sparare.\nPosiziona una trivella e collega un nastro alla torretta per rifornirla di munizioni con il rame estratto. tutorial.drillturret = La Torretta Duo richiede[accent] munizioni di rame[] per sparare.\nPosiziona una trivella e collega un nastro alla torretta per rifornirla di munizioni con il rame estratto.
tutorial.pause = Durante la battaglia, puoi mettere in pausa il gioco [accent]. []\nPuoi disporre gli edifici mentre sei in pausa. \n\n[accent]Premi spazio per mettere in pausa. tutorial.pause = Durante la battaglia puoi[accent] mettere in pausa il gioco.[]\nPuoi disporre gli edifici mentre il gioco è in pausa.\n\nPer mettere in pausa, premi [accent]spazio[].
tutorial.pause.mobile = Durante la battaglia, puoi mettere in pausa il gioco [accent]. []\nPuoi disporre gli edifici mentre sei in pausa. \n\n[accent] Premi questo pulsante in alto a sinistra per mettere in pausa. tutorial.pause.mobile = Durante la battaglia puoi[accent] mettere in pausa il gioco.[]\nPuoi disporre gli edifici mentre il gioco è in pausa.\n\nPer mettere in pausa, premi il bottone in alto a sinistra.
tutorial.unpause = Ora premi di nuovo spazio per annullare la pausa. tutorial.unpause = Ora premi di nuovo spazio per annullare la pausa.
tutorial.unpause.mobile = Ora premilo di nuovo per annullare la pausa. tutorial.unpause.mobile = Ora premilo di nuovo per annullare la pausa.
tutorial.breaking = I blocchi spesso devono essere distrutti.\n[accent]Tieni premuto il tasto destro del mouse [] per distruggere tutti i blocchi in una selezione.[]\n[accent]Distruggi tutti i blocchi di scarto a sinistra del tuo Nucleo usando la selezione dell'area. tutorial.breaking = I blocchi spesso devono essere distrutti.\n[accent]Tieni premuto il tasto destro del mouse [] per distruggere tutti i blocchi in una selezione.[]\n[accent]Distruggi tutti i blocchi di scarto a sinistra del tuo Nucleo usando la selezione dell'area.
@@ -1061,9 +1065,9 @@ tutorial.waves = Il nemico [LIGHT_GRAY] si avvicina.\nDifendi il tuo Nucleo per
tutorial.waves.mobile = Il [lightgray]nemico si avvicina.\n\nDifendi il Nucleo per 2 ondate. La tua nave sparerà automaticamente contro i nemici.\nCostruisci più torrette. tutorial.waves.mobile = Il [lightgray]nemico si avvicina.\n\nDifendi il Nucleo per 2 ondate. La tua nave sparerà automaticamente contro i nemici.\nCostruisci più torrette.
tutorial.launch = Una volta raggiunta un'ondata specifica, sarai in grado di [accent] decollare con il Nucleo [], lasciando la zona e abbandonando le tue difese e le tue strutture\nOtterrai [accent]tutte le risorse nel tuo Nucleo[] e potrai quindi usarle per ricercare nuove tecnologie.\n\n[accent]Decolla e conferma per terminare il tutorial. tutorial.launch = Una volta raggiunta un'ondata specifica, sarai in grado di [accent] decollare con il Nucleo [], lasciando la zona e abbandonando le tue difese e le tue strutture\nOtterrai [accent]tutte le risorse nel tuo Nucleo[] e potrai quindi usarle per ricercare nuove tecnologie.\n\n[accent]Decolla e conferma per terminare il tutorial.
item.copper.description = Un utile materiale, usato dappertutto item.copper.description = Un materiale utile, usato dappertutto.
item.lead.description = Un materiale di base, molto usato nei blocchi di trasporto. item.lead.description = Un materiale di base, molto usato nei blocchi per il trasporto.
item.metaglass.description = Un durissimo composto di vetro. Estensivamente usato per trasporto di liquidi ed immagazzinamento. item.metaglass.description = Un durissimo composto di vetro. Ampiamente usato per trasporto di liquidi ed immagazzinamento.
item.graphite.description = Carbone mineralizzato, utilizzato per munizioni ed isolamento elettrico. item.graphite.description = Carbone mineralizzato, utilizzato per munizioni ed isolamento elettrico.
item.sand.description = Un materiale di base che viene usato molto nei processi di fusione, sia come lega che come reagente. item.sand.description = Un materiale di base che viene usato molto nei processi di fusione, sia come lega che come reagente.
item.coal.description = Un combustibile comune facilmente ottenibile. item.coal.description = Un combustibile comune facilmente ottenibile.
@@ -1080,7 +1084,7 @@ item.pyratite.description = Una sostanza molto infiammabile che viene utilizzata
liquid.water.description = Il liquido più utile. Comunemente usato per il raffreddamento di macchinari ed il trattamento dei rifiuti. liquid.water.description = Il liquido più utile. Comunemente usato per il raffreddamento di macchinari ed il trattamento dei rifiuti.
liquid.slag.description = Diversi tipi di metalli fusi, mescolati insieme. Può essere separato nei suoi minerali costituenti o spruzzato sulle unità nemiche come un'arma. liquid.slag.description = Diversi tipi di metalli fusi, mescolati insieme. Può essere separato nei suoi minerali costituenti o spruzzato sulle unità nemiche come un'arma.
liquid.oil.description = Un liquido usato nella produzione avanzata.\nPuò essere convertito in carbone per uso combustibile o spruzzato ed incendiato come arma. liquid.oil.description = Un liquido usato nella produzione avanzata.\nPuò essere convertito in carbone per uso combustibile o spruzzato ed incendiato come arma.
liquid.cryofluid.description = Un liquido inerte e non corrosivo creato da acqua e titanio.\nIl liquido più efficiente per il raffreddamento. liquid.cryofluid.description = Un liquido inerte e non corrosivo creato da acqua e titanio.\nÈ il liquido più efficiente per il raffreddamento.
mech.alpha-mech.description = Il mech standard. È abbastanza veloce e produce abbastanza danni, può anche generare 3 droni per aumentare il suo danno complessivo. mech.alpha-mech.description = Il mech standard. È abbastanza veloce e produce abbastanza danni, può anche generare 3 droni per aumentare il suo danno complessivo.
mech.delta-mech.description = Un mech veloce, poco armato fatto per giocare a tocca e fuga con il nemico. Fa poco danno alle strutture, ma può uccidere un gran nummero di nemici grazie alle sue armi ad alto voltaggio. mech.delta-mech.description = Un mech veloce, poco armato fatto per giocare a tocca e fuga con il nemico. Fa poco danno alle strutture, ma può uccidere un gran nummero di nemici grazie alle sue armi ad alto voltaggio.
mech.tau-mech.description = Un mech di supporto. Cura i blocchi danneggiati sparandogli contro. Può spegnere fuochi e curare i compagni di squadra. mech.tau-mech.description = Un mech di supporto. Cura i blocchi danneggiati sparandogli contro. Può spegnere fuochi e curare i compagni di squadra.
@@ -1100,7 +1104,7 @@ unit.eruptor.description = Un mech pesante progettato per abbattere le strutture
unit.wraith.description = Un'unità d'intercezione rapida ed efficiente. unit.wraith.description = Un'unità d'intercezione rapida ed efficiente.
unit.ghoul.description = Un bombardiere pesante. Utilizza composti esplosivi o pirite come munizioni. unit.ghoul.description = Un bombardiere pesante. Utilizza composti esplosivi o pirite come munizioni.
unit.revenant.description = Un pesante lanciamissili volante. unit.revenant.description = Un pesante lanciamissili volante.
block.message.description = Stores a message. Used for communication between allies. block.message.description = Memorizza un messaggio. Utilizzato per la comunicazione tra alleati.
block.graphite-press.description = Comprime pezzi di carbone in fogli di grafite puri. block.graphite-press.description = Comprime pezzi di carbone in fogli di grafite puri.
block.multi-press.description = Una versione aggiornata della pressa per grafite. Impiega acqua ed energia per elaborare il carbone in modo rapido ed efficiente. block.multi-press.description = Una versione aggiornata della pressa per grafite. Impiega acqua ed energia per elaborare il carbone in modo rapido ed efficiente.
block.silicon-smelter.description = Fonde sabbia e carbone riscaldati per ottenere silicio. block.silicon-smelter.description = Fonde sabbia e carbone riscaldati per ottenere silicio.
@@ -1109,7 +1113,7 @@ block.plastanium-compressor.description = Produce plastanio da petrolio e titani
block.phase-weaver.description = Produce tessuto di fase da torio radioattivo ed elevate quantità di sabbia. block.phase-weaver.description = Produce tessuto di fase da torio radioattivo ed elevate quantità di sabbia.
block.alloy-smelter.description = Produce leghe di sovratensione da titanio, piombo, silicio e rame. block.alloy-smelter.description = Produce leghe di sovratensione da titanio, piombo, silicio e rame.
block.cryofluidmixer.description = Combina acqua e titanio in criofluido che è molto più efficiente per il raffreddamento. block.cryofluidmixer.description = Combina acqua e titanio in criofluido che è molto più efficiente per il raffreddamento.
block.blast-mixer.description = Frantuma e mescola le spore con la pirite per produrre Composto Esplosivo. block.blast-mixer.description = Frantuma e mescola le spore con la pirite per produrre composto esplosivo.
block.pyratite-mixer.description = Mescola carbone, piombo e sabbia in pirite altamente infiammabile. block.pyratite-mixer.description = Mescola carbone, piombo e sabbia in pirite altamente infiammabile.
block.melter.description = Riscalda la pietra a temperature molto elevate per ottenere scoria liquida. block.melter.description = Riscalda la pietra a temperature molto elevate per ottenere scoria liquida.
block.separator.description = Sottopone le scoria a centrifugazione per ottenere i vari minerali contenuti. block.separator.description = Sottopone le scoria a centrifugazione per ottenere i vari minerali contenuti.
@@ -1125,21 +1129,21 @@ block.liquid-source.description = Emette continuamente liquidi. Esiste solo nell
block.copper-wall.description = Un blocco difensivo economico.\nUtile per proteggere il Nucleo e le torrette nelle prime ondate. block.copper-wall.description = Un blocco difensivo economico.\nUtile per proteggere il Nucleo e le torrette nelle prime ondate.
block.copper-wall-large.description = Un blocco difensivo economico.\nUtile per proteggere il Nucleo e le torrette nelle prime ondate.\nOccupa più tessere. block.copper-wall-large.description = Un blocco difensivo economico.\nUtile per proteggere il Nucleo e le torrette nelle prime ondate.\nOccupa più tessere.
block.titanium-wall.description = Un blocco difensivo moderatamente forte.\nFornisce una protezione moderata dai nemici. block.titanium-wall.description = Un blocco difensivo moderatamente forte.\nFornisce una protezione moderata dai nemici.
block.titanium-wall-large.description = Un blocco difensivo moderatamente forte.\nFornisce una protezione moderata dai nemici. \nOccupa più blocchi block.titanium-wall-large.description = Un blocco difensivo moderatamente forte.\nFornisce una protezione moderata dai nemici.\nOccupa più tessere
block.plastanium-wall.description = Un tipo speciale di muro che assorbe gli archi elettrici e blocca le connessioni automatiche del nodo d'energia. block.plastanium-wall.description = Un tipo speciale di muro che assorbe gli archi elettrici e blocca le connessioni automatiche del nodo d'energia.
block.plastanium-wall-large.description = Un tipo speciale di muro che assorbe gli archi elettrici e blocca le connessioni automatiche dei nodi d'energia.\nSi estende su più blocchi. block.plastanium-wall-large.description = Un tipo speciale di muro che assorbe gli archi elettrici e blocca le connessioni automatiche dei nodi d'energia.\nSi estende su più tessere.
block.thorium-wall.description = Un forte blocco difensivo.\nBuona protezione dai nemici. block.thorium-wall.description = Un forte blocco difensivo.\nBuona protezione dai nemici.
block.thorium-wall-large.description = Un forte blocco difensivo.\nBuona protezione dai nemici.\nOccupa più blocchi block.thorium-wall-large.description = Un forte blocco difensivo.\nBuona protezione dai nemici.\nOccupa più tessere.
block.phase-wall.description = Non è forte come un muro di torio, ma devia i proiettili a meno che non siano troppo potenti. block.phase-wall.description = Non è forte come un muro di torio, ma devia i proiettili a meno che non siano troppo potenti.
block.phase-wall-large.description = Non è forte come un muro di torio, ma devia i proiettili a meno che non siano troppo potenti.\nOccupa più blocchi block.phase-wall-large.description = Non è forte come un muro di torio, ma devia i proiettili a meno che non siano troppo potenti.\nOccupa più tessere.
block.surge-wall.description = Il blocco difensivo più forte.\nHa una piccola possibilità di innescare un fulmine verso l'attaccante. block.surge-wall.description = Il blocco difensivo più forte.\nHa una piccola possibilità di innescare un fulmine verso l'attaccante.
block.surge-wall-large.description = Il blocco difensivo più forte. \n Ha una piccola possibilità di innescare un fulmine verso l'attaccante.\nOccupa più blocchi block.surge-wall-large.description = Il blocco difensivo più forte.\nHa una piccola possibilità di innescare un fulmine verso l'attaccante.\nOccupa più tessere.
block.door.description = Una piccola porta che può essere aperta e chiusa toccandola.\nSe aperta, i nemici possono sparare ed attraversare. block.door.description = Una piccola porta che può essere aperta e chiusa toccandola.\nSe aperta, i nemici possono sparare ed attraversare.
block.door-large.description = Una grande porta che può essere aperta e chiusa toccandola. \nSe aperta, i nemici possono sparare ed attraversare. \nOccupa più blocchi block.door-large.description = Una grande porta che può essere aperta e chiusa toccandola.\nSe aperta, i nemici possono sparare ed attraversare.\nOccupa più tessere.
block.mender.description = Ripara periodicamente blocchi nelle vicinanze.\nUtilizza del silicio per aumentarne portata ed efficienza. block.mender.description = Ripara periodicamente blocchi nelle vicinanze.\nUtilizza del silicio per aumentarne portata ed efficienza.
block.mend-projector.description = Ripara periodicamente blocchi nelle vicinanze.\nUtilizza del tessuto di fase per aumentarne portata ed efficienza. block.mend-projector.description = Ripara periodicamente blocchi nelle vicinanze.\nUtilizza del tessuto di fase per aumentarne portata ed efficienza.
block.overdrive-projector.description = Aumenta la velocità di edifici vicini come trivelle e nastri trasportatori. block.overdrive-projector.description = Aumenta la velocità di edifici vicini come trivelle e nastri trasportatori.
block.force-projector.description = Crea un campo di forza esagonale attorno a sé, proteggendo gli edifici e le unità all'interno da danni causati da proiettili block.force-projector.description = Crea un campo di forza esagonale attorno a sé, proteggendo gli edifici e le unità all'interno da danni causati da proiettili.
block.shock-mine.description = Danneggia i nemici che la calpestano. Quasi invisibile al nemico. block.shock-mine.description = Danneggia i nemici che la calpestano. Quasi invisibile al nemico.
block.conveyor.description = Nastro di base. Sposta gli oggetti in avanti e li deposita automaticamente in altri blocchi. Ruotabile. block.conveyor.description = Nastro di base. Sposta gli oggetti in avanti e li deposita automaticamente in altri blocchi. Ruotabile.
block.titanium-conveyor.description = Nastro avanzato. Sposta gli oggetti più velocemente dei nastri standard. block.titanium-conveyor.description = Nastro avanzato. Sposta gli oggetti più velocemente dei nastri standard.
@@ -1151,21 +1155,23 @@ block.inverted-sorter.description = Elabora gli oggetti come uno smistatore stan
block.router.description = Accetta gli elementi da una direzione e li emette fino a 3 altre direzioni allo stesso modo. Utile per suddividere i materiali da una fonte a più destinazioni. block.router.description = Accetta gli elementi da una direzione e li emette fino a 3 altre direzioni allo stesso modo. Utile per suddividere i materiali da una fonte a più destinazioni.
block.distributor.description = Un distributore avanzato che divide gli oggetti in altre 7 direzioni allo stesso modo. block.distributor.description = Un distributore avanzato che divide gli oggetti in altre 7 direzioni allo stesso modo.
block.overflow-gate.description = Una combinazione di un incrocio e di un distributore, che distribuisce sui suoi lati se in nastro difronte si satura. block.overflow-gate.description = Una combinazione di un incrocio e di un distributore, che distribuisce sui suoi lati se in nastro difronte si satura.
block.mass-driver.description = Ultimo blocco di trasporto di oggetti. Raccoglie diversi oggetti e poi li spara su un'altra Lancia Materiali a lungo raggio. block.mass-driver.description = Ultimo blocco di trasporto di oggetti. Raccoglie diversi oggetti e poi li spara su un'altra Lìlancia materiali a lungo raggio.
block.mechanical-pump.description = Una pompa economica con potenza lenta, ma nessun consumo di energia. block.mechanical-pump.description = Una pompa economica a bassa efficienza, ma nessun consumo di energia.
block.rotary-pump.description = Una pompa avanzata che raddoppia la velocità consumando energia. block.rotary-pump.description = Una pompa avanzata che raddoppia la velocità consumando energia.
block.thermal-pump.description = La pompa migliore. Tre volte più veloce di una pompa meccanica e l'unica pompa in grado di recuperare la lava. block.thermal-pump.description = La pompa migliore. Tre volte più veloce di una pompa meccanica e l'unica pompa in grado di recuperare la lava.
block.conduit.description = Condotto di base. Funziona come un nastro trasportatore, ma per i liquidi. Ideale per estrattori, pompe o altri condotti. block.conduit.description = Condotto di base. Funziona come un nastro trasportatore, ma per i liquidi. Ideale per estrattori, pompe o altri condotti.
block.pulse-conduit.description = Condotto avanzato. Trasporta più liquido e più velocemente dei condotti standard. block.pulse-conduit.description = Condotto avanzato. Trasporta più liquido e più velocemente dei condotti standard.
block.plated-conduit.description = Trasferisce i liquidi alla stessa velocità del Condotto a Impulsi, ma è più resistente. Non accetta liquidi dai lati da parte di condotti diversi.\nMeno perdite.
block.liquid-router.description = Accetta i liquidi da una direzione e li emette fino a 3 altre direzioni allo stesso modo. Può anche immagazzinare una certa quantità di liquido. Utile per suddividere i liquidi da una fonte verso più destinazioni. block.liquid-router.description = Accetta i liquidi da una direzione e li emette fino a 3 altre direzioni allo stesso modo. Può anche immagazzinare una certa quantità di liquido. Utile per suddividere i liquidi da una fonte verso più destinazioni.
block.liquid-tank.description = Conserva una grande quantità di liquidi. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali o come protezione per il raffreddamento di blocchi vitali. block.liquid-tank.description = Conserva una grande quantità di liquidi. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali o come protezione per il raffreddamento di blocchi vitali.
block.liquid-junction.description = Permette di incrociare condotti che trasportano liquidi diversi in posizioni diverse. block.liquid-junction.description = Permette di incrociare condotti che trasportano liquidi diversi in posizioni diverse.
block.bridge-conduit.description = Consente il trasporto di liquidi fino a 3 tessere da un altro condotto sopraelevato.\nPuò passare sopra ad altri blocchi od edifici. block.bridge-conduit.description = Consente il trasporto di liquidi fino a 3 tessere da un altro condotto sopraelevato.\nPuò passare sopra ad altri blocchi od edifici.
block.phase-conduit.description = Condotto avanzato. Consuma energia per teletrasportare i liquidi in un altro condotto di fase collegato. block.phase-conduit.description = Condotto avanzato. Consuma energia per teletrasportare i liquidi in un altro condotto di fase collegato.
block.power-node.description = Trasmette energia tra i nodi collegati. È possibile creare fino a quattro collegamenti.\nClicca sul nodo per configurare i collegamenti. block.power-node.description = Trasmette energia tra i nodi collegati. È possibile creare fino a quattro collegamenti.\nClicca sul nodo per configurare i collegamenti.
block.power-node-large.description = Ha un raggio maggiore rispetto al nodo energetico e si possono creare un massimo di sei collegamenti.\nClicca sul nodo per configurare i collegamenti. block.power-node-large.description = Ha un raggio maggiore rispetto al Nodo Energetico e si possono creare un massimo di sei collegamenti.\nClicca sul nodo per configurare i collegamenti.
block.surge-tower.description = Un nodo di alimentazione a lungo raggio solo due connessioni disponibili.\nClicca sul nodo per configurare i collegamenti. block.surge-tower.description = Un nodo di alimentazione a lungo raggio solo due connessioni disponibili.\nClicca sul nodo per configurare i collegamenti.
block.battery.description = Accumula energia ogni volta che c'è abbondanza e fornisce energia ogni volta che c'è carenza, purché rimanga carica. block.diode.description = L'energia della batteria può attraversare questo blocco in una sola direzione, ma solo se l'altra parte ha meno energia.
block.battery.description = Accumula energia ogni volta che c'è abbondanza e fornisce energia ogni volta che c'è carenza, purché sia carica.
block.battery-large.description = Immagazzina molta più energia di una normale batteria. block.battery-large.description = Immagazzina molta più energia di una normale batteria.
block.combustion-generator.description = Genera energia bruciando combustibile. block.combustion-generator.description = Genera energia bruciando combustibile.
block.thermal-generator.description = Genera una grande quantità di energia dalla lava. block.thermal-generator.description = Genera una grande quantità di energia dalla lava.
@@ -1173,10 +1179,10 @@ block.turbine-generator.description = Più efficiente di un generatore a combust
block.differential-generator.description = Genera grandi quantità di energia. Utilizza la differenza di temperatura tra criofluido e pirite in combustione. block.differential-generator.description = Genera grandi quantità di energia. Utilizza la differenza di temperatura tra criofluido e pirite in combustione.
block.rtg-generator.description = Un generatore che sfrutta il calore del decadimento di materiale radioattivo per produrre energia.\nNon richiede raffreddamento ma fornisce meno energia di un reattore al torio. block.rtg-generator.description = Un generatore che sfrutta il calore del decadimento di materiale radioattivo per produrre energia.\nNon richiede raffreddamento ma fornisce meno energia di un reattore al torio.
block.solar-panel.description = Fornisce una piccola quantità di energia dal sole. block.solar-panel.description = Fornisce una piccola quantità di energia dal sole.
block.solar-panel-large.description = Fornisce un'alimentazione molto migliore rispetto a un pannello solare standard, ma è anche molto più costoso da costruire. block.solar-panel-large.description = Fornisce un'alimentazione migliore rispetto a un pannello solare standard, ma è anche molto più costoso da costruire.
block.thorium-reactor.description = Genera enormi quantità di energia dal torio altamente radioattivo. Richiede un raffreddamento costante. Esploderà violentemente se vengono fornite quantità insufficienti di refrigerante. block.thorium-reactor.description = Genera enormi quantità di energia dal torio altamente radioattivo. Richiede un raffreddamento costante. Esploderà violentemente se vengono fornite quantità insufficienti di refrigerante.
block.impact-reactor.description = Un generatore avanzato, in grado di creare enormi quantità di energia alla massima efficienza. Richiede un significativo apporto di energia per avviare il processo. block.impact-reactor.description = Un generatore avanzato, in grado di creare enormi quantità di energia alla massima efficienza. Richiede un significativo apporto di energia per avviare il processo.
block.mechanical-drill.description = Una trivella economica. Se posizionato su riquadri appropriati, estrae minerali a un ritmo lento e costante. block.mechanical-drill.description = Una trivella economica. Se posizionata su slot appropriati, estrae minerali a un ritmo lento e costante.
block.pneumatic-drill.description = Una trivella migliorata più veloce ed in grado di elaborare materiali più duri sfruttando la pressione dell'aria. block.pneumatic-drill.description = Una trivella migliorata più veloce ed in grado di elaborare materiali più duri sfruttando la pressione dell'aria.
block.laser-drill.description = Consente di perforare ancora più velocemente attraverso la tecnologia laser, ma richiede energia. Inoltre, con questa trivella è possibile recuperare il torio radioattivo. block.laser-drill.description = Consente di perforare ancora più velocemente attraverso la tecnologia laser, ma richiede energia. Inoltre, con questa trivella è possibile recuperare il torio radioattivo.
block.blast-drill.description = La trivella migliore. Richiede grandi quantità di energia. block.blast-drill.description = La trivella migliore. Richiede grandi quantità di energia.
@@ -1188,7 +1194,7 @@ block.core-foundation.description = La seconda versione del Nucleo. Meglio coraz
block.core-nucleus.description = La terza ed ultima versione del Nucleo. Estremamente ben corazzato. Immagazzina enormi quantità di risorse. block.core-nucleus.description = La terza ed ultima versione del Nucleo. Estremamente ben corazzato. Immagazzina enormi quantità di risorse.
block.vault.description = Immagazzina una grande quantità di oggetti. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali. Uno [LIGHT_GRAY]scaricatore[] può essere utilizzato per recuperare elementi dal deposito. block.vault.description = Immagazzina una grande quantità di oggetti. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali. Uno [LIGHT_GRAY]scaricatore[] può essere utilizzato per recuperare elementi dal deposito.
block.container.description = Immagazzina una piccola quantità di oggetti. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali. Uno [LIGHT_GRAY]scaricatore[] può essere utilizzato per recuperare elementi dal contenitore. block.container.description = Immagazzina una piccola quantità di oggetti. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali. Uno [LIGHT_GRAY]scaricatore[] può essere utilizzato per recuperare elementi dal contenitore.
block.unloader.description = Scarica gli oggetti da un contenitore, caveau o Nucleo su un trasportatore o direttamente in un blocco adiacente. L'oggetto da scaricare può essere scelto toccando lo scaricatore. block.unloader.description = Scarica gli oggetti da un contenitore, deposito o Nucleo su un nastro trasportatore o direttamente in un blocco adiacente. L'oggetto da scaricare può essere scelto toccando lo scaricatore.
block.launch-pad.description = Lancia oggetti nel tuo Nucleo senza necessità di un lasciare la zona. block.launch-pad.description = Lancia oggetti nel tuo Nucleo senza necessità di un lasciare la zona.
block.launch-pad-large.description = Una versione migliore dell'Ascensore Spaziale, immagazzina più oggetti. Lancia oggetti più frequentemente. block.launch-pad-large.description = Una versione migliore dell'Ascensore Spaziale, immagazzina più oggetti. Lancia oggetti più frequentemente.
block.duo.description = Una torretta piccola ed economica. block.duo.description = Una torretta piccola ed economica.
@@ -1205,7 +1211,7 @@ block.ripple.description = Una grande torretta di artiglieria che spara più col
block.cyclone.description = Una grande torretta a fuoco rapido. block.cyclone.description = Una grande torretta a fuoco rapido.
block.spectre.description = Una grande torretta che spara due potenti proiettili contemporaneamente. block.spectre.description = Una grande torretta che spara due potenti proiettili contemporaneamente.
block.meltdown.description = Una grande torretta che spara un potente laser a lungo raggio. block.meltdown.description = Una grande torretta che spara un potente laser a lungo raggio.
block.command-center.description = Da istruzioni alle unità alleate nella mappa. Comanda la ricongizione, l'attacco del Nucleo nemico o la ritirata verso il proprio Nucleo o fabbrica.\nQuando non è presente un Nucleo nemico, le unità pattuglieranno anche se viene ordinato un attacco. block.command-center.description = Dà istruzioni alle unità alleate nella mappa. Comanda la ricongizione, l'attacco del Nucleo nemico o la ritirata verso il proprio Nucleo o fabbrica.\nQuando non è presente un Nucleo nemico, le unità pattuglieranno anche se viene ordinato un attacco.
block.draug-factory.description = Produce droni per la raccolta mineraria. block.draug-factory.description = Produce droni per la raccolta mineraria.
block.spirit-factory.description = Produce droni che riparano blocchi. block.spirit-factory.description = Produce droni che riparano blocchi.
block.phantom-factory.description = Produce droni avanzati che seguono il giocatore e lo assistono nella costruzione. block.phantom-factory.description = Produce droni avanzati che seguono il giocatore e lo assistono nella costruzione.
@@ -1218,9 +1224,9 @@ block.titan-factory.description = Produce unità terrestri avanzate e corazzate.
block.fortress-factory.description = Produce unità di terra di artiglieria pesante. block.fortress-factory.description = Produce unità di terra di artiglieria pesante.
block.repair-point.description = Cura continuamente l'unità danneggiata più vicina. block.repair-point.description = Cura continuamente l'unità danneggiata più vicina.
block.dart-mech-pad.description = Trasforma la tua nave in un mech di attacco di base.\nUsa il blocco toccando due volte mentre ti trovi su di esso. block.dart-mech-pad.description = Trasforma la tua nave in un mech di attacco di base.\nUsa il blocco toccando due volte mentre ti trovi su di esso.
block.delta-mech-pad.description = Trasforma la tua nave in un mech veloce e leggermente corazzato, ideale per colpire e scappare. \nUsa il blocco toccando due volte mentre ti ci trovi sopra. block.delta-mech-pad.description = Trasforma la tua nave in un mech veloce e leggermente corazzato, ideale per colpire e scappare.\nUsa il blocco toccando due volte mentre ti trovi su di esso.
block.tau-mech-pad.description = Trasforma la tua nave in un mech di supporto in grado di curare edifici ed unità alleate. \n Usa il blocco toccando due volte mentre sei in piedi su di esso. block.tau-mech-pad.description = Trasforma la tua nave in un mech di supporto in grado di curare edifici ed unità alleate.\nUsa il blocco toccando due volte mentre ti trovi su di esso.
block.omega-mech-pad.description = Trasforma la tua nave in un mech voluminoso e ben corazzato, creato per gli assalti in prima linea. \nUsa il blocco toccando due volte mentre sei in piedi su di esso. block.omega-mech-pad.description = Trasforma la tua nave in un mech voluminoso e ben corazzato, creato per gli assalti in prima linea.\nUsa il blocco toccando due volte mentre ti trovi su di esso.
block.javelin-ship-pad.description = Trasforma la tua nave in un intercettore forte e veloce con armi elettriche.\nUsa il blocco toccando due volte mentre ti trovi su di esso. block.javelin-ship-pad.description = Trasforma la tua nave in un intercettore forte e veloce con armi elettriche.\nUsa il blocco toccando due volte mentre ti trovi su di esso.
block.trident-ship-pad.description = Trasforma la tua nave in un bombardiere pesante e ben corazzato.\nUsa il blocco toccando due volte mentre ti trovi su di esso. block.trident-ship-pad.description = Trasforma la tua nave in un bombardiere pesante e ben corazzato.\nUsa il blocco toccando due volte mentre ti trovi su di esso.
block.glaive-ship-pad.description = Trasforma la tua nave in una nave grande e ben corazzata.\nUsa il blocco toccando due volte mentre ti trovi su di esso. block.glaive-ship-pad.description = Trasforma la tua nave in una nave grande e ben corazzata.\nUsa il blocco toccando due volte mentre ti trovi su di esso.

View File

@@ -652,7 +652,6 @@ keybind.pick.name = ブロックの選択
keybind.break_block.name = ブロックの破壊 keybind.break_block.name = ブロックの破壊
keybind.deselect.name = 選択解除 keybind.deselect.name = 選択解除
keybind.shoot.name = ショット keybind.shoot.name = ショット
keybind.zoom_hold.name = 長押しズーム
keybind.zoom.name = ズーム keybind.zoom.name = ズーム
keybind.menu.name = メニュー keybind.menu.name = メニュー
keybind.pause.name = ポーズ keybind.pause.name = ポーズ

View File

@@ -7,11 +7,12 @@ link.reddit.description = Mindustry 레딧
link.github.description = 게임 소스코드 link.github.description = 게임 소스코드
link.changelog.description = 새로 추가된 것들 link.changelog.description = 새로 추가된 것들
link.dev-builds.description = 불안정한 개발 빌드들 link.dev-builds.description = 불안정한 개발 빌드들
link.trello.description = 다음 출시될 기능들을 게시한 공식 Trello 보드 link.trello.description = 출시 예정중인 기능들을 게시한 공식 Trello 보드
link.itch.io.description = PC 버전 다운로드와 HTML5 버전이 있는 itch.io 사이트 link.itch.io.description = PC 버전 다운로드와 HTML5 버전이 있는 itch.io 사이트
link.google-play.description = Google Play 스토어 정보 link.google-play.description = Google Play 스토어 정보
link.f-droid.description = F-Droid 카탈로그 link.f-droid.description = F-Droid 카탈로그
link.wiki.description = 공식 Mindustry 위키 link.wiki.description = 공식 Mindustry 위키
link.feathub.description = 기능 아이디어 건의하기
linkfail = 링크를 여는 데 실패했습니다!\nURL이 기기의 클립보드에 복사되었습니다. linkfail = 링크를 여는 데 실패했습니다!\nURL이 기기의 클립보드에 복사되었습니다.
screenshot = 스크린 샷이 {0} 경로에 저장되었습니다. screenshot = 스크린 샷이 {0} 경로에 저장되었습니다.
screenshot.invalid = 맵이 너무 커서 스크린 샷을 찍을 메모리가 충분하지 않습니다. screenshot.invalid = 맵이 너무 커서 스크린 샷을 찍을 메모리가 충분하지 않습니다.
@@ -35,7 +36,7 @@ schematic.replace = 이 설계도와 같은 이름의 설계도가 이미 존재
schematic.import = 설계도 불러오기 schematic.import = 설계도 불러오기
schematic.exportfile = 파일 내보내기 schematic.exportfile = 파일 내보내기
schematic.importfile = 파일 불러오기 schematic.importfile = 파일 불러오기
schematic.browseworkshop = 워크샵 탐색 schematic.browseworkshop = Workshop 탐색
schematic.copy = 클립보드에 복사하기 schematic.copy = 클립보드에 복사하기
schematic.copy.import = 클립보드에서 붙여넣기 schematic.copy.import = 클립보드에서 붙여넣기
schematic.shareworkshop = 워크샵에 공유 schematic.shareworkshop = 워크샵에 공유
@@ -94,7 +95,7 @@ mods.alpha = [scarlet](Alpha)
mods = 모드 mods = 모드
mods.none = [LIGHT_GRAY]추가한 모드가 없습니다! mods.none = [LIGHT_GRAY]추가한 모드가 없습니다!
mods.guide = 모드 가이드 mods.guide = 모드 가이드
mods.report = 버그 신고 mods.report = 문제 신고
mods.openfolder = 모드 폴더 열기 mods.openfolder = 모드 폴더 열기
mod.enabled = [lightgray]활성화 mod.enabled = [lightgray]활성화
mod.disabled = [scarlet]비활성화 mod.disabled = [scarlet]비활성화
@@ -102,6 +103,9 @@ mod.disable = 비활성화
mod.delete.error = 모드를 삭제할 수 없습니다. 아마도 해당 모드가 사용중인 것 같습니다. mod.delete.error = 모드를 삭제할 수 없습니다. 아마도 해당 모드가 사용중인 것 같습니다.
mod.requiresversion = [scarlet]게임의 버전이 낮아 모드를 활성화할 수 없습니다!\n[scarlet]요구되는 게임 버전 : [accent]{0} mod.requiresversion = [scarlet]게임의 버전이 낮아 모드를 활성화할 수 없습니다!\n[scarlet]요구되는 게임 버전 : [accent]{0}
mod.missingdependencies = [scarlet]의존되는 모드: {0} mod.missingdependencies = [scarlet]의존되는 모드: {0}
mod.erroredcontent = [scarlet]컨텐츠 오류
mod.errors = 컨텐츠를 불러오는 중 오류가 발생하였습니다.
mod.noerrorplay = [scarlet]모드에 오류가 존재합니다.[] 해당 오류가 발생하는 모드를 비활성화하거나 모드의 오류를 고친 후 플레이가 가능합니다.
mod.nowdisabled = [scarlet]모드 '{0}'는 다음의 모드에 의존합니다 : [accent] {1}\n[lightgray]이 모드를 먼저 다운로드해야합니다.\n이 모드는 자동으로 비활성화됩니다. mod.nowdisabled = [scarlet]모드 '{0}'는 다음의 모드에 의존합니다 : [accent] {1}\n[lightgray]이 모드를 먼저 다운로드해야합니다.\n이 모드는 자동으로 비활성화됩니다.
mod.enable = 활성화 mod.enable = 활성화
mod.requiresrestart = 모드 변경사항을 적용하기 위해 게임을 종료합니다. mod.requiresrestart = 모드 변경사항을 적용하기 위해 게임을 종료합니다.
@@ -111,7 +115,7 @@ mod.import.github = 깃허브 모드 추가
mod.item.remove = 이것은 모드[accent] '{0}'[]의 자원입니다. 이 자원을 삭제하려면, 이 모드를 제거해야합니다. mod.item.remove = 이것은 모드[accent] '{0}'[]의 자원입니다. 이 자원을 삭제하려면, 이 모드를 제거해야합니다.
mod.remove.confirm = 이 모드를 삭제하시겠습니까? mod.remove.confirm = 이 모드를 삭제하시겠습니까?
mod.author = [LIGHT_GRAY]제작자 : [] {0} mod.author = [LIGHT_GRAY]제작자 : [] {0}
mod.missing = 이 세이브파일에는 설치하지 않은 모드 혹은 버전에 속해있지 않은 데이터가 포함되어 있습니다. 이 파일을 불러올 경우 세이브파일의 데이터가 손상될 수 있습니다. 정말로 이 파일을 불러오시겠습니까?\n[lightgray]모드 :\n{0} mod.missing = 이 세이브파일에는 설치하지 않은 모드 혹은 현재 버전에 속해있지 않은 데이터가 포함되어 있습니다. 이 파일을 불러올 경우 세이브파일의 데이터가 손상될 수 있습니다. 정말로 이 파일을 불러오시겠습니까?\n[lightgray]모드 :\n{0}
mod.preview.missing = 워크샵에 당신의 모드를 업로드하기 전에 미리보기 이미지를 먼저 추가해야합니다.\n[accent] preview.png[]라는 이름으로 미리보기 이미지를 당신의 모드 폴더안에 준비한 후 다시 시도해주세요. mod.preview.missing = 워크샵에 당신의 모드를 업로드하기 전에 미리보기 이미지를 먼저 추가해야합니다.\n[accent] preview.png[]라는 이름으로 미리보기 이미지를 당신의 모드 폴더안에 준비한 후 다시 시도해주세요.
mod.folder.missing = 워크샵에는 폴더 형태의 모드만 게시할 수 있습니다.\n모드를 폴더 형태로 바꾸려면 파일을 폴더에 압축 해제하고 이전 압축파일을 제거한 후, 게임을 재시작하거나 모드를 다시 로드하십시오. mod.folder.missing = 워크샵에는 폴더 형태의 모드만 게시할 수 있습니다.\n모드를 폴더 형태로 바꾸려면 파일을 폴더에 압축 해제하고 이전 압축파일을 제거한 후, 게임을 재시작하거나 모드를 다시 로드하십시오.
mod.scripts.unsupported = 당신의 기기는 모드스크립트를 지원하지 않습니다. 모드의 일부 기능이 작동하지 않을 수 있습니다. mod.scripts.unsupported = 당신의 기기는 모드스크립트를 지원하지 않습니다. 모드의 일부 기능이 작동하지 않을 수 있습니다.
@@ -594,8 +598,8 @@ unit.persecond = /초
unit.timesspeed = x 배 unit.timesspeed = x 배
unit.percent = % unit.percent = %
unit.items = 자원 unit.items = 자원
unit.thousands = unit.thousands = k
unit.millions = 백만 unit.millions = mil
category.general = 일반 category.general = 일반
category.power = 전력 category.power = 전력
category.liquids = 액체 category.liquids = 액체
@@ -635,7 +639,7 @@ setting.sensitivity.name = 컨트롤러 감도
setting.saveinterval.name = 저장 간격 setting.saveinterval.name = 저장 간격
setting.seconds = {0} 초 setting.seconds = {0} 초
setting.blockselecttimeout.name = 블록 선택 시간 초과 setting.blockselecttimeout.name = 블록 선택 시간 초과
setting.milliseconds = {0} 밀리초 setting.milliseconds = {0} ms
setting.fullscreen.name = 전체 화면 setting.fullscreen.name = 전체 화면
setting.borderlesswindow.name = 테두리 없는 창모드[LIGHT_GRAY] (재시작이 필요할 수 있습니다) setting.borderlesswindow.name = 테두리 없는 창모드[LIGHT_GRAY] (재시작이 필요할 수 있습니다)
setting.fps.name = FPS 표시 setting.fps.name = FPS 표시
@@ -683,20 +687,20 @@ keybind.schematic_flip_x.name = 설계도 X축 뒤집기
keybind.schematic_flip_y.name = 설계도 Y축 뒤집기 keybind.schematic_flip_y.name = 설계도 Y축 뒤집기
keybind.category_prev.name = 이전 목록 keybind.category_prev.name = 이전 목록
keybind.category_next.name = 다음 목록 keybind.category_next.name = 다음 목록
keybind.block_select_left.name = 왼쪽 선택 keybind.block_select_left.name = 왼쪽 선택
keybind.block_select_right.name = 오른쪽 선택 keybind.block_select_right.name = 오른쪽 선택
keybind.block_select_up.name = 위쪽 선택 keybind.block_select_up.name = 위쪽 선택
keybind.block_select_down.name = 아래쪽 선택 keybind.block_select_down.name = 아래쪽 선택
keybind.block_select_01.name = 카테고리/블 선택 1 keybind.block_select_01.name = 카테고리/블 선택 1
keybind.block_select_02.name = 카테고리/블 선택 2 keybind.block_select_02.name = 카테고리/블 선택 2
keybind.block_select_03.name = 카테고리/블 선택 3 keybind.block_select_03.name = 카테고리/블 선택 3
keybind.block_select_04.name = 카테고리/블 선택 4 keybind.block_select_04.name = 카테고리/블 선택 4
keybind.block_select_05.name = 카테고리/블 선택 5 keybind.block_select_05.name = 카테고리/블 선택 5
keybind.block_select_06.name = 카테고리/블 선택 6 keybind.block_select_06.name = 카테고리/블 선택 6
keybind.block_select_07.name = 카테고리/블 선택 7 keybind.block_select_07.name = 카테고리/블 선택 7
keybind.block_select_08.name = 카테고리/블 선택 8 keybind.block_select_08.name = 카테고리/블 선택 8
keybind.block_select_09.name = 카테고리/블 선택 9 keybind.block_select_09.name = 카테고리/블 선택 9
keybind.block_select_10.name = 카테고리/블 선택 10 keybind.block_select_10.name = 카테고리/블 선택 10
keybind.fullscreen.name = 전체 화면 keybind.fullscreen.name = 전체 화면
keybind.select.name = 선택/공격 keybind.select.name = 선택/공격
keybind.diagonal_placement.name = 대각선 설치 keybind.diagonal_placement.name = 대각선 설치
@@ -704,7 +708,6 @@ keybind.pick.name = 블록 선택
keybind.break_block.name = 블록 파괴 keybind.break_block.name = 블록 파괴
keybind.deselect.name = 선택해제 keybind.deselect.name = 선택해제
keybind.shoot.name = 사격 keybind.shoot.name = 사격
keybind.zoom_hold.name = 길게 확대
keybind.zoom.name = 확대 keybind.zoom.name = 확대
keybind.menu.name = 메뉴 keybind.menu.name = 메뉴
keybind.pause.name = 일시중지 keybind.pause.name = 일시중지
@@ -811,7 +814,7 @@ mech.trident-ship.name = 트라이던트
mech.trident-ship.weapon = 폭탄 저장고 mech.trident-ship.weapon = 폭탄 저장고
mech.glaive-ship.name = 글레이브 mech.glaive-ship.name = 글레이브
mech.glaive-ship.weapon = 중무장 인화성 소총 mech.glaive-ship.weapon = 중무장 인화성 소총
item.corestorable = [lightgray]코어 잔여 저장공간: {0} item.corestorable = [lightgray]코어 저장 가능 여부 : {0}
item.explosiveness = [LIGHT_GRAY]폭발성 : {0} item.explosiveness = [LIGHT_GRAY]폭발성 : {0}
item.flammability = [LIGHT_GRAY]인화성 : {0} item.flammability = [LIGHT_GRAY]인화성 : {0}
item.radioactivity = [LIGHT_GRAY]방사능 : {0} item.radioactivity = [LIGHT_GRAY]방사능 : {0}
@@ -1118,7 +1121,7 @@ block.cryofluidmixer.description = 물과 티타늄을 냉각에 훨씬 더 효
block.blast-mixer.description = 포자를 사용하여 파이라타이트를 폭발성 화합물로 변환시킵니다. block.blast-mixer.description = 포자를 사용하여 파이라타이트를 폭발성 화합물로 변환시킵니다.
block.pyratite-mixer.description = 석탄, 납, 모래를 가연성이 높은 파이라타이트로 만듭니다. block.pyratite-mixer.description = 석탄, 납, 모래를 가연성이 높은 파이라타이트로 만듭니다.
block.melter.description = 고철을 녹여 파도의 탄약 혹은 원심 분리기에 사용할 수 있는 액체인 광재로 만듭니다. block.melter.description = 고철을 녹여 파도의 탄약 혹은 원심 분리기에 사용할 수 있는 액체인 광재로 만듭니다.
block.separator.description = 광재 각종 자원으로 재활용 할 수 있게 해 주는 건물입니다. block.separator.description = 광재 각종 자원으로 재활용 할 수 있게 해 주는 건물입니다.
block.spore-press.description = 포자를 압축해 기름을 추출합니다. block.spore-press.description = 포자를 압축해 기름을 추출합니다.
block.pulverizer.description = 고철을 갈아 모래로 만듭니다. 맵에 모래가 부족할 때 유용합니다. block.pulverizer.description = 고철을 갈아 모래로 만듭니다. 맵에 모래가 부족할 때 유용합니다.
block.coal-centrifuge.description = 석유로 석탄을 만듭니다. block.coal-centrifuge.description = 석유로 석탄을 만듭니다.

View File

@@ -652,7 +652,6 @@ keybind.pick.name = Pick Block
keybind.break_block.name = Break Block keybind.break_block.name = Break Block
keybind.deselect.name = Deselect keybind.deselect.name = Deselect
keybind.shoot.name = Shoot keybind.shoot.name = Shoot
keybind.zoom_hold.name = Zoom Hold
keybind.zoom.name = Zoom keybind.zoom.name = Zoom
keybind.menu.name = Menu keybind.menu.name = Menu
keybind.pause.name = Pause keybind.pause.name = Pause

View File

@@ -653,7 +653,6 @@ keybind.pick.name = Pick Block
keybind.break_block.name = Break Block keybind.break_block.name = Break Block
keybind.deselect.name = Deselect keybind.deselect.name = Deselect
keybind.shoot.name = Shoot keybind.shoot.name = Shoot
keybind.zoom_hold.name = Zoom Hold
keybind.zoom.name = Zoom keybind.zoom.name = Zoom
keybind.menu.name = Menu keybind.menu.name = Menu
keybind.pause.name = Pause keybind.pause.name = Pause

View File

@@ -624,7 +624,7 @@ setting.difficulty.name = Poziom trudności
setting.screenshake.name = Wstrząsy ekranu setting.screenshake.name = Wstrząsy ekranu
setting.effects.name = Wyświetlanie efektów setting.effects.name = Wyświetlanie efektów
setting.destroyedblocks.name = Wyświetl zniszczone bloki setting.destroyedblocks.name = Wyświetl zniszczone bloki
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding setting.conveyorpathfinding.name = Znajdowanie Ścieżki Stawianych Taśmociągów
setting.sensitivity.name = Czułość kontrolera setting.sensitivity.name = Czułość kontrolera
setting.saveinterval.name = Interwał automatycznego zapisywania setting.saveinterval.name = Interwał automatycznego zapisywania
setting.seconds = {0} sekund setting.seconds = {0} sekund
@@ -633,7 +633,7 @@ setting.milliseconds = {0} millisekund
setting.fullscreen.name = Pełny ekran setting.fullscreen.name = Pełny ekran
setting.borderlesswindow.name = Bezramkowe okno[lightgray] (może wymagać restartu) setting.borderlesswindow.name = Bezramkowe okno[lightgray] (może wymagać restartu)
setting.fps.name = Pokazuj FPS oraz ping setting.fps.name = Pokazuj FPS oraz ping
setting.blockselectkeys.name = Show Block Select Keys setting.blockselectkeys.name = Pokazuj Klawisze Wyboru Bloków
setting.vsync.name = Synchronizacja pionowa setting.vsync.name = Synchronizacja pionowa
setting.pixelate.name = Pikselacja [lightgray](wyłącza animacje) setting.pixelate.name = Pikselacja [lightgray](wyłącza animacje)
setting.minimap.name = Pokaż Minimapę setting.minimap.name = Pokaż Minimapę
@@ -653,7 +653,7 @@ public.confirm = Czy chcesz ustawić swoją grę jako publiczną?\n[accent]Każd
public.beta = Wersje beta gry nie mogą tworzyć publicznych pokoi. public.beta = Wersje beta gry nie mogą tworzyć publicznych pokoi.
uiscale.reset = Skala interfejsu uległa zmianie.\nNaciśnij "OK" by potwierdzić zmiany.\n[scarlet]Cofanie zmian i wyjście z gry za[accent] {0}[] uiscale.reset = Skala interfejsu uległa zmianie.\nNaciśnij "OK" by potwierdzić zmiany.\n[scarlet]Cofanie zmian i wyjście z gry za[accent] {0}[]
uiscale.cancel = Anuluj i Wyjdź uiscale.cancel = Anuluj i Wyjdź
setting.bloom.name = Bloom setting.bloom.name = Rozproszenie
keybind.title = Zmień keybind.title = Zmień
keybinds.mobile = [scarlet]Większość skrótów klawiszowych nie funkcjonuje w wersji mobilnej. Tylko podstawowe poruszanie się jest wspierane. keybinds.mobile = [scarlet]Większość skrótów klawiszowych nie funkcjonuje w wersji mobilnej. Tylko podstawowe poruszanie się jest wspierane.
category.general.name = Ogólne category.general.name = Ogólne
@@ -667,10 +667,10 @@ keybind.clear_building.name = Wyczyść budynek
keybind.press = Naciśnij wybrany klawisz... keybind.press = Naciśnij wybrany klawisz...
keybind.press.axis = Naciśnij oś lub klawisz... keybind.press.axis = Naciśnij oś lub klawisz...
keybind.screenshot.name = Zrzut ekranu mapy keybind.screenshot.name = Zrzut ekranu mapy
keybind.toggle_power_lines.name = Toggle Power Lines keybind.toggle_power_lines.name = Przełącz Linie Energetyczne
keybind.move_x.name = Poruszanie w poziomie keybind.move_x.name = Poruszanie w poziomie
keybind.move_y.name = Poruszanie w pionie keybind.move_y.name = Poruszanie w pionie
keybind.mouse_move.name = Follow Mouse keybind.mouse_move.name = Podążaj Za Myszką
keybind.dash.name = Dash keybind.dash.name = Dash
keybind.schematic_select.name = Wybierz region keybind.schematic_select.name = Wybierz region
keybind.schematic_menu.name = Menu schematów keybind.schematic_menu.name = Menu schematów
@@ -678,20 +678,20 @@ keybind.schematic_flip_x.name = Obróć schemat horyzontalnie
keybind.schematic_flip_y.name = Obróć schemat wertykalnie keybind.schematic_flip_y.name = Obróć schemat wertykalnie
keybind.category_prev.name = Poprzednia kategoria keybind.category_prev.name = Poprzednia kategoria
keybind.category_next.name = Następna kategoria keybind.category_next.name = Następna kategoria
keybind.block_select_left.name = Block Select Left keybind.block_select_left.name = Wybór Bloku Lewo
keybind.block_select_right.name = Block Select Right keybind.block_select_right.name = Wybór Bloku Prawo
keybind.block_select_up.name = Block Select Up keybind.block_select_up.name = Wybór Bloku Góra
keybind.block_select_down.name = Block Select Down keybind.block_select_down.name = Wybór Bloku Dół
keybind.block_select_01.name = Category/Block Select 1 keybind.block_select_01.name = Kategoria/Wybór Bloku 1
keybind.block_select_02.name = Category/Block Select 2 keybind.block_select_02.name = Kategoria/Wybór Bloku 2
keybind.block_select_03.name = Category/Block Select 3 keybind.block_select_03.name = Kategoria/Wybór Bloku 3
keybind.block_select_04.name = Category/Block Select 4 keybind.block_select_04.name = Kategoria/Wybór Bloku 4
keybind.block_select_05.name = Category/Block Select 5 keybind.block_select_05.name = Kategoria/Wybór Bloku 5
keybind.block_select_06.name = Category/Block Select 6 keybind.block_select_06.name = Kategoria/Wybór Bloku 6
keybind.block_select_07.name = Category/Block Select 7 keybind.block_select_07.name = Kategoria/Wybór Bloku 7
keybind.block_select_08.name = Category/Block Select 8 keybind.block_select_08.name = Kategoria/Wybór Bloku 8
keybind.block_select_09.name = Category/Block Select 9 keybind.block_select_09.name = Kategoria/Wybór Bloku 9
keybind.block_select_10.name = Category/Block Select 10 keybind.block_select_10.name = Kategoria/Wybór Bloku 10
keybind.fullscreen.name = Przełącz Pełny Ekran keybind.fullscreen.name = Przełącz Pełny Ekran
keybind.select.name = Zaznacz keybind.select.name = Zaznacz
keybind.diagonal_placement.name = Budowa po skosie keybind.diagonal_placement.name = Budowa po skosie
@@ -699,7 +699,6 @@ keybind.pick.name = Wybierz Blok
keybind.break_block.name = Zniszcz Blok keybind.break_block.name = Zniszcz Blok
keybind.deselect.name = Odznacz keybind.deselect.name = Odznacz
keybind.shoot.name = Strzelanie keybind.shoot.name = Strzelanie
keybind.zoom_hold.name = Inicjator przybliżania
keybind.zoom.name = Przybliżanie keybind.zoom.name = Przybliżanie
keybind.menu.name = Menu keybind.menu.name = Menu
keybind.pause.name = Pauza keybind.pause.name = Pauza
@@ -709,7 +708,7 @@ keybind.chat.name = Czat
keybind.player_list.name = Lista graczy keybind.player_list.name = Lista graczy
keybind.console.name = Konsola keybind.console.name = Konsola
keybind.rotate.name = Obracanie keybind.rotate.name = Obracanie
keybind.rotateplaced.name = Rotate Existing (Hold) keybind.rotateplaced.name = Obróć istniejące (Trzymaj)
keybind.toggle_menus.name = Zmiana widoczności menu keybind.toggle_menus.name = Zmiana widoczności menu
keybind.chat_history_prev.name = Przewiń wiadomości w górę keybind.chat_history_prev.name = Przewiń wiadomości w górę
keybind.chat_history_next.name = Przewiń wiadomości w dół keybind.chat_history_next.name = Przewiń wiadomości w dół
@@ -909,11 +908,11 @@ block.scorch.name = Płomień
block.scatter.name = Flak block.scatter.name = Flak
block.hail.name = Grad block.hail.name = Grad
block.lancer.name = Lansjer block.lancer.name = Lansjer
block.conveyor.name = Przenośnik block.conveyor.name = Taśmociąg
block.titanium-conveyor.name = Przenośnik Tytanowy block.titanium-conveyor.name = Taśmociąg Tytanowy
block.armored-conveyor.name = Przenośnik Opancerzony block.armored-conveyor.name = Opancerzony Taśmociąg
block.armored-conveyor.description = Przesyła przedmioty z taką samą szybkością jak Przenośnik Tytanowy, ale jest bardziej odporny. Wejściami bocznymi mogą być tylko inne przenośniki. block.armored-conveyor.description = Przesyła przedmioty z taką samą szybkością jak Przenośnik Tytanowy, ale jest bardziej odporny. Wejściami bocznymi mogą być tylko inne przenośniki.
block.junction.name = Węzeł block.junction.name = Skrzyżowanie
block.router.name = Rozdzielacz block.router.name = Rozdzielacz
block.distributor.name = Dystrybutor block.distributor.name = Dystrybutor
block.sorter.name = Sortownik block.sorter.name = Sortownik
@@ -931,8 +930,8 @@ block.incinerator.name = Spalacz
block.spore-press.name = Prasa Zarodników block.spore-press.name = Prasa Zarodników
block.separator.name = Rozdzielacz block.separator.name = Rozdzielacz
block.coal-centrifuge.name = Wirówka węglowa block.coal-centrifuge.name = Wirówka węglowa
block.power-node.name = Węzeł Prądu block.power-node.name = Węzeł Prądowy
block.power-node-large.name = Duży Węzeł Prądu block.power-node-large.name = Duży Węzeł Prądowy
block.surge-tower.name = Wieża Energetyczna block.surge-tower.name = Wieża Energetyczna
block.diode.name = Dioda baterii block.diode.name = Dioda baterii
block.battery.name = Bateria block.battery.name = Bateria
@@ -959,8 +958,8 @@ block.item-source.name = Źródło przedmiotów
block.item-void.name = Próżnia przedmiotów block.item-void.name = Próżnia przedmiotów
block.liquid-source.name = Źródło płynów block.liquid-source.name = Źródło płynów
block.power-void.name = Próżnia prądu block.power-void.name = Próżnia prądu
block.power-source.name = Nieskończony Prąd block.power-source.name = Węzeł Nieskończonego Prądu
block.unloader.name = Ekstraktor block.unloader.name = Wyładowywacz
block.vault.name = Magazyn block.vault.name = Magazyn
block.wave.name = Strumień block.wave.name = Strumień
block.swarmer.name = Działo Rojowe block.swarmer.name = Działo Rojowe
@@ -991,11 +990,11 @@ block.plated-conduit.name = Opancerzona rura
block.phase-conduit.name = Rura Fazowa block.phase-conduit.name = Rura Fazowa
block.liquid-router.name = Rozdzielacz Płynów block.liquid-router.name = Rozdzielacz Płynów
block.liquid-tank.name = Zbiornik Płynów block.liquid-tank.name = Zbiornik Płynów
block.liquid-junction.name = Łącznik Płynów block.liquid-junction.name = Skrzyżowanie Rurowe
block.bridge-conduit.name = Most Płynów block.bridge-conduit.name = Most Rurowy
block.rotary-pump.name = Wirowa Pompa block.rotary-pump.name = Wirowa Pompa
block.thorium-reactor.name = Reaktor Torowy block.thorium-reactor.name = Reaktor Torowy
block.mass-driver.name = Katapulta Masy block.mass-driver.name = Katapulta Masowa
block.blast-drill.name = Wiertło Wybuchowe block.blast-drill.name = Wiertło Wybuchowe
block.thermal-pump.name = Pompa Termalna block.thermal-pump.name = Pompa Termalna
block.thermal-generator.name = Generator Termalny block.thermal-generator.name = Generator Termalny
@@ -1165,7 +1164,7 @@ block.phase-conduit.description = Zaawansowany blok do przenoszenia cieczy. Uży
block.power-node.description = Przesyła moc do połączonych węzłów. Można podłączyć do czterech źródeł zasilania, zlewów lub węzłów. Zasila też bloki które go dotykają. block.power-node.description = Przesyła moc do połączonych węzłów. Można podłączyć do czterech źródeł zasilania, zlewów lub węzłów. Zasila też bloki które go dotykają.
block.power-node-large.description = Posiada większy zasięg niż zwykły węzeł prądu. Można podłączyć do sześciu źródeł zasilania, zlewów lub węzłów. block.power-node-large.description = Posiada większy zasięg niż zwykły węzeł prądu. Można podłączyć do sześciu źródeł zasilania, zlewów lub węzłów.
block.surge-tower.description = Węzęł prądu z bardzo dużym zasięgiem, posiadający mniej możliwych podłączeń. block.surge-tower.description = Węzęł prądu z bardzo dużym zasięgiem, posiadający mniej możliwych podłączeń.
block.diode.description = Battery power can flow through this block in only one direction, but only if the other side has less power stored. block.diode.description = Prąd baterii może tylko przepłynąc przez ten blok w jedną strone, jeśli druga strona ma mniej prądu.
block.battery.description = Przechowuje energię przy nadwyżce produkcji oraz dostarcza energię kiedy jest jej brak, dopóki jest w niej miejsce. block.battery.description = Przechowuje energię przy nadwyżce produkcji oraz dostarcza energię kiedy jest jej brak, dopóki jest w niej miejsce.
block.battery-large.description = Przechowuje o wiele wiecej prądu niż standardowa bateria. block.battery-large.description = Przechowuje o wiele wiecej prądu niż standardowa bateria.
block.combustion-generator.description = Wytwarza energię poprzez spalanie łatwopalnych materiałów. block.combustion-generator.description = Wytwarza energię poprzez spalanie łatwopalnych materiałów.

View File

@@ -652,7 +652,6 @@ keybind.pick.name = Pegar bloco
keybind.break_block.name = Quebrar bloco keybind.break_block.name = Quebrar bloco
keybind.deselect.name = Deselecionar keybind.deselect.name = Deselecionar
keybind.shoot.name = Atirar keybind.shoot.name = Atirar
keybind.zoom_hold.name = segurar_zoom
keybind.zoom.name = Zoom keybind.zoom.name = Zoom
keybind.menu.name = Menu keybind.menu.name = Menu
keybind.pause.name = Pausar keybind.pause.name = Pausar

View File

@@ -10,11 +10,11 @@ link.dev-builds.description = Desenvolvimentos instáveis
link.trello.description = Trello oficial para atualizações planejadas link.trello.description = Trello oficial para atualizações planejadas
link.itch.io.description = Página da Itch.io com os downloads link.itch.io.description = Página da Itch.io com os downloads
link.google-play.description = Página da google play store link.google-play.description = Página da google play store
link.f-droid.description = F-Droid catalogue listing link.f-droid.description = Listamento de catalogo do F-Droide
link.wiki.description = Wiki oficial do Mindustry link.wiki.description = Wiki oficial do Mindustry
linkfail = Falha ao abrir o link\nO Url foi copiado para a área de transferência. linkfail = Falha ao abrir o link\nO Url foi copiado para a área de transferência.
screenshot = Screenshot salvo para {0} screenshot = Screenshot salvo para {0}
screenshot.invalid = Mapa grande demais, Potencialmente sem memória suficiente para captura de tela. screenshot.invalid = Mapa grande demais, Voce pode estar potencialmente sem memória suficiente para captura de tela.
gameover = O núcleo foi destruído. gameover = O núcleo foi destruído.
gameover.pvp = O time[accent] {0}[] ganhou! gameover.pvp = O time[accent] {0}[] ganhou!
highscore = [YELLOW]Novo recorde! highscore = [YELLOW]Novo recorde!
@@ -26,6 +26,7 @@ load.image = Imagens
load.content = Conteúdo load.content = Conteúdo
load.system = Sistema load.system = Sistema
load.mod = Mods load.mod = Mods
load.scripts = Scripts
schematic = Esquema schematic = Esquema
schematic.add = Salvar Esquema... schematic.add = Salvar Esquema...
@@ -41,8 +42,8 @@ schematic.shareworkshop = Compartilhar na Oficina
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Virar o Esquema schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Virar o Esquema
schematic.saved = Esquema salvo. schematic.saved = Esquema salvo.
schematic.delete.confirm = Esse Esquema será totalmente erradicado. schematic.delete.confirm = Esse Esquema será totalmente erradicado.
schematic.rename = Rename Schematic schematic.rename = Renomear esquema
schematic.info = {0}x{1}, {2} blocks schematic.info = {0}x{1}, {2} blocos
stat.wave = Hordas derrotadas:[accent] {0} stat.wave = Hordas derrotadas:[accent] {0}
stat.enemiesDestroyed = Inimigos Destruídos:[accent] {0} stat.enemiesDestroyed = Inimigos Destruídos:[accent] {0}
@@ -99,19 +100,24 @@ mod.enabled = [lightgray]Ativado
mod.disabled = [scarlet]Desativado mod.disabled = [scarlet]Desativado
mod.disable = Desati-\nvar mod.disable = Desati-\nvar
mod.delete.error = Incapaz de deletar o Mod. O arquivo talvez esteja em uso. mod.delete.error = Incapaz de deletar o Mod. O arquivo talvez esteja em uso.
mod.requiresversion = [scarlet]Requer versão [accent]{0} [scarlet]do jogo. mod.requiresversion = [scarlet]Requer no mínimo versão [accent]{0} [scarlet]do jogo.
mod.missingdependencies = [scarlet]Dependências ausentes: {0} mod.missingdependencies = [scarlet]Dependências ausentes: {0}
mod.erroredcontent = [scarlet]Erros no Conteúdo
mod.errors = Erros ocorreram ao carregar o conteúdo.
mod.noerrorplay = [scarlet]Você tem mods com erros.[] Desative os mods afetados ou conserte os erros antes de jogar.
mod.nowdisabled = [scarlet]O Mod '{0}' está com dependências ausentes:[accent] {1}\n[lightgray]Esses Mods precisam ser baixados primeiro.\nEsse Mod será desativado automaticamente. mod.nowdisabled = [scarlet]O Mod '{0}' está com dependências ausentes:[accent] {1}\n[lightgray]Esses Mods precisam ser baixados primeiro.\nEsse Mod será desativado automaticamente.
mod.enable = Ativar mod.enable = Ativar
mod.requiresrestart = O jogo irá fechar para aplicar as mudanças do Mod. mod.requiresrestart = O jogo irá fechar para aplicar as mudanças do Mod.
mod.reloadrequired = [scarlet]Recarregamento necessário mod.reloadrequired = [scarlet]Recarregamento necessário
mod.import = Importar Mod mod.import = Importar Mod
mod.import.github = Importar Mod do GitHub mod.import.github = Importar Mod do GitHub
mod.remove.confirm = Esse Mod será deletado. mod.item.remove = Este item é parte do mod[accent] '{0}'[]. Para removê-lo, desinstale esse mod.
mod.remove.confirm = Este mod será deletado.
mod.author = [LIGHT_GRAY]Author:[] {0} mod.author = [LIGHT_GRAY]Author:[] {0}
mod.missing = Esse jogo salvo foi criado antes de você atualizar ou desinstalar um mod. O jogo salvo pode se corromper. Você tem certeza que quer carregar?\n[lightgray]Mods:\n{0} mod.missing = Esse jogo salvo foi criado antes de você atualizar ou desinstalar um mod. Pode ocorrer uma corrupção no salvamento. Você tem certeza que quer carregar?\n[lightgray]Mods:\n{0}
mod.preview.missing = Antes de publicar esse mod na Oficina, você deve adicionar uma imagem de pré-visualização.\nColoque uma imagem com o nome[accent] preview.png[] na pasta do Mod e tente novamente. mod.preview.missing = Antes de publicar esse mod na Oficina, você deve adicionar uma imagem de pré-visualização.\nColoque uma imagem com o nome[accent] preview.png[] na pasta do Mod e tente novamente.
mod.folder.missing = Somente Mods no formato de pasta serão publicados na Oficina.\nPara converter qualquer Mod em uma pasta, Simplesmente descompacte seu arquivo numa pasta e delete a compactação antiga, então reinicie seu jogo ou recarregue os Mods. mod.folder.missing = Somente Mods no formato de pasta serão publicados na Oficina.\nPara converter qualquer Mod em uma pasta, Simplesmente descompacte seu arquivo numa pasta e delete a compactação antiga, então reinicie seu jogo ou recarregue os Mods.
mod.scripts.unsupported = Seu dispositivo não suporta scripts de mods. Alguns mods não funcionarão corretamente.
about.button = Sobre about.button = Sobre
name = Nome: name = Nome:
@@ -189,9 +195,9 @@ disconnect.data = Falha ao abrir os dados do mundo!
cantconnect = Impossível conectar ([accent]{0}[]). cantconnect = Impossível conectar ([accent]{0}[]).
connecting = [accent]Conectando... connecting = [accent]Conectando...
connecting.data = [accent]Carregando dados do mundo... connecting.data = [accent]Carregando dados do mundo...
server.port = Porte: server.port = Port:
server.addressinuse = Senha em uso! server.addressinuse = Senha em uso!
server.invalidport = Numero de porta invalido! server.invalidport = Numero de port inválido!
server.error = [crimson]Erro ao hospedar o servidor: [accent]{0} server.error = [crimson]Erro ao hospedar o servidor: [accent]{0}
save.new = Novo salvamento save.new = Novo salvamento
save.overwrite = Você tem certeza que quer sobrescrever este salvamento? save.overwrite = Você tem certeza que quer sobrescrever este salvamento?
@@ -273,11 +279,11 @@ workshop.error = Erro buscando os detalhes da Oficina: {0}
map.publish.confirm = Você tem certeza de que quer publicar este mapa?\n\n[lightgray]Tenha certeza de que você concorda com o EULA da oficina primeiro, ou seus mapas não serão mostrados! map.publish.confirm = Você tem certeza de que quer publicar este mapa?\n\n[lightgray]Tenha certeza de que você concorda com o EULA da oficina primeiro, ou seus mapas não serão mostrados!
workshop.menu = Selecione oquê você gostaria de fazer com esse Item. workshop.menu = Selecione oquê você gostaria de fazer com esse Item.
workshop.info = Informação do Item workshop.info = Informação do Item
changelog = Changelog (optional): changelog = Mudanças (opcional):
eula = EULA da Steam eula = EULA da Steam
missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked. missing = Este item foi deletado ou movido.\n[lightgray]O listamento da oficina foi automaticamente des-ligado.
publishing = [accent]Publishing... publishing = [accent]Publicando...
publish.confirm = você tem certeza de que quer publicar isso?\n\n[lightgray]Primeiramente tenha certeza de que você concorda com o EULA da Oficina, ou seus itens não irão aparecer! publish.confirm = Você tem certeza de que quer publicar isso?\n\n[lightgray]Primeiramente tenha certeza de que você concorda com o EULA da Oficina, ou seus itens não irão aparecer!
publish.error = Erro publicando o Item: {0} publish.error = Erro publicando o Item: {0}
steam.error = Falha em iniciar os serviços da Steam.\nError: {0} steam.error = Falha em iniciar os serviços da Steam.\nError: {0}
@@ -364,11 +370,11 @@ toolmode.replaceall = Substituir tudo
toolmode.replaceall.description = Substituir todos os blocos no mapa toolmode.replaceall.description = Substituir todos os blocos no mapa
toolmode.orthogonal = Linha reta toolmode.orthogonal = Linha reta
toolmode.orthogonal.description = Desenha apenas linhas retas. toolmode.orthogonal.description = Desenha apenas linhas retas.
toolmode.square = Square toolmode.square = Quadrado
toolmode.square.description = Pincel quadrado. toolmode.square.description = Pincel quadrado.
toolmode.eraseores = Apagar minérios toolmode.eraseores = Apagar minérios
toolmode.eraseores.description = Apaga apenas minérios. toolmode.eraseores.description = Apaga apenas minérios.
toolmode.fillteams = Encher times toolmode.fillteams = Preencher times
toolmode.fillteams.description = Muda o time do qual todos os blocos pertencem. toolmode.fillteams.description = Muda o time do qual todos os blocos pertencem.
toolmode.drawteams = Desenhar times toolmode.drawteams = Desenhar times
toolmode.drawteams.description = Muda o time do qual o bloco pertence. toolmode.drawteams.description = Muda o time do qual o bloco pertence.
@@ -490,8 +496,8 @@ zone.tarFields.description = Nos arredores de uma zona de produção de petróle
zone.desolateRift.description = Uma zona extremamente perigosa. Recursos abundantes, porém pouco espaço. Alto risco de destruição. Saia o mais rápido possível. Não seja enganado pelo longo espaço de tempo entre os ataques inimigos. zone.desolateRift.description = Uma zona extremamente perigosa. Recursos abundantes, porém pouco espaço. Alto risco de destruição. Saia o mais rápido possível. Não seja enganado pelo longo espaço de tempo entre os ataques inimigos.
zone.nuclearComplex.description = Uma antiga instalação para produção e processamento de tório, reduzido a ruínas.\n[lightgray]Pesquise o tório e seus muitos usos.\n\nO inimigo está presente aqui em grandes números, constantemente à procura de atacantes. zone.nuclearComplex.description = Uma antiga instalação para produção e processamento de tório, reduzido a ruínas.\n[lightgray]Pesquise o tório e seus muitos usos.\n\nO inimigo está presente aqui em grandes números, constantemente à procura de atacantes.
zone.fungalPass.description = Uma area de transição entre montanhas altas e baixas, terras cheias de esporos. Uma pequena base de reconhecimento inimiga está localizada aqui.\nDestrua-a.\nUse as unidades crawler e dagger. Destrua os dois núcleos. zone.fungalPass.description = Uma area de transição entre montanhas altas e baixas, terras cheias de esporos. Uma pequena base de reconhecimento inimiga está localizada aqui.\nDestrua-a.\nUse as unidades crawler e dagger. Destrua os dois núcleos.
zone.impact0078.description = <insert description here> zone.impact0078.description = <insira descrição aqui>
zone.crags.description = <insert description here> zone.crags.description = <Insira descrição aqui>
settings.language = Idioma settings.language = Idioma
settings.data = Dados do jogo settings.data = Dados do jogo
@@ -506,7 +512,7 @@ settings.cleardata = Apagar dados...
settings.clear.confirm = Certeza que quer limpar a os dados?\nOque é feito não pode ser desfeito! settings.clear.confirm = Certeza que quer limpar a os dados?\nOque é feito não pode ser desfeito!
settings.clearall.confirm = [scarlet]Aviso![]\nIsso vai limpar todo os arquivos, incluindo jogos salvos, mapas, teclas personalizadas e desbloqueados.\nQuando apertar 'ok' todos os arquivos serão apagados e o jogo irá sair automaticamente. settings.clearall.confirm = [scarlet]Aviso![]\nIsso vai limpar todo os arquivos, incluindo jogos salvos, mapas, teclas personalizadas e desbloqueados.\nQuando apertar 'ok' todos os arquivos serão apagados e o jogo irá sair automaticamente.
paused = Pausado paused = Pausado
clear = Clear clear = Limpo
banned = [scarlet]Banido banned = [scarlet]Banido
yes = Sim yes = Sim
no = Não no = Não
@@ -515,7 +521,7 @@ error.title = [crimson]Ocorreu um Erro.
error.crashtitle = Ocorreu um Erro error.crashtitle = Ocorreu um Erro
blocks.input = Entrada blocks.input = Entrada
blocks.output = Saída blocks.output = Saída
blocks.booster = Booster blocks.booster = Apoio
block.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.powercapacity = Capacidade de Energia blocks.powercapacity = Capacidade de Energia
blocks.powershot = Energia/tiro blocks.powershot = Energia/tiro
@@ -591,12 +597,14 @@ unit.persecond = por segundo
unit.timesspeed = x Velocidade unit.timesspeed = x Velocidade
unit.percent = % unit.percent = %
unit.items = itens unit.items = itens
unit.thousands = k
unit.millions = m
category.general = Geral category.general = Geral
category.power = Poder category.power = Energia
category.liquids = Líquidos category.liquids = Líquidos
category.items = Itens category.items = Itens
category.crafting = Construindo category.crafting = Entrada/Saída
category.shooting = Atirando category.shooting = Atiradores
category.optional = Melhoras opcionais category.optional = Melhoras opcionais
setting.landscape.name = Travar panorama setting.landscape.name = Travar panorama
setting.shadows.name = Sombras setting.shadows.name = Sombras
@@ -651,7 +659,7 @@ setting.chatopacity.name = Opacidade do chat
setting.lasersopacity.name = Opacidade do laser setting.lasersopacity.name = Opacidade do laser
setting.playerchat.name = Mostrar chat em jogo setting.playerchat.name = Mostrar chat em jogo
public.confirm = Você quer fazer sua partida pública?\n[accent]Qualquer um será capaz de entrar na sua partida.\n[lightgray]Isso pode ser mudado depois em Configurações->Jogo->Visibilidade da partida pública. public.confirm = Você quer fazer sua partida pública?\n[accent]Qualquer um será capaz de entrar na sua partida.\n[lightgray]Isso pode ser mudado depois em Configurações->Jogo->Visibilidade da partida pública.
public.beta = Note that beta versions of the game cannot make public lobbies. public.beta = Note que as versões beta do jogo não podem fazer salas publicas.
uiscale.reset = A escala da IU foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] settings... uiscale.reset = A escala da IU foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] settings...
uiscale.cancel = Cancelar e sair uiscale.cancel = Cancelar e sair
setting.bloom.name = Bloom setting.bloom.name = Bloom
@@ -700,7 +708,6 @@ keybind.pick.name = Pegar bloco
keybind.break_block.name = Quebrar bloco keybind.break_block.name = Quebrar bloco
keybind.deselect.name = Deselecionar keybind.deselect.name = Deselecionar
keybind.shoot.name = Atirar keybind.shoot.name = Atirar
keybind.zoom_hold.name = segurar Zoom
keybind.zoom.name = Zoom keybind.zoom.name = Zoom
keybind.menu.name = Menu keybind.menu.name = Menu
keybind.pause.name = Pausar keybind.pause.name = Pausar
@@ -720,10 +727,10 @@ keybind.zoom_minimap.name = Zoom do minimapa
mode.help.title = Descrição dos modos mode.help.title = Descrição dos modos
mode.survival.name = Sobrevivência mode.survival.name = Sobrevivência
mode.survival.description = O modo normal. Recursos limitados e hordas automáticas. mode.survival.description = O modo normal. Recursos limitados e hordas automáticas.
mode.sandbox.name = Sandbox mode.sandbox.name = Caixa de areia
mode.sandbox.description = Recursos infinitos e sem tempo para ataques. mode.sandbox.description = Recursos infinitos e sem tempo para ataques.
mode.editor.name = Editor mode.editor.name = Editor
mode.pvp.name = JXJ mode.pvp.name = JxJ
mode.pvp.description = Lutar contra outros jogadores locais. mode.pvp.description = Lutar contra outros jogadores locais.
mode.attack.name = Ataque mode.attack.name = Ataque
mode.attack.description = Sem hordas, com o objetivo de destruir a base inimiga. mode.attack.description = Sem hordas, com o objetivo de destruir a base inimiga.
@@ -806,6 +813,7 @@ mech.trident-ship.name = Tridente
mech.trident-ship.weapon = Carga de bombas mech.trident-ship.weapon = Carga de bombas
mech.glaive-ship.name = Glaive mech.glaive-ship.name = Glaive
mech.glaive-ship.weapon = Repetidor de fogo mech.glaive-ship.weapon = Repetidor de fogo
item.corestorable = [lightgray]Armazenável no núcleo: {0}
item.explosiveness = [LIGHT_GRAY]Explosibilidade: {0} item.explosiveness = [LIGHT_GRAY]Explosibilidade: {0}
item.flammability = [LIGHT_GRAY]Inflamabilidade: {0} item.flammability = [LIGHT_GRAY]Inflamabilidade: {0}
item.radioactivity = [LIGHT_GRAY]Radioatividade: {0} item.radioactivity = [LIGHT_GRAY]Radioatividade: {0}
@@ -981,9 +989,9 @@ block.spirit-factory.name = Fábrica de drone de reparo Spirit
block.phantom-factory.name = Fábrica de drone de construção Phantom block.phantom-factory.name = Fábrica de drone de construção Phantom
block.wraith-factory.name = Fábrica de lutadores Wraith block.wraith-factory.name = Fábrica de lutadores Wraith
block.ghoul-factory.name = Fábrica de Bombardeiros Ghoul block.ghoul-factory.name = Fábrica de Bombardeiros Ghoul
block.dagger-factory.name = Fábrica de mech Dagger block.dagger-factory.name = Fábrica de Mecas Dagger
block.crawler-factory.name = Fábrica de mech Crawler block.crawler-factory.name = Fábrica de Mecas Crawler
block.titan-factory.name = Fábrica de mech titan block.titan-factory.name = Fábrica de Mecas Titan
block.fortress-factory.name = Fábrica de mech Fortress block.fortress-factory.name = Fábrica de mech Fortress
block.revenant-factory.name = Fábrica de lutadores Revenant block.revenant-factory.name = Fábrica de lutadores Revenant
block.repair-point.name = Ponto de Reparo block.repair-point.name = Ponto de Reparo
@@ -1040,7 +1048,7 @@ unit.eradicator.name = Erradicador
unit.lich.name = Lich unit.lich.name = Lich
unit.reaper.name = Ceifador unit.reaper.name = Ceifador
tutorial.next = [lightgray]<Toque para continuar> tutorial.next = [lightgray]<Toque para continuar>
tutorial.intro = Você entrou no[scarlet] Tutorial do Mindustry.[]\nComeçe[accent] minerando cobre[]. Toque em um veio de minério de cobre para fazer isso.\n\n[accent]{0}/{1} copper tutorial.intro = Você entrou no[scarlet] Tutorial do Mindustry.[]\nUse[accent] [[WASD][] para se mover.\n[accent]Roda do mouse[] para aumentar e diminuir o zoom.\nComece[accent] minerando cobre[]. Toque em um veio de minério de cobre para fazer isso.\n\n[accent]{0}/{1} copper
tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers [] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers [] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
tutorial.drill = Minerar manualmente é ineficiente.\n[accent]Brocas []podem minerar automaticamente.\nColoque uma num veio de cobre. tutorial.drill = Minerar manualmente é ineficiente.\n[accent]Brocas []podem minerar automaticamente.\nColoque uma num veio de cobre.
tutorial.drill.mobile = Minerar manualmente é ineficiente.\n[accent]Brocas []podem minerar automaticamente.\nToque na aba de brocas no canto inferior direito.\nSelecione a[accent] broca mecânica[].\nToque em um veio de cobre para colocá-la, então pressione a[accent] marca de verificação[] abaixo para confirmar sua seleção.\nPressione o[accent] botão "X"[] para cancelar o posicionamento. tutorial.drill.mobile = Minerar manualmente é ineficiente.\n[accent]Brocas []podem minerar automaticamente.\nToque na aba de brocas no canto inferior direito.\nSelecione a[accent] broca mecânica[].\nToque em um veio de cobre para colocá-la, então pressione a[accent] marca de verificação[] abaixo para confirmar sua seleção.\nPressione o[accent] botão "X"[] para cancelar o posicionamento.
@@ -1048,7 +1056,7 @@ tutorial.blockinfo = Cada bloco tem diferentes status. Cada broca pode extrair c
tutorial.conveyor = [accent]Esteiras[] São usadas para transportar itens até o núcleo.\nFaça uma linha de Esteiras da mineradora até o núcleo. tutorial.conveyor = [accent]Esteiras[] São usadas para transportar itens até o núcleo.\nFaça uma linha de Esteiras da mineradora até o núcleo.
tutorial.conveyor.mobile = [accent]Esteiras[] são usadas para transportar itens até o núcleo.\nFaça uma linha de esteiras da broca até o núcleo.\n[accent] Coloque uma linha segurando por alguns segundos[] e arrastando em uma direção.\n\n[accent]{0}/{1} esteiras colocadas em linha\n[accent]0/1 itens entregues tutorial.conveyor.mobile = [accent]Esteiras[] são usadas para transportar itens até o núcleo.\nFaça uma linha de esteiras da broca até o núcleo.\n[accent] Coloque uma linha segurando por alguns segundos[] e arrastando em uma direção.\n\n[accent]{0}/{1} esteiras colocadas em linha\n[accent]0/1 itens entregues
tutorial.turret = Estruturas defensivas devem ser construidas para repelir[LIGHT_GRAY] o inimigo[].\nConstrua uma torre dupla perto de sua base. tutorial.turret = Estruturas defensivas devem ser construidas para repelir[LIGHT_GRAY] o inimigo[].\nConstrua uma torre dupla perto de sua base.
tutorial.drillturret = Torretas duplas precisam de[accent] cobre[] como munição para atirar.\nColoque uma broca próxima à torre para carregá-la com o cobre minerado. tutorial.drillturret = Torres duplas precisam de[accent] cobre[] como munição para atirar.\nColoque uma broca próxima à torre para carregá-la com o cobre minerado.
tutorial.pause = Durante uma batalha, você pode[accent] pausar o jogo.[]\nVocê pode enfileirar construções enquanto o jogo está pausado.\n\n[accent]Pressione a barra de espaço para pausar. tutorial.pause = Durante uma batalha, você pode[accent] pausar o jogo.[]\nVocê pode enfileirar construções enquanto o jogo está pausado.\n\n[accent]Pressione a barra de espaço para pausar.
tutorial.pause.mobile = Durante uma batalha, você pode[accent] pausar o jogo.[]\nVocê pode enfileirar construções enquanto o jogo está pausado.\n\n[accent]Pressione este botão no canto superior direito para pausar. tutorial.pause.mobile = Durante uma batalha, você pode[accent] pausar o jogo.[]\nVocê pode enfileirar construções enquanto o jogo está pausado.\n\n[accent]Pressione este botão no canto superior direito para pausar.
tutorial.unpause = Agora pressione novamente a barra de espaço para despausar. tutorial.unpause = Agora pressione novamente a barra de espaço para despausar.
@@ -1103,7 +1111,7 @@ unit.revenant.description = Uma matriz de mísseis pesada e flutuante.
block.message.description = Armazena uma mensagem. Usado para comunicação entre aliados. block.message.description = Armazena uma mensagem. Usado para comunicação entre aliados.
block.graphite-press.description = Comprime pedaços de carvão em lâminas de grafite puro. block.graphite-press.description = Comprime pedaços de carvão em lâminas de grafite puro.
block.multi-press.description = Uma versão melhorada da prensa de grafite. Usa água e energia para processar carvão rápida e eficientemente. block.multi-press.description = Uma versão melhorada da prensa de grafite. Usa água e energia para processar carvão rápida e eficientemente.
block.silicon-smelter.description = Reduz areia com carvão puro. Produz silício silicio. block.silicon-smelter.description = Reduz areia a silicio usando carvão puro. Produz silício.
block.kiln.description = Derrete chumbo e areia no composto conhecido como metavidro. Requer pequenas quantidades de energia. block.kiln.description = Derrete chumbo e areia no composto conhecido como metavidro. Requer pequenas quantidades de energia.
block.plastanium-compressor.description = Produz plastânio usando petróleo e titânio. block.plastanium-compressor.description = Produz plastânio usando petróleo e titânio.
block.phase-weaver.description = Produz tecido de fase usando tório radioativo e areia. Requer massivas quantidades de energia para funcionar. block.phase-weaver.description = Produz tecido de fase usando tório radioativo e areia. Requer massivas quantidades de energia para funcionar.
@@ -1139,9 +1147,9 @@ block.door-large.description = Uma grande porta. Pode ser aberta e fechada ao to
block.mender.description = Periodicamente repara blocos vizinhos. Mantem as defesas reparadas em e entre ondas.\nPode usar silício para aumentar o alcance e a eficiência. block.mender.description = Periodicamente repara blocos vizinhos. Mantem as defesas reparadas em e entre ondas.\nPode usar silício para aumentar o alcance e a eficiência.
block.mend-projector.description = Uma versão melhorada do reparador. Repara blocos vizinhos.\nPode usar tecido de fase para aumentar o alcance e a eficiência. block.mend-projector.description = Uma versão melhorada do reparador. Repara blocos vizinhos.\nPode usar tecido de fase para aumentar o alcance e a eficiência.
block.overdrive-projector.description = Aumenta a velocidade de construções vizinhas.\nPode usar tecido de fase para aumentar o alcance e a eficiência. block.overdrive-projector.description = Aumenta a velocidade de construções vizinhas.\nPode usar tecido de fase para aumentar o alcance e a eficiência.
block.force-projector.description = Cria um campo de forca hexagonal em volta de si mesmo, Protegendo construções e unidades dentro de dano por balas. block.force-projector.description = Cria um campo de força hexagonal ao redor de si, protegendo construções e unidades.\nSuperaquece se suportar muito dano. Pode usar líquidos para evitar superaquecimento. Pode-se usar tecido de fase para aumentar o tamanho do escudo.
block.shock-mine.description = Danifica inimigos em cima da mina. Quase invisivel ao inimigo. block.shock-mine.description = Danifica inimigos em cima da mina. Quase invisivel ao inimigo.
block.conveyor.description = Bloco de transporte de item basico. Move os itens a frente e os deposita automaticamente em torretas ou construtores. Rotacionavel. block.conveyor.description = Bloco de transporte de item basico. Move os itens a frente e os deposita automaticamente em torretas ou construtores. Rotacionável.
block.titanium-conveyor.description = Bloco de transporte de item avançado. Move itens mais rapidos que esteiras padrões. block.titanium-conveyor.description = Bloco de transporte de item avançado. Move itens mais rapidos que esteiras padrões.
block.junction.description = Funciona como uma ponte Para duas esteiras que estejam se cruzando. Util em situações que tenha duas esteiras diferentes carregando materiais diferentes para lugares diferentes. block.junction.description = Funciona como uma ponte Para duas esteiras que estejam se cruzando. Util em situações que tenha duas esteiras diferentes carregando materiais diferentes para lugares diferentes.
block.bridge-conveyor.description = Bloco de transporte de itens avancado. Possibilita o transporte de itens acima de 3 blocos de construção ou paredes. block.bridge-conveyor.description = Bloco de transporte de itens avancado. Possibilita o transporte de itens acima de 3 blocos de construção ou paredes.
@@ -1177,7 +1185,7 @@ block.rtg-generator.description = Um Gerador termoelétrico de radioisótopos qu
block.solar-panel.description = Gera pequenas quantidades de energia do sol. block.solar-panel.description = Gera pequenas quantidades de energia do sol.
block.solar-panel-large.description = Uma versão significantemente mais eficiente que o painel solar padrão. block.solar-panel-large.description = Uma versão significantemente mais eficiente que o painel solar padrão.
block.thorium-reactor.description = Gera altas quantidades de energia do torio radioativo. Requer resfriamento constante. Vai explodir violentamente Se resfriamento insuficiente for fornecido. block.thorium-reactor.description = Gera altas quantidades de energia do torio radioativo. Requer resfriamento constante. Vai explodir violentamente Se resfriamento insuficiente for fornecido.
block.impact-reactor.description = An advanced generator, capable of creating massive amounts of power at peak efficiency. Requires a significant power input to kickstart the process. block.impact-reactor.description = Um gerador avançado, capaz de criar quantidades enormes de energia em seu poder total. Requer uma entrada significativa de energia ao iniciar.
block.mechanical-drill.description = Uma broca barata. Quando colocado em blocos apropriados, retira itens em um ritmo lento e indefinitavamente. block.mechanical-drill.description = Uma broca barata. Quando colocado em blocos apropriados, retira itens em um ritmo lento e indefinitavamente.
block.pneumatic-drill.description = Uma broca improvisada que é mais rápida e capaz de processar materiais mais duros usando a pressão do ar block.pneumatic-drill.description = Uma broca improvisada que é mais rápida e capaz de processar materiais mais duros usando a pressão do ar
block.laser-drill.description = Possibilita a mineração ainda mais rapida usando tecnologia a laser, Mas requer poder adcionalmente torio radioativo pode ser recuperado com essa mineradora block.laser-drill.description = Possibilita a mineração ainda mais rapida usando tecnologia a laser, Mas requer poder adcionalmente torio radioativo pode ser recuperado com essa mineradora

View File

@@ -12,6 +12,7 @@ link.itch.io.description = Страница itch.io с загрузками иг
link.google-play.description = Скачать для Android с Google Play link.google-play.description = Скачать для Android с Google Play
link.f-droid.description = Скачать для Android с F-Droid link.f-droid.description = Скачать для Android с F-Droid
link.wiki.description = Официальная вики link.wiki.description = Официальная вики
link.feathub.description = Предложить новые функции
linkfail = Не удалось открыть ссылку!\nURL-адрес был скопирован в буфер обмена. linkfail = Не удалось открыть ссылку!\nURL-адрес был скопирован в буфер обмена.
screenshot = риншот сохранён в {0} screenshot = риншот сохранён в {0}
screenshot.invalid = Карта слишком большая, возможно, не хватает памяти для скриншота. screenshot.invalid = Карта слишком большая, возможно, не хватает памяти для скриншота.
@@ -93,23 +94,26 @@ mods.alphainfo = Имейте в виду, что модификации нах
mods.alpha = [accent](Альфа) mods.alpha = [accent](Альфа)
mods = Модификации mods = Модификации
mods.none = [LIGHT_GRAY]Модификации не найдены! mods.none = [LIGHT_GRAY]Модификации не найдены!
mods.guide = Руководство по созданию модификаций mods.guide = Руководство по модам
mods.report = Доложить об ошибке mods.report = Доложить об ошибке
mods.openfolder = Открыть папку с модификациями mods.openfolder = Открыть папку с модификациями
mod.enabled = [lightgray]Включён mod.enabled = [lightgray]Включён
mod.disabled = [scarlet]Выключен mod.disabled = [scarlet]Выключен
mod.disable = Выкл. mod.disable = Выкл.
mod.delete.error = Невозможно удалить модификацию. Возможно, файл используется. mod.delete.error = Невозможно удалить модификацию. Возможно, файл используется.
mod.requiresversion = [scarlet]Требуемая версия игры: [accent]{0} mod.requiresversion = [scarlet]Требуемая минимальная версия игры: [accent]{0}
mod.missingdependencies = [scarlet]Не найдены родительские модификации: {0} mod.missingdependencies = [scarlet]Не найдены родительские модификации: {0}
mod.erroredcontent = [scarlet]Ошибки содержимого
mod.errors = Ошибки были вызваны загружаемым содержимым.
mod.noerrorplay = [scarlet]У Вас есть модификации с ошибками.[] Выключите проблемные модификации или исправьте ошибки перед игрой.
mod.nowdisabled = [scarlet]Модификации '{0}' требуются родительские модификации:[accent] {1}\n[lightgray]Сначала нужно загрузить их.\nЭта модификация будет автоматически отключена. mod.nowdisabled = [scarlet]Модификации '{0}' требуются родительские модификации:[accent] {1}\n[lightgray]Сначала нужно загрузить их.\nЭта модификация будет автоматически отключена.
mod.enable = Вкл. mod.enable = Вкл.
mod.requiresrestart = Теперь игра закроется, чтобы применить изменения в модификациях. mod.requiresrestart = Теперь игра закроется, чтобы применить изменения в модификациях.
mod.reloadrequired = [scarlet]Необходим перезапуск mod.reloadrequired = [scarlet]Необходим перезапуск
mod.import = Импортировать модификацию mod.import = Импортировать модификацию
mod.import.github = Импортировать модификацию с GitHub mod.import.github = Импортировать мод с GitHub
mod.item.remove = Этот предмет является частью модификации [accent]«{0}»[]. Чтобы удалить его, удалите саму модификацию. mod.item.remove = Этот предмет является частью модификации [accent]«{0}»[]. Чтобы удалить его, удалите саму модификацию.
mod.remove.confirm = Этот мод будет удалён. mod.remove.confirm = Эта модификация будет удалена.
mod.author = [LIGHT_GRAY]Автор:[] {0} mod.author = [LIGHT_GRAY]Автор:[] {0}
mod.missing = Это сохранение содержит модификацию, которое Вы недавно обновили или оно больше не установлено. Может случиться повреждение сохранения. Вы уверены, что хотите загрузить его?\n[lightgray]Модификации:\n{0} mod.missing = Это сохранение содержит модификацию, которое Вы недавно обновили или оно больше не установлено. Может случиться повреждение сохранения. Вы уверены, что хотите загрузить его?\n[lightgray]Модификации:\n{0}
mod.preview.missing = Перед публикацией этой модификации в Мастерской, Вы должны добавить изображение предпросмотра.\nРазместите изображение с именем[accent] preview.png[] в папке модификации и попробуйте снова. mod.preview.missing = Перед публикацией этой модификации в Мастерской, Вы должны добавить изображение предпросмотра.\nРазместите изображение с именем[accent] preview.png[] в папке модификации и попробуйте снова.
@@ -315,7 +319,7 @@ waves.invalid = Неверные волны в буфере обмена.
waves.copied = Волны скопированы. waves.copied = Волны скопированы.
waves.none = Враги не были определены.\nОбратите внимание, что пустые волны будут автоматически заменены обычной волной. waves.none = Враги не были определены.\nОбратите внимание, что пустые волны будут автоматически заменены обычной волной.
editor.default = [lightgray]<По умолчанию> editor.default = [lightgray]<По умолчанию>
details = Подробная информация details = Подробности
edit = Редактировать… edit = Редактировать…
editor.name = Название: editor.name = Название:
editor.spawn = Создать боевую единицу editor.spawn = Создать боевую единицу
@@ -676,6 +680,12 @@ keybind.screenshot.name = Скриншот карты
keybind.toggle_power_lines.name = Отображение лазеров энергоснабжения keybind.toggle_power_lines.name = Отображение лазеров энергоснабжения
keybind.move_x.name = Движение по оси X keybind.move_x.name = Движение по оси X
keybind.move_y.name = Движение по оси Y keybind.move_y.name = Движение по оси Y
keybind.mouse_move.name = Следовать за курсором
keybind.dash.name = Полёт/Ускорение
keybind.schematic_select.name = Выбрать область
keybind.schematic_menu.name = Меню схем
keybind.schematic_flip_x.name = Отразить схему по оси X
keybind.schematic_flip_y.name = Отразить схему по оси Y
keybind.category_prev.name = Предыдущая категория keybind.category_prev.name = Предыдущая категория
keybind.category_next.name = Следующая категория keybind.category_next.name = Следующая категория
keybind.block_select_left.name = Выбор левого блока keybind.block_select_left.name = Выбор левого блока
@@ -692,11 +702,6 @@ keybind.block_select_07.name = Категория/Выбор блока 7
keybind.block_select_08.name = Категория/Выбор блока 8 keybind.block_select_08.name = Категория/Выбор блока 8
keybind.block_select_09.name = Категория/Выбор блока 9 keybind.block_select_09.name = Категория/Выбор блока 9
keybind.block_select_10.name = Категория/Выбор блока 10 keybind.block_select_10.name = Категория/Выбор блока 10
keybind.mouse_move.name = Следовать за курсором
keybind.schematic_select.name = Выбрать область
keybind.schematic_menu.name = Меню схем
keybind.schematic_flip_x.name = Отразить схему по оси X
keybind.schematic_flip_y.name = Отразить схему по оси Y
keybind.fullscreen.name = Переключение полноэкранного режима keybind.fullscreen.name = Переключение полноэкранного режима
keybind.select.name = Выбор/Выстрел keybind.select.name = Выбор/Выстрел
keybind.diagonal_placement.name = Диагональное размещение keybind.diagonal_placement.name = Диагональное размещение
@@ -704,13 +709,11 @@ keybind.pick.name = Выбрать блок
keybind.break_block.name = Разрушить блок keybind.break_block.name = Разрушить блок
keybind.deselect.name = Снять выделение keybind.deselect.name = Снять выделение
keybind.shoot.name = Выстрел keybind.shoot.name = Выстрел
keybind.zoom_hold.name = Управление масштабом keybind.zoom.name = Масштабирование
keybind.zoom.name = Приблизить/Отдалить
keybind.menu.name = Меню keybind.menu.name = Меню
keybind.pause.name = Пауза keybind.pause.name = Пауза
keybind.pause_building.name = Приостановить/возобновить строительство keybind.pause_building.name = Приостановить/возобновить строительство
keybind.minimap.name = Мини-карта keybind.minimap.name = Мини-карта
keybind.dash.name = Полёт/Ускорение
keybind.chat.name = Чат keybind.chat.name = Чат
keybind.player_list.name = Список игроков keybind.player_list.name = Список игроков
keybind.console.name = Консоль keybind.console.name = Консоль
@@ -1048,7 +1051,7 @@ unit.eradicator.name = Искоренитель
unit.lich.name = Лич unit.lich.name = Лич
unit.reaper.name = Жнец unit.reaper.name = Жнец
tutorial.next = [lightgray]<Нажмите для продолжения> tutorial.next = [lightgray]<Нажмите для продолжения>
tutorial.intro = Вы начали[scarlet] обучение по Mindustry.[]\nИспользуйте кнопки [accent][[WASD][] для передвижения.\n[accent]Зажмите [[Ctrl] и покрутите колесо мыши[]для приближения или отдаления камеры.\nНачните с [accent]добычи меди[]. Приблизьтесь к ней, затем нажмите на медную жилу возле Вашего ядра, чтобы сделать это.\n\n[accent]{0}/{1} меди tutorial.intro = Вы начали[scarlet] обучение по Mindustry.[]\nИспользуйте кнопки [accent][[WASD][] для передвижения.\n[accent]Покрутите колесо мыши[]для приближения или отдаления камеры.\nНачните с [accent]добычи меди[]. Приблизьтесь к ней, затем нажмите на медную жилу возле Вашего ядра, чтобы сделать это.\n\n[accent]{0}/{1} меди
tutorial.intro.mobile = Вы начали[scarlet] обучение по Mindustry.[]\nПроведите по экрану, чтобы двигаться.\n[accent]Сведите или разведите 2 пальца[] для изменения масштаба.\nНачните с [accent]добычи меди[]. Приблизьтесь к ней, затем нажмите на медную жилу возле Вашего ядра, чтобы сделать это.\n\n[accent]{0}/{1} меди tutorial.intro.mobile = Вы начали[scarlet] обучение по Mindustry.[]\nПроведите по экрану, чтобы двигаться.\n[accent]Сведите или разведите 2 пальца[] для изменения масштаба.\nНачните с [accent]добычи меди[]. Приблизьтесь к ней, затем нажмите на медную жилу возле Вашего ядра, чтобы сделать это.\n\n[accent]{0}/{1} меди
tutorial.drill = Ручная добыча не является эффективной.\n[accent]Буры[] могут добывать автоматически.\nНажмите на вкладку с изображением сверла снизу справа.\nВыберите[accent] механический бур[]. Разместите его на медной жиле нажатием.\n[accent]Нажатие по правой кнопке[] прервёт строительство. tutorial.drill = Ручная добыча не является эффективной.\n[accent]Буры[] могут добывать автоматически.\nНажмите на вкладку с изображением сверла снизу справа.\nВыберите[accent] механический бур[]. Разместите его на медной жиле нажатием.\n[accent]Нажатие по правой кнопке[] прервёт строительство.
tutorial.drill.mobile = Ручная добыча не является эффективной.\n[accent]Буры []могут добывать автоматически.\nНажмите на вкладку с изображением сверла снизу справа.\nВыберите[accent] механический бур[].\nРазместите его на медной жиле нажатием, затем нажмите [accent] белую галку[] ниже, чтобы подтвердить построение выделенного.\nНажмите [accent] кнопку X[], чтобы отменить размещение. tutorial.drill.mobile = Ручная добыча не является эффективной.\n[accent]Буры []могут добывать автоматически.\nНажмите на вкладку с изображением сверла снизу справа.\nВыберите[accent] механический бур[].\nРазместите его на медной жиле нажатием, затем нажмите [accent] белую галку[] ниже, чтобы подтвердить построение выделенного.\nНажмите [accent] кнопку X[], чтобы отменить размещение.
@@ -1072,7 +1075,7 @@ tutorial.launch = Когда Вы достигаете определенной
item.copper.description = Самый основной строительный материал. Широко используется во всех типах блоков. item.copper.description = Самый основной строительный материал. Широко используется во всех типах блоков.
item.lead.description = Основной стартовый материал. Широко используется в электронике и блоках для транспортировки жидкостей. item.lead.description = Основной стартовый материал. Широко используется в электронике и блоках для транспортировки жидкостей.
item.metaglass.description = Сверхпрочный сплав стекла. Широко используется для распределения и хранения жидкости. item.metaglass.description = Сверхпрочный сплав стекла. Широко используется для распределения и хранения жидкости.
item.graphite.description = Минерализованный углерод, используемый для боеприпасов и электроизоляции. item.graphite.description = Минерализованный углерод, используемый для боеприпасов и электрических компонентов.
item.sand.description = Обычный материал, который широко используется при выплавке, как при легировании, так и в качестве флюса. item.sand.description = Обычный материал, который широко используется при выплавке, как при легировании, так и в качестве флюса.
item.coal.description = Окаменелое растительное вещество, образовавшееся задолго до посева. Широко используется для производства топлива и ресурсов. item.coal.description = Окаменелое растительное вещество, образовавшееся задолго до посева. Широко используется для производства топлива и ресурсов.
item.titanium.description = Редкий сверхлёгкий металл, широко используемый для транспортировки жидкостей, буров и авиации. item.titanium.description = Редкий сверхлёгкий металл, широко используемый для транспортировки жидкостей, буров и авиации.

View File

@@ -652,7 +652,6 @@ keybind.pick.name = Pick Block
keybind.break_block.name = Break Block keybind.break_block.name = Break Block
keybind.deselect.name = Deselect keybind.deselect.name = Deselect
keybind.shoot.name = Shoot keybind.shoot.name = Shoot
keybind.zoom_hold.name = Zoom Hold
keybind.zoom.name = Zoom keybind.zoom.name = Zoom
keybind.menu.name = Menu keybind.menu.name = Menu
keybind.pause.name = Pause keybind.pause.name = Pause

View File

@@ -29,7 +29,7 @@ load.mod = มอด
schematic = Schematic schematic = Schematic
schematic.add = กำลังบันทึก Schematic... schematic.add = กำลังบันทึก Schematic...
schematics = Schematics schematics = Schematics
schematic.replace = มี schematic ที่ใช้ชื่อนี้แล้ว. แทนที่มัน? schematic.replace = มี schematic ที่ใช้ชื่อนี้แล้ว. แทนที่เลยไม?
schematic.import = นำเข้า Schematic... schematic.import = นำเข้า Schematic...
schematic.exportfile = ส่งออก File schematic.exportfile = ส่งออก File
schematic.importfile = นำเข้า File schematic.importfile = นำเข้า File
@@ -60,7 +60,7 @@ level.mode = เกมโหมด:
showagain = ไม่แสดงอีกในครั้งต่อไป showagain = ไม่แสดงอีกในครั้งต่อไป
coreattack = < Core กำลังถูกโจมตี! > coreattack = < Core กำลังถูกโจมตี! >
nearpoint = [[ [scarlet]ออกจากดรอปพอยท์ด่วน IMMEDIATELY[] ]\nการทำลายล้างกำลังใกล้เข้ามา nearpoint = [[ [scarlet]ออกจากดรอปพอยท์ด่วน IMMEDIATELY[] ]\nการทำลายล้างกำลังใกล้เข้ามา
database = Core Database database = ฐานข้อมูหลัง
savegame = เซฟเกม savegame = เซฟเกม
loadgame = โหลดเกม loadgame = โหลดเกม
joingame = เข้าร่วมเกม joingame = เข้าร่วมเกม
@@ -116,7 +116,7 @@ noname = ใส่ชื่อ[accent] ผู้เล่น[] ก่อน.
filename = ชื่อไฟล์: filename = ชื่อไฟล์:
unlocked = content ใหม่ปลดล็อค! unlocked = content ใหม่ปลดล็อค!
completed = [accent]สำเร็จ completed = [accent]สำเร็จ
techtree = สายวิจัย techtree = ความคืบหน้าในการวิจัย
research.list = [lightgray]วิจัย: research.list = [lightgray]วิจัย:
research = วิจัย research = วิจัย
researched = [lightgray]{0} วิจัยแล้ว. researched = [lightgray]{0} วิจัยแล้ว.
@@ -126,9 +126,9 @@ server.closing = [accent]กำลังปิดเซิฟเวอร์...
server.kicked.kick = คุณถูกเตะออกจากเซิฟเวอร์! server.kicked.kick = คุณถูกเตะออกจากเซิฟเวอร์!
server.kicked.whitelist = คุณไม่ได้อยู่ใน whitelisted server.kicked.whitelist = คุณไม่ได้อยู่ใน whitelisted
server.kicked.serverClose = เซิฟเวอร์ถูกปิด. server.kicked.serverClose = เซิฟเวอร์ถูกปิด.
server.kicked.vote = คุณถูกโหวตเตะออก. บยบาย. server.kicked.vote = คุณถูกโหวตเตะออก. บยบาย.
server.kicked.clientOutdated = client ล่าสมัย! กรุณาอัปเดตเกมของคุณ! server.kicked.clientOutdated = client เก่า! กรุณาอัปเดตเกมของคุณ!
server.kicked.serverOutdated = server ล่าสมัย! โปรดถามเจ้าของเซิฟเพื่ออัปเดต! server.kicked.serverOutdated = server เก่า! โปรดถามเจ้าของเซิฟเพื่ออัปเดต!
server.kicked.banned = คุณถูกแบนในเซิฟเวอร์นี้ server.kicked.banned = คุณถูกแบนในเซิฟเวอร์นี้
server.kicked.typeMismatch = เซิฟเวอร์นี้ไม่เข้ากับ build type ของคุณ. server.kicked.typeMismatch = เซิฟเวอร์นี้ไม่เข้ากับ build type ของคุณ.
server.kicked.playerLimit = เซิฟเวอร์เต็ม. กรุณารอให้เซิฟเวอร์ว่างก่อน. server.kicked.playerLimit = เซิฟเวอร์เต็ม. กรุณารอให้เซิฟเวอร์ว่างก่อน.
@@ -598,7 +598,7 @@ category.items = ไอเท็ม
category.crafting = นำเข้า/ส่งออก category.crafting = นำเข้า/ส่งออก
category.shooting = การยิง category.shooting = การยิง
category.optional = การเพิ่มประสิทธิภาพทางเลือก category.optional = การเพิ่มประสิทธิภาพทางเลือก
setting.landscape.name = ล็อค Landscape setting.landscape.name = ล็อค Landscape แนวนอน
setting.shadows.name = เงา setting.shadows.name = เงา
setting.blockreplace.name = แนะนำบล็อคโดยอัตโนมัติ setting.blockreplace.name = แนะนำบล็อคโดยอัตโนมัติ
setting.linear.name = การกรองเชิงเส้น setting.linear.name = การกรองเชิงเส้น
@@ -761,26 +761,26 @@ item.scrap.name = เศษเหล็ก
liquid.water.name = น้ำ liquid.water.name = น้ำ
liquid.slag.name = กากแร่ liquid.slag.name = กากแร่
liquid.oil.name = น้ำมัน liquid.oil.name = น้ำมัน
liquid.cryofluid.name = ครโยฟลูอิด liquid.cryofluid.name = ครโรฟิวล์
mech.alpha-mech.name = อัลฟ้า mech.alpha-mech.name = อัลฟ้า
mech.alpha-mech.weapon = เฮฟวี้รีพีทเตอร์ mech.alpha-mech.weapon = เฮฟวี้รีพีทเตอร์
mech.alpha-mech.ability = รีเจเนเรชั่น mech.alpha-mech.ability = รีเจเนเรชั่น
mech.delta-mech.name = เดลต้า mech.delta-mech.name = เดลต้า
mech.delta-mech.weapon = เครื่องกำเนิดประกายไฟฟ้า mech.delta-mech.weapon = เครื่องกำเนิดประกายไฟฟ้า
mech.delta-mech.ability = ปล่อย mech.delta-mech.ability = ปล่อยสายฟ้า
mech.tau-mech.name = เทา mech.tau-mech.name = เทา
mech.tau-mech.weapon = รีสตัคเลเซอร์ mech.tau-mech.weapon = รีสตัคเลเซอร์
mech.tau-mech.ability = เบิสต์ซ่อมแซม mech.tau-mech.ability = เบิสต์ซ่อมแซม
mech.omega-mech.name = โอเมก้า mech.omega-mech.name = โอเมก้า
mech.omega-mech.weapon = ฝูงขีปนาวุธ mech.omega-mech.weapon = ขีปนาวุธมหาปลัย
mech.omega-mech.ability = ตัวเสริมเกราะ mech.omega-mech.ability = ตัวเสริมเกราะ
mech.dart-ship.name = ลูกดอก (Dart) mech.dart-ship.name = ลูกดอก (Dart)
mech.dart-ship.weapon = รีพีตเตอร์ mech.dart-ship.weapon = รีพีตเตอร์
mech.javelin-ship.name = หอก (Javelin) mech.javelin-ship.name = จาวาลีน (Javelin)
mech.javelin-ship.weapon = ขีปนาวุธเบิสต์ mech.javelin-ship.weapon = ขีปนาวุธเบิสต์
mech.javelin-ship.ability = ดิสชาร์จบูสเตอร์ mech.javelin-ship.ability = ดิสชาร์จบูสเตอร์
mech.trident-ship.name = ตรีศูล (Trident) mech.trident-ship.name = ตรีศูล (Trident)
mech.trident-ship.weapon = ห้องเก็บระเบิด mech.trident-ship.weapon = ตัวปล่อยระเบิด
mech.glaive-ship.name = เกลฟว์ mech.glaive-ship.name = เกลฟว์
mech.glaive-ship.weapon = รีพีตเตอร์ไฟ mech.glaive-ship.weapon = รีพีตเตอร์ไฟ
item.explosiveness = [lightgray]ค่าการระเบิด: {0}% item.explosiveness = [lightgray]ค่าการระเบิด: {0}%
@@ -809,8 +809,8 @@ block.sandrocks.name = หินทราย
block.spore-pine.name = ต้นสนสปอร์ block.spore-pine.name = ต้นสนสปอร์
block.sporerocks.name = หินสปอร์ block.sporerocks.name = หินสปอร์
block.rock.name = หิน block.rock.name = หิน
block.snowrock.name = หินหิมะ block.snowrock.name = ก้อนหิมะ
block.snow-pine.name = ต้นสนหิมะ block.snow-pine.name = ต้นสนที่คลุมหิมะ
block.shale.name = หินดินดาน block.shale.name = หินดินดาน
block.shale-boulder.name = ก้อนหินดินดาน block.shale-boulder.name = ก้อนหินดินดาน
block.moss.name = ตะไคร่น้ำ block.moss.name = ตะไคร่น้ำ
@@ -905,9 +905,8 @@ block.cryofluidmixer.name = เครื่องผสมไครโยฟล
block.melter.name = เตาหลอม block.melter.name = เตาหลอม
block.incinerator.name = เตาเผาขยะ block.incinerator.name = เตาเผาขยะ
block.spore-press.name = เครื่องอัดสปอร์ block.spore-press.name = เครื่องอัดสปอร์
block.separator.name = block.separator.name = เครื่องแยก
เครื่องแยก block.coal-centrifuge.name = เครื่องผลิตถ่านหิน
block.coal-centrifuge.name = เครื่องปั่นเหวี่งถ่านหิน
block.power-node.name = โหนดพลังงาน block.power-node.name = โหนดพลังงาน
block.power-node-large.name = โหนดพลังงานขนาดใหญ่ block.power-node-large.name = โหนดพลังงานขนาดใหญ่
block.surge-tower.name = เสาเสิร์จ block.surge-tower.name = เสาเสิร์จ
@@ -916,7 +915,7 @@ block.battery.name = แบตเตอรี่
block.battery-large.name = แบตเตอรี่ขนาดใหญ่ block.battery-large.name = แบตเตอรี่ขนาดใหญ่
block.combustion-generator.name = เครื่องกำเนิดไฟฟ้าเผาไหม้ block.combustion-generator.name = เครื่องกำเนิดไฟฟ้าเผาไหม้
block.turbine-generator.name = เครื่องกำเนิดไฟฟ้าไอน้ำ block.turbine-generator.name = เครื่องกำเนิดไฟฟ้าไอน้ำ
block.differential-generator.name = เครื่องกำเนิดไฟฟ้าดิฟเฟอเร่นเชี่ยว block.differential-generator.name = เครื่องกำเนิดไฟฟ้าดิฟเฟอเร่นเตอร์
block.impact-reactor.name = เตาปฏิกรณ์อิมแพ็ค block.impact-reactor.name = เตาปฏิกรณ์อิมแพ็ค
block.mechanical-drill.name = เครื่องขุดเชิงกล block.mechanical-drill.name = เครื่องขุดเชิงกล
block.pneumatic-drill.name = เครื่องขุดนิวมาติก block.pneumatic-drill.name = เครื่องขุดนิวมาติก
@@ -930,7 +929,7 @@ block.trident-ship-pad.name = ฐานปล่อยยานตรีศู
block.glaive-ship-pad.name = ฐานปล่อยยานเกลฟว์ block.glaive-ship-pad.name = ฐานปล่อยยานเกลฟว์
block.omega-mech-pad.name = ฐานปล่อยเม็คโอเมก้า block.omega-mech-pad.name = ฐานปล่อยเม็คโอเมก้า
block.tau-mech-pad.name = ฐานปล่อยเม็คเทา (Tau) block.tau-mech-pad.name = ฐานปล่อยเม็คเทา (Tau)
block.conduit.name = รางน้ำ block.conduit.name = ท่อน้ำ
block.mechanical-pump.name = ปั๊มเชิงกล block.mechanical-pump.name = ปั๊มเชิงกล
block.item-source.name = จุดกำเนิดไอเท็ม block.item-source.name = จุดกำเนิดไอเท็ม
block.item-void.name = จุดลบไอเท็ม block.item-void.name = จุดลบไอเท็ม
@@ -943,8 +942,8 @@ block.wave.name = เวฟ
block.swarmer.name = สวอร์มเมอร์ block.swarmer.name = สวอร์มเมอร์
block.salvo.name = ซาวโว block.salvo.name = ซาวโว
block.ripple.name = ริปเปิ้ล block.ripple.name = ริปเปิ้ล
block.phase-conveyor.name = สายพานเฟส block.phase-conveyor.name = สายพานความเร็วแสง
block.bridge-conveyor.name = สะพานสายพาน block.bridge-conveyor.name = สะพาน
block.plastanium-compressor.name = เครื่องอัดพลาสตาเนียม block.plastanium-compressor.name = เครื่องอัดพลาสตาเนียม
block.pyratite-mixer.name = เครื่องผสมไพราไทต์ block.pyratite-mixer.name = เครื่องผสมไพราไทต์
block.blast-mixer.name = เครื่องผสมสารประกอบระเบิด block.blast-mixer.name = เครื่องผสมสารประกอบระเบิด
@@ -964,11 +963,11 @@ block.fortress-factory.name = โรงงานผลิตฟอร์เท
block.revenant-factory.name = โรงงานผลิตยานไฟต์เตอร์เรเวแนนท์ block.revenant-factory.name = โรงงานผลิตยานไฟต์เตอร์เรเวแนนท์
block.repair-point.name = จุดซ่อมแซม block.repair-point.name = จุดซ่อมแซม
block.pulse-conduit.name = รางน้ำโพวส์ block.pulse-conduit.name = รางน้ำโพวส์
block.phase-conduit.name = รางน้ำเฟส block.phase-conduit.name = ท่อน้ำความเร็วแสง
block.liquid-router.name = เร้าเตอร์ของเหลว block.liquid-router.name = เร้าเตอร์ของเหลว
block.liquid-tank.name = แทงค์เก็บของเหลว block.liquid-tank.name = แทงค์น้ำ
block.liquid-junction.name = ทางแยกของเหลว block.liquid-junction.name = ทางแยกของเหลว
block.bridge-conduit.name = สะพานรางน้ำ block.bridge-conduit.name = ท่อน้ำยกระดับ
block.rotary-pump.name = ปั๊มโรตารี้ block.rotary-pump.name = ปั๊มโรตารี้
block.thorium-reactor.name = เตาปฏิกรณ์ทอเรี่ยม block.thorium-reactor.name = เตาปฏิกรณ์ทอเรี่ยม
block.mass-driver.name = แมสไดรฟ์เวอร์ block.mass-driver.name = แมสไดรฟ์เวอร์
@@ -982,8 +981,8 @@ block.surge-wall.name = กำแพงเสิร์จ
block.surge-wall-large.name = กำแพงเสิร์จขนาดใหญ่ block.surge-wall-large.name = กำแพงเสิร์จขนาดใหญ่
block.cyclone.name = ไซโคลน block.cyclone.name = ไซโคลน
block.fuse.name = ฟิวส์ block.fuse.name = ฟิวส์
block.shock-mine.name = กับระเบิดไฟฟ้าซ็อต block.shock-mine.name = กับระเบิดไฟฟ้า
block.overdrive-projector.name = โอเวอร์ไดรฟ์โปรเจ็คเตอร์ block.overdrive-projector.name = เครื่องเร่งประสิทธิภาพ
block.force-projector.name = ฟอร์สโปรเจ็คเตอร์ block.force-projector.name = ฟอร์สโปรเจ็คเตอร์
block.arc.name = อาร์ค block.arc.name = อาร์ค
block.rtg-generator.name = เครื่องกำเนิดไฟฟ้า อาร์ทีจี block.rtg-generator.name = เครื่องกำเนิดไฟฟ้า อาร์ทีจี
@@ -1013,7 +1012,7 @@ unit.eruptor.name = อีรัฟเตอร์
unit.chaos-array.name = เคออสอาเรย์ unit.chaos-array.name = เคออสอาเรย์
unit.eradicator.name = อีเรดิเคเตอร์ unit.eradicator.name = อีเรดิเคเตอร์
unit.lich.name = ลิช unit.lich.name = ลิช
unit.reaper.name = รีฟเอร์ unit.reaper.name = รีฟเอร์
tutorial.next = [lightgray]<กดเพื่อดำเนินการต่อ> tutorial.next = [lightgray]<กดเพื่อดำเนินการต่อ>
tutorial.intro = คุณได้เข้าสู่[scarlet] การสอนเล่นของ Mindustry.[]\nใช้ [[WASD] เพื่อเคลื่อนที่.\n[accent]กด [[Ctrl] ค้างระหว่างกลิ้งลูกกลิ้งเม้าส์[] เพื่อซูมเข้าและออก.\nเริ่มด้วยการ[accent] ขุดทองแดง[]. เคลื่อนที่ไปใกล้มัน, แล้วกดที่สายแร่ทองแดงใกล้ๆกับ core ของคุณ\n\n[accent]ทองแดง {0}/{1} ชิ้น tutorial.intro = คุณได้เข้าสู่[scarlet] การสอนเล่นของ Mindustry.[]\nใช้ [[WASD] เพื่อเคลื่อนที่.\n[accent]กด [[Ctrl] ค้างระหว่างกลิ้งลูกกลิ้งเม้าส์[] เพื่อซูมเข้าและออก.\nเริ่มด้วยการ[accent] ขุดทองแดง[]. เคลื่อนที่ไปใกล้มัน, แล้วกดที่สายแร่ทองแดงใกล้ๆกับ core ของคุณ\n\n[accent]ทองแดง {0}/{1} ชิ้น
tutorial.intro.mobile = คุณได้เข้าสู่[scarlet] การสอนเล่นของ Mindustry.[]\nเลื่อนหน้าจอเพื่อเคลื่อนที่.\n[accent]ใส่สองนิ้ว []เพื่อซูมเข้าและออก.\nเริ่มด้วยการ[accent] ขุดทองแดง[]. เคลื่อนที่ไปใกล้มัน, แล้วกดที่สายแร่ทองแดงใกล้ๆกับ core ของคุณ\n\n[accent]ทองแดง {0}/{1} ชิ้น tutorial.intro.mobile = คุณได้เข้าสู่[scarlet] การสอนเล่นของ Mindustry.[]\nเลื่อนหน้าจอเพื่อเคลื่อนที่.\n[accent]ใส่สองนิ้ว []เพื่อซูมเข้าและออก.\nเริ่มด้วยการ[accent] ขุดทองแดง[]. เคลื่อนที่ไปใกล้มัน, แล้วกดที่สายแร่ทองแดงใกล้ๆกับ core ของคุณ\n\n[accent]ทองแดง {0}/{1} ชิ้น
@@ -1110,7 +1109,7 @@ block.phase-wall-large.description = A wall coated with special phase-based refl
block.surge-wall.description = บล็อคป้องกันที่มีทนทานสูง.\nสะสมพลังงานจากกระสุน, แล้วปล่อยออกมาแบบสุ่ม. block.surge-wall.description = บล็อคป้องกันที่มีทนทานสูง.\nสะสมพลังงานจากกระสุน, แล้วปล่อยออกมาแบบสุ่ม.
block.surge-wall-large.description = บล็อคป้องกันที่มีทนทานสูง.\nสะสมพลังงานจากกระสุน, แล้วปล่อยออกมาแบบสุ่ม.\nคลอบคลุมหลายช่อง. block.surge-wall-large.description = บล็อคป้องกันที่มีทนทานสูง.\nสะสมพลังงานจากกระสุน, แล้วปล่อยออกมาแบบสุ่ม.\nคลอบคลุมหลายช่อง.
block.door.description = ประตูขนาดเล็ก. สามารถเปิดได้โดยการกด. block.door.description = ประตูขนาดเล็ก. สามารถเปิดได้โดยการกด.
block.door-large.description = ประตูขนาดใหญ่. สามารถเปิดได้โดยการกด.\nคลอบคลุมหลายช่อง. block.door-large.description = ประตูขนาดใหญ่. สามารถเปิดและปิดได้โดยการกด.\nคลอบคลุมหลายช่อง.
block.mender.description = ซ่อมแซมบล็อคในวงของมันเป็นระยะๆ. ช่วยซ่อมแซมแนวป้องกันระหว่าง wave.\nสามารถใช้ซิลิก้อนเพื่อเพิ่มรัศมีและประสิทธิภาพได้ block.mender.description = ซ่อมแซมบล็อคในวงของมันเป็นระยะๆ. ช่วยซ่อมแซมแนวป้องกันระหว่าง wave.\nสามารถใช้ซิลิก้อนเพื่อเพิ่มรัศมีและประสิทธิภาพได้
block.mend-projector.description = เมนเดอร์ที่ได้รับการอัปเกรด. ซ่อมแซมบล็อคในระยะของมัน.\nสามารถใช้ใยเฟสเพื่อเพิ่มระยะและประสิทธิภาพได้. block.mend-projector.description = เมนเดอร์ที่ได้รับการอัปเกรด. ซ่อมแซมบล็อคในระยะของมัน.\nสามารถใช้ใยเฟสเพื่อเพิ่มระยะและประสิทธิภาพได้.
block.overdrive-projector.description = เพิ่มความเร็วของสิ่งก่อสร้างรอบๆ.\nสามารถใช้ใยเฟสเพื่อเพิ่มระยะและประสิทธิภาพ. block.overdrive-projector.description = เพิ่มความเร็วของสิ่งก่อสร้างรอบๆ.\nสามารถใช้ใยเฟสเพื่อเพิ่มระยะและประสิทธิภาพ.
@@ -1123,7 +1122,7 @@ block.bridge-conveyor.description = บล็อคขนส่งไอเท
block.phase-conveyor.description = บล็อคขนส่งไอเท็มขั้นสูง. ใช้พลังงานเพื่อส่งไอเท็มไปยังสายพานเฟสอีกอัน ข้ามได้หลายช่อง. block.phase-conveyor.description = บล็อคขนส่งไอเท็มขั้นสูง. ใช้พลังงานเพื่อส่งไอเท็มไปยังสายพานเฟสอีกอัน ข้ามได้หลายช่อง.
block.sorter.description = แยกไอเท็ม. ถ้าไอเท็มตรงกับที่เลือกไว้, จะผ่านได้. แต่ถ้าไม่ตรง, ไอเท็มจะออกทางซ้ายหรือขวา (ใช้ทางที่ไอเท็มเข้าเป็นหลัก) block.sorter.description = แยกไอเท็ม. ถ้าไอเท็มตรงกับที่เลือกไว้, จะผ่านได้. แต่ถ้าไม่ตรง, ไอเท็มจะออกทางซ้ายหรือขวา (ใช้ทางที่ไอเท็มเข้าเป็นหลัก)
block.inverted-sorter.description = แยกไอเท็มคล้ายเครื่องแยกธรรมดา, แต่ไอเท็มที่เลือกจะออกข้างแทน. block.inverted-sorter.description = แยกไอเท็มคล้ายเครื่องแยกธรรมดา, แต่ไอเท็มที่เลือกจะออกข้างแทน.
block.router.description = รับไอเท็มแล้วส่งออก 3 ทางเท่ากัน. มีประโยชน์สำหรับแยกไอเท็มจากแหล่งเดียวไปหลายที่.\n\n[scarlet]อย่าวางไว้ติดกับทางส่งไอเท็มเข้าเพราะของออกจะไปอุดตันได้.[] block.router.description = รับไอเท็มแล้วส่งออก 3 ทางเท่ากัน. มีประโยชน์สำหรับแยกไอเท็มจากแหล่งเดียวไปหลายที่.\n\n[scarlet]อย่าวางไว้ติดกับทางส่งไอเท็มเข้าเพราะของออกจะไปอุดตันได้.[]
block.distributor.description = เร้าเตอร์ขั้นสูง. แยกไอเท็มออก 7 ทางอย่างเท่าๆกัน. block.distributor.description = เร้าเตอร์ขั้นสูง. แยกไอเท็มออก 7 ทางอย่างเท่าๆกัน.
block.overflow-gate.description = ของจะออกจากข้างๆเมื่อทางข้างหน้ถูกบล็อคเท่านั้น. block.overflow-gate.description = ของจะออกจากข้างๆเมื่อทางข้างหน้ถูกบล็อคเท่านั้น.
block.mass-driver.description = บล็อคขนส่งไอเท็มขั้นสุดยอด. รวบรวมไอเท็มจำนวนหนึ่งแล้วยิงไปหาแมสไดรเวอร์อีกอันที่อยู่ไกลออกไป. ต้องใช้พลังงานในการใช้งาน. block.mass-driver.description = บล็อคขนส่งไอเท็มขั้นสุดยอด. รวบรวมไอเท็มจำนวนหนึ่งแล้วยิงไปหาแมสไดรเวอร์อีกอันที่อยู่ไกลออกไป. ต้องใช้พลังงานในการใช้งาน.
@@ -1150,7 +1149,7 @@ block.differential-generator.description = ผลิตไฟฟ้าจำน
block.rtg-generator.description = เครื่องกำเนิดไฟฟ้าที่ใช้ง่ายและไว้ใจได้. ใช้ความร้อนจากการสลายของสารกัมมัตภาพรังสีเพื่อใช้ผลิตพลังงานอย่างช้าๆ. block.rtg-generator.description = เครื่องกำเนิดไฟฟ้าที่ใช้ง่ายและไว้ใจได้. ใช้ความร้อนจากการสลายของสารกัมมัตภาพรังสีเพื่อใช้ผลิตพลังงานอย่างช้าๆ.
block.solar-panel.description = ให้พลังงานจากแสงอาทิตย์จำนวนน้อย. block.solar-panel.description = ให้พลังงานจากแสงอาทิตย์จำนวนน้อย.
block.solar-panel-large.description = เวอร์ชั่นของแผงโซล่าเซลล์ที่มีประสิทธิภาพมากขึ้นกว่าแผงโซล่าเซลล์ธรรมดา. block.solar-panel-large.description = เวอร์ชั่นของแผงโซล่าเซลล์ที่มีประสิทธิภาพมากขึ้นกว่าแผงโซล่าเซลล์ธรรมดา.
block.thorium-reactor.description = ผลิตพลังงานจำนวนมากจากทอเรี่ยม. ำเป็นต้องใช้สารหล่อเย็นตลอดเวลา. จะระเบิดอย่างรุนแรงหากไม่ได้รับสารหล่อเย็นในจำนวนที่ต้องการ. จำนวนพลังงานที่ผลิตขึ้นอยู่กับความเต็ม และผลิตพลังงานเริ่มต้นที่ความสามารถสูงสุด. block.thorium-reactor.description = ผลิตพลังงานจำนวนมากจากทอเรี่ยม. ำเป็นต้องใช้สารหล่อเย็นตลอดเวลา. จะระเบิดอย่างรุนแรงหากไม่ได้รับสารหล่อเย็นในจำนวนที่ต้องการ. จำนวนพลังงานที่ผลิตขึ้นอยู่กับความเต็ม และผลิตพลังงานเริ่มต้นที่ความสามารถสูงสุด.
block.impact-reactor.description = เครื่องกำเนิดไฟฟ้าขั้นสูง, สามารถผลิตไฟฟ้าได้จำนวนมหาศาลที่ประสิทธิภาพสูงสุด. จำเป็นต้องใช้พลังงานจำนวนมากในการสตาร์ทเครื่อง. block.impact-reactor.description = เครื่องกำเนิดไฟฟ้าขั้นสูง, สามารถผลิตไฟฟ้าได้จำนวนมหาศาลที่ประสิทธิภาพสูงสุด. จำเป็นต้องใช้พลังงานจำนวนมากในการสตาร์ทเครื่อง.
block.mechanical-drill.description = เครื่องขุดราคาถูก. เมื่อวางบนบล็อคที่ถูกต้อง, จะส่งไอเท็มของมันออกมาเรื่อยๆแบบไม่มีที่สิ้นสุด. ขุดได้แค่ทรัพยากรพื้นฐาน. block.mechanical-drill.description = เครื่องขุดราคาถูก. เมื่อวางบนบล็อคที่ถูกต้อง, จะส่งไอเท็มของมันออกมาเรื่อยๆแบบไม่มีที่สิ้นสุด. ขุดได้แค่ทรัพยากรพื้นฐาน.
block.pneumatic-drill.description = เครื่องขุดได้รับการปรับปรุง, สามารถขุดไทเทเนี่ยมได้. ขุดไวกว่าเครื่องขุดเชิงกล. block.pneumatic-drill.description = เครื่องขุดได้รับการปรับปรุง, สามารถขุดไทเทเนี่ยมได้. ขุดไวกว่าเครื่องขุดเชิงกล.
@@ -1186,16 +1185,16 @@ block.draug-factory.description = ผลิตโดรนขุดเจาะ
block.spirit-factory.description = ผลิตโดรนซ่อมแซมสปิริต. block.spirit-factory.description = ผลิตโดรนซ่อมแซมสปิริต.
block.phantom-factory.description = ผลิตโดรนก่อสร้างขั้นสูง. block.phantom-factory.description = ผลิตโดรนก่อสร้างขั้นสูง.
block.wraith-factory.description = ผลิตยูนิตเร็ว โจมตีแบบ hit-and-run (จู่โจมแล้วหนี) block.wraith-factory.description = ผลิตยูนิตเร็ว โจมตีแบบ hit-and-run (จู่โจมแล้วหนี)
block.ghoul-factory.description = ผลิตยานทิ้งระเบิดปูพรมหนัก (heavy carpet bomber) block.ghoul-factory.description = ผลิตยานทิ้งระเบิดแบบโหดๆ (heavy carpet bomber)
block.revenant-factory.description = ผลิตยูนิตที่ใช้ขีปนาวุธเป็นหลัก. block.revenant-factory.description = ผลิตยูนิตที่ใช้ขีปนาวุธเป็นหลัก.
block.dagger-factory.description = ผลิตยูนิตภาคพื้นดินพื้นฐาน. block.dagger-factory.description = ผลิตยูนิตภาคพื้นดินพื้นฐาน.
block.crawler-factory.description = ผลิตยูนิตพลีชีพเร็ว. block.crawler-factory.description = ผลิตยูนิตที่ระเบิดตัวเอง.
block.titan-factory.description = ผลิตยูนิตภาคพื้นดินเสริมเกราะขั้นสูง. block.titan-factory.description = ผลิตยูนิตภาคพื้นดินเสริมเกราะขั้นสูง.
block.fortress-factory.description = ผลิตยูนิตหนักติดปืนใหญ่. block.fortress-factory.description = ผลิตยูนิตที่ถึกและติดปืนใหญ่.
block.repair-point.description = ซ่อมแซมยูนิตที่อยู่ในรัศมีอย่างต่อเนื่อง. block.repair-point.description = ซ่อมแซมยูนิตที่อยู่ในรัศมีอย่างต่อเนื่อง.
block.dart-mech-pad.description = ใช้เปลี่ยนร่างเป็นเป็นเม็คโจมตีพื้นฐาน.\nใช้โดยการกดเมื่อยืนทับมัน. block.dart-mech-pad.description = ใช้เปลี่ยนร่างเป็นเป็นเม็คโจมตีพื้นฐาน.\nใช้โดยการกดเมื่อยืนทับมัน.
block.delta-mech-pad.description = ใช้เปลี่ยนร่างเป็นเป็นเม็คเกราะบางโจมตีแบบ hit-and-run (จู่โจมแล้วหนี).\nใช้โดยการกดเมื่อยืนทับมัน. block.delta-mech-pad.description = ใช้เปลี่ยนร่างเป็นเป็นเม็คเกราะบางโจมตีแบบ hit-and-run (จู).\nใช้โดยการกดเมื่อยืนทับมัน.
block.tau-mech-pad.description = ใช้เปลี่ยนร่างเป็นเป็นเม็คสนับสนุนขั้นสูง.\nใช้โดยการกดเมื่อยืนทับมัน. block.tau-mech-pad.description = ใช้เปลี่ยนร่างเป็นตัวที่ฮีลได้ดีมาก.\nใช้โดยการกดเมื่อยืนทับมัน.
block.omega-mech-pad.description = ใช้เปลี่ยนร่างเป็นเป็นเม็คใช้ขีปนาวุธเกราะหนา.\nใช้โดยการกดเมื่อยืนทับมัน. block.omega-mech-pad.description = ใช้เปลี่ยนร่างเป็นเป็นเม็คใช้ขีปนาวุธเกราะหนา.\nใช้โดยการกดเมื่อยืนทับมัน.
block.javelin-ship-pad.description = ใช้เปลี่ยนร่างเป็นเป็นอินเทอร์เซ็ปเตอร์เร็วแบะเกราะบาง.\nใช้โดยการกดเมื่อยืนทับมัน. block.javelin-ship-pad.description = ใช้เปลี่ยนร่างเป็นเป็นอินเทอร์เซ็ปเตอร์เร็วแบะเกราะบาง.\nใช้โดยการกดเมื่อยืนทับมัน.
block.trident-ship-pad.description = ใช้เปลี่ยนร่างเป็นเป็นยานทิ้งระเบิดสนับสนุน.\nใช้โดยการกดเมื่อยืนทับมัน. block.trident-ship-pad.description = ใช้เปลี่ยนร่างเป็นเป็นยานทิ้งระเบิดสนับสนุน.\nใช้โดยการกดเมื่อยืนทับมัน.

View File

@@ -652,7 +652,6 @@ keybind.pick.name = Pick Block
keybind.break_block.name = Break Block keybind.break_block.name = Break Block
keybind.deselect.name = Eldeki yapiyi birak keybind.deselect.name = Eldeki yapiyi birak
keybind.shoot.name = Sik keybind.shoot.name = Sik
keybind.zoom_hold.name = Yaklasma basili tutmasi
keybind.zoom.name = Yaklas keybind.zoom.name = Yaklas
keybind.menu.name = Menu keybind.menu.name = Menu
keybind.pause.name = Durdur keybind.pause.name = Durdur

View File

@@ -652,7 +652,6 @@ keybind.pick.name = Blok Seç
keybind.break_block.name = Blok Kır keybind.break_block.name = Blok Kır
keybind.deselect.name = Seçimleri Kaldır keybind.deselect.name = Seçimleri Kaldır
keybind.shoot.name = Ateş Et keybind.shoot.name = Ateş Et
keybind.zoom_hold.name = Zumu Sabit Tutma
keybind.zoom.name = Zum keybind.zoom.name = Zum
keybind.menu.name = Menü keybind.menu.name = Menü
keybind.pause.name = Durdur keybind.pause.name = Durdur

View File

@@ -10,8 +10,9 @@ link.dev-builds.description = Нестабільні версії
link.trello.description = Офіційна дошка Trello для запланованих функцій link.trello.description = Офіційна дошка Trello для запланованих функцій
link.itch.io.description = Itch.io сторінка, на якій можна завантажити гру link.itch.io.description = Itch.io сторінка, на якій можна завантажити гру
link.google-play.description = Завантажити для Android з Google Play link.google-play.description = Завантажити для Android з Google Play
link.f-droid.description = Перелік каталогу F-Droid link.f-droid.description = Завантажити для Android з F-Droid
link.wiki.description = Офіційна Mindustry wiki link.wiki.description = Офіційна Mindustry wiki
link.feathub.description = Запропонувати нові функції
linkfail = Не вдалося відкрити посилання!\nURL-адреса скопійована в буфер обміну. linkfail = Не вдалося відкрити посилання!\nURL-адреса скопійована в буфер обміну.
screenshot = Зняток мапи збережено в {0} screenshot = Зняток мапи збережено в {0}
screenshot.invalid = Мапа занадто велика, тому, мабуть, не вистачає пам’яті для знятку мапи. screenshot.invalid = Мапа занадто велика, тому, мабуть, не вистачає пам’яті для знятку мапи.
@@ -27,6 +28,13 @@ load.system = Система
load.mod = Модифікації load.mod = Модифікації
load.scripts = Скрипти load.scripts = Скрипти
be.update = Доступна нова збірка Bleeding Edge:
be.update.confirm = Завантажити і перезавантажити зараз?
be.updating = Оновлення…
be.ignore = Ігнорувати
be.noupdates = Оновлень не знайдено.
be.check = Перевірити на наявність оновлень
schematic = Схема schematic = Схема
schematic.add = Зберегти схему… schematic.add = Зберегти схему…
schematics = Схеми schematics = Схеми
@@ -37,7 +45,7 @@ schematic.importfile = Імпортувати файл
schematic.browseworkshop = Переглянути в Майстерні schematic.browseworkshop = Переглянути в Майстерні
schematic.copy = Копіювати в буфер обміну schematic.copy = Копіювати в буфер обміну
schematic.copy.import = Імпортувати з клавіатури schematic.copy.import = Імпортувати з клавіатури
schematic.shareworkshop = Поширити в Майстерні schematic.shareworkshop = Поширити в Майстерню
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Відобразити схему schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Відобразити схему
schematic.saved = Схема збережена. schematic.saved = Схема збережена.
schematic.delete.confirm = Ця схема буде повністю випалена. schematic.delete.confirm = Ця схема буде повністю випалена.
@@ -67,7 +75,7 @@ customgame = Користувацька гра
newgame = Нова гра newgame = Нова гра
none = <нічого> none = <нічого>
minimap = Мінімапа minimap = Мінімапа
position = Позиція position = Місцерозташування
close = Закрити close = Закрити
website = Веб-сайт website = Веб-сайт
quit = Вихід quit = Вихід
@@ -97,22 +105,25 @@ mod.author = [LIGHT_GRAY]Автор:[] {0}
mods.alpha = [scarlet](Альфа) mods.alpha = [scarlet](Альфа)
mods = Модифікації mods = Модифікації
mods.none = [LIGHT_GRAY]Модифікацій не знайдено! mods.none = [LIGHT_GRAY]Модифікацій не знайдено!
mods.guide = Посібник зі створення модифицій mods.guide = Посібник з модифицій
mods.report = Повідомити про ваду mods.report = Повідомити про ваду
mods.openfolder = Відкрити теку модифікацій mods.openfolder = Відкрити теку модифікацій
mod.enabled = [lightgray]Увімкнено mod.enabled = [lightgray]Увімкнено
mod.disabled = [scarlet]Вимкнено mod.disabled = [scarlet]Вимкнено
mod.disable = Вимкнути mod.disable = Вимкн.
mod.delete.error = Неможливо видалити модифікацію. Файл, можливо, використовується. mod.delete.error = Неможливо видалити модифікацію. Файл, можливо, використовується.
mod.requiresversion = [scarlet]Необхідна версія гри: [accent]{0} mod.requiresversion = [scarlet]Необхідна мінімальна версія гри: [accent]{0}
mod.erroredcontent = [scarlet]Помилки при завантаженнні
mod.errors = Сталася помилка при завантаження змісту.
mod.noerrorplay = [scarlet]Ви маєте модифікації з помилками.[] Або вимкніть проблемні модифікації, або виправте їх.
mod.missingdependencies = [scarlet]Відсутні залежності: {0} mod.missingdependencies = [scarlet]Відсутні залежності: {0}
mod.nowdisabled = [scarlet]Модифікації «{0}» не вистачає залежних модифікацій:[accent] {1}\n[lightgray]Ці модифікації потрібно завантажити спочатку.\nЦя модифікація буде автоматично вимкнена. mod.nowdisabled = [scarlet]Модифікації «{0}» не вистачає залежних модифікацій:[accent] {1}\n[lightgray]Ці модифікації потрібно завантажити спочатку.\nЦя модифікація буде автоматично вимкнена.
mod.enable = Увімкнути mod.enable = Увімк.
mod.requiresrestart = А тепер гра закриється, щоб застосувати зміни модифікацій. mod.requiresrestart = А тепер гра закриється, щоб застосувати зміни модифікацій.
mod.reloadrequired = [scarlet]Потрібно перезавантаження mod.reloadrequired = [scarlet]Потрібно перезавантаження
mod.import = Імпортувати модифікацію mod.import = Імпортувати модифікацію
mod.import.github = Імпортувати модификацію з GitHub mod.import.github = Завантажити мод з GitHub
mod.item.remove =Цей предмет є частиною модифікації [accent] '«{0}»[]. Щоб видалити його, видаліть цю модифікацію. mod.item.remove = Цей предмет є частиною модифікації [accent] «{0}»[]. Щоб видалити його, видаліть цю модифікацію.
mod.remove.confirm = Цю модифікацію буде видалено. mod.remove.confirm = Цю модифікацію буде видалено.
mod.author = [LIGHT_GRAY]Автор:[] {0} mod.author = [LIGHT_GRAY]Автор:[] {0}
mod.missing = Це збереження містить модифікації, які ви нещодавно оновили або більше не встановлювали. Збереження може зіпсуватися. Ви впевнені, що хочете завантажити його?\n[lightgray]Модифікації:\n{0} mod.missing = Це збереження містить модифікації, які ви нещодавно оновили або більше не встановлювали. Збереження може зіпсуватися. Ви впевнені, що хочете завантажити його?\n[lightgray]Модифікації:\n{0}
@@ -133,7 +144,7 @@ players = Гравців: {0}
players.single = {0} гравець на сервері players.single = {0} гравець на сервері
server.closing = [accent]Закриття сервера… server.closing = [accent]Закриття сервера…
server.kicked.kick = Ви були вигнані з сервера! server.kicked.kick = Ви були вигнані з сервера!
server.kicked.whitelist = Ви не в білому спискі сервері. server.kicked.whitelist = Ви не в білому спискі сервера!
server.kicked.serverClose = Сервер закрито. server.kicked.serverClose = Сервер закрито.
server.kicked.vote = Вас було вигнано із сервера за допомогою голосування. Прощавайте. server.kicked.vote = Вас було вигнано із сервера за допомогою голосування. Прощавайте.
server.kicked.clientOutdated = Застарілий клієнт! Оновіть свою гру! server.kicked.clientOutdated = Застарілий клієнт! Оновіть свою гру!
@@ -147,6 +158,7 @@ server.kicked.nameEmpty = Ваше ім’я має містити принай
server.kicked.idInUse = Ви вже на цьому сервері! Підключення двох облікових записів не дозволяється. server.kicked.idInUse = Ви вже на цьому сервері! Підключення двох облікових записів не дозволяється.
server.kicked.customClient = Цей сервер не підтримує користувацькі збірки. Завантажте офіційну версію. server.kicked.customClient = Цей сервер не підтримує користувацькі збірки. Завантажте офіційну версію.
server.kicked.gameover = Гра завершена! server.kicked.gameover = Гра завершена!
server.kicked.serverRestarting = Сервер перезавантажується
server.versions = Ваша версія:[accent] {0}[]\nВерсія на сервері:[accent] {1}[] server.versions = Ваша версія:[accent] {0}[]\nВерсія на сервері:[accent] {1}[]
host.info = Кнопка [accent]Сервер[] розміщує сервер на порті [scarlet]6567[]. \nКористувачі, які знаходяться у тій же [lightgray]WiFi або локальній мережі[], повинні бачити ваш сервер у своєму списку серверів.\n\nЯкщо ви хочете, щоб люди могли приєднуватися з будь-якої точки через IP, то[accent] переадресація порту []обов’язкова.\n\n[lightgray]Примітка. Якщо у вас виникли проблеми з підключенням до вашої локальної гри, переконайтеся, що ви дозволили Mindustry доступ до вашої локальної мережі в налаштуваннях брандмауера. Зауважте, що публічні мережі іноді не дозволяють виявити сервер. host.info = Кнопка [accent]Сервер[] розміщує сервер на порті [scarlet]6567[]. \nКористувачі, які знаходяться у тій же [lightgray]WiFi або локальній мережі[], повинні бачити ваш сервер у своєму списку серверів.\n\nЯкщо ви хочете, щоб люди могли приєднуватися з будь-якої точки через IP, то[accent] переадресація порту []обов’язкова.\n\n[lightgray]Примітка. Якщо у вас виникли проблеми з підключенням до вашої локальної гри, переконайтеся, що ви дозволили Mindustry доступ до вашої локальної мережі в налаштуваннях брандмауера. Зауважте, що публічні мережі іноді не дозволяють виявити сервер.
join.info = Тут ви можете ввести [accent]IP сервера[] для підключення або знайти сервери у [accent]локальній мережі[] для підключення до них.\nПідтримується локальна мережа(LAN) і широкосмугова мережа(WAN).\n\n[lightgray] Примітка. Тут немає автоматичного глобального списку серверів; якщо ви хочете підключитися до когось через IP, вам доведеться попросити створювача сервера дати свій ip. join.info = Тут ви можете ввести [accent]IP сервера[] для підключення або знайти сервери у [accent]локальній мережі[] для підключення до них.\nПідтримується локальна мережа(LAN) і широкосмугова мережа(WAN).\n\n[lightgray] Примітка. Тут немає автоматичного глобального списку серверів; якщо ви хочете підключитися до когось через IP, вам доведеться попросити створювача сервера дати свій ip.
@@ -209,8 +221,8 @@ save.delete.confirm = Ви дійсно хочете видалити це зб
save.delete = Видалити save.delete = Видалити
save.export = Експортувати збереження save.export = Експортувати збереження
save.import.invalid = [accent]Це збереження недійсне! save.import.invalid = [accent]Це збереження недійсне!
save.import.fail = [crimson]Не вдалося імпортувати збереження: [accent]{0} save.import.fail = [crimson]Не вдалося завантажити збереження: [accent]{0}
save.export.fail = [crimson]Не вдалося експортувати збереження: [accent]{0} save.export.fail = [crimson]Не вдалося вивантажити збереження: [accent]{0}
save.import = Імпортувати збереження save.import = Імпортувати збереження
save.newslot = Ім’я збереження: save.newslot = Ім’я збереження:
save.rename = Перейменувати save.rename = Перейменувати
@@ -240,12 +252,12 @@ cancel = Скасувати
openlink = Відкрити посилання openlink = Відкрити посилання
copylink = Скопіювати посилання copylink = Скопіювати посилання
back = Назад back = Назад
data.export = Експортувати дані data.export = Вивантажити дані
data.import = Импортувати дані data.import = Завантажити дані
data.exported = Дані імпортовано. data.exported = Дані вивантажено.
data.invalid = Це не дійсні ігрові дані. data.invalid = Це не дійсні ігрові дані.
data.import.confirm = Імпорт зовнішніх даних перезапише[scarlet] ВСІ[] ваші поточні ігрові дані.\n[accent]Це неможливо скасувати![]\n\nЩойно дані імпортуються, гра негайно закриється. data.import.confirm = Вивантаження зовнішніх даних перезапише[scarlet] ВСІ[] ваші поточні ігрові дані.\n[accent]Це неможливо скасувати![]\n\nЩойно дані імпортуються, гра негайно закриється.
classic.export = Експортувати класичні дані classic.export = Вивантажити класичні дані
classic.export.text = Класичне (версія 3.5 збірка 40) збереження або мапа були знайдені. Ви хочете експортувати ці дані в домашню теку телефону, для використання у застосунку Mindustry Classic? classic.export.text = Класичне (версія 3.5 збірка 40) збереження або мапа були знайдені. Ви хочете експортувати ці дані в домашню теку телефону, для використання у застосунку Mindustry Classic?
quit.confirm = Ви впевнені, що хочете вийти? quit.confirm = Ви впевнені, що хочете вийти?
quit.confirm.tutorial = Ви впевнені, що хочете вийти з навчання? quit.confirm.tutorial = Ви впевнені, що хочете вийти з навчання?
@@ -317,7 +329,7 @@ waves.invalid = Недійсні хвилі у буфері обміну.
waves.copied = Хвилі скопійовані. waves.copied = Хвилі скопійовані.
waves.none = Вороги не були встановлені.\nЗазначимо, що пусті хвилі будуть автоматично замінені звичайною хвилею. waves.none = Вороги не були встановлені.\nЗазначимо, що пусті хвилі будуть автоматично замінені звичайною хвилею.
editor.default = [lightgray]<За замовчуванням> editor.default = [lightgray]<За замовчуванням>
details = Деталі… details = Подробиці…
edit = Редагувати… edit = Редагувати…
editor.name = Назва: editor.name = Назва:
editor.spawn = Створити бойову одиницю editor.spawn = Створити бойову одиницю
@@ -325,7 +337,7 @@ editor.removeunit = Видалити бойову одиницю
editor.teams = Команди editor.teams = Команди
editor.errorload = Помилка завантаження зображення:\n[accent] {0} editor.errorload = Помилка завантаження зображення:\n[accent] {0}
editor.errorsave = Помилка збереження зображення:\n[accent]{0} editor.errorsave = Помилка збереження зображення:\n[accent]{0}
editor.errorimage = Це зображення, а не мапа. Не змінюйте розширення, очікуючи, що це запрацює.\n\nЯкщо Ви хочете імпортувати застарілку мапу, то використовуйте кнопку «Імпортувати застаріле зображення» у редакторі. editor.errorimage = Це зображення, а не мапа. Не змінюйте розширення, очікуючи, що це запрацює.\n\nЯкщо ви хочете імпортувати застарілку мапу, то використовуйте кнопку «Імпортувати застаріле зображення» у редакторі.
editor.errorlegacy = Ця мапа занадто стара і використовує попередній формат мапи, який більше не підтримується. editor.errorlegacy = Ця мапа занадто стара і використовує попередній формат мапи, який більше не підтримується.
editor.errornot = Це не мапа. editor.errornot = Це не мапа.
editor.errorheader = Цей файл мапи недійсний або пошкоджений. editor.errorheader = Цей файл мапи недійсний або пошкоджений.
@@ -426,8 +438,8 @@ abandon = Покинути
abandon.text = Ця зона і всі її ресурси будуть втрачені. abandon.text = Ця зона і всі її ресурси будуть втрачені.
locked = Заблоковано locked = Заблоковано
complete = [lightgray]Досягнута: complete = [lightgray]Досягнута:
requirement.wave = Досягніть хвилі {0} у {1} requirement.wave = Досягніть хвилі {0} у зоні «{1}»
requirement.core = Знишьте вороже ядро у {0} requirement.core = Знищьте вороже ядро у {0}
requirement.unlock = Розблокуйте {0} requirement.unlock = Розблокуйте {0}
resume = Відновити зону:\n[lightgray]{0} resume = Відновити зону:\n[lightgray]{0}
bestwave = [lightgray]Найкраща хвиля: {0} bestwave = [lightgray]Найкраща хвиля: {0}
@@ -436,16 +448,16 @@ launch.title = Запуск вдалий
launch.next = [lightgray]наступна можливість на {0}-тій хвилі launch.next = [lightgray]наступна можливість на {0}-тій хвилі
launch.unable2 = [scarlet]ЗАПУСК неможливий.[] launch.unable2 = [scarlet]ЗАПУСК неможливий.[]
launch.confirm = Це видалить всі ресурси у Вашому ядрі.\nВи не зможете повернутися до цієї бази. launch.confirm = Це видалить всі ресурси у Вашому ядрі.\nВи не зможете повернутися до цієї бази.
launch.skip.confirm = Якщо Ви пропустите зараз, Ви не зможете не запускати до більш пізніх хвиль. launch.skip.confirm = Якщо ви пропустите зараз, Ви не зможете не запускати до більш пізніх хвиль.
uncover = Розкрити uncover = Розкрити
configure = Вивантажити конфігурацію configure = Вивантажити конфігурацію
bannedblocks = Заборонені блоки bannedblocks = Заборонені блоки
addall = Додати все addall = Додати все
configure.locked = [lightgray]Можливість розблокувати вивантаження ресурсів буде доступна на {0}-тій хвилі. configure.locked = {0}[lightgray]Тільки після цього можливість розблокувати вивантаження ресурсів буде доступна.
configure.invalid = Кількість повинна бути числом між 0 та {0}. configure.invalid = Кількість повинна бути числом між 0 та {0}.
zone.unlocked = Зона «[lightgray]{0}» тепер розблокована. zone.unlocked = Зона «[lightgray]{0}» тепер розблокована.
zone.requirement.complete = Ви досягли {0}-тої хвилі,\nВимоги до зони «{1}» виконані. zone.requirement.complete = Ви досягли {0}-тої хвилі. \nВимоги до зони «{1}» виконані.
zone.config.unlocked = Loadout unlocked:[lightgray]\n{0} zone.config.unlocked = Вивантаження розблоковано:[lightgray]\n{0}
zone.resources = Виявлені ресурси: zone.resources = Виявлені ресурси:
zone.objective = [lightgray]Мета: [accent]{0} zone.objective = [lightgray]Мета: [accent]{0}
zone.objective.survival = Вижити zone.objective.survival = Вижити
@@ -462,7 +474,7 @@ error.mapnotfound = Файл мапи не знайдено
error.io = Мережева помилка введення-виведення error.io = Мережева помилка введення-виведення
error.any = Невідома мережева помилка error.any = Невідома мережева помилка
error.bloom = Не вдалося ініціалізувати цвітіння.\nВаш пристрій, мабуть, не підтримує це. error.bloom = Не вдалося ініціалізувати цвітіння.\nВаш пристрій, мабуть, не підтримує це.
zone.groundZero.name = Нульова земля zone.groundZero.name = Відправний пункт
zone.desertWastes.name = Пустельні відходи zone.desertWastes.name = Пустельні відходи
zone.craters.name = Кратери zone.craters.name = Кратери
zone.frozenForest.name = Крижаний ліс zone.frozenForest.name = Крижаний ліс
@@ -493,7 +505,7 @@ zone.crags.description = <вставити опис тут>
settings.language = Мова settings.language = Мова
settings.data = Ігрові дані settings.data = Ігрові дані
settings.reset = Скинути за замовчуванням settings.reset = Скинути за замовчуванням
settings.rebind = Зміна settings.rebind = Змінити
settings.resetKey = Скинути settings.resetKey = Скинути
settings.controls = Керування settings.controls = Керування
settings.game = Гра settings.game = Гра
@@ -515,7 +527,7 @@ blocks.output = Вихід
blocks.booster = Прискорювач blocks.booster = Прискорювач
block.unknown = [lightgray]??? block.unknown = [lightgray]???
blocks.powercapacity = Місткість енергії blocks.powercapacity = Місткість енергії
blocks.powershot = Енергія/постріл blocks.powershot = Енергія за постріл
blocks.damage = Шкода blocks.damage = Шкода
blocks.targetsair = Повітряні мішені blocks.targetsair = Повітряні мішені
blocks.targetsground = Наземні мішені blocks.targetsground = Наземні мішені
@@ -527,7 +539,7 @@ blocks.liquidcapacity = Місткість рідини
blocks.powerrange = Діапазон передачі енергії blocks.powerrange = Діапазон передачі енергії
blocks.powerconnections = Максимальна кількість з’єднань blocks.powerconnections = Максимальна кількість з’єднань
blocks.poweruse = Енергії використовує blocks.poweruse = Енергії використовує
blocks.powerdamage = Енергія/урон blocks.powerdamage = Енергія/шкода
blocks.itemcapacity = Місткість предметів blocks.itemcapacity = Місткість предметів
blocks.basepowergeneration = Базова генерація енергії blocks.basepowergeneration = Базова генерація енергії
blocks.productiontime = Час виробництва blocks.productiontime = Час виробництва
@@ -622,6 +634,7 @@ setting.screenshake.name = Тряска екрану
setting.effects.name = Ефекти setting.effects.name = Ефекти
setting.destroyedblocks.name = Показувати зруйновані блоки setting.destroyedblocks.name = Показувати зруйновані блоки
setting.conveyorpathfinding.name = Пошук шляху для встановлення конвейерів setting.conveyorpathfinding.name = Пошук шляху для встановлення конвейерів
setting.coreselect.name = Дозволити схематичні ядра
setting.sensitivity.name = Чутливість контролера setting.sensitivity.name = Чутливість контролера
setting.saveinterval.name = Інтервал збереження setting.saveinterval.name = Інтервал збереження
setting.seconds = {0} с setting.seconds = {0} с
@@ -696,7 +709,6 @@ keybind.pick.name = Вибрати блок
keybind.break_block.name = Зламати блок keybind.break_block.name = Зламати блок
keybind.deselect.name = Скасувати keybind.deselect.name = Скасувати
keybind.shoot.name = Постріл keybind.shoot.name = Постріл
keybind.zoom_hold.name = Керування масштабом
keybind.zoom.name = Приблизити keybind.zoom.name = Приблизити
keybind.menu.name = Меню keybind.menu.name = Меню
keybind.pause.name = Пауза keybind.pause.name = Пауза
@@ -733,6 +745,7 @@ rules.enemyCheat = Нескінченні ресурси для ШІ
rules.unitdrops = Ресурс бойових одиниць rules.unitdrops = Ресурс бойових одиниць
rules.unitbuildspeedmultiplier = Множник швидкості виробництва бойових одиниць rules.unitbuildspeedmultiplier = Множник швидкості виробництва бойових одиниць
rules.unithealthmultiplier = Множник здоров’я бойових одиниць rules.unithealthmultiplier = Множник здоров’я бойових одиниць
rules.blockhealthmultiplier = Множник здоров’я блоків
rules.playerhealthmultiplier = Множник здоров’я гравця rules.playerhealthmultiplier = Множник здоров’я гравця
rules.playerdamagemultiplier = Множник шкоди гравця rules.playerdamagemultiplier = Множник шкоди гравця
rules.unitdamagemultiplier = Множник шкоди бойових одиниць rules.unitdamagemultiplier = Множник шкоди бойових одиниць
@@ -850,7 +863,7 @@ block.core-nucleus.name = Ядро «Атом»
block.deepwater.name = Глибоководдя block.deepwater.name = Глибоководдя
block.water.name = Вода block.water.name = Вода
block.tainted-water.name = Забруднена вода block.tainted-water.name = Забруднена вода
block.darksand-tainted-water.name = Темний пісок з забрудненою водою block.darksand-tainted-water.name = Темний пісок із забрудненою водою
block.tar.name = Дьоготь block.tar.name = Дьоготь
block.stone.name = Камінь block.stone.name = Камінь
block.sand.name = Пісок block.sand.name = Пісок
@@ -1034,30 +1047,29 @@ unit.eradicator.name = Випалювач
unit.lich.name = Лич unit.lich.name = Лич
unit.reaper.name = Жнець unit.reaper.name = Жнець
tutorial.next = [lightgray]<Натисніть для продовження> tutorial.next = [lightgray]<Натисніть для продовження>
tutorial.intro = Ви розпочали[scarlet] навчання по Mindustry.[]\nРозпочніть з[accent] видобування міді[]. Використовуйте [[WASD] для руху.\n[accent] Утримуйте [[Ctrl] під час прокрутки миші[] для приближення і віддалення. Наблизьтесь, а потім натисність на мідну жилу біля вашого ядра, щоб зробити це.\n\n[accent]{0}/{1} міді tutorial.intro = Ви розпочали[scarlet] навчання по Mindustry.[]\nРозпочніть з [accent]видобутку міді[]. Використовуйте [[WASD] для руху.\n[accent]Прокручуйте миш[] для приближення і віддалення. Наблизьтесь до мідної жили біля вашого ядра, а потім натисніть на неї, щоб розпочати видобуток.\n\n[accent]{0}/{1} міді
tutorial.intro.mobile = Ви розпочали[scarlet] навчання по Mindustry.[]\nПроведіть екраном, щоб рухатися.\n[accent] Зведіть або розведіть 2 пальця [] для приближення і віддалення відповідно.\nз[accent] видобування міді.[] Наблизьтесь, а потім натисність на мідну жилу біля вашого ядра, щоб зробити це.\n\n[accent]{0}/{1} міді tutorial.intro.mobile = Ви розпочали[scarlet] навчання по Mindustry.[]\nПроведіть екраном, щоб рухатися.\n[accent] Зведіть або розведіть 2 пальця [] для приближення і віддалення відповідно.\nз[accent] видобування міді.[] Наблизьтесь, а потім натисність на мідну жилу біля вашого ядра, щоб зробити це.\n\n[accent]{0}/{1} міді
tutorial.drill = Добування вручну неефективне.\n[accent]Бури []можуть добувати автоматично.\nНатисніть на вкладку свердла знизу зправа.\nВиберіть[accent] механічний бур[]. Розмістіть його на мідній жилі натисканням.\nВи також можете вибрати бур, натиснувши [accent][[2][], а потім натиснути [accent][[1][] швидко, незалежно від того, яка вкладка відкрита.\n[accent]Натисніть ПКМ[], щоб зупинити будування.tutorial.drill.mobile = Добування вручну неефективне.\n[accent]Бури []можуть добувати автоматично.\nНатисність на вкладку сведла знизу зправа.\nВиберіть[accent] механічний бур[]. Розмістіть його на мідній жилі натисканням, потім натисність на [accent] галочку[] нижче, щоб підтвердити розміщення .\nНатисніть[accent] клавішу X[], щоб скасувати розміщення. tutorial.drill = Добування вручну не є ефективним.\n[accent]Бури []можуть добувати автоматично.\nНатисніть на вкладку із зображенням свердла знизу праворуч.\nВиберіть[accent] механічний бур[]. Розмістіть його на мідній жилі натисканням.\nВи також можете вибрати бур, натиснувши [accent][[2][], а потім швидко натиснути [accent][[1][], незалежно від того, яка вкладка відкрита.\n[accent]Натисніть ПКМ[], щоб зупинити будування.
tutorial.drill.mobile = Добування вручну неефективне.\n[accent]Бури []можуть добувати автоматично.\nНатисність на вкладку сведла знизу зправа.\nВиберіть[accent] механічний бур[]. Розмістіть його на мідній жилі натисканням, потім натисність на [accent] галочку[] нижче, щоб підтвердити розміщення.\nPress the[accent] X button[] to cancel placement. tutorial.drill.mobile = Добування вручну неефективне.\n[accent]Бури []можуть добувати автоматично.\nНатисність на вкладку із зображенням сведла знизу зправа.\nВиберіть[accent] механічний бур[]. Розмістіть його на мідній жилі натисканням, потім натисність на [accent]галочку[] нижче, щоб підтвердити розміщення .\nНатисніть [accent]кнопку X[], щоб скасувати розміщення.
tutorial.blockinfo = Кожен блок має різні характеристики. Кожний бур може видобувати тільки певні руди.\nЩоб переглянути інформацію та характеристики блока,[accent] натисність на кнопку «?», коли Ви вибрали блок у меню будування.[]\n\n[accent]Перегляньте характеристику Механічного бура прямо зараз.[] tutorial.blockinfo = Кожен блок має різні характеристики. Кожний бур може видобувати тільки певні руди.\nЩоб переглянути інформацію та характеристики блока,[accent] натисність на кнопку «?», коли ви вибрали блок у меню будування.[]\n\n[accent]Перегляньте характеристику Механічного бура прямо зараз.[]
tutorial.conveyor = [accent]Конвеєри[] використовуються для транспортування предметів до ядра.\nЗробіть лінію конвеєрів від бура до ядра.\n[accent]Утримуйте миш, щоб розмістити у лінію.[]\nУтримуйте[accent] CTRL[] під час вибору лінії для розміщення по діагоналі.\n\n[accent]{0}/{1} конвеєрів, які розміщені в лінію\n[accent]0/1 предмет доставлено tutorial.conveyor = [accent]Конвеєри[] використовуються для транспортування предметів до ядра.\nЗробіть лінію конвеєрів від бура до ядра.\n[accent]Утримуйте миш, щоб розмістити у лінію.[]\nУтримуйте[accent] CTRL[] під час вибору лінії для розміщення по діагоналі.\\nПрокручуйте, щоб обертати блоки до їх установлення.\n[accent]Розмістіть 2 конвеєри у лінію, а потім доставте предмет в ядро.tutorial.conveyor.mobile = [accent]Конвеєри[] використовується для транспортування предметів до ядра.\nЗробіть лінію конвеєрів від бура до ядра.\n[accent] Розмістить у лінію, утримуючи палець кілька секунд[] і тягніть у напрямку, який Ви вибрали.\nВикористовуйте колесо прокрутки, щоб обертати блоки перед їх розміщенням\n[accent]{0}/{1} конвеєрів, які розміщені в лінію\n[accent]0/1 предмет доставлено
tutorial.conveyor.mobile = [accent]Конвеєри[] використовується для транспортування предметів до ядра.\nЗробіть лінію конвеєрів від бура до ядра.\n[accent] Розмістить у лінію, утримуючи палець кілька секунд[] і тягніть у напрямку, який Ви вибрали.\nВикористовуйте колесо прокрутки, щоб обертати блоки перед їх розміщенням\n[accent]{0}/{1} конвеєрів, які розміщені в лінію\n[accent]0/1 предмет доставлено tutorial.turret = Оборонні споруди повинні бути побудовані для відбиття[lightgray] ворогів[].\nПобудуйте[accent] башту «Подвійна»[] біля вашої бази.
tutorial.turret = Оборонні споруди повинні бути побудовані для відбиття[lightgray] ворогів[].\nПобудуйте[accent] башточку «Подвійна»[] біля вашої бази.
tutorial.drillturret = «Подвійна» потребує [accent]мідні боєприпаси[] для стрільби.\nРозмістіть бур біля башточки\nПроведіть конвеєри до башточки, щоб заповнити її боєприпасами.\n\n[accent]Доставлено боєприпасів: 0/1 tutorial.drillturret = «Подвійна» потребує [accent]мідні боєприпаси[] для стрільби.\nРозмістіть бур біля башточки\nПроведіть конвеєри до башточки, щоб заповнити її боєприпасами.\n\n[accent]Доставлено боєприпасів: 0/1
tutorial.pause = Під час бою ви можете[accent] поставити на павзу гру.[]\nВи можете зробити чергу на будування під час паузи.\n\n[accent]Натисність пробіл для павзи.tutorial.launch tutorial.pause = Під час бою ви можете[accent] поставити на павзу гру.[]\nВи можете зробити чергу на будування під час паузи.\n\n[accent]Натисність пробіл для павзи.
tutorial.pause.mobile = Під час бою ви можете[accent] поставити на павзу гру.[]\nВи можете зробити чергу на будування під час паузи.\n\n[accent]атисніть кнопку зліва вгорі для павзи. tutorial.pause.mobile = Під час бою ви можете[accent] поставити на павзу гру.[]\nВи можете зробити чергу на будування під час паузи.\n\n[accent]Натисніть кнопку вгорі ліворуч для павзи.
tutorial.unpause = Тепер натисність пробіл, щоб зняти павзу. tutorial.unpause = Тепер натисність пробіл, щоб зняти павзу.
tutorial.unpause.mobile = Тепер натисність туди ще раз, щоб зняти павзу. tutorial.unpause.mobile = Тепер натисність туди ще раз, щоб зняти павзу.
tutorial.breaking = Блоки часто повинні бути знищені.\n[accent]Утримуючи ПКМ[] Ви знищите всі виділені блоки.[]\n\n[accent]Необхідно знищити всі стіни з металобрухту ліворуч від вашого ядра використовуючи видалення у зоні. tutorial.breaking = Блоки часто повинні бути знищені.\n[accent]Утримуючи ПКМ[] ви знищите всі виділені блоки.[]\n\n[accent]Необхідно знищити всі стіни з металобрухту ліворуч від вашого ядра використовуючи видалення у зоні.
tutorial.breaking.mobile = Блоки часто повинні бути знищені.\n[accent]Виберіть режим руйнування[], потім натисніть на блок, щоб зламати його.\nЗнищіть область, утримуючи палець протягом декількох секунд [] і потягнувши в потрібному напрямку.\nНатисніть кнопку галочки, щоб підтвердити руйнування.\n\n[accent]Необхідно знищити всі стіни з металобрухту ліворуч від вашого ядра використовуючи видалення у зоні. tutorial.breaking.mobile = Блоки часто повинні бути знищені.\n[accent]Виберіть режим руйнування[], потім натисніть на блок, щоб зламати його.\nЗнищіть область, утримуючи палець протягом декількох секунд [] і потягнувши в потрібному напрямку.\nНатисніть кнопку галочки, щоб підтвердити руйнування.\n\n[accent]Необхідно знищити всі стіни з металобрухту ліворуч від вашого ядра використовуючи видалення у зоні.
tutorial.withdraw = У деяких ситуаціях потрібно брати предмети безпосередньо з блоків.\nЩоб зробити це, [accent]натисність на блок[] з предметами на ньому, і потім [accent]натисніть на предмет[] в інвентарі.\nМожна вилучити кілька предметів [accent]натискаючи та утримуючи[].\n\n[accent]Вилучіть трохи міді з ядра.[] tutorial.withdraw = У деяких ситуаціях потрібно брати предмети безпосередньо з блоків.\nЩоб зробити це, [accent]натисність на блок[] з предметами, і потім [accent]натисніть на предмет[] в інвентарі.\nМожна вилучити кілька предметів [accent]натискаючи та утримуючи[].\n\n[accent]Вилучіть трохи міді з ядра.[]
tutorial.deposit = Покладіть предмети в блоки, перетягнувши з вашого корабля в потрібний блок.\n\n[accent]Покладіть мідь назад у ядро.[] tutorial.deposit = Покладіть предмети в блоки, перетягнувши з вашого корабля в потрібний блок.\n\n[accent]Покладіть мідь назад у ядро.[]
tutorial.waves = [lightgray] Ворог[] з’явився.\n\nЗахистіть ядро від двух хвиль.[accent] Натисніть[], щоб стріляти.\nСтворіть більше башточок і бурів. Добудьте більше міді. tutorial.waves = [lightgray] Ворог[] з’явився.\n\nЗахистіть ядро від двух хвиль.[accent] Натисніть ЛКМ[], щоб стріляти.\nСтворіть більше башт і бурів. Добудьте більше міді.
tutorial.waves.mobile = [lightgray] Ворог[] з’явився.\n\nЗахистіть ядро від двух хвиль. Ваш корабель буде автоматично атакувати ворогів.\nСтворіть більше башточок і бурів. Добудьте більше міді. tutorial.waves.mobile = [lightgray] Ворог[] з’явився.\n\nЗахистіть ядро від двух хвиль. Ваш корабель буде автоматично атакувати ворогів.\nСтворіть більше башт і бурів. Добудьте більше міді.
tutorial.launch = Як тільки ви досягнете певної хвилі, Ви зможете[accent] запустити ядро[], залишивши захисні сили позаду та [accent]отримати всі ресурси у вашому ядрі.[]\nЦі отримані ресурси можуть бути використані для дослідження нових технологій.\n\n[accent]Натисніть кнопку запуску. tutorial.launch = Як тільки ви досягнете певної хвилі, ви зможете[accent] запустити ядро[], залишивши захисні сили позаду та [accent]отримати всі ресурси у вашому ядрі.[]\nЦі отримані ресурси можуть бути використані для дослідження нових технологій.\n\n[accent]Натисніть кнопку запуску.
item.copper.description = Найбільш базовий будівельний матеріал. Широко використовується у всіх типах блоків. item.copper.description = Найбільш базовий будівельний матеріал. Широко використовується у всіх типах блоків.
item.lead.description = Основний стартовий матеріал. Широко застосовується в електроніці та транспортуванні рідин. item.lead.description = Основний стартовий матеріал. Широко застосовується в електроніці та транспортуванні рідин.
item.metaglass.description = Супер жорсткий склад скла. Широко застосовується для розподілу та зберігання рідини. item.metaglass.description = Супер жорсткий склад скла. Широко застосовується для розподілу та зберігання рідини.
item.graphite.description = Мінералізований вуглець, що використовується для боєприпасів та електроізоляції. item.graphite.description = Мінералізований вуглець, що використовується для боєприпасів та як компонент.
item.sand.description = Поширений матеріал, який широко використовується при виплавці, як при сплавленні, так і в якості відходів. item.sand.description = Поширений матеріал, який широко використовується при виплавці, як при сплавленні, так і в якості відходів.
item.coal.description = Окам’янілі рослинні речовини, що утворюються задовго до посіву. Широко використовується для виробництва пального та ресурсів. item.coal.description = Окам’янілі рослинні речовини, що утворюються задовго до посіву. Широко використовується для виробництва пального та ресурсів.
item.titanium.description = Рідкісний надлегкий метал, який широко використовується для транспортування рідини, бурів і літаків. item.titanium.description = Рідкісний надлегкий метал, який широко використовується для транспортування рідини, бурів і літаків.
@@ -1075,11 +1087,11 @@ liquid.slag.description = Різні види розплавленого мет
liquid.oil.description = Рідина, яка використовується у виробництві сучасних матеріалів. Може бути перетворена в вугілля в якості палива або використана як куля. liquid.oil.description = Рідина, яка використовується у виробництві сучасних матеріалів. Може бути перетворена в вугілля в якості палива або використана як куля.
liquid.cryofluid.description = Інертна, не роз’їдаюча рідина, створена з води та титану. Володіє надзвичайно високою пропускною спроможністю. Широко використовується в якості охолоджуючої рідини. liquid.cryofluid.description = Інертна, не роз’їдаюча рідина, створена з води та титану. Володіє надзвичайно високою пропускною спроможністю. Широко використовується в якості охолоджуючої рідини.
mech.alpha-mech.description = Стандартний керований мех. Заснований на бойовій одиниці «Кинджал», з оновленими бронею та можливостями будування. Наносить більше шкоди, ніж «Дротик». mech.alpha-mech.description = Стандартний керований мех. Заснований на бойовій одиниці «Кинджал», з оновленими бронею та можливостями будування. Наносить більше шкоди, ніж «Дротик».
mech.delta-mech.description = Швидкий, легкоброньований мех, зроблений для тактики «атакуй і біжи». Наносить мало шкоди будівлям, але може дуже швидко вбити великі групи підрозділів противника своєю дуговою блискавкою. mech.delta-mech.description = Швидкий, легкоброньований мех, зроблений для тактики «атакуй і втікай». Наносить мало шкоди будівлям, але може дуже швидко вбити великі групи підрозділів противника своєю дуговою блискавкою.
mech.tau-mech.description = Мех підтримки. Ремонтує союзні блоки, стріляючи по них. Може зцілювати союзників у радіусі його ремонтної здатності. mech.tau-mech.description = Мех підтримки. Ремонтує союзні блоки, стріляючи по них. Може зцілювати союзників у радіусі його ремонтної здатності.
mech.omega-mech.description = Об’ємний і добре броньований мех, зроблений для фронтових штурмів. Його броня може перекрити до 90% пошкоджень, що надходять. mech.omega-mech.description = Об’ємний і добре броньований мех, зроблений для фронтових штурмів. Його броня може перекрити до 90% пошкоджень, що надходять.
mech.dart-ship.description = Стандартний корабель управління. Швидко видобуває ресурси. Достатньо швидкий і легкий, але має мало наступальних можливостей. mech.dart-ship.description = Стандартний корабель управління. Швидко видобуває ресурси. Достатньо швидкий і легкий, але має мало наступальних можливостей.
mech.javelin-ship.description = Корабель для стратегії атакуй та біжи». Хоча спочатку він повільний, потім вже може розганятися до великих швидкостей і літати над ворожими форпостами, завдаючи великої кількості шкоди своїми блискавками та ракетами. mech.javelin-ship.description = Корабель, який використовується для стратегії «атакуй та втікай». Хоча спочатку він повільний, потім вже може розганятися до великих швидкостей і літати над ворожими форпостами, завдаючи великої кількості шкоди своїми блискавками та ракетами.
mech.trident-ship.description = Важкий бомбардувальник, побудований для будування та знищення ворожих укріплень. Дуже добре броньований. mech.trident-ship.description = Важкий бомбардувальник, побудований для будування та знищення ворожих укріплень. Дуже добре броньований.
mech.glaive-ship.description = Великий, добре броньований бойовий корабель. Оснащений запальним ретранслятором. Високо маневрений. mech.glaive-ship.description = Великий, добре броньований бойовий корабель. Оснащений запальним ретранслятором. Високо маневрений.
unit.draug.description = Примітивний дрон, який добуває ресурси. Дешевий для виробництва. Автоматично видобуває мідь і свинець поблизу. Доставляє видобуті ресурси до найближчого ядра. unit.draug.description = Примітивний дрон, який добуває ресурси. Дешевий для виробництва. Автоматично видобуває мідь і свинець поблизу. Доставляє видобуті ресурси до найближчого ядра.
@@ -1090,7 +1102,7 @@ unit.crawler.description = Наземна одиниця, що складаєт
unit.titan.description = Вдосконалений броньований наземний блок. Нападає як на наземні, так і повітряні цілі. Оснащений двома мініатюрними вогнеметами класу Випалювач. unit.titan.description = Вдосконалений броньований наземний блок. Нападає як на наземні, так і повітряні цілі. Оснащений двома мініатюрними вогнеметами класу Випалювач.
unit.fortress.description = Артилерійний мех. Оснащений двома модифікованими гарматами типу «Град» для дальнього нападу на ворожі структури та підрозділи. unit.fortress.description = Артилерійний мех. Оснащений двома модифікованими гарматами типу «Град» для дальнього нападу на ворожі структури та підрозділи.
unit.eruptor.description = Важкий мех, призначеней для знесення конструкцій. Вистрілює потік шлаків у ворожі укріплення, розплавляючи їх і підпалюючи летючі речовини. unit.eruptor.description = Важкий мех, призначеней для знесення конструкцій. Вистрілює потік шлаків у ворожі укріплення, розплавляючи їх і підпалюючи летючі речовини.
unit.wraith.description = Швидкий перехоплювач, який використовується для тактики «атакуй і біжи». Пріоритет — енергетичні генератори. unit.wraith.description = Швидкий перехоплювач, який використовується для тактики «атакуй і втікай». Пріоритет — генератори енергії.
unit.ghoul.description = Важкий килимовий бомбардувальник. Пробиває ворожі структури, орієнтуючись на віжливу інфраструктуру. unit.ghoul.description = Важкий килимовий бомбардувальник. Пробиває ворожі структури, орієнтуючись на віжливу інфраструктуру.
unit.revenant.description = Важкий ракетний масив. unit.revenant.description = Важкий ракетний масив.
block.message.description = Зберігає повідомлення. Використовується для комунікаціх між союзниками. block.message.description = Зберігає повідомлення. Використовується для комунікаціх між союзниками.
@@ -1104,19 +1116,19 @@ block.alloy-smelter.description = Поєднує титан, свинець, к
block.cryofluidmixer.description = Змішує воду і дрібний порошок титану титану в кріогенну рідину. Основне використання у торієвому реактору. block.cryofluidmixer.description = Змішує воду і дрібний порошок титану титану в кріогенну рідину. Основне використання у торієвому реактору.
block.blast-mixer.description = Подрібнює і змішує скупчення спор з піратитом для отримання вибухової суміші. block.blast-mixer.description = Подрібнює і змішує скупчення спор з піратитом для отримання вибухової суміші.
block.pyratite-mixer.description = Змішує вугілля, свинець та пісок у легкозаймистий піратит. block.pyratite-mixer.description = Змішує вугілля, свинець та пісок у легкозаймистий піратит.
block.melter.description = Розплавляє брухт у шлак для подальшої переробки або використання у башточках «Хвиля». block.melter.description = Розплавляє брухт у шлак для подальшої переробки або використання у баштах «Хвиля».
block.separator.description = Відокремлює шлак на його мінеральні компоненти. Виводить охолоджений результат. block.separator.description = Відокремлює шлак на його мінеральні компоненти. Виводить охолоджений результат.
block.spore-press.description = Стискає спорові стручки під сильним тиском для синтезу нафти block.spore-press.description = Стискає спорові стручки під сильним тиском для синтезу нафти.
block.pulverizer.description = Подрібнює брухт дрібного піску. block.pulverizer.description = Подрібнює брухт дрібного піску.
block.coal-centrifuge.description = Нафта перетворюється у шматки вугілля. block.coal-centrifuge.description = Нафта перетворюється у шматки вугілля.
block.incinerator.description = Випаровує будь-який зайвий предмет або рідину, які він отримує. block.incinerator.description = Випаровує будь-який зайвий предмет або рідину, які він отримує.
block.power-void.description = Знищує будь-яку енергію, до якої він під’єднаний. Тільки пісочниця block.power-void.description = Знищує будь-яку енергію, до якої він під’єднаний. Тільки пісочниця
block.power-source.description = Нескінченно виводить енергію. Тільки пісочниця block.power-source.description = Нескінченно виводить енергію.
block.item-source.description = Нескінченно виводить предмети. Тільки пісочниця block.item-source.description = Нескінченно виводить предмети.
block.item-void.description = Знищує будь-які предмети. Тільки пісочниця block.item-void.description = Знищує будь-які предмети.
block.liquid-source.description = Нескінченно виводить рідини. Тільки пісочниця block.liquid-source.description = Нескінченно виводить рідини.
block.copper-wall.description = Дешевий захисний блок.\nКорисна для захисту ядра та башточок у перші кілька хвиль. block.copper-wall.description = Дешевий захисний блок.\nКорисна для захисту ядра та башто у перші кілька хвиль.
block.copper-wall-large.description = Дешевий захисний блок.\nКорисна для захисту ядра та башточок у перші кілька хвиль.\nОхоплює кілька плиток. block.copper-wall-large.description = Дешевий захисний блок.\nКорисна для захисту ядра та башт у перші кілька хвиль.\nОхоплює кілька плиток.
block.titanium-wall.description = Відносно сильний захисний блок.\nЗабезпечує помірний захист від ворогів. block.titanium-wall.description = Відносно сильний захисний блок.\nЗабезпечує помірний захист від ворогів.
block.titanium-wall-large.description = Відносно сильний захисний блок.\nЗабезпечує помірний захист від ворогів.\nОхоплює кілька плиток. block.titanium-wall-large.description = Відносно сильний захисний блок.\nЗабезпечує помірний захист від ворогів.\nОхоплює кілька плиток.
block.plastanium-wall.description = Особливий тип стіни, який поглинає електричні дуги і блокує автоматичні з'єднання енергетичних вузлів. block.plastanium-wall.description = Особливий тип стіни, який поглинає електричні дуги і блокує автоматичні з'єднання енергетичних вузлів.

View File

@@ -699,7 +699,6 @@ keybind.pick.name = 选择方块
keybind.break_block.name = 破坏方块 keybind.break_block.name = 破坏方块
keybind.deselect.name = 取消选择 keybind.deselect.name = 取消选择
keybind.shoot.name = 射击 keybind.shoot.name = 射击
keybind.zoom_hold.name = 按住调整缩放
keybind.zoom.name = 缩放 keybind.zoom.name = 缩放
keybind.menu.name = 菜单 keybind.menu.name = 菜单
keybind.pause.name = 暂停 keybind.pause.name = 暂停

View File

@@ -12,6 +12,7 @@ link.itch.io.description = itch.io 電腦版下載網頁
link.google-play.description = Google Play 商店頁面 link.google-play.description = Google Play 商店頁面
link.f-droid.description = F-Droid 目錄頁面 link.f-droid.description = F-Droid 目錄頁面
link.wiki.description = 官方 Mindustry 維基 link.wiki.description = 官方 Mindustry 維基
link.feathub.description = 建議新功能
linkfail = 無法打開連結!\n我們已將該網址複製到您的剪貼簿。 linkfail = 無法打開連結!\n我們已將該網址複製到您的剪貼簿。
screenshot = 截圖保存到{0} screenshot = 截圖保存到{0}
screenshot.invalid = 地圖太大了,可能沒有足夠的內存用於截圖。 screenshot.invalid = 地圖太大了,可能沒有足夠的內存用於截圖。
@@ -88,6 +89,7 @@ uploadingpreviewfile = 上傳預覽文件
committingchanges = 提交變更 committingchanges = 提交變更
done = 完成 done = 完成
feature.unsupported = 您的設備不支持此功能。 feature.unsupported = 您的設備不支持此功能。
mods.alphainfo = 請記住模組仍處於Alpha狀態[scarlet]可能會有很多BUG[].\n向Mindustry GitHub或Discord報告發現的任何問題。 mods.alphainfo = 請記住模組仍處於Alpha狀態[scarlet]可能會有很多BUG[].\n向Mindustry GitHub或Discord報告發現的任何問題。
mods.alpha = [accent](Alpha) mods.alpha = [accent](Alpha)
mods = 模組 mods = 模組
@@ -97,12 +99,15 @@ mods.report = 回報錯誤
mods.openfolder = 開啟模組資料夾 mods.openfolder = 開啟模組資料夾
mod.enabled = [lightgray]已啟用 mod.enabled = [lightgray]已啟用
mod.disabled = [scarlet]已禁用 mod.disabled = [scarlet]已禁用
mod.enable = 啟用
mod.disable = 禁用 mod.disable = 禁用
mod.delete.error = 無法刪除模組,檔案可能在使用中。 mod.delete.error = 無法刪除模組,檔案可能在使用中。
mod.requiresversion = [scarlet]遊戲版本要求:[accent]{0} mod.requiresversion = [scarlet]最低遊戲版本要求:[accent]{0}
mod.missingdependencies = [scarlet]缺少依賴項目: {0} mod.missingdependencies = [scarlet]缺少必須項目: {0}
mod.erroredcontent = [scarlet]內容錯誤
mod.errors = 載入內容時發生錯誤
mod.noerrorplay = [scarlet]你使用了有錯誤的模組。[] 遊戲前請先禁用相關模組或修正錯誤。
mod.nowdisabled = [scarlet]「{0}」模組缺少必須項目:[accent] {1}\n[lightgray]必須先下載這些模組。\n此模組將被自動禁用。 mod.nowdisabled = [scarlet]「{0}」模組缺少必須項目:[accent] {1}\n[lightgray]必須先下載這些模組。\n此模組將被自動禁用。
mod.enable = 啟用
mod.requiresrestart = 遊戲將立即關閉以套用模組變更。 mod.requiresrestart = 遊戲將立即關閉以套用模組變更。
mod.reloadrequired = [scarlet]需要重新載入 mod.reloadrequired = [scarlet]需要重新載入
mod.import = 匯入模組 mod.import = 匯入模組
@@ -113,6 +118,7 @@ mod.author = [lightgray]作者:[] {0}
mod.missing = 此存檔含有您最近更新或不再安裝的模組。可能會發生存檔損毀。您確定要載入嗎?\n[lightgray]模組:\n{0} mod.missing = 此存檔含有您最近更新或不再安裝的模組。可能會發生存檔損毀。您確定要載入嗎?\n[lightgray]模組:\n{0}
mod.preview.missing = 在工作坊發佈這個模組前,您必須添加預覽圖。\n在該模組的資料夾中放置一個名為[accent] preview.png[]的圖片並重試。 mod.preview.missing = 在工作坊發佈這個模組前,您必須添加預覽圖。\n在該模組的資料夾中放置一個名為[accent] preview.png[]的圖片並重試。
mod.folder.missing = 只有資料夾形式的模組可以在工作坊上發布。\n要將模組轉換為資料夾只需將其文件解壓縮到資料夾並刪除舊的.zip檔然後重新啟動遊戲或重新載入模組。 mod.folder.missing = 只有資料夾形式的模組可以在工作坊上發布。\n要將模組轉換為資料夾只需將其文件解壓縮到資料夾並刪除舊的.zip檔然後重新啟動遊戲或重新載入模組。
mod.scripts.unsupported = 你的裝置不支援模組指令檔。部分模組將無法正常運作。
about.button = 關於 about.button = 關於
name = 名稱: name = 名稱:
@@ -133,7 +139,7 @@ server.kicked.serverClose = 伺服器已關閉。
server.kicked.vote = 您已被投票踢出伺服器,再見。 server.kicked.vote = 您已被投票踢出伺服器,再見。
server.kicked.clientOutdated = 客戶端版本過舊!請更新遊戲! server.kicked.clientOutdated = 客戶端版本過舊!請更新遊戲!
server.kicked.serverOutdated = 伺服器版本過舊!請聯絡伺服主更新伺服器! server.kicked.serverOutdated = 伺服器版本過舊!請聯絡伺服主更新伺服器!
server.kicked.banned = 您已經這個伺服器被封禁。 server.kicked.banned = 您已經這個伺服器被封禁。
server.kicked.typeMismatch = 該伺服器與您的版本不相容。 server.kicked.typeMismatch = 該伺服器與您的版本不相容。
server.kicked.playerLimit = 該伺服器已滿。請等待一個空位置。 server.kicked.playerLimit = 該伺服器已滿。請等待一個空位置。
server.kicked.recentKick = 您最近曾被踢出伺服器。\n請稍後再進行連線。 server.kicked.recentKick = 您最近曾被踢出伺服器。\n請稍後再進行連線。
@@ -178,7 +184,7 @@ confirmban = 您確定要封禁該玩家嗎?
confirmkick = 您確定要踢出該玩家嗎? confirmkick = 您確定要踢出該玩家嗎?
confirmvotekick = 您確定要投票剔除該名玩家嗎? confirmvotekick = 您確定要投票剔除該名玩家嗎?
confirmunban = 您確定要解除封禁該玩家嗎? confirmunban = 您確定要解除封禁該玩家嗎?
confirmadmin = 您確定要升這個玩家為管理員嗎? confirmadmin = 您確定要升這個玩家為管理員嗎?
confirmunadmin = 您確定要解除這個玩家的管理員嗎? confirmunadmin = 您確定要解除這個玩家的管理員嗎?
joingame.title = 加入遊戲 joingame.title = 加入遊戲
joingame.ip = IP位址 joingame.ip = IP位址
@@ -253,7 +259,7 @@ pausebuilding = [accent][[{0}][]暫停建造
resumebuilding = [scarlet][[{0}][]恢復建造 resumebuilding = [scarlet][[{0}][]恢復建造
wave = [accent]第{0}波 wave = [accent]第{0}波
wave.waiting = [lightgray]將於{0}秒後抵達 wave.waiting = [lightgray]將於{0}秒後抵達
wave.waveInProgress = [lightgray]波正在進行中 wave.waveInProgress = [lightgray]波進行中
waiting = [lightgray]等待中... waiting = [lightgray]等待中...
waiting.players = 等待玩家中... waiting.players = 等待玩家中...
wave.enemies = [lightgray]剩下{0}個敵人 wave.enemies = [lightgray]剩下{0}個敵人
@@ -265,9 +271,9 @@ custom = 自訂
builtin = 内建 builtin = 内建
map.delete.confirm = 確認要刪除地圖嗎?此操作無法撤回! map.delete.confirm = 確認要刪除地圖嗎?此操作無法撤回!
map.random = [accent]隨機地圖 map.random = [accent]隨機地圖
map.nospawn = 這個地圖沒有核心!請在編輯器中添加一個[ROYAL]藍色[]的核心。 map.nospawn = 這個地圖沒有核心!請在編輯器中添加一個[accent]橘色[]的核心。
map.nospawn.pvp = 這個地圖沒有核心讓敵人重生!請在編輯器中添加一個[SCARLET]色[]的核心。 map.nospawn.pvp = 這個地圖沒有敵對核心讓玩家重生!請在編輯器中添加一個[SCARLET]不是橘色[]的核心。
map.nospawn.attack = 這個地圖沒有敵人核心可以攻擊!請在編輯器中添加一個[SCARLET]紅色[]的核心。 map.nospawn.attack = 這個地圖沒有敵人核心可以攻擊!請在編輯器中添加一個[SCARLET]紅色[]的核心。
map.invalid = 地圖載入錯誤:地圖可能已經損壞。 map.invalid = 地圖載入錯誤:地圖可能已經損壞。
workshop.update = 更新項目 workshop.update = 更新項目
workshop.error = 提取工作坊詳細信息時出錯: {0} workshop.error = 提取工作坊詳細信息時出錯: {0}
@@ -281,6 +287,7 @@ publishing = [accent]發佈中...
publish.confirm = 您確定要發布嗎?\n\n[lightgray]首先確定您同意Workshop EULA否則您的項目將不會顯示 publish.confirm = 您確定要發布嗎?\n\n[lightgray]首先確定您同意Workshop EULA否則您的項目將不會顯示
publish.error = 發佈項目時出錯: {0} publish.error = 發佈項目時出錯: {0}
steam.error = Steam 服務初始化失敗.\n錯誤 {0} steam.error = Steam 服務初始化失敗.\n錯誤 {0}
editor.brush = 粉刷 editor.brush = 粉刷
editor.openin = 在編輯器中開啟 editor.openin = 在編輯器中開啟
editor.oregen = 礦石生成 editor.oregen = 礦石生成
@@ -298,7 +305,7 @@ editor.newmap = 新地圖
workshop = 工作坊 workshop = 工作坊
waves.title = 波次 waves.title = 波次
waves.remove = 移除 waves.remove = 移除
waves.never = 從來沒有 waves.never = 永遠
waves.every = waves.every =
waves.waves = 波次 waves.waves = 波次
waves.perspawn = 每次生成 waves.perspawn = 每次生成
@@ -370,7 +377,7 @@ toolmode.eraseores = 清除礦物
toolmode.eraseores.description = 僅清除礦物。 toolmode.eraseores.description = 僅清除礦物。
toolmode.fillteams = 填充團隊 toolmode.fillteams = 填充團隊
toolmode.fillteams.description = 填充團隊而不是方塊。 toolmode.fillteams.description = 填充團隊而不是方塊。
toolmode.drawteams = Draw Teams toolmode.drawteams = 繪製團隊
toolmode.drawteams.description = 繪製團隊而不是方塊。 toolmode.drawteams.description = 繪製團隊而不是方塊。
filters.empty = [lightgray]沒有過濾器!使用下面的按鈕添加一個。 filters.empty = [lightgray]沒有過濾器!使用下面的按鈕添加一個。
@@ -532,7 +539,7 @@ blocks.powerconnections = 最大連接數
blocks.poweruse = 能量使用 blocks.poweruse = 能量使用
blocks.powerdamage = 能量/傷害 blocks.powerdamage = 能量/傷害
blocks.itemcapacity = 物品容量 blocks.itemcapacity = 物品容量
blocks.basepowergeneration = 能量生產 blocks.basepowergeneration = 能量生產
blocks.productiontime = 生產時間 blocks.productiontime = 生產時間
blocks.repairtime = 方塊完全修復時間 blocks.repairtime = 方塊完全修復時間
blocks.speedincrease = 速度提升 blocks.speedincrease = 速度提升
@@ -600,12 +607,12 @@ category.items = 物品
category.crafting = 需求 category.crafting = 需求
category.shooting = 射擊 category.shooting = 射擊
category.optional = 可選的強化 category.optional = 可選的強化
setting.landscape.name = 鎖定水平畫面 setting.landscape.name = 鎖定水平畫面
setting.shadows.name = 陰影 setting.shadows.name = 陰影
setting.blockreplace.name = 方塊建造建議 setting.blockreplace.name = 方塊建造建議
setting.linear.name = 線性過濾 setting.linear.name = 線性過濾
setting.hints.name = 提示 setting.hints.name = 提示
setting.buildautopause.name = 自動暫停建築
setting.animatedwater.name = 水動畫 setting.animatedwater.name = 水動畫
setting.animatedshields.name = 護盾動畫 setting.animatedshields.name = 護盾動畫
setting.antialias.name = 消除鋸齒[lightgray](需要重啟遊戲)[] setting.antialias.name = 消除鋸齒[lightgray](需要重啟遊戲)[]
@@ -631,11 +638,14 @@ setting.conveyorpathfinding.name = 自動輸送帶放置規劃
setting.sensitivity.name = 控制器靈敏度 setting.sensitivity.name = 控制器靈敏度
setting.saveinterval.name = 自動存檔間隔 setting.saveinterval.name = 自動存檔間隔
setting.seconds = {0}秒 setting.seconds = {0}秒
setting.blockselecttimeout.name = 跳過方塊建造時距
setting.milliseconds = {0}毫秒
setting.fullscreen.name = 全螢幕 setting.fullscreen.name = 全螢幕
setting.borderlesswindow.name = 無邊框窗口[lightgray](可能需要重啟遊戲) setting.borderlesswindow.name = 無邊框窗口[lightgray](可能需要重啟遊戲)
setting.fps.name = 顯示FPS setting.fps.name = 顯示FPS與Ping
setting.blockselectkeys.name = 顯示方塊選擇快捷鍵
setting.vsync.name = 垂直同步 setting.vsync.name = 垂直同步
setting.pixelate.name = 像素化[lightgray]可能降低性能 setting.pixelate.name = 像素化[lightgray]會關閉動畫
setting.minimap.name = 顯示小地圖 setting.minimap.name = 顯示小地圖
setting.position.name = 顯示玩家位置 setting.position.name = 顯示玩家位置
setting.musicvol.name = 音樂音量 setting.musicvol.name = 音樂音量
@@ -662,17 +672,36 @@ category.multiplayer.name = 多人
command.attack = 攻擊 command.attack = 攻擊
command.rally = 集結 command.rally = 集結
command.retreat = 撤退 command.retreat = 撤退
keybind.clear_building.name = 清除建築物 placement.blockselectkeys = \n[lightgray]按鍵:[{0},
keybind.clear_building.name = 清除建築指令
keybind.press = 按一下按鍵... keybind.press = 按一下按鍵...
keybind.press.axis = 按一下軸向或按鍵... keybind.press.axis = 按一下軸向或按鍵...
keybind.screenshot.name = 地圖截圖 keybind.screenshot.name = 地圖截圖
keybind.toggle_power_lines.name = 顯示能量激光 keybind.toggle_power_lines.name = 顯示能量激光
keybind.move_x.name = 水平移動 keybind.move_x.name = 水平移動
keybind.move_y.name = 垂直移動 keybind.move_y.name = 垂直移動
keybind.mouse_move.name = 跟隨滑鼠
keybind.dash.name = 衝刺
keybind.schematic_select.name = 選擇區域 keybind.schematic_select.name = 選擇區域
keybind.schematic_menu.name = 藍圖目錄 keybind.schematic_menu.name = 藍圖目錄
keybind.schematic_flip_x.name = X軸翻轉 keybind.schematic_flip_x.name = X軸翻轉
keybind.schematic_flip_y.name = Y軸翻轉 keybind.schematic_flip_y.name = Y軸翻轉
keybind.category_prev.name = 前一個類別
keybind.category_next.name = 下一個類別
keybind.block_select_left.name = 選取方塊左
keybind.block_select_right.name = 選取方塊右
keybind.block_select_up.name = 選取方塊上
keybind.block_select_down.name = 選取方塊下
keybind.block_select_01.name = 類別/方塊選取 1
keybind.block_select_02.name = 類別/方塊選取 2
keybind.block_select_03.name = 類別/方塊選取 3
keybind.block_select_04.name = 類別/方塊選取 4
keybind.block_select_05.name = 類別/方塊選取 5
keybind.block_select_06.name = 類別/方塊選取 6
keybind.block_select_07.name = 類別/方塊選取 7
keybind.block_select_08.name = 類別/方塊選取 8
keybind.block_select_09.name = 類別/方塊選取 9
keybind.block_select_10.name = 類別/方塊選取 10
keybind.fullscreen.name = 全螢幕切換 keybind.fullscreen.name = 全螢幕切換
keybind.select.name = 選取 keybind.select.name = 選取
keybind.diagonal_placement.name = 對角線放置 keybind.diagonal_placement.name = 對角線放置
@@ -680,13 +709,11 @@ keybind.pick.name = 選擇方塊
keybind.break_block.name = 移除方塊 keybind.break_block.name = 移除方塊
keybind.deselect.name = 取消選取 keybind.deselect.name = 取消選取
keybind.shoot.name = 射擊 keybind.shoot.name = 射擊
keybind.zoom_hold.name = 按住縮放
keybind.zoom.name = 縮放 keybind.zoom.name = 縮放
keybind.menu.name = 主選單 keybind.menu.name = 主選單
keybind.pause.name = 暫停遊戲 keybind.pause.name = 暫停遊戲
keybind.pause_building.name = 暫停/恢復建造 keybind.pause_building.name = 暫停/恢復建造
keybind.minimap.name = 小地圖 keybind.minimap.name = 小地圖
keybind.dash.name = 衝刺
keybind.chat.name = 聊天 keybind.chat.name = 聊天
keybind.player_list.name = 玩家列表 keybind.player_list.name = 玩家列表
keybind.console.name = 終端機 keybind.console.name = 終端機
@@ -700,14 +727,14 @@ keybind.drop_unit.name = 放下單位
keybind.zoom_minimap.name = 縮放小地圖 keybind.zoom_minimap.name = 縮放小地圖
mode.help.title = 模式說明 mode.help.title = 模式說明
mode.survival.name = 生存 mode.survival.name = 生存
mode.survival.description = 一般模式。有限的資源與自動來襲的波次。 mode.survival.description = 一般模式。有限的資源與自動來襲的波次。\n[gray]地圖中需要敵人生成點。
mode.sandbox.name = 沙盒 mode.sandbox.name = 沙盒
mode.sandbox.description = 無限的資源與不倒數計時的波次。 mode.sandbox.description = 無限的資源與不倒數計時的波次。
mode.editor.name = 編輯 mode.editor.name = 編輯
mode.pvp.name = 對戰 mode.pvp.name = 對戰
mode.pvp.description = 和其他玩家競爭、戰鬥。 mode.pvp.description = 和其他玩家競爭、戰鬥。\n[gray]地圖中需要至少兩個不同顏色的核心。
mode.attack.name = 進攻 mode.attack.name = 進攻
mode.attack.description = 沒有波次,目標是摧毀敵人的基地。 mode.attack.description = 目標是摧毀敵人的基地。\n[gray]地圖中需要有一個紅色核心。
mode.custom = 自訂規則 mode.custom = 自訂規則
rules.infiniteresources = 無限資源 rules.infiniteresources = 無限資源
@@ -718,11 +745,11 @@ rules.attack = 攻擊模式
rules.enemyCheat = 電腦無限資源 rules.enemyCheat = 電腦無限資源
rules.unitdrops = 單位掉落物 rules.unitdrops = 單位掉落物
rules.unitbuildspeedmultiplier = 單位建設速度倍數 rules.unitbuildspeedmultiplier = 單位建設速度倍數
rules.unithealthmultiplier = 單位耐久度倍數 rules.unithealthmultiplier = 單位生命值倍數
rules.playerhealthmultiplier = 玩家耐久度倍數 rules.playerhealthmultiplier = 玩家生命值倍數
rules.playerdamagemultiplier = 玩家傷害倍數 rules.playerdamagemultiplier = 玩家傷害倍數
rules.unitdamagemultiplier = 單位傷害倍數 rules.unitdamagemultiplier = 單位傷害倍數
rules.enemycorebuildradius = 敵人核心建設半徑︰[lightgray](格) rules.enemycorebuildradius = 敵人核心禁止建設半徑︰[lightgray](格)
rules.respawntime = 重生時間︰[lightgray](秒) rules.respawntime = 重生時間︰[lightgray](秒)
rules.wavespacing = 波次間距︰[lightgray](秒) rules.wavespacing = 波次間距︰[lightgray](秒)
rules.buildcostmultiplier = 建設成本倍數 rules.buildcostmultiplier = 建設成本倍數
@@ -766,7 +793,6 @@ liquid.water.name = 水
liquid.slag.name = 熔渣 liquid.slag.name = 熔渣
liquid.oil.name = 原油 liquid.oil.name = 原油
liquid.cryofluid.name = 冷凍液 liquid.cryofluid.name = 冷凍液
mech.alpha-mech.name = 阿爾法 mech.alpha-mech.name = 阿爾法
mech.alpha-mech.weapon = 重型機關槍 mech.alpha-mech.weapon = 重型機關槍
mech.alpha-mech.ability = 自修復 mech.alpha-mech.ability = 自修復
@@ -789,21 +815,22 @@ mech.trident-ship.weapon = 轟炸艙
mech.glaive-ship.name = 偃月刀 mech.glaive-ship.name = 偃月刀
mech.glaive-ship.weapon = 火焰機關槍 mech.glaive-ship.weapon = 火焰機關槍
item.corestorable = [lightgray]核心可儲存: {0} item.corestorable = [lightgray]核心可儲存: {0}
item.explosiveness = [lightgray]爆炸性:{0} item.explosiveness = [lightgray]爆炸性:{0}%
item.flammability = [lightgray]易燃性:{0} item.flammability = [lightgray]易燃性:{0}%
item.radioactivity = [lightgray]放射性:{0} item.radioactivity = [lightgray]放射性:{0}%
unit.health = [lightgray]耐久度{0} unit.health = [lightgray]生命值{0}
unit.speed = [lightgray]速度:{0} unit.speed = [lightgray]速度:{0}
mech.weapon = [lightgray]武器:{0} mech.weapon = [lightgray]武器:{0}
mech.health = [lightgray]血量:{0} mech.health = [lightgray]血量:{0}
mech.itemcapacity = [lightgray]物品容量:{0} mech.itemcapacity = [lightgray]物品容量:{0}
mech.minespeed = [lightgray]採礦速度:{0} mech.minespeed = [lightgray]採礦速度:{0}%
mech.minepower = [lightgray]採礦能力:{0} mech.minepower = [lightgray]採礦能力:{0}
mech.ability = [lightgray]能力:{0} mech.ability = [lightgray]能力:{0}
mech.buildspeed = [lightgray]建造速度: {0}% mech.buildspeed = [lightgray]建造速度: {0}%
liquid.heatcapacity = [lightgray]熱容量:{0} liquid.heatcapacity = [lightgray]熱容量:{0}
liquid.viscosity = [lightgray]粘性:{0} liquid.viscosity = [lightgray]粘性:{0}
liquid.temperature = [lightgray]溫度:{0} liquid.temperature = [lightgray]溫度:{0}
block.sand-boulder.name = 沙礫 block.sand-boulder.name = 沙礫
block.grass.name = block.grass.name =
block.salt.name = block.salt.name =
@@ -1022,9 +1049,9 @@ unit.eradicator.name = 殲滅者
unit.lich.name = 巫妖 unit.lich.name = 巫妖
unit.reaper.name = 收掠者 unit.reaper.name = 收掠者
tutorial.next = [lightgray]<按下以繼續> tutorial.next = [lightgray]<按下以繼續>
tutorial.intro = 您已進入[scarlet] Mindustry 教學。[]\n使用[[WASD鍵]來移動.\n滾動滾輪時[accent]按住 [[Ctrl][]來放大縮小畫面.\n從[accent]開採銅礦[]開始吧靠近它,然後在靠近核心的位置點擊銅礦。\n\n[accent]{0}/{1}銅礦 tutorial.intro = 您已進入[scarlet] Mindustry 教學。[]\n使用[[WASD鍵]來移動.\n滾動滾輪來放大縮小畫面.\n從[accent]開採銅礦[]開始吧靠近它,然後在靠近核心的位置點擊銅礦。\n\n[accent]{0}/{1}銅礦
tutorial.intro.mobile = 您已進入[scarlet] Mindustry 教學。[]\n滑動螢幕即可移動。\n[accent]用兩指捏[]來縮放畫面。\n從[accent]開採銅礦[]開始吧。靠近它,然後在靠近核心的位置點擊銅礦。\n\n[accent]{0}/{1}銅礦 tutorial.intro.mobile = 您已進入[scarlet] Mindustry 教學。[]\n滑動螢幕即可移動。\n[accent]用兩指捏[]來縮放畫面。\n從[accent]開採銅礦[]開始吧。靠近它,然後在靠近核心的位置點擊銅礦。\n\n[accent]{0}/{1}銅礦
tutorial.drill = 手動挖掘礦石的效率很低。\n[accent]鑽頭[]能夠自動挖掘礦石。\n在銅礦脈上放置一個鑽頭。 tutorial.drill = 手動挖掘礦石的效率很低。\n[accent]鑽頭[]能夠自動挖掘礦石。\n在銅礦脈上放置一個鑽頭。\n不論在哪個選單您也可以用快速按下按鍵[accent][[2][]然後[accent][[1][]來選擇鑽頭。\n[accent]滑鼠右擊[]停止建造。
tutorial.drill.mobile = 手動挖掘礦石的效率很低。\n[accent]鑽頭[]能夠自動挖掘礦石。\n點選右下角的鑽頭選項\n選擇[accent]機械鑽頭[].\n通過點擊將其放置在銅礦上然後按下下方的[accent]確認標誌[]確認您的選擇\n按下[accent] X 按鈕[] 取消放置. tutorial.drill.mobile = 手動挖掘礦石的效率很低。\n[accent]鑽頭[]能夠自動挖掘礦石。\n點選右下角的鑽頭選項\n選擇[accent]機械鑽頭[].\n通過點擊將其放置在銅礦上然後按下下方的[accent]確認標誌[]確認您的選擇\n按下[accent] X 按鈕[] 取消放置.
tutorial.blockinfo = 每個方塊都有不同的屬性。每個鑽頭只能開採特定的礦石。\n查看方塊的資訊和屬性[accent]在建造目錄時按下"?"鈕。[]\n\n[accent]立即訪問機械鑽頭的屬性資料。[] tutorial.blockinfo = 每個方塊都有不同的屬性。每個鑽頭只能開採特定的礦石。\n查看方塊的資訊和屬性[accent]在建造目錄時按下"?"鈕。[]\n\n[accent]立即訪問機械鑽頭的屬性資料。[]
tutorial.conveyor = [accent]輸送帶[]能夠將物品運輸到核心。\n製作一條從鑽頭開始到核心的輸送帶。 tutorial.conveyor = [accent]輸送帶[]能夠將物品運輸到核心。\n製作一條從鑽頭開始到核心的輸送帶。
@@ -1044,8 +1071,8 @@ tutorial.launch = 一旦您達到特定的波數, 您就可以[accent] 發射
item.copper.description = 最基本的結構材料。在各種類型的方塊中廣泛使用。 item.copper.description = 最基本的結構材料。在各種類型的方塊中廣泛使用。
item.lead.description = 一種基本的起始材料。被廣泛用於電子設備和液體運輸方塊。 item.lead.description = 一種基本的起始材料。被廣泛用於電子設備和液體運輸方塊。
item.metaglass.description = 一種超高強度的玻璃。廣泛用於液體分配和存儲。 item.metaglass.description = 一種超高強度的玻璃。廣泛用於液體分配和存儲。
item.graphite.description = 礦化的碳,用於彈藥和電氣絕緣 item.graphite.description = 礦化的碳,用於彈藥和電氣元件
item.sand.description = 一種常見的材料,廣泛用於冶煉,包括製作合金和助熔劑。 item.sand.description = 一種常見的材料,廣泛用於冶煉,包括製作合金和作為助熔劑。
item.coal.description = 遠在「播種」事件前就形成的植物化石。一種常見並容易獲得的燃料。 item.coal.description = 遠在「播種」事件前就形成的植物化石。一種常見並容易獲得的燃料。
item.titanium.description = 一種罕見的超輕金屬,被廣泛運用於運輸液體、鑽頭和飛行載具。 item.titanium.description = 一種罕見的超輕金屬,被廣泛運用於運輸液體、鑽頭和飛行載具。
item.thorium.description = 一種高密度的放射性金屬,用作結構支撐和核燃料。 item.thorium.description = 一種高密度的放射性金屬,用作結構支撐和核燃料。
@@ -1062,10 +1089,10 @@ liquid.slag.description = 各種不同類型的熔融金屬混合在一起的液
liquid.oil.description = 用於進階材料製造的液體。可以轉化為煤炭作為燃料或噴灑向敵方單位後點燃作為武器。 liquid.oil.description = 用於進階材料製造的液體。可以轉化為煤炭作為燃料或噴灑向敵方單位後點燃作為武器。
liquid.cryofluid.description = 一種安定,無腐蝕性的液體,用水及鈦混合成。具有很高的比熱。廣泛的用作冷卻劑。 liquid.cryofluid.description = 一種安定,無腐蝕性的液體,用水及鈦混合成。具有很高的比熱。廣泛的用作冷卻劑。
mech.alpha-mech.description = 標準的控制機甲。改良自匕首機甲,加強了裝甲及建造能力。 mech.alpha-mech.description = 標準的控制機甲。改良自匕首機甲,加強了裝甲及建造能力。
mech.delta-mech.description = 一種快速、輕裝甲的機甲,用於打帶跑的攻擊。對結構造成的傷害很小,但可以用弧形閃電武器很快殺死大量敵方單位。 mech.delta-mech.description = 一種快速、輕裝甲的機甲,用於打帶跑的攻擊。對結構造成的傷害很小,但可以用弧形閃電武器很快殺死大量敵方單位。
mech.tau-mech.description = 支援機甲。射擊友方方塊以修復它們。可以使用它的修復能力治療一定範圍內的友軍。 mech.tau-mech.description = 支援機甲。射擊友方方塊以修復它們。可以使用它的修復能力治療一定範圍內的友軍。
mech.omega-mech.description = 一種笨重、重裝甲的機甲,用於前線突擊。它的裝甲能力可以阻擋高達90%的傷害。 mech.omega-mech.description = 一種笨重、重裝甲的機甲,用於前線突擊。
mech.dart-ship.description = 標準的控制飛船。快速、輕便,但攻擊能力低、採礦速度慢 mech.dart-ship.description = 標準的控制飛船。採礦速度快。相當快速、輕便,但攻擊能力低
mech.javelin-ship.description = 一種打帶跑的突襲艇。雖然最初很慢,但它可以加速到很快的速度,並飛過敵人的前哨站,利用其閃電能力和導彈造成大量的傷害。 mech.javelin-ship.description = 一種打帶跑的突襲艇。雖然最初很慢,但它可以加速到很快的速度,並飛過敵人的前哨站,利用其閃電能力和導彈造成大量的傷害。
mech.trident-ship.description = 一種重型轟炸機。用以摧毀敵方建築。有相當的裝甲。 mech.trident-ship.description = 一種重型轟炸機。用以摧毀敵方建築。有相當的裝甲。
mech.glaive-ship.description = 一種大型、配有良好裝甲的砲艇。配備燃燒機關槍。高機動性。 mech.glaive-ship.description = 一種大型、配有良好裝甲的砲艇。配備燃燒機關槍。高機動性。

View File

@@ -83,3 +83,4 @@ amrsoll
ねらひかだ ねらひかだ
Draco Draco
Quezler Quezler
Alicila

Binary file not shown.

View File

@@ -16,4 +16,5 @@ const boolp = method => new Boolp(){get: method}
const cons = method => new Cons(){get: method} const cons = method => new Cons(){get: method}
const prov = method => new Prov(){get: method} const prov = method => new Prov(){get: method}
const newEffect = (lifetime, renderer) => new Effects.Effect(lifetime, new Effects.EffectRenderer({render: renderer})) const newEffect = (lifetime, renderer) => new Effects.Effect(lifetime, new Effects.EffectRenderer({render: renderer}))
const Calls = Packages.io.anuke.mindustry.gen.Call Call = Packages.mindustry.gen.Call
const Calls = Call //backwards compat

View File

@@ -16,62 +16,65 @@ const run = method => new java.lang.Runnable(){run: method}
const boolf = method => new Boolf(){get: method} const boolf = method => new Boolf(){get: method}
const boolp = method => new Boolp(){get: method} const boolp = method => new Boolp(){get: method}
const cons = method => new Cons(){get: method} const cons = method => new Cons(){get: method}
const prov = method => new Prov(){get: method}
const newEffect = (lifetime, renderer) => new Effects.Effect(lifetime, new Effects.EffectRenderer({render: renderer})) const newEffect = (lifetime, renderer) => new Effects.Effect(lifetime, new Effects.EffectRenderer({render: renderer}))
const Calls = Packages.io.anuke.mindustry.gen.Call Call = Packages.mindustry.gen.Call
importPackage(Packages.io.anuke.arc) const Calls = Call //backwards compat
importPackage(Packages.io.anuke.arc.collection) importPackage(Packages.arc)
importPackage(Packages.io.anuke.arc.func) importPackage(Packages.arc.func)
importPackage(Packages.io.anuke.arc.graphics) importPackage(Packages.arc.graphics)
importPackage(Packages.io.anuke.arc.graphics.g2d) importPackage(Packages.arc.graphics.g2d)
importPackage(Packages.io.anuke.arc.math) importPackage(Packages.arc.math)
importPackage(Packages.io.anuke.arc.scene) importPackage(Packages.arc.math.geom)
importPackage(Packages.io.anuke.arc.scene.actions) importPackage(Packages.arc.scene)
importPackage(Packages.io.anuke.arc.scene.event) importPackage(Packages.arc.scene.actions)
importPackage(Packages.io.anuke.arc.scene.style) importPackage(Packages.arc.scene.event)
importPackage(Packages.io.anuke.arc.scene.ui) importPackage(Packages.arc.scene.style)
importPackage(Packages.io.anuke.arc.scene.ui.layout) importPackage(Packages.arc.scene.ui)
importPackage(Packages.io.anuke.arc.scene.utils) importPackage(Packages.arc.scene.ui.layout)
importPackage(Packages.io.anuke.arc.util) importPackage(Packages.arc.scene.utils)
importPackage(Packages.io.anuke.mindustry) importPackage(Packages.arc.struct)
importPackage(Packages.io.anuke.mindustry.ai) importPackage(Packages.arc.util)
importPackage(Packages.io.anuke.mindustry.content) importPackage(Packages.mindustry)
importPackage(Packages.io.anuke.mindustry.core) importPackage(Packages.mindustry.ai)
importPackage(Packages.io.anuke.mindustry.ctype) importPackage(Packages.mindustry.content)
importPackage(Packages.io.anuke.mindustry.editor) importPackage(Packages.mindustry.core)
importPackage(Packages.io.anuke.mindustry.entities) importPackage(Packages.mindustry.ctype)
importPackage(Packages.io.anuke.mindustry.entities.bullet) importPackage(Packages.mindustry.editor)
importPackage(Packages.io.anuke.mindustry.entities.effect) importPackage(Packages.mindustry.entities)
importPackage(Packages.io.anuke.mindustry.entities.traits) importPackage(Packages.mindustry.entities.bullet)
importPackage(Packages.io.anuke.mindustry.entities.type) importPackage(Packages.mindustry.entities.effect)
importPackage(Packages.io.anuke.mindustry.entities.type.base) importPackage(Packages.mindustry.entities.traits)
importPackage(Packages.io.anuke.mindustry.entities.units) importPackage(Packages.mindustry.entities.type)
importPackage(Packages.io.anuke.mindustry.game) importPackage(Packages.mindustry.entities.type.base)
importPackage(Packages.io.anuke.mindustry.gen) importPackage(Packages.mindustry.entities.units)
importPackage(Packages.io.anuke.mindustry.graphics) importPackage(Packages.mindustry.game)
importPackage(Packages.io.anuke.mindustry.input) importPackage(Packages.mindustry.gen)
importPackage(Packages.io.anuke.mindustry.maps) importPackage(Packages.mindustry.graphics)
importPackage(Packages.io.anuke.mindustry.maps.filters) importPackage(Packages.mindustry.input)
importPackage(Packages.io.anuke.mindustry.maps.generators) importPackage(Packages.mindustry.maps)
importPackage(Packages.io.anuke.mindustry.maps.zonegen) importPackage(Packages.mindustry.maps.filters)
importPackage(Packages.io.anuke.mindustry.type) importPackage(Packages.mindustry.maps.generators)
importPackage(Packages.io.anuke.mindustry.ui) importPackage(Packages.mindustry.maps.zonegen)
importPackage(Packages.io.anuke.mindustry.ui.dialogs) importPackage(Packages.mindustry.type)
importPackage(Packages.io.anuke.mindustry.ui.fragments) importPackage(Packages.mindustry.ui)
importPackage(Packages.io.anuke.mindustry.ui.layout) importPackage(Packages.mindustry.ui.dialogs)
importPackage(Packages.io.anuke.mindustry.world) importPackage(Packages.mindustry.ui.fragments)
importPackage(Packages.io.anuke.mindustry.world.blocks) importPackage(Packages.mindustry.ui.layout)
importPackage(Packages.io.anuke.mindustry.world.blocks.defense) importPackage(Packages.mindustry.world)
importPackage(Packages.io.anuke.mindustry.world.blocks.defense.turrets) importPackage(Packages.mindustry.world.blocks)
importPackage(Packages.io.anuke.mindustry.world.blocks.distribution) importPackage(Packages.mindustry.world.blocks.defense)
importPackage(Packages.io.anuke.mindustry.world.blocks.liquid) importPackage(Packages.mindustry.world.blocks.defense.turrets)
importPackage(Packages.io.anuke.mindustry.world.blocks.logic) importPackage(Packages.mindustry.world.blocks.distribution)
importPackage(Packages.io.anuke.mindustry.world.blocks.power) importPackage(Packages.mindustry.world.blocks.liquid)
importPackage(Packages.io.anuke.mindustry.world.blocks.production) importPackage(Packages.mindustry.world.blocks.logic)
importPackage(Packages.io.anuke.mindustry.world.blocks.sandbox) importPackage(Packages.mindustry.world.blocks.power)
importPackage(Packages.io.anuke.mindustry.world.blocks.storage) importPackage(Packages.mindustry.world.blocks.production)
importPackage(Packages.io.anuke.mindustry.world.blocks.units) importPackage(Packages.mindustry.world.blocks.sandbox)
importPackage(Packages.io.anuke.mindustry.world.consumers) importPackage(Packages.mindustry.world.blocks.storage)
importPackage(Packages.io.anuke.mindustry.world.meta) importPackage(Packages.mindustry.world.blocks.units)
importPackage(Packages.io.anuke.mindustry.world.meta.values) importPackage(Packages.mindustry.world.consumers)
importPackage(Packages.io.anuke.mindustry.world.modules) importPackage(Packages.mindustry.world.meta)
importPackage(Packages.io.anuke.mindustry.world.producers) importPackage(Packages.mindustry.world.meta.values)
importPackage(Packages.mindustry.world.modules)
importPackage(Packages.mindustry.world.producers)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 745 B

After

Width:  |  Height:  |  Size: 747 B

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 741 KiB

After

Width:  |  Height:  |  Size: 957 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 278 KiB

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 KiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 924 KiB

After

Width:  |  Height:  |  Size: 332 KiB

View File

@@ -1,26 +0,0 @@
package io.anuke.mindustry.content;
import io.anuke.mindustry.ctype.*;
import io.anuke.mindustry.game.*;
import java.io.*;
public class Loadouts implements ContentList{
public static Schematic
basicShard,
advancedShard,
basicFoundation,
basicNucleus;
@Override
public void load(){
try{
basicShard = Schematics.readBase64("bXNjaAB4nD2K2wqAIBiD5ymibnoRn6YnEP1BwUMoBL19FuJ2sbFvUFgYZDaJsLeQrkinN9UJHImsNzlYE7WrIUastuSbnlKx2VJJt+8IQGGKdfO/8J5yrGJSMegLg+YUIA==");
advancedShard = Schematics.readBase64("bXNjaAB4nD2LjQqAIAyET7OMIOhFfJqeYMxBgSkYCL199gu33fFtB4tOwUTaBCP5QpHFzwtl32DahBeKK1NwPq8hoOcUixwpY+CUxe3XIwBbB/pa6tadVCUP02hgHvp5vZq/0b7pBHPYFOQ=");
basicFoundation = Schematics.readBase64("bXNjaAB4nD1OSQ6DMBBzFhVu8BG+0X8MQyoiJTNSukj8nlCi2Adbtg/GA4OBF8oB00rvyE/9ykafqOIw58A7SWRKy1ZiShhZ5RcOLZhYS1hefQ1gRIeptH9jq/qW2lvc1d2tgWsOfVX/tOwE86AYBA==");
basicNucleus = Schematics.readBase64("bXNjaAB4nD2MUQqAIBBEJy0s6qOLdJXuYNtCgikYBd2+LNmdj308hkGHtkId7M4YFns4mk/yfB4a48602eDI+mlNznu0FMPFd0wYKCaewl8F0EOueqM+yKSLVfJrNKWnSw/FZGzEGXFG9sy/px4gEBW1");
}catch(IOException e){
throw new RuntimeException(e);
}
}
}

View File

@@ -1,54 +0,0 @@
package io.anuke.mindustry.core;
import io.anuke.arc.*;
import io.anuke.arc.Files.*;
import io.anuke.arc.collection.*;
import io.anuke.arc.files.*;
import io.anuke.arc.util.*;
import io.anuke.arc.util.io.*;
import java.io.*;
public class Version{
/** Build type. 'official' for official releases; 'custom' or 'bleeding edge' are also used. */
public static String type;
/** Build modifier, e.g. 'alpha' or 'release' */
public static String modifier;
/** Number specifying the major version, e.g. '4' */
public static int number;
/** Build number, e.g. '43'. set to '-1' for custom builds. */
public static int build = 0;
/** Revision number. Used for hotfixes. Does not affect server compatibility. */
public static int revision = 0;
/** Whether version loading is enabled. */
public static boolean enabled = true;
public static void init(){
if(!enabled) return;
try{
FileHandle file = OS.isAndroid || OS.isIos ? Core.files.internal("version.properties") : new FileHandle("version.properties", FileType.Internal);
ObjectMap<String, String> map = new ObjectMap<>();
PropertiesUtils.load(map, file.reader());
type = map.get("type");
number = Integer.parseInt(map.get("number", "4"));
modifier = map.get("modifier");
if(map.get("build").contains(".")){
String[] split = map.get("build").split("\\.");
try{
build = Integer.parseInt(split[0]);
revision = Integer.parseInt(split[1]);
}catch(Throwable e){
e.printStackTrace();
build = -1;
}
}else{
build = Strings.canParseInt(map.get("build")) ? Integer.parseInt(map.get("build")) : -1;
}
}catch(IOException e){
throw new RuntimeException(e);
}
}
}

View File

@@ -1,49 +0,0 @@
package io.anuke.mindustry.ctype;
import io.anuke.arc.files.*;
import io.anuke.arc.util.ArcAnnotate.*;
import io.anuke.mindustry.*;
import io.anuke.mindustry.mod.Mods.*;
import io.anuke.mindustry.type.*;
/** Base class for a content type that is loaded in {@link io.anuke.mindustry.core.ContentLoader}. */
public abstract class Content implements Comparable<Content>{
public final short id;
/** The mod that loaded this piece of content. */
public @Nullable LoadedMod mod;
/** File that this content was loaded from. */
public @Nullable FileHandle sourceFile;
public Content(){
this.id = (short)Vars.content.getBy(getContentType()).size;
Vars.content.handleContent(this);
}
/**
* Returns the type name of this piece of content.
* This should return the same value for all instances of this content type.
*/
public abstract ContentType getContentType();
/** Called after all content and modules are created. Do not use to load regions or texture data! */
public void init(){
}
/**
* Called after all content is created, only on non-headless versions.
* Use for loading regions or other image data.
*/
public void load(){
}
@Override
public int compareTo(Content c){
return Integer.compare(id, c.id);
}
@Override
public String toString(){
return getContentType().name() + "#" + id;
}
}

View File

@@ -1,7 +0,0 @@
package io.anuke.mindustry.ctype;
/** Interface for a list of content to be loaded in {@link io.anuke.mindustry.core.ContentLoader}. */
public interface ContentList{
/** This method should create all the content. */
void load();
}

View File

@@ -1,7 +0,0 @@
package io.anuke.mindustry.entities.traits;
import io.anuke.mindustry.game.Team;
public interface TeamTrait extends Entity{
Team getTeam();
}

View File

@@ -1,19 +0,0 @@
package io.anuke.mindustry.entities.type;
import io.anuke.arc.math.geom.Vector2;
import io.anuke.mindustry.entities.traits.SolidTrait;
public abstract class SolidEntity extends BaseEntity implements SolidTrait{
protected transient Vector2 velocity = new Vector2(0f, 0.0001f);
private transient Vector2 lastPosition = new Vector2();
@Override
public Vector2 lastPosition(){
return lastPosition;
}
@Override
public Vector2 velocity(){
return velocity;
}
}

View File

@@ -1,27 +0,0 @@
package io.anuke.mindustry.game;
import io.anuke.arc.Core;
import io.anuke.arc.graphics.Color;
import io.anuke.mindustry.graphics.*;
public enum Team{
derelict(Color.valueOf("4d4e58")),
sharded(Pal.accent),
crux(Color.valueOf("e82d2d")),
green(Color.valueOf("4dd98b")),
purple(Color.valueOf("9a4bdf")),
blue(Color.royal.cpy());
public final static Team[] all = values();
public final Color color;
public final int intColor;
Team(Color color){
this.color = color;
intColor = Color.rgba8888(color);
}
public String localized(){
return Core.bundle.get("team." + name() + ".name");
}
}

View File

@@ -1,76 +0,0 @@
package io.anuke.mindustry.game;
import io.anuke.arc.collection.*;
import io.anuke.mindustry.*;
import io.anuke.mindustry.world.*;
/** Class for various team-based utilities. */
public class Teams{
private TeamData[] map = new TeamData[Team.all.length];
/**
* Register a team.
* @param team The team type enum.
* @param enemies The array of enemies of this team. Any team not in this array is considered neutral.
*/
public void add(Team team, Team... enemies){
map[team.ordinal()] = new TeamData(team, EnumSet.of(enemies));
}
/** Returns team data by type. */
public TeamData get(Team team){
if(map[team.ordinal()] == null){
add(team, Array.with(Team.all).select(t -> t != team).toArray(Team.class));
}
return map[team.ordinal()];
}
/** Returns whether a team is active, e.g. whether it has any cores remaining. */
public boolean isActive(Team team){
//the enemy wave team is always active
return team == Vars.waveTeam || get(team).cores.size > 0;
}
/** Returns a set of all teams that are enemies of this team. */
public EnumSet<Team> enemiesOf(Team team){
return get(team).enemies;
}
/** Returns whether {@param other} is an enemy of {@param #team}. */
public boolean areEnemies(Team team, Team other){
return enemiesOf(team).contains(other);
}
/** Allocates a new array with the active teams.
* Never call in the main game loop.*/
public Array<TeamData> getActive(){
return Array.select(map, t -> t != null);
}
public static class TeamData{
public final ObjectSet<Tile> cores = new ObjectSet<>();
public final EnumSet<Team> enemies;
public final Team team;
public Queue<BrokenBlock> brokenBlocks = new Queue<>();
public TeamData(Team team, EnumSet<Team> enemies){
this.team = team;
this.enemies = enemies;
}
}
/** Represents a block made by this team that was destroyed somewhere on the map.
* This does not include deconstructed blocks.*/
public static class BrokenBlock{
public final short x, y, rotation, block;
public final int config;
public BrokenBlock(short x, short y, short rotation, short block, int config){
this.x = x;
this.y = y;
this.rotation = rotation;
this.block = block;
this.config = config;
}
}
}

View File

@@ -1,214 +0,0 @@
package io.anuke.mindustry.io;
import io.anuke.arc.collection.*;
import io.anuke.arc.files.*;
import io.anuke.arc.graphics.*;
import io.anuke.arc.util.*;
import io.anuke.arc.util.serialization.*;
import io.anuke.mindustry.content.*;
import io.anuke.mindustry.game.*;
import io.anuke.mindustry.io.MapIO.*;
import io.anuke.mindustry.maps.*;
import io.anuke.mindustry.type.*;
import io.anuke.mindustry.world.*;
import io.anuke.mindustry.world.LegacyColorMapper.*;
import io.anuke.mindustry.world.blocks.*;
import java.io.*;
import java.util.zip.*;
import static io.anuke.mindustry.Vars.*;
/** Map IO for the "old" .mmap format.
* Differentiate between legacy maps and new maps by checking the extension (or the header).*/
public class LegacyMapIO{
private static final ObjectMap<String, String> fallback = ObjectMap.of("alpha-dart-mech-pad", "dart-mech-pad");
private static final Json json = new Json();
/* Convert a map from the old format to the new format. */
public static void convertMap(FileHandle in, FileHandle out) throws IOException{
Map map = readMap(in, true);
String waves = map.tags.get("waves", "[]");
Array<SpawnGroup> groups = new Array<>(json.fromJson(SpawnGroup[].class, waves));
Tile[][] tiles = world.createTiles(map.width, map.height);
for(int x = 0; x < map.width; x++){
for(int y = 0; y < map.height; y++){
tiles[x][y] = new CachedTile();
tiles[x][y].x = (short)x;
tiles[x][y].y = (short)y;
}
}
state.rules.spawns = groups;
readTiles(map, tiles);
MapIO.writeMap(out, map);
}
public static Map readMap(FileHandle file, boolean custom) throws IOException{
try(DataInputStream stream = new DataInputStream(file.read(1024))){
StringMap tags = new StringMap();
//meta is uncompressed
int version = stream.readInt();
if(version != 1){
throw new IOException("Outdated legacy map format");
}
int build = stream.readInt();
short width = stream.readShort(), height = stream.readShort();
byte tagAmount = stream.readByte();
for(int i = 0; i < tagAmount; i++){
String name = stream.readUTF();
String value = stream.readUTF();
tags.put(name, value);
}
return new Map(file, width, height, tags, custom, version, build);
}
}
public static void readTiles(Map map, Tile[][] tiles) throws IOException{
readTiles(map, (x, y) -> tiles[x][y]);
}
public static void readTiles(Map map, TileProvider tiles) throws IOException{
readTiles(map.file, map.width, map.height, tiles);
}
private static void readTiles(FileHandle file, int width, int height, Tile[][] tiles) throws IOException{
readTiles(file, width, height, (x, y) -> tiles[x][y]);
}
private static void readTiles(FileHandle file, int width, int height, TileProvider tiles) throws IOException{
try(BufferedInputStream input = file.read(bufferSize)){
//read map
{
DataInputStream stream = new DataInputStream(input);
stream.readInt(); //version
stream.readInt(); //build
stream.readInt(); //width + height
byte tagAmount = stream.readByte();
for(int i = 0; i < tagAmount; i++){
stream.readUTF(); //key
stream.readUTF(); //val
}
}
try(DataInputStream stream = new DataInputStream(new InflaterInputStream(input))){
try{
byte mapped = stream.readByte();
IntMap<Block> idmap = new IntMap<>();
IntMap<String> namemap = new IntMap<>();
for(int i = 0; i < mapped; i++){
byte type = stream.readByte();
short total = stream.readShort();
for(int j = 0; j < total; j++){
String name = stream.readUTF();
if(type == 1){
Block res = content.getByName(ContentType.block, fallback.get(name, name));
idmap.put(j, res == null ? Blocks.air : res);
namemap.put(j, fallback.get(name, name));
}
}
}
//read floor and create tiles first
for(int i = 0; i < width * height; i++){
int x = i % width, y = i / width;
int floorid = stream.readUnsignedByte();
int oreid = stream.readUnsignedByte();
int consecutives = stream.readUnsignedByte();
Tile tile = tiles.get(x, y);
tile.setFloor((Floor)idmap.get(floorid));
tile.setOverlay(idmap.get(oreid));
for(int j = i + 1; j < i + 1 + consecutives; j++){
int newx = j % width, newy = j / width;
Tile newTile = tiles.get(newx, newy);
newTile.setFloor((Floor)idmap.get(floorid));
newTile.setOverlay(idmap.get(oreid));
}
i += consecutives;
}
//read blocks
for(int i = 0; i < width * height; i++){
int x = i % width, y = i / width;
int id = stream.readUnsignedByte();
Block block = idmap.get(id);
if(block == null) block = Blocks.air;
Tile tile = tiles.get(x, y);
//the spawn block is saved in the block tile layer in older maps, shift it to the overlay
if(block != Blocks.spawn){
tile.setBlock(block);
}else{
tile.setOverlay(block);
}
if(namemap.get(id, "").equals("part")){
stream.readByte(); //link
}else if(tile.entity != null){
byte tr = stream.readByte();
stream.readShort(); //read health (which is actually irrelevant)
byte team = Pack.leftByte(tr);
byte rotation = Pack.rightByte(tr);
tile.setTeam(Team.all[team]);
tile.entity.health = tile.block().health;
tile.rotation(rotation);
if(tile.block() == Blocks.liquidSource || tile.block() == Blocks.unloader || tile.block() == Blocks.sorter){
stream.readByte(); //these blocks have an extra config byte, read it
}
}else{ //no entity/part, read consecutives
int consecutives = stream.readUnsignedByte();
for(int j = i + 1; j < i + 1 + consecutives; j++){
int newx = j % width, newy = j / width;
tiles.get(newx, newy).setBlock(block);
}
i += consecutives;
}
}
}finally{
content.setTemporaryMapper(null);
}
}
}
}
/** Reads a pixmap in the 3.5 pixmap format. */
public static void readPixmap(Pixmap pixmap, Tile[][] tiles){
for(int x = 0; x < pixmap.getWidth(); x++){
for(int y = 0; y < pixmap.getHeight(); y++){
int color = pixmap.getPixel(x, pixmap.getHeight() - 1 - y);
LegacyBlock block = LegacyColorMapper.get(color);
Tile tile = tiles[x][y];
tile.setFloor(block.floor);
tile.setBlock(block.wall);
if(block.ore != null) tile.setOverlay(block.ore);
//place core
if(color == Color.rgba8888(Color.green)){
//actual core parts
tile.setBlock(Blocks.coreShard);
tile.setTeam(Team.sharded);
}
}
}
}
}

File diff suppressed because one or more lines are too long

View File

@@ -1,67 +0,0 @@
package io.anuke.mindustry.mod;
import io.anuke.arc.*;
import io.anuke.arc.collection.*;
import io.anuke.arc.graphics.*;
import io.anuke.arc.graphics.g2d.*;
import io.anuke.arc.math.*;
import io.anuke.arc.scene.ui.layout.*;
import io.anuke.arc.util.*;
import io.anuke.mindustry.graphics.*;
import io.anuke.mindustry.mod.Mods.*;
import io.anuke.mindustry.ui.*;
public class ModCrashHandler{
public static void handle(Throwable t){
Array<Throwable> list = Strings.getCauses(t);
Throwable modCause = list.find(e -> e instanceof ModLoadException);
if(modCause != null && Fonts.outline != null){
String text = "[scarlet][[A fatal crash has occured while loading a mod!][]\n\nReason:[accent] " + modCause.getMessage();
String bottom = "[scarlet]The associated mod has been disabled. Swipe out of the app and launch it again.";
GlyphLayout layout = new GlyphLayout();
Core.atlas = TextureAtlas.blankAtlas();
Colors.put("accent", Pal.accent);
Core.app.addListener(new ApplicationListener(){
@Override
public void update(){
Core.graphics.clear(0.1f, 0.1f, 0.1f, 1f);
float rad = Math.min(Core.graphics.getWidth(), Core.graphics.getHeight()) / 2f / 1.3f;
Draw.color(Color.scarlet, Color.black, Mathf.absin(Core.graphics.getFrameId(), 15f, 0.6f));
Lines.stroke(Scl.scl(40f));
//Lines.poly2(Core.graphics.getWidth()/2f, Core.graphics.getHeight()/2f, 3, rad, 0f);
float cx = Core.graphics.getWidth()/2f, cy = Core.graphics.getHeight()/2f;
for(int i = 0; i < 3; i++){
float angle1 = i * 120f + 90f;
float angle2 = (i + 1) * 120f + 90f;
Tmp.v1.trnsExact(angle1, rad - Lines.getStroke()/2f).add(cx, cy);
Tmp.v2.trnsExact(angle2, rad - Lines.getStroke()/2f).add(cx, cy);
Tmp.v3.trnsExact(angle1, rad + Lines.getStroke()/2f).add(cx, cy);
Tmp.v4.trnsExact(angle2, rad + Lines.getStroke()/2f).add(cx, cy);
Fill.quad(Tmp.v1.x, Tmp.v1.y, Tmp.v2.x, Tmp.v2.y, Tmp.v4.x, Tmp.v4.y, Tmp.v3.x, Tmp.v3.y);
}
Lines.lineAngleCenter(Core.graphics.getWidth()/2f, Core.graphics.getHeight()/2f - Scl.scl(5f), 90f, rad/3.1f);
Fill.square(Core.graphics.getWidth()/2f, Core.graphics.getHeight()/2f + rad/2f - Scl.scl(15f), Lines.getStroke()/2f);
Draw.reset();
Fonts.outline.getData().markupEnabled = true;
layout.setText(Fonts.outline, text, Color.white, Core.graphics.getWidth(), Align.left, true);
Fonts.outline.draw(text, Core.graphics.getWidth()/2f - layout.width/2f, Core.graphics.getHeight() - Scl.scl(50f), Core.graphics.getWidth(), Align.left, true);
layout.setText(Fonts.outline, bottom, Color.white, Core.graphics.getWidth(), Align.left, true);
Fonts.outline.draw(bottom, Core.graphics.getWidth()/2f - layout.width/2f, layout.height + Scl.scl(10f), Core.graphics.getWidth(), Align.left, true);
Draw.flush();
}
@Override
public void resize(int width, int height){
Draw.proj().setOrtho(0, 0, width, height);
}
});
}else{
throw new RuntimeException(t);
}
}
}

View File

@@ -1,7 +0,0 @@
package io.anuke.mindustry.plugin;
import io.anuke.mindustry.mod.*;
public abstract class Plugin extends Mod{
}

View File

@@ -1,4 +0,0 @@
package io.anuke.mindustry.world.producers;
public class Produce{
}

View File

@@ -1,4 +0,0 @@
package io.anuke.mindustry.world.producers;
public class ProduceItem{
}

View File

@@ -1,26 +1,26 @@
package io.anuke.mindustry; package mindustry;
import io.anuke.arc.*; import arc.*;
import io.anuke.arc.assets.*; import arc.assets.*;
import io.anuke.arc.assets.loaders.*; import arc.assets.loaders.*;
import io.anuke.arc.audio.*; import arc.audio.*;
import io.anuke.arc.graphics.*; import arc.graphics.*;
import io.anuke.arc.graphics.g2d.*; import arc.graphics.g2d.*;
import io.anuke.arc.math.*; import arc.math.*;
import io.anuke.arc.scene.ui.layout.*; import arc.scene.ui.layout.*;
import io.anuke.arc.util.*; import arc.util.*;
import io.anuke.arc.util.async.*; import arc.util.async.*;
import io.anuke.mindustry.core.*; import mindustry.core.*;
import io.anuke.mindustry.ctype.Content; import mindustry.ctype.Content;
import io.anuke.mindustry.game.EventType.*; import mindustry.game.EventType.*;
import io.anuke.mindustry.gen.*; import mindustry.gen.*;
import io.anuke.mindustry.graphics.*; import mindustry.graphics.*;
import io.anuke.mindustry.maps.*; import mindustry.maps.*;
import io.anuke.mindustry.mod.*; import mindustry.mod.*;
import io.anuke.mindustry.net.Net; import mindustry.net.Net;
import static io.anuke.arc.Core.*; import static arc.Core.*;
import static io.anuke.mindustry.Vars.*; import static mindustry.Vars.*;
public abstract class ClientLauncher extends ApplicationCore implements Platform{ public abstract class ClientLauncher extends ApplicationCore implements Platform{
private static final int loadingFPS = 20; private static final int loadingFPS = 20;
@@ -123,7 +123,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
for(ApplicationListener listener : modules){ for(ApplicationListener listener : modules){
listener.init(); listener.init();
} }
mods.each(Mod::init); mods.eachClass(Mod::init);
finished = true; finished = true;
Events.fire(new ClientLoadEvent()); Events.fire(new ClientLoadEvent());
super.resize(graphics.getWidth(), graphics.getHeight()); super.resize(graphics.getWidth(), graphics.getHeight());

View File

@@ -1,32 +1,34 @@
package io.anuke.mindustry; package mindustry;
import io.anuke.arc.Application.*; import arc.*;
import io.anuke.arc.*; import arc.Application.*;
import io.anuke.arc.assets.*; import arc.assets.*;
import io.anuke.arc.collection.*; import arc.struct.*;
import io.anuke.arc.files.*; import arc.files.*;
import io.anuke.arc.graphics.*; import arc.graphics.*;
import io.anuke.arc.scene.ui.layout.*; import arc.scene.ui.layout.*;
import io.anuke.arc.util.*; import arc.util.*;
import io.anuke.mindustry.ai.*; import arc.util.io.*;
import io.anuke.mindustry.core.*; import mindustry.ai.*;
import io.anuke.mindustry.entities.*; import mindustry.core.*;
import io.anuke.mindustry.entities.effect.*; import mindustry.entities.*;
import io.anuke.mindustry.entities.traits.*; import mindustry.entities.effect.*;
import io.anuke.mindustry.entities.type.*; import mindustry.entities.traits.*;
import io.anuke.mindustry.game.*; import mindustry.entities.type.*;
import io.anuke.mindustry.game.EventType.*; import mindustry.game.*;
import io.anuke.mindustry.gen.*; import mindustry.game.EventType.*;
import io.anuke.mindustry.input.*; import mindustry.gen.*;
import io.anuke.mindustry.maps.*; import mindustry.input.*;
import io.anuke.mindustry.mod.*; import mindustry.maps.*;
import io.anuke.mindustry.net.Net; import mindustry.mod.*;
import io.anuke.mindustry.world.blocks.defense.ForceProjector.*; import mindustry.net.*;
import mindustry.net.Net;
import mindustry.world.blocks.defense.ForceProjector.*;
import java.nio.charset.*; import java.nio.charset.*;
import java.util.*; import java.util.*;
import static io.anuke.arc.Core.settings; import static arc.Core.settings;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public class Vars implements Loadable{ public class Vars implements Loadable{
@@ -52,18 +54,16 @@ public class Vars implements Loadable{
public static final String crashReportURL = "http://192.99.169.18/report"; public static final String crashReportURL = "http://192.99.169.18/report";
/** URL the links to the wiki's modding guide.*/ /** URL the links to the wiki's modding guide.*/
public static final String modGuideURL = "https://mindustrygame.github.io/wiki/modding/"; public static final String modGuideURL = "https://mindustrygame.github.io/wiki/modding/";
/** URL to the JSON file containing all the global, public servers. */ /** URL to the JSON file containing all the global, public servers. Not queried in BE. */
public static final String serverJsonURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers.json"; public static final String serverJsonURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers.json";
/** URL to the JSON file containing all the BE servers. Only queried in BE. */
public static final String serverJsonBeURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_be.json";
/** URL the links to the wiki's modding guide.*/ /** URL the links to the wiki's modding guide.*/
public static final String reportIssueURL = "https://github.com/Anuken/Mindustry/issues/new?template=bug_report.md"; public static final String reportIssueURL = "https://github.com/Anuken/Mindustry/issues/new?template=bug_report.md";
/** list of built-in servers.*/ /** list of built-in servers.*/
public static final Array<String> defaultServers = Array.with(); public static final Array<String> defaultServers = Array.with();
/** maximum distance between mine and core that supports automatic transferring */ /** maximum distance between mine and core that supports automatic transferring */
public static final float mineTransferRange = 220f; public static final float mineTransferRange = 220f;
/** team of the player by default */
public static final Team defaultTeam = Team.sharded;
/** team of the enemy in waves/sectors */
public static final Team waveTeam = Team.crux;
/** whether to enable editing of units in the editor */ /** whether to enable editing of units in the editor */
public static final boolean enableUnitEditing = false; public static final boolean enableUnitEditing = false;
/** max chat message length */ /** max chat message length */
@@ -123,22 +123,24 @@ public class Vars implements Loadable{
public static boolean steam; public static boolean steam;
/** whether typing into the console is enabled - developers only */ /** whether typing into the console is enabled - developers only */
public static boolean enableConsole = false; public static boolean enableConsole = false;
/** application data directory, equivalent to {@link io.anuke.arc.Settings#getDataDirectory()} */ /** application data directory, equivalent to {@link Settings#getDataDirectory()} */
public static FileHandle dataDirectory; public static Fi dataDirectory;
/** data subdirectory used for screenshots */ /** data subdirectory used for screenshots */
public static FileHandle screenshotDirectory; public static Fi screenshotDirectory;
/** data subdirectory used for custom mmaps */ /** data subdirectory used for custom maps */
public static FileHandle customMapDirectory; public static Fi customMapDirectory;
/** data subdirectory used for custom mmaps */ /** data subdirectory used for custom map previews */
public static FileHandle mapPreviewDirectory; public static Fi mapPreviewDirectory;
/** tmp subdirectory for map conversion */ /** tmp subdirectory for map conversion */
public static FileHandle tmpDirectory; public static Fi tmpDirectory;
/** data subdirectory used for saves */ /** data subdirectory used for saves */
public static FileHandle saveDirectory; public static Fi saveDirectory;
/** data subdirectory used for mods */ /** data subdirectory used for mods */
public static FileHandle modDirectory; public static Fi modDirectory;
/** data subdirectory used for schematics */ /** data subdirectory used for schematics */
public static FileHandle schematicDirectory; public static Fi schematicDirectory;
/** data subdirectory used for bleeding edge build versions */
public static Fi bebuildDirectory;
/** map file extension */ /** map file extension */
public static final String mapExtension = "msav"; public static final String mapExtension = "msav";
/** save file extension */ /** save file extension */
@@ -160,6 +162,7 @@ public class Vars implements Loadable{
public static Platform platform = new Platform(){}; public static Platform platform = new Platform(){};
public static Mods mods; public static Mods mods;
public static Schematics schematics = new Schematics(); public static Schematics schematics = new Schematics();
public static BeControl becontrol;
public static World world; public static World world;
public static Maps maps; public static Maps maps;
@@ -183,7 +186,7 @@ public class Vars implements Loadable{
public static EntityGroup<ShieldEntity> shieldGroup; public static EntityGroup<ShieldEntity> shieldGroup;
public static EntityGroup<Puddle> puddleGroup; public static EntityGroup<Puddle> puddleGroup;
public static EntityGroup<Fire> fireGroup; public static EntityGroup<Fire> fireGroup;
public static EntityGroup<BaseUnit>[] unitGroups; public static EntityGroup<BaseUnit> unitGroup;
public static Player player; public static Player player;
@@ -195,6 +198,7 @@ public class Vars implements Loadable{
public static void init(){ public static void init(){
Serialization.init(); Serialization.init();
DefaultSerializers.typeMappings.put("mindustry.type.ContentType", "mindustry.ctype.ContentType");
if(loadLocales){ if(loadLocales){
//load locales //load locales
@@ -222,6 +226,7 @@ public class Vars implements Loadable{
defaultWaves = new DefaultWaves(); defaultWaves = new DefaultWaves();
collisions = new EntityCollisions(); collisions = new EntityCollisions();
world = new World(); world = new World();
becontrol = new BeControl();
maps = new Maps(); maps = new Maps();
spawner = new WaveSpawner(); spawner = new WaveSpawner();
@@ -237,11 +242,7 @@ public class Vars implements Loadable{
puddleGroup = entities.add(Puddle.class).enableMapping(); puddleGroup = entities.add(Puddle.class).enableMapping();
shieldGroup = entities.add(ShieldEntity.class, false); shieldGroup = entities.add(ShieldEntity.class, false);
fireGroup = entities.add(Fire.class).enableMapping(); fireGroup = entities.add(Fire.class).enableMapping();
unitGroups = new EntityGroup[Team.all.length]; unitGroup = entities.add(BaseUnit.class).enableMapping();
for(Team team : Team.all){
unitGroups[team.ordinal()] = entities.add(BaseUnit.class).enableMapping();
}
for(EntityGroup<?> group : entities.all()){ for(EntityGroup<?> group : entities.all()){
group.setRemoveListener(entity -> { group.setRemoveListener(entity -> {
@@ -266,6 +267,7 @@ public class Vars implements Loadable{
tmpDirectory = dataDirectory.child("tmp/"); tmpDirectory = dataDirectory.child("tmp/");
modDirectory = dataDirectory.child("mods/"); modDirectory = dataDirectory.child("mods/");
schematicDirectory = dataDirectory.child("schematics/"); schematicDirectory = dataDirectory.child("schematics/");
bebuildDirectory = dataDirectory.child("be_builds/");
modDirectory.mkdirs(); modDirectory.mkdirs();
@@ -315,7 +317,7 @@ public class Vars implements Loadable{
try{ try{
//try loading external bundle //try loading external bundle
FileHandle handle = Core.files.local("bundle"); Fi handle = Core.files.local("bundle");
Locale locale = Locale.ENGLISH; Locale locale = Locale.ENGLISH;
Core.bundle = I18NBundle.createBundle(handle, locale); Core.bundle = I18NBundle.createBundle(handle, locale);
@@ -328,7 +330,7 @@ public class Vars implements Loadable{
}catch(Throwable e){ }catch(Throwable e){
//no external bundle found //no external bundle found
FileHandle handle = Core.files.internal("bundles/bundle"); Fi handle = Core.files.internal("bundles/bundle");
Locale locale; Locale locale;
String loc = Core.settings.getString("locale"); String loc = Core.settings.getString("locale");
if(loc.equals("default")){ if(loc.equals("default")){

View File

@@ -1,21 +1,21 @@
package io.anuke.mindustry.ai; package mindustry.ai;
import io.anuke.arc.*; import arc.*;
import io.anuke.arc.collection.*; import arc.func.*;
import io.anuke.arc.func.*; import arc.math.*;
import io.anuke.arc.math.*; import arc.math.geom.*;
import io.anuke.arc.math.geom.*; import arc.struct.*;
import io.anuke.mindustry.content.*; import mindustry.content.*;
import io.anuke.mindustry.entities.type.*; import mindustry.entities.type.*;
import io.anuke.mindustry.game.EventType.*; import mindustry.game.EventType.*;
import io.anuke.mindustry.game.*; import mindustry.game.*;
import io.anuke.mindustry.game.Teams.*; import mindustry.game.Teams.*;
import io.anuke.mindustry.type.*; import mindustry.type.*;
import io.anuke.mindustry.world.*; import mindustry.world.*;
import io.anuke.mindustry.world.blocks.*; import mindustry.world.blocks.*;
import io.anuke.mindustry.world.meta.*; import mindustry.world.meta.*;
import static io.anuke.mindustry.Vars.*; import static mindustry.Vars.*;
/** Class used for indexing special target blocks for AI. */ /** Class used for indexing special target blocks for AI. */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@@ -28,15 +28,15 @@ public class BlockIndexer{
private final ObjectSet<Item> itemSet = new ObjectSet<>(); private final ObjectSet<Item> itemSet = new ObjectSet<>();
/** Stores all ore quadtrants on the map. */ /** Stores all ore quadtrants on the map. */
private ObjectMap<Item, ObjectSet<Tile>> ores = new ObjectMap<>(); private ObjectMap<Item, ObjectSet<Tile>> ores = new ObjectMap<>();
/** Tags all quadrants. */ /** Maps each team ID to a quarant. A quadrant is a grid of bits, where each bit is set if and only if there is a block of that team in that quadrant. */
private GridBits[] structQuadrants; private GridBits[] structQuadrants;
/** Stores all damaged tile entities by team. */ /** Stores all damaged tile entities by team. */
private ObjectSet<Tile>[] damagedTiles = new ObjectSet[Team.all.length]; private ObjectSet<Tile>[] damagedTiles = new ObjectSet[Team.all().length];
/**All ores available on this map.*/ /**All ores available on this map.*/
private ObjectSet<Item> allOres = new ObjectSet<>(); private ObjectSet<Item> allOres = new ObjectSet<>();
/** Maps teams to a map of flagged tiles by type. */ /** Maps teams to a map of flagged tiles by type. */
private ObjectSet<Tile>[][] flagMap = new ObjectSet[Team.all.length][BlockFlag.all.length]; private ObjectSet<Tile>[][] flagMap = new ObjectSet[Team.all().length][BlockFlag.all.length];
/** Maps tile positions to their last known tile index data. */ /** Maps tile positions to their last known tile index data. */
private IntMap<TileIndex> typeMap = new IntMap<>(); private IntMap<TileIndex> typeMap = new IntMap<>();
/** Empty set used for returning. */ /** Empty set used for returning. */
@@ -59,8 +59,8 @@ public class BlockIndexer{
Events.on(WorldLoadEvent.class, event -> { Events.on(WorldLoadEvent.class, event -> {
scanOres.clear(); scanOres.clear();
scanOres.addAll(Item.getAllOres()); scanOres.addAll(Item.getAllOres());
damagedTiles = new ObjectSet[Team.all.length]; damagedTiles = new ObjectSet[Team.all().length];
flagMap = new ObjectSet[Team.all.length][BlockFlag.all.length]; flagMap = new ObjectSet[Team.all().length][BlockFlag.all.length];
for(int i = 0; i < flagMap.length; i++){ for(int i = 0; i < flagMap.length; i++){
for(int j = 0; j < BlockFlag.all.length; j++){ for(int j = 0; j < BlockFlag.all.length; j++){
@@ -73,10 +73,7 @@ public class BlockIndexer{
ores = null; ores = null;
//create bitset for each team type that contains each quadrant //create bitset for each team type that contains each quadrant
structQuadrants = new GridBits[Team.all.length]; structQuadrants = new GridBits[Team.all().length];
for(int i = 0; i < Team.all.length; i++){
structQuadrants[i] = new GridBits(Mathf.ceil(world.width() / (float)quadrantSize), Mathf.ceil(world.height() / (float)quadrantSize));
}
for(int x = 0; x < world.width(); x++){ for(int x = 0; x < world.width(); x++){
for(int y = 0; y < world.height(); y++){ for(int y = 0; y < world.height(); y++){
@@ -103,7 +100,31 @@ public class BlockIndexer{
} }
private ObjectSet<Tile>[] getFlagged(Team team){ private ObjectSet<Tile>[] getFlagged(Team team){
return flagMap[team.ordinal()]; return flagMap[team.id];
}
private GridBits structQuadrant(Team t){
if(structQuadrants[t.id] == null){
structQuadrants[t.id] = new GridBits(Mathf.ceil(world.width() / (float)quadrantSize), Mathf.ceil(world.height() / (float)quadrantSize));
}
return structQuadrants[t.id];
}
/** Updates all the structure quadrants for a newly activated team. */
public void updateTeamIndex(Team team){
if(structQuadrants == null) return;
//go through every tile... ouch
for(int x = 0; x < world.width(); x++){
for(int y = 0; y < world.height(); y++){
Tile tile = world.tile(x, y);
if(tile.getTeam() == team){
int quadrantX = tile.x / quadrantSize;
int quadrantY = tile.y / quadrantSize;
structQuadrant(team).set(quadrantX, quadrantY);
}
}
}
} }
/** @return whether this item is present on this map.*/ /** @return whether this item is present on this map.*/
@@ -115,11 +136,11 @@ public class BlockIndexer{
public ObjectSet<Tile> getDamaged(Team team){ public ObjectSet<Tile> getDamaged(Team team){
returnArray.clear(); returnArray.clear();
if(damagedTiles[team.ordinal()] == null){ if(damagedTiles[team.id] == null){
damagedTiles[team.ordinal()] = new ObjectSet<>(); damagedTiles[team.id] = new ObjectSet<>();
} }
ObjectSet<Tile> set = damagedTiles[team.ordinal()]; ObjectSet<Tile> set = damagedTiles[team.id];
for(Tile tile : set){ for(Tile tile : set){
if((tile.entity == null || tile.entity.getTeam() != team || !tile.entity.damaged()) || tile.block() instanceof BuildBlock){ if((tile.entity == null || tile.entity.getTeam() != team || !tile.entity.damaged()) || tile.block() instanceof BuildBlock){
returnArray.add(tile); returnArray.add(tile);
@@ -135,13 +156,13 @@ public class BlockIndexer{
/** Get all allied blocks with a flag. */ /** Get all allied blocks with a flag. */
public ObjectSet<Tile> getAllied(Team team, BlockFlag type){ public ObjectSet<Tile> getAllied(Team team, BlockFlag type){
return flagMap[team.ordinal()][type.ordinal()]; return flagMap[team.id][type.ordinal()];
} }
/** Get all enemy blocks with a flag. */ /** Get all enemy blocks with a flag. */
public Array<Tile> getEnemy(Team team, BlockFlag type){ public Array<Tile> getEnemy(Team team, BlockFlag type){
returnArray.clear(); returnArray.clear();
for(Team enemy : state.teams.enemiesOf(team)){ for(Team enemy : team.enemies()){
if(state.teams.isActive(enemy)){ if(state.teams.isActive(enemy)){
ObjectSet<Tile> set = getFlagged(enemy)[type.ordinal()]; ObjectSet<Tile> set = getFlagged(enemy)[type.ordinal()];
if(set != null){ if(set != null){
@@ -155,11 +176,11 @@ public class BlockIndexer{
} }
public void notifyTileDamaged(TileEntity entity){ public void notifyTileDamaged(TileEntity entity){
if(damagedTiles[entity.getTeam().ordinal()] == null){ if(damagedTiles[(int)entity.getTeam().id] == null){
damagedTiles[entity.getTeam().ordinal()] = new ObjectSet<>(); damagedTiles[(int)entity.getTeam().id] = new ObjectSet<>();
} }
ObjectSet<Tile> set = damagedTiles[entity.getTeam().ordinal()]; ObjectSet<Tile> set = damagedTiles[(int)entity.getTeam().id];
set.add(entity.tile); set.add(entity.tile);
} }
@@ -282,16 +303,16 @@ public class BlockIndexer{
int quadrantY = tile.y / quadrantSize; int quadrantY = tile.y / quadrantSize;
int index = quadrantX + quadrantY * quadWidth(); int index = quadrantX + quadrantY * quadWidth();
for(Team team : Team.all){ for(TeamData data : state.teams.getActive()){
TeamData data = state.teams.get(team); GridBits bits = structQuadrant(data.team);
//fast-set this quadrant to 'occupied' if the tile just placed is already of this team //fast-set this quadrant to 'occupied' if the tile just placed is already of this team
if(tile.getTeam() == data.team && tile.entity != null && tile.block().targetable){ if(tile.getTeam() == data.team && tile.entity != null && tile.block().targetable){
structQuadrants[data.team.ordinal()].set(quadrantX, quadrantY); bits.set(quadrantX, quadrantY);
continue; //no need to process futher continue; //no need to process futher
} }
structQuadrants[data.team.ordinal()].set(quadrantX, quadrantY, false); bits.set(quadrantX, quadrantY, false);
outer: outer:
for(int x = quadrantX * quadrantSize; x < world.width() && x < (quadrantX + 1) * quadrantSize; x++){ for(int x = quadrantX * quadrantSize; x < world.width() && x < (quadrantX + 1) * quadrantSize; x++){
@@ -299,7 +320,7 @@ public class BlockIndexer{
Tile result = world.ltile(x, y); Tile result = world.ltile(x, y);
//when a targetable block is found, mark this quadrant as occupied and stop searching //when a targetable block is found, mark this quadrant as occupied and stop searching
if(result.entity != null && result.getTeam() == data.team){ if(result.entity != null && result.getTeam() == data.team){
structQuadrants[data.team.ordinal()].set(quadrantX, quadrantY); bits.set(quadrantX, quadrantY);
break outer; break outer;
} }
} }
@@ -308,7 +329,7 @@ public class BlockIndexer{
} }
private boolean getQuad(Team team, int quadrantX, int quadrantY){ private boolean getQuad(Team team, int quadrantX, int quadrantY){
return structQuadrants[team.ordinal()].get(quadrantX, quadrantY); return structQuadrant(team).get(quadrantX, quadrantY);
} }
private int quadWidth(){ private int quadWidth(){

View File

@@ -1,20 +1,20 @@
package io.anuke.mindustry.ai; package mindustry.ai;
import io.anuke.annotations.Annotations.*; import arc.*;
import io.anuke.arc.*; import mindustry.annotations.Annotations.*;
import io.anuke.arc.collection.*; import arc.struct.*;
import io.anuke.arc.func.*; import arc.func.*;
import io.anuke.arc.math.geom.*; import arc.math.geom.*;
import io.anuke.arc.util.*; import arc.util.*;
import io.anuke.arc.util.ArcAnnotate.*; import arc.util.ArcAnnotate.*;
import io.anuke.arc.util.async.*; import arc.util.async.*;
import io.anuke.mindustry.game.EventType.*; import mindustry.game.EventType.*;
import io.anuke.mindustry.game.*; import mindustry.game.*;
import io.anuke.mindustry.gen.*; import mindustry.gen.*;
import io.anuke.mindustry.world.*; import mindustry.world.*;
import io.anuke.mindustry.world.meta.*; import mindustry.world.meta.*;
import static io.anuke.mindustry.Vars.*; import static mindustry.Vars.*;
public class Pathfinder implements Runnable{ public class Pathfinder implements Runnable{
private static final long maxUpdate = Time.millisToNanos(4); private static final long maxUpdate = Time.millisToNanos(4);
@@ -27,9 +27,9 @@ public class Pathfinder implements Runnable{
/** unordered array of path data for iteration only. DO NOT iterate ot access this in the main thread.*/ /** unordered array of path data for iteration only. DO NOT iterate ot access this in the main thread.*/
private Array<PathData> list = new Array<>(); private Array<PathData> list = new Array<>();
/** Maps teams + flags to a valid path to get to that flag for that team. */ /** Maps teams + flags to a valid path to get to that flag for that team. */
private PathData[][] pathMap = new PathData[Team.all.length][PathTarget.all.length]; private PathData[][] pathMap = new PathData[Team.all().length][PathTarget.all.length];
/** Grid map of created path data that should not be queued again. */ /** Grid map of created path data that should not be queued again. */
private GridBits created = new GridBits(Team.all.length, PathTarget.all.length); private GridBits created = new GridBits(Team.all().length, PathTarget.all.length);
/** handles task scheduling on the update thread. */ /** handles task scheduling on the update thread. */
private TaskQueue queue = new TaskQueue(); private TaskQueue queue = new TaskQueue();
/** current pathfinding thread */ /** current pathfinding thread */
@@ -42,8 +42,8 @@ public class Pathfinder implements Runnable{
//reset and update internal tile array //reset and update internal tile array
tiles = new int[world.width()][world.height()]; tiles = new int[world.width()][world.height()];
pathMap = new PathData[Team.all.length][PathTarget.all.length]; pathMap = new PathData[Team.all().length][PathTarget.all.length];
created = new GridBits(Team.all.length, PathTarget.all.length); created = new GridBits(Team.all().length, PathTarget.all.length);
list = new Array<>(); list = new Array<>();
for(int x = 0; x < world.width(); x++){ for(int x = 0; x < world.width(); x++){
@@ -53,7 +53,7 @@ public class Pathfinder implements Runnable{
} }
//special preset which may help speed things up; this is optional //special preset which may help speed things up; this is optional
preloadPath(waveTeam, PathTarget.enemyCores); preloadPath(state.rules.waveTeam, PathTarget.enemyCores);
start(); start();
}); });
@@ -84,8 +84,8 @@ public class Pathfinder implements Runnable{
} }
public int debugValue(Team team, int x, int y){ public int debugValue(Team team, int x, int y){
if(pathMap[team.ordinal()][PathTarget.enemyCores.ordinal()] == null) return 0; if(pathMap[team.id][PathTarget.enemyCores.ordinal()] == null) return 0;
return pathMap[team.ordinal()][PathTarget.enemyCores.ordinal()].weights[x][y]; return pathMap[team.id][PathTarget.enemyCores.ordinal()].weights[x][y];
} }
/** Update a tile in the internal pathfinding grid. Causes a complete pathfinding reclaculation. */ /** Update a tile in the internal pathfinding grid. Causes a complete pathfinding reclaculation. */
@@ -139,7 +139,7 @@ public class Pathfinder implements Runnable{
//stop looping when interrupted externally //stop looping when interrupted externally
return; return;
} }
}catch(Exception e){ }catch(Throwable e){
e.printStackTrace(); e.printStackTrace();
} }
} }
@@ -149,12 +149,12 @@ public class Pathfinder implements Runnable{
public Tile getTargetTile(Tile tile, Team team, PathTarget target){ public Tile getTargetTile(Tile tile, Team team, PathTarget target){
if(tile == null) return null; if(tile == null) return null;
PathData data = pathMap[team.ordinal()][target.ordinal()]; PathData data = pathMap[team.id][target.ordinal()];
if(data == null){ if(data == null){
//if this combination is not found, create it on request //if this combination is not found, create it on request
if(!created.get(team.ordinal(), target.ordinal())){ if(!created.get(team.id, target.ordinal())){
created.set(team.ordinal(), target.ordinal()); created.set(team.id, target.ordinal());
//grab targets since this is run on main thread //grab targets since this is run on main thread
IntArray targets = target.getTargets(team, new IntArray()); IntArray targets = target.getTargets(team, new IntArray());
queue.post(() -> createPath(team, target, targets)); queue.post(() -> createPath(team, target, targets));
@@ -188,7 +188,7 @@ public class Pathfinder implements Runnable{
/** @return whether a tile can be passed through by this team. Pathfinding thread only.*/ /** @return whether a tile can be passed through by this team. Pathfinding thread only.*/
private boolean passable(int x, int y, Team team){ private boolean passable(int x, int y, Team team){
int tile = tiles[x][y]; int tile = tiles[x][y];
return PathTile.passable(tile) || (PathTile.team(tile) != team.ordinal() && PathTile.team(tile) != Team.derelict.ordinal()); return PathTile.passable(tile) || (PathTile.team(tile) != team.id && PathTile.team(tile) != (int)Team.derelict.id);
} }
/** /**
@@ -238,7 +238,7 @@ public class Pathfinder implements Runnable{
PathData path = new PathData(team, target, world.width(), world.height()); PathData path = new PathData(team, target, world.width(), world.height());
list.add(path); list.add(path);
pathMap[team.ordinal()][target.ordinal()] = path; pathMap[team.id][target.ordinal()] = path;
//grab targets from passed array //grab targets from passed array
synchronized(path.targets){ synchronized(path.targets){
@@ -303,7 +303,7 @@ public class Pathfinder implements Runnable{
} }
//spawn points are also enemies. //spawn points are also enemies.
if(state.rules.waves && team == defaultTeam){ if(state.rules.waves && team == state.rules.defaultTeam){
for(Tile other : spawner.getGroundSpawns()){ for(Tile other : spawner.getGroundSpawns()){
out.add(other.pos()); out.add(other.pos());
} }

View File

@@ -1,22 +1,22 @@
package io.anuke.mindustry.ai; package mindustry.ai;
import io.anuke.arc.Events; import arc.Events;
import io.anuke.arc.collection.Array; import arc.struct.Array;
import io.anuke.arc.func.Floatc2; import arc.func.Floatc2;
import io.anuke.arc.math.Angles; import arc.math.Angles;
import io.anuke.arc.math.Mathf; import arc.math.Mathf;
import io.anuke.arc.util.Time; import arc.util.Time;
import io.anuke.arc.util.Tmp; import arc.util.Tmp;
import io.anuke.mindustry.content.Blocks; import mindustry.content.Blocks;
import io.anuke.mindustry.content.Fx; import mindustry.content.Fx;
import io.anuke.mindustry.entities.Damage; import mindustry.entities.Damage;
import io.anuke.mindustry.entities.Effects; import mindustry.entities.Effects;
import io.anuke.mindustry.entities.type.BaseUnit; import mindustry.entities.type.*;
import io.anuke.mindustry.game.EventType.WorldLoadEvent; import mindustry.game.EventType.WorldLoadEvent;
import io.anuke.mindustry.game.SpawnGroup; import mindustry.game.SpawnGroup;
import io.anuke.mindustry.world.Tile; import mindustry.world.Tile;
import static io.anuke.mindustry.Vars.*; import static mindustry.Vars.*;
public class WaveSpawner{ public class WaveSpawner{
private static final float margin = 40f, coreMargin = tilesize * 3; //how far away from the edge flying units spawn private static final float margin = 40f, coreMargin = tilesize * 3; //how far away from the edge flying units spawn
@@ -53,7 +53,7 @@ public class WaveSpawner{
eachFlyerSpawn((spawnX, spawnY) -> { eachFlyerSpawn((spawnX, spawnY) -> {
for(int i = 0; i < spawned; i++){ for(int i = 0; i < spawned; i++){
BaseUnit unit = group.createUnit(waveTeam); BaseUnit unit = group.createUnit(state.rules.waveTeam);
unit.set(spawnX + Mathf.range(spread), spawnY + Mathf.range(spread)); unit.set(spawnX + Mathf.range(spread), spawnY + Mathf.range(spread));
unit.add(); unit.add();
} }
@@ -66,7 +66,7 @@ public class WaveSpawner{
for(int i = 0; i < spawned; i++){ for(int i = 0; i < spawned; i++){
Tmp.v1.rnd(spread); Tmp.v1.rnd(spread);
BaseUnit unit = group.createUnit(waveTeam); BaseUnit unit = group.createUnit(state.rules.waveTeam);
unit.set(spawnX + Tmp.v1.x, spawnY + Tmp.v1.y); unit.set(spawnX + Tmp.v1.x, spawnY + Tmp.v1.y);
Time.run(Math.min(i * 5, 60 * 2), () -> spawnEffect(unit)); Time.run(Math.min(i * 5, 60 * 2), () -> spawnEffect(unit));
@@ -78,7 +78,7 @@ public class WaveSpawner{
eachGroundSpawn((spawnX, spawnY, doShockwave) -> { eachGroundSpawn((spawnX, spawnY, doShockwave) -> {
if(doShockwave){ if(doShockwave){
Time.run(20f, () -> Effects.effect(Fx.spawnShockwave, spawnX, spawnY, state.rules.dropZoneRadius)); Time.run(20f, () -> Effects.effect(Fx.spawnShockwave, spawnX, spawnY, state.rules.dropZoneRadius));
Time.run(40f, () -> Damage.damage(waveTeam, spawnX, spawnY, state.rules.dropZoneRadius, 99999999f, true)); Time.run(40f, () -> Damage.damage(state.rules.waveTeam, spawnX, spawnY, state.rules.dropZoneRadius, 99999999f, true));
} }
}); });
@@ -90,11 +90,11 @@ public class WaveSpawner{
cons.accept(spawn.worldx(), spawn.worldy(), true); cons.accept(spawn.worldx(), spawn.worldy(), true);
} }
if(state.rules.attackMode && state.teams.isActive(waveTeam) && !state.teams.get(defaultTeam).cores.isEmpty()){ if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam) && !state.teams.playerCores().isEmpty()){
Tile firstCore = state.teams.get(defaultTeam).cores.first(); TileEntity firstCore = state.teams.playerCores().first();
for(Tile core : state.teams.get(waveTeam).cores){ for(TileEntity core : state.rules.waveTeam.cores()){
Tmp.v1.set(firstCore).sub(core.worldx(), core.worldy()).limit(coreMargin + core.block().size*tilesize); Tmp.v1.set(firstCore).sub(core.x, core.y).limit(coreMargin + core.block.size*tilesize);
cons.accept(core.worldx() + Tmp.v1.x, core.worldy() + Tmp.v1.y, false); cons.accept(core.x + Tmp.v1.x, core.y + Tmp.v1.y, false);
} }
} }
} }
@@ -107,9 +107,9 @@ public class WaveSpawner{
cons.get(spawnX, spawnY); cons.get(spawnX, spawnY);
} }
if(state.rules.attackMode && state.teams.isActive(waveTeam)){ if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam)){
for(Tile core : state.teams.get(waveTeam).cores){ for(TileEntity core : state.teams.get(state.rules.waveTeam).cores){
cons.get(core.worldx(), core.worldy()); cons.get(core.x, core.y);
} }
} }
} }

View File

@@ -1,34 +1,34 @@
package io.anuke.mindustry.content; package mindustry.content;
import io.anuke.arc.*; import arc.*;
import io.anuke.arc.collection.*; import arc.struct.*;
import io.anuke.arc.graphics.*; import arc.graphics.*;
import io.anuke.arc.graphics.g2d.*; import arc.graphics.g2d.*;
import io.anuke.arc.math.*; import arc.math.*;
import io.anuke.arc.util.*; import arc.util.*;
import io.anuke.mindustry.*; import mindustry.*;
import io.anuke.mindustry.ctype.*; import mindustry.ctype.*;
import io.anuke.mindustry.entities.*; import mindustry.entities.*;
import io.anuke.mindustry.entities.bullet.*; import mindustry.entities.bullet.*;
import io.anuke.mindustry.entities.type.*; import mindustry.entities.type.*;
import io.anuke.mindustry.gen.*; import mindustry.gen.*;
import io.anuke.mindustry.graphics.*; import mindustry.graphics.*;
import io.anuke.mindustry.type.*; import mindustry.type.*;
import io.anuke.mindustry.world.*; import mindustry.world.*;
import io.anuke.mindustry.world.blocks.*; import mindustry.world.blocks.*;
import io.anuke.mindustry.world.blocks.defense.*; import mindustry.world.blocks.defense.*;
import io.anuke.mindustry.world.blocks.defense.turrets.*; import mindustry.world.blocks.defense.turrets.*;
import io.anuke.mindustry.world.blocks.distribution.*; import mindustry.world.blocks.distribution.*;
import io.anuke.mindustry.world.blocks.liquid.*; import mindustry.world.blocks.liquid.*;
import io.anuke.mindustry.world.blocks.logic.*; import mindustry.world.blocks.logic.*;
import io.anuke.mindustry.world.blocks.power.*; import mindustry.world.blocks.power.*;
import io.anuke.mindustry.world.blocks.production.*; import mindustry.world.blocks.production.*;
import io.anuke.mindustry.world.blocks.sandbox.*; import mindustry.world.blocks.sandbox.*;
import io.anuke.mindustry.world.blocks.storage.*; import mindustry.world.blocks.storage.*;
import io.anuke.mindustry.world.blocks.units.*; import mindustry.world.blocks.units.*;
import io.anuke.mindustry.world.consumers.*; import mindustry.world.consumers.*;
import io.anuke.mindustry.world.meta.*; import mindustry.world.meta.*;
import io.anuke.mindustry.world.modules.*; import mindustry.world.modules.*;
public class Blocks implements ContentList{ public class Blocks implements ContentList{
public static Block public static Block
@@ -1234,7 +1234,7 @@ public class Blocks implements ContentList{
//region storage //region storage
coreShard = new CoreBlock("core-shard"){{ coreShard = new CoreBlock("core-shard"){{
requirements(Category.effect, BuildVisibility.debugOnly, ItemStack.with(Items.titanium, 4000)); requirements(Category.effect, BuildVisibility.debugOnly, ItemStack.with());
alwaysUnlocked = true; alwaysUnlocked = true;
health = 1100; health = 1100;
@@ -1243,7 +1243,7 @@ public class Blocks implements ContentList{
}}; }};
coreFoundation = new CoreBlock("core-foundation"){{ coreFoundation = new CoreBlock("core-foundation"){{
requirements(Category.effect, BuildVisibility.debugOnly, ItemStack.with(Items.titanium, 400, Items.silicon, 3000)); requirements(Category.effect, BuildVisibility.debugOnly, ItemStack.with());
health = 2000; health = 2000;
itemCapacity = 9000; itemCapacity = 9000;
@@ -1251,7 +1251,7 @@ public class Blocks implements ContentList{
}}; }};
coreNucleus = new CoreBlock("core-nucleus"){{ coreNucleus = new CoreBlock("core-nucleus"){{
requirements(Category.effect, BuildVisibility.debugOnly, ItemStack.with(Items.titanium, 4000, Items.silicon, 2000, Items.surgealloy, 3000)); requirements(Category.effect, BuildVisibility.debugOnly, ItemStack.with());
health = 4000; health = 4000;
itemCapacity = 13000; itemCapacity = 13000;
@@ -1388,15 +1388,6 @@ public class Blocks implements ContentList{
range = 110f; range = 110f;
health = 250 * size * size; health = 250 * size * size;
shootSound = Sounds.splash; shootSound = Sounds.splash;
drawer = (tile, entity) -> {
Draw.rect(region, tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90);
Draw.color(entity.liquids.current().color);
Draw.alpha(entity.liquids.total() / liquidCapacity);
Draw.rect(name + "-liquid", tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90);
Draw.color();
};
}}; }};
lancer = new ChargeTurret("lancer"){{ lancer = new ChargeTurret("lancer"){{
@@ -1511,7 +1502,7 @@ public class Blocks implements ContentList{
} }
@Override @Override
public void init(io.anuke.mindustry.entities.type.Bullet b){ public void init(mindustry.entities.type.Bullet b){
for(int i = 0; i < rays; i++){ for(int i = 0; i < rays; i++){
Damage.collideLine(b, b.getTeam(), hitEffect, b.x, b.y, b.rot(), rayLength - Math.abs(i - (rays / 2)) * 20f); Damage.collideLine(b, b.getTeam(), hitEffect, b.x, b.y, b.rot(), rayLength - Math.abs(i - (rays / 2)) * 20f);
} }
@@ -1542,7 +1533,7 @@ public class Blocks implements ContentList{
Items.silicon, Bullets.artilleryHoming, Items.silicon, Bullets.artilleryHoming,
Items.pyratite, Bullets.artilleryIncendiary, Items.pyratite, Bullets.artilleryIncendiary,
Items.blastCompound, Bullets.artilleryExplosive, Items.blastCompound, Bullets.artilleryExplosive,
Items.plastanium, Bullets.arilleryPlastic Items.plastanium, Bullets.artilleryPlastic
); );
size = 3; size = 3;
shots = 4; shots = 4;

View File

@@ -1,24 +1,24 @@
package io.anuke.mindustry.content; package mindustry.content;
import io.anuke.arc.graphics.*; import arc.graphics.*;
import io.anuke.arc.graphics.g2d.*; import arc.graphics.g2d.*;
import io.anuke.arc.math.*; import arc.math.*;
import io.anuke.arc.util.*; import arc.util.*;
import io.anuke.mindustry.ctype.ContentList; import mindustry.ctype.ContentList;
import io.anuke.mindustry.entities.*; import mindustry.entities.*;
import io.anuke.mindustry.entities.bullet.*; import mindustry.entities.bullet.*;
import io.anuke.mindustry.entities.effect.*; import mindustry.entities.effect.*;
import io.anuke.mindustry.entities.type.*; import mindustry.entities.type.*;
import io.anuke.mindustry.graphics.*; import mindustry.graphics.*;
import io.anuke.mindustry.world.*; import mindustry.world.*;
import static io.anuke.mindustry.Vars.*; import static mindustry.Vars.*;
public class Bullets implements ContentList{ public class Bullets implements ContentList{
public static BulletType public static BulletType
//artillery //artillery
artilleryDense, arilleryPlastic, artilleryPlasticFrag, artilleryHoming, artilleryIncendiary, artilleryExplosive, artilleryUnit, artilleryDense, artilleryPlastic, artilleryPlasticFrag, artilleryHoming, artilleryIncendiary, artilleryExplosive, artilleryUnit,
//flak //flak
flakScrap, flakLead, flakPlastic, flakExplosive, flakSurge, flakGlass, glassFrag, flakScrap, flakLead, flakPlastic, flakExplosive, flakSurge, flakGlass, glassFrag,
@@ -65,7 +65,7 @@ public class Bullets implements ContentList{
despawnEffect = Fx.none; despawnEffect = Fx.none;
}}; }};
arilleryPlastic = new ArtilleryBulletType(3.4f, 0, "shell"){{ artilleryPlastic = new ArtilleryBulletType(3.4f, 0, "shell"){{
hitEffect = Fx.plasticExplosion; hitEffect = Fx.plasticExplosion;
knockback = 1f; knockback = 1f;
lifetime = 55f; lifetime = 55f;

View File

@@ -1,19 +1,19 @@
package io.anuke.mindustry.content; package mindustry.content;
import io.anuke.arc.*; import arc.*;
import io.anuke.arc.graphics.*; import arc.graphics.*;
import io.anuke.arc.graphics.g2d.*; import arc.graphics.g2d.*;
import io.anuke.arc.math.*; import arc.math.*;
import io.anuke.arc.util.*; import arc.util.*;
import io.anuke.mindustry.ctype.ContentList; import mindustry.ctype.ContentList;
import io.anuke.mindustry.entities.Effects.*; import mindustry.entities.Effects.*;
import io.anuke.mindustry.entities.effect.GroundEffectEntity.*; import mindustry.entities.effect.GroundEffectEntity.*;
import io.anuke.mindustry.entities.type.*; import mindustry.entities.type.*;
import io.anuke.mindustry.graphics.*; import mindustry.graphics.*;
import io.anuke.mindustry.type.*; import mindustry.type.*;
import io.anuke.mindustry.ui.Cicon; import mindustry.ui.Cicon;
import static io.anuke.mindustry.Vars.*; import static mindustry.Vars.*;
public class Fx implements ContentList{ public class Fx implements ContentList{
public static Effect public static Effect
@@ -1079,6 +1079,7 @@ public class Fx implements ContentList{
healBlockFull = new Effect(20, e -> { healBlockFull = new Effect(20, e -> {
Draw.color(e.color); Draw.color(e.color);
Draw.alpha(e.fout()); Draw.alpha(e.fout());
Fill.square(e.x, e.y, e.rotation * tilesize / 2f);
}); });
overdriveBlockFull = new Effect(60, e -> { overdriveBlockFull = new Effect(60, e -> {

View File

@@ -1,9 +1,9 @@
package io.anuke.mindustry.content; package mindustry.content;
import io.anuke.arc.graphics.Color; import arc.graphics.Color;
import io.anuke.mindustry.ctype.ContentList; import mindustry.ctype.ContentList;
import io.anuke.mindustry.type.Item; import mindustry.type.Item;
import io.anuke.mindustry.type.ItemType; import mindustry.type.ItemType;
public class Items implements ContentList{ public class Items implements ContentList{
public static Item scrap, copper, lead, graphite, coal, titanium, thorium, silicon, plastanium, phasefabric, surgealloy, public static Item scrap, copper, lead, graphite, coal, titanium, thorium, silicon, plastanium, phasefabric, surgealloy,

View File

@@ -1,8 +1,8 @@
package io.anuke.mindustry.content; package mindustry.content;
import io.anuke.arc.graphics.Color; import arc.graphics.Color;
import io.anuke.mindustry.ctype.ContentList; import mindustry.ctype.ContentList;
import io.anuke.mindustry.type.Liquid; import mindustry.type.Liquid;
public class Liquids implements ContentList{ public class Liquids implements ContentList{
public static Liquid water, slag, oil, cryofluid; public static Liquid water, slag, oil, cryofluid;

View File

@@ -0,0 +1,20 @@
package mindustry.content;
import mindustry.ctype.*;
import mindustry.game.*;
public class Loadouts implements ContentList{
public static Schematic
basicShard,
advancedShard,
basicFoundation,
basicNucleus;
@Override
public void load(){
basicShard = Schematics.readBase64("bXNjaAB4nD2K2wqAIBiD5ymibnoRn6YnEP1BwUMoBL19FuJ2sbFvUFgYZDaJsLeQrkinN9UJHImsNzlYE7WrIUastuSbnlKx2VJJt+8IQGGKdfO/8J5yrGJSMegLg+YUIA==");
advancedShard = Schematics.readBase64("bXNjaAB4nD2LjQqAIAyET7OMIOhFfJqeYMxBgSkYCL199gu33fFtB4tOwUTaBCP5QpHFzwtl32DahBeKK1NwPq8hoOcUixwpY+CUxe3XIwBbB/pa6tadVCUP02hgHvp5vZq/0b7pBHPYFOQ=");
basicFoundation = Schematics.readBase64("bXNjaAB4nD1OSQ6DMBBzFhVu8BG+0X8MQyoiJTNSukj8nlCi2Adbtg/GA4OBF8oB00rvyE/9ykafqOIw58A7SWRKy1ZiShhZ5RcOLZhYS1hefQ1gRIeptH9jq/qW2lvc1d2tgWsOfVX/tOwE86AYBA==");
basicNucleus = Schematics.readBase64("bXNjaAB4nD2MUQqAIBBEJy0s6qOLdJXuYNtCgikYBd2+LNmdj308hkGHtkId7M4YFns4mk/yfB4a48602eDI+mlNznu0FMPFd0wYKCaewl8F0EOueqM+yKSLVfJrNKWnSw/FZGzEGXFG9sy/px4gEBW1");
}
}

View File

@@ -1,19 +1,19 @@
package io.anuke.mindustry.content; package mindustry.content;
import io.anuke.arc.*; import arc.*;
import io.anuke.arc.graphics.*; import arc.graphics.*;
import io.anuke.arc.graphics.g2d.*; import arc.graphics.g2d.*;
import io.anuke.arc.math.*; import arc.math.*;
import io.anuke.arc.util.*; import arc.util.*;
import io.anuke.mindustry.*; import mindustry.*;
import io.anuke.mindustry.ctype.ContentList; import mindustry.ctype.ContentList;
import io.anuke.mindustry.entities.*; import mindustry.entities.*;
import io.anuke.mindustry.entities.bullet.*; import mindustry.entities.bullet.*;
import io.anuke.mindustry.entities.effect.*; import mindustry.entities.effect.*;
import io.anuke.mindustry.entities.type.*; import mindustry.entities.type.*;
import io.anuke.mindustry.gen.*; import mindustry.gen.*;
import io.anuke.mindustry.graphics.*; import mindustry.graphics.*;
import io.anuke.mindustry.type.*; import mindustry.type.*;
public class Mechs implements ContentList{ public class Mechs implements ContentList{
public static Mech alpha, delta, tau, omega, dart, javelin, trident, glaive; public static Mech alpha, delta, tau, omega, dart, javelin, trident, glaive;

View File

@@ -1,13 +1,12 @@
package io.anuke.mindustry.content; package mindustry.content;
import io.anuke.arc.*; import arc.*;
import io.anuke.arc.math.Mathf; import arc.math.Mathf;
import io.anuke.mindustry.entities.Effects; import mindustry.entities.Effects;
import io.anuke.mindustry.ctype.ContentList; import mindustry.ctype.ContentList;
import io.anuke.mindustry.game.EventType.*; import mindustry.game.EventType.*;
import io.anuke.mindustry.type.StatusEffect; import mindustry.type.StatusEffect;
import static mindustry.Vars.*;
import static io.anuke.mindustry.Vars.waveTeam;
public class StatusEffects implements ContentList{ public class StatusEffects implements ContentList{
public static StatusEffect none, burning, freezing, wet, melting, tarred, overdrive, shielded, shocked, corroded, boss; public static StatusEffect none, burning, freezing, wet, melting, tarred, overdrive, shielded, shocked, corroded, boss;
@@ -48,7 +47,7 @@ public class StatusEffects implements ContentList{
init(() -> { init(() -> {
trans(shocked, ((unit, time, newTime, result) -> { trans(shocked, ((unit, time, newTime, result) -> {
unit.damage(20f); unit.damage(20f);
if(unit.getTeam() == waveTeam){ if(unit.getTeam() == state.rules.waveTeam){
Events.fire(Trigger.shock); Events.fire(Trigger.shock);
} }
result.set(this, time); result.set(this, time);

View File

@@ -1,11 +1,11 @@
package io.anuke.mindustry.content; package mindustry.content;
import io.anuke.arc.collection.Array; import arc.struct.Array;
import io.anuke.mindustry.ctype.ContentList; import mindustry.ctype.ContentList;
import io.anuke.mindustry.type.ItemStack; import mindustry.type.ItemStack;
import io.anuke.mindustry.world.Block; import mindustry.world.Block;
import static io.anuke.mindustry.content.Blocks.*; import static mindustry.content.Blocks.*;
public class TechTree implements ContentList{ public class TechTree implements ContentList{
public static Array<TechNode> all; public static Array<TechNode> all;

View File

@@ -1,10 +1,10 @@
package io.anuke.mindustry.content; package mindustry.content;
import io.anuke.mindustry.entities.effect.Fire; import mindustry.entities.effect.Fire;
import io.anuke.mindustry.entities.effect.Puddle; import mindustry.entities.effect.Puddle;
import io.anuke.mindustry.entities.type.Player; import mindustry.entities.type.Player;
import io.anuke.mindustry.ctype.ContentList; import mindustry.ctype.ContentList;
import io.anuke.mindustry.type.TypeID; import mindustry.type.TypeID;
public class TypeIDs implements ContentList{ public class TypeIDs implements ContentList{
public static TypeID fire, puddle, player; public static TypeID fire, puddle, player;

View File

@@ -1,13 +1,13 @@
package io.anuke.mindustry.content; package mindustry.content;
import io.anuke.arc.collection.*; import arc.struct.*;
import io.anuke.mindustry.ctype.ContentList; import mindustry.ctype.ContentList;
import io.anuke.mindustry.entities.bullet.*; import mindustry.entities.bullet.*;
import io.anuke.mindustry.entities.type.*; import mindustry.entities.type.*;
import io.anuke.mindustry.entities.type.Bullet; import mindustry.entities.type.Bullet;
import io.anuke.mindustry.entities.type.base.*; import mindustry.entities.type.base.*;
import io.anuke.mindustry.gen.*; import mindustry.gen.*;
import io.anuke.mindustry.type.*; import mindustry.type.*;
public class UnitTypes implements ContentList{ public class UnitTypes implements ContentList{
public static UnitType public static UnitType

View File

@@ -1,16 +1,16 @@
package io.anuke.mindustry.content; package mindustry.content;
import io.anuke.mindustry.ctype.ContentList; import mindustry.ctype.ContentList;
import io.anuke.mindustry.game.*; import mindustry.game.*;
import io.anuke.mindustry.game.Objectives.*; import mindustry.game.Objectives.*;
import io.anuke.mindustry.maps.generators.*; import mindustry.maps.generators.*;
import io.anuke.mindustry.maps.generators.MapGenerator.*; import mindustry.maps.generators.MapGenerator.*;
import io.anuke.mindustry.maps.zonegen.*; import mindustry.maps.zonegen.*;
import io.anuke.mindustry.type.*; import mindustry.type.*;
import static io.anuke.arc.collection.Array.with; import static arc.struct.Array.with;
import static io.anuke.mindustry.content.Items.*; import static mindustry.content.Items.*;
import static io.anuke.mindustry.type.ItemStack.list; import static mindustry.type.ItemStack.list;
public class Zones implements ContentList{ public class Zones implements ContentList{
public static Zone public static Zone

View File

@@ -1,19 +1,20 @@
package io.anuke.mindustry.core; package mindustry.core;
import io.anuke.arc.collection.*; import arc.struct.*;
import io.anuke.arc.func.*; import arc.func.*;
import io.anuke.arc.graphics.*; import arc.graphics.*;
import io.anuke.arc.util.ArcAnnotate.*; import arc.util.ArcAnnotate.*;
import io.anuke.arc.util.*; import arc.util.*;
import io.anuke.mindustry.content.*; import mindustry.content.*;
import io.anuke.mindustry.ctype.*; import mindustry.ctype.*;
import io.anuke.mindustry.entities.bullet.*; import mindustry.ctype.ContentType;
import io.anuke.mindustry.mod.Mods.*; import mindustry.entities.bullet.*;
import io.anuke.mindustry.type.*; import mindustry.mod.Mods.*;
import io.anuke.mindustry.world.*; import mindustry.type.*;
import mindustry.world.*;
import static io.anuke.arc.Core.files; import static arc.Core.files;
import static io.anuke.mindustry.Vars.mods; import static mindustry.Vars.mods;
/** /**
* Loads all game content. * Loads all game content.
@@ -25,6 +26,7 @@ public class ContentLoader{
private Array<Content>[] contentMap = new Array[ContentType.values().length]; private Array<Content>[] contentMap = new Array[ContentType.values().length];
private MappableContent[][] temporaryMapper; private MappableContent[][] temporaryMapper;
private @Nullable LoadedMod currentMod; private @Nullable LoadedMod currentMod;
private @Nullable Content lastAdded;
private ObjectSet<Cons<Content>> initialization = new ObjectSet<>(); private ObjectSet<Cons<Content>> initialization = new ObjectSet<>();
private ContentList[] content = { private ContentList[] content = {
new Fx(), new Fx(),
@@ -114,8 +116,8 @@ public class ContentLoader{
try{ try{
callable.get(content); callable.get(content);
}catch(Throwable e){ }catch(Throwable e){
if(content.mod != null){ if(content.minfo.mod != null){
mods.handleError(new ModLoadException(content, e), content.mod); mods.handleContentError(content, e);
}else{ }else{
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@@ -146,11 +148,27 @@ public class ContentLoader{
//clear all content, currently not used //clear all content, currently not used
} }
/** Get last piece of content created for error-handling purposes. */
public @Nullable Content getLastAdded(){
return lastAdded;
}
/** Remove last content added in case of an exception. */
public void removeLast(){
if(lastAdded != null && contentMap[lastAdded.getContentType().ordinal()].peek() == lastAdded){
contentMap[lastAdded.getContentType().ordinal()].pop();
if(lastAdded instanceof MappableContent){
contentNameMap[lastAdded.getContentType().ordinal()].remove(((MappableContent)lastAdded).name);
}
}
}
public void handleContent(Content content){ public void handleContent(Content content){
this.lastAdded = content;
contentMap[content.getContentType().ordinal()].add(content); contentMap[content.getContentType().ordinal()].add(content);
} }
public void setCurrentMod(LoadedMod mod){ public void setCurrentMod(@Nullable LoadedMod mod){
this.currentMod = mod; this.currentMod = mod;
} }
@@ -163,7 +181,7 @@ public class ContentLoader{
throw new IllegalArgumentException("Two content objects cannot have the same name! (issue: '" + content.name + "')"); throw new IllegalArgumentException("Two content objects cannot have the same name! (issue: '" + content.name + "')");
} }
if(currentMod != null){ if(currentMod != null){
content.mod = currentMod; content.minfo.mod = currentMod;
} }
contentNameMap[content.getContentType().ordinal()].put(content.name, content); contentNameMap[content.getContentType().ordinal()].put(content.name, content);
} }

View File

@@ -1,36 +1,36 @@
package io.anuke.mindustry.core; package mindustry.core;
import io.anuke.arc.*; import arc.*;
import io.anuke.arc.assets.*; import arc.assets.*;
import io.anuke.arc.audio.*; import arc.audio.*;
import io.anuke.arc.collection.*; import arc.struct.*;
import io.anuke.arc.graphics.*; import arc.graphics.*;
import io.anuke.arc.graphics.g2d.*; import arc.graphics.g2d.*;
import io.anuke.arc.input.*; import arc.input.*;
import io.anuke.arc.math.geom.*; import arc.math.geom.*;
import io.anuke.arc.scene.ui.*; import arc.scene.ui.*;
import io.anuke.arc.util.*; import arc.util.*;
import io.anuke.mindustry.content.*; import mindustry.content.*;
import io.anuke.mindustry.core.GameState.*; import mindustry.core.GameState.*;
import io.anuke.mindustry.entities.*; import mindustry.entities.*;
import io.anuke.mindustry.entities.type.*; import mindustry.entities.type.*;
import io.anuke.mindustry.game.EventType.*; import mindustry.game.EventType.*;
import io.anuke.mindustry.game.*; import mindustry.game.*;
import io.anuke.mindustry.gen.*; import mindustry.gen.*;
import io.anuke.mindustry.input.*; import mindustry.input.*;
import io.anuke.mindustry.maps.Map; import mindustry.maps.Map;
import io.anuke.mindustry.type.*; import mindustry.type.*;
import io.anuke.mindustry.ui.dialogs.*; import mindustry.ui.dialogs.*;
import io.anuke.mindustry.world.*; import mindustry.world.*;
import io.anuke.mindustry.world.blocks.storage.*; import mindustry.world.blocks.storage.*;
import java.io.*; import java.io.*;
import java.text.*; import java.text.*;
import java.util.*; import java.util.*;
import static io.anuke.arc.Core.*; import static arc.Core.*;
import static io.anuke.mindustry.Vars.net; import static mindustry.Vars.net;
import static io.anuke.mindustry.Vars.*; import static mindustry.Vars.*;
/** /**
* Control module. * Control module.
@@ -63,7 +63,7 @@ public class Control implements ApplicationListener, Loadable{
}); });
Events.on(PlayEvent.class, event -> { Events.on(PlayEvent.class, event -> {
player.setTeam(state.rules.pvp ? netServer.assignTeam(player, playerGroup.all()) : defaultTeam); player.setTeam(netServer.assignTeam(player, playerGroup.all()));
player.setDead(true); player.setDead(true);
player.add(); player.add();
@@ -256,9 +256,9 @@ public class Control implements ApplicationListener, Loadable{
world.loadGenerator(zone.generator); world.loadGenerator(zone.generator);
zone.rules.get(state.rules); zone.rules.get(state.rules);
state.rules.zone = zone; state.rules.zone = zone;
for(Tile core : state.teams.get(defaultTeam).cores){ for(TileEntity core : state.teams.playerCores()){
for(ItemStack stack : zone.getStartingItems()){ for(ItemStack stack : zone.getStartingItems()){
core.entity.items.add(stack.item, stack.amount); core.items.add(stack.item, stack.amount);
} }
} }
state.set(State.playing); state.set(State.playing);
@@ -294,8 +294,8 @@ public class Control implements ApplicationListener, Loadable{
Geometry.circle(coreb.x, coreb.y, 10, (cx, cy) -> { Geometry.circle(coreb.x, coreb.y, 10, (cx, cy) -> {
Tile tile = world.ltile(cx, cy); Tile tile = world.ltile(cx, cy);
if(tile != null && tile.getTeam() == defaultTeam && !(tile.block() instanceof CoreBlock)){ if(tile != null && tile.getTeam() == state.rules.defaultTeam && !(tile.block() instanceof CoreBlock)){
world.removeBlock(tile); tile.remove();
} }
}); });
@@ -305,13 +305,13 @@ public class Control implements ApplicationListener, Loadable{
zone.rules.get(state.rules); zone.rules.get(state.rules);
state.rules.zone = zone; state.rules.zone = zone;
for(Tile core : state.teams.get(defaultTeam).cores){ for(TileEntity core : state.teams.playerCores()){
for(ItemStack stack : zone.getStartingItems()){ for(ItemStack stack : zone.getStartingItems()){
core.entity.items.add(stack.item, stack.amount); core.items.add(stack.item, stack.amount);
} }
} }
Tile core = state.teams.get(defaultTeam).cores.first(); TileEntity core = state.teams.playerCores().first();
core.entity.items.clear(); core.items.clear();
logic.play(); logic.play();
state.rules.waveTimer = false; state.rules.waveTimer = false;
@@ -434,9 +434,9 @@ public class Control implements ApplicationListener, Loadable{
input.update(); input.update();
if(world.isZone()){ if(world.isZone()){
for(Tile tile : state.teams.get(player.getTeam()).cores){ for(TileEntity tile : state.teams.cores(player.getTeam())){
for(Item item : content.items()){ for(Item item : content.items()){
if(tile.entity != null && tile.entity.items.has(item)){ if(tile.items.has(item)){
data.unlockContent(item); data.unlockContent(item);
} }
} }
@@ -456,7 +456,7 @@ public class Control implements ApplicationListener, Loadable{
state.set(state.is(State.playing) ? State.paused : State.playing); state.set(state.is(State.playing) ? State.paused : State.playing);
} }
if(Core.input.keyTap(Binding.menu) && !ui.restart.isShown()){ if(Core.input.keyTap(Binding.menu) && !ui.restart.isShown() && !ui.minimapfrag.shown()){
if(ui.chatfrag.shown()){ if(ui.chatfrag.shown()){
ui.chatfrag.hide(); ui.chatfrag.hide();
}else if(!ui.paused.isShown() && !scene.hasDialog()){ }else if(!ui.paused.isShown() && !scene.hasDialog()){

View File

@@ -1,22 +1,24 @@
package io.anuke.mindustry.core; package mindustry.core;
import io.anuke.arc.*; import arc.*;
import io.anuke.arc.assets.loaders.*; import arc.assets.loaders.*;
import io.anuke.arc.collection.*; import arc.struct.*;
import io.anuke.arc.files.*; import arc.files.*;
/** Handles files in a modded context. */ /** Handles files in a modded context. */
public class FileTree implements FileHandleResolver{ public class FileTree implements FileHandleResolver{
private ObjectMap<String, FileHandle> files = new ObjectMap<>(); private ObjectMap<String, Fi> files = new ObjectMap<>();
public void addFile(String path, FileHandle f){ public void addFile(String path, Fi f){
files.put(path, f); files.put(path, f);
} }
/** Gets an asset file.*/ /** Gets an asset file.*/
public FileHandle get(String path){ public Fi get(String path){
if(files.containsKey(path)){ if(files.containsKey(path)){
return files.get(path); return files.get(path);
}else if(files.containsKey("/" + path)){
return files.get("/" + path);
}else{ }else{
return Core.files.internal(path); return Core.files.internal(path);
} }
@@ -28,7 +30,7 @@ public class FileTree implements FileHandleResolver{
} }
@Override @Override
public FileHandle resolve(String fileName){ public Fi resolve(String fileName){
return get(fileName); return get(fileName);
} }
} }

View File

@@ -1,12 +1,11 @@
package io.anuke.mindustry.core; package mindustry.core;
import io.anuke.arc.*; import arc.*;
import io.anuke.mindustry.entities.type.*; import mindustry.entities.type.*;
import io.anuke.mindustry.entities.type.base.*; import mindustry.game.EventType.*;
import io.anuke.mindustry.game.EventType.*; import mindustry.game.*;
import io.anuke.mindustry.game.*;
import static io.anuke.mindustry.Vars.*; import static mindustry.Vars.*;
public class GameState{ public class GameState{
/** Current wave number, can be anything in non-wave modes. */ /** Current wave number, can be anything in non-wave modes. */
@@ -26,12 +25,8 @@ public class GameState{
/** Current game state. */ /** Current game state. */
private State state = State.menu; private State state = State.menu;
public int enemies(){
return net.client() ? enemies : unitGroups[waveTeam.ordinal()].count(b -> !(b instanceof BaseDrone));
}
public BaseUnit boss(){ public BaseUnit boss(){
return unitGroups[waveTeam.ordinal()].find(BaseUnit::isBoss); return unitGroup.find(u -> u.isBoss() && u.getTeam() == rules.waveTeam);
} }
public void set(State astate){ public void set(State astate){

View File

@@ -1,26 +1,26 @@
package io.anuke.mindustry.core; package mindustry.core;
import io.anuke.annotations.Annotations.*; import arc.*;
import io.anuke.arc.*; import arc.util.*;
import io.anuke.arc.util.*; import mindustry.annotations.Annotations.*;
import io.anuke.mindustry.content.*; import mindustry.content.*;
import io.anuke.mindustry.core.GameState.*; import mindustry.core.GameState.*;
import io.anuke.mindustry.ctype.*; import mindustry.ctype.*;
import io.anuke.mindustry.entities.*; import mindustry.entities.*;
import io.anuke.mindustry.entities.type.*; import mindustry.entities.type.*;
import io.anuke.mindustry.game.EventType.*; import mindustry.game.EventType.*;
import io.anuke.mindustry.game.*; import mindustry.game.*;
import io.anuke.mindustry.game.Teams.*; import mindustry.game.Teams.*;
import io.anuke.mindustry.gen.*; import mindustry.gen.*;
import io.anuke.mindustry.type.*; import mindustry.type.*;
import io.anuke.mindustry.world.*; import mindustry.world.*;
import io.anuke.mindustry.world.blocks.*; import mindustry.world.blocks.*;
import io.anuke.mindustry.world.blocks.BuildBlock.*; import mindustry.world.blocks.BuildBlock.*;
import io.anuke.mindustry.world.blocks.power.*; import mindustry.world.blocks.power.*;
import java.util.*; import java.util.*;
import static io.anuke.mindustry.Vars.*; import static mindustry.Vars.*;
/** /**
* Logic module. * Logic module.
@@ -107,9 +107,9 @@ public class Logic implements ApplicationListener{
//add starting items //add starting items
if(!world.isZone()){ if(!world.isZone()){
for(Team team : Team.all){ for(TeamData team : state.teams.getActive()){
if(!state.teams.get(team).cores.isEmpty()){ if(team.hasCore()){
TileEntity entity = state.teams.get(team).cores.first().entity; TileEntity entity = team.core();
entity.items.clear(); entity.items.clear();
for(ItemStack stack : state.rules.loadout){ for(ItemStack stack : state.rules.loadout){
entity.items.add(stack.item, stack.amount); entity.items.add(stack.item, stack.amount);
@@ -143,23 +143,23 @@ public class Logic implements ApplicationListener{
} }
private void checkGameOver(){ private void checkGameOver(){
if(!state.rules.attackMode && state.teams.get(defaultTeam).cores.size == 0 && !state.gameOver){ if(!state.rules.attackMode && state.teams.playerCores().size == 0 && !state.gameOver){
state.gameOver = true; state.gameOver = true;
Events.fire(new GameOverEvent(waveTeam)); Events.fire(new GameOverEvent(state.rules.waveTeam));
}else if(state.rules.attackMode){ }else if(state.rules.attackMode){
Team alive = null; Team alive = null;
for(Team team : Team.all){ for(TeamData team : state.teams.getActive()){
if(state.teams.get(team).cores.size > 0){ if(team.hasCore()){
if(alive != null){ if(alive != null){
return; return;
} }
alive = team; alive = team.team;
} }
} }
if(alive != null && !state.gameOver){ if(alive != null && !state.gameOver){
if(world.isZone() && alive == defaultTeam){ if(world.isZone() && alive == state.rules.defaultTeam){
//in attack maps, a victorious game over is equivalent to a launch //in attack maps, a victorious game over is equivalent to a launch
Call.launchZone(); Call.launchZone();
}else{ }else{
@@ -176,7 +176,7 @@ public class Logic implements ApplicationListener{
ui.hudfrag.showLaunch(); ui.hudfrag.showLaunch();
} }
for(Tile tile : state.teams.get(defaultTeam).cores){ for(TileEntity tile : state.teams.playerCores()){
Effects.effect(Fx.launch, tile); Effects.effect(Fx.launch, tile);
} }
@@ -185,19 +185,18 @@ public class Logic implements ApplicationListener{
} }
Time.runTask(30f, () -> { Time.runTask(30f, () -> {
for(Tile tile : state.teams.get(defaultTeam).cores){ for(TileEntity entity : state.teams.playerCores()){
for(Item item : content.items()){ for(Item item : content.items()){
if(tile == null || tile.entity == null || tile.entity.items == null) continue; data.addItem(item, entity.items.get(item));
data.addItem(item, tile.entity.items.get(item)); Events.fire(new LaunchItemEvent(item, entity.items.get(item)));
Events.fire(new LaunchItemEvent(item, tile.entity.items.get(item)));
} }
world.removeBlock(tile); entity.tile.remove();
} }
state.launched = true; state.launched = true;
state.gameOver = true; state.gameOver = true;
Events.fire(new LaunchEvent()); Events.fire(new LaunchEvent());
//manually fire game over event now //manually fire game over event now
Events.fire(new GameOverEvent(defaultTeam)); Events.fire(new GameOverEvent(state.rules.defaultTeam));
}); });
} }
@@ -210,14 +209,18 @@ public class Logic implements ApplicationListener{
@Override @Override
public void update(){ public void update(){
Events.fire(Trigger.update);
if(!state.is(State.menu)){ if(!state.is(State.menu)){
if(!net.client()){
state.enemies = unitGroup.count(b -> b.getTeam() == state.rules.waveTeam && b.countsAsEnemy());
}
if(!state.isPaused()){ if(!state.isPaused()){
Time.update(); Time.update();
if(state.rules.waves && state.rules.waveTimer && !state.gameOver){ if(state.rules.waves && state.rules.waveTimer && !state.gameOver){
if(!state.rules.waitForWaveToEnd || unitGroups[waveTeam.ordinal()].size() == 0){ if(!state.rules.waitForWaveToEnd || state.enemies == 0){
state.wavetime = Math.max(state.wavetime - Time.delta(), 0); state.wavetime = Math.max(state.wavetime - Time.delta(), 0);
} }
} }
@@ -232,20 +235,15 @@ public class Logic implements ApplicationListener{
} }
if(!state.isEditor()){ if(!state.isEditor()){
for(EntityGroup group : unitGroups){ unitGroup.update();
group.update();
}
puddleGroup.update(); puddleGroup.update();
shieldGroup.update(); shieldGroup.update();
bulletGroup.update(); bulletGroup.update();
tileGroup.update(); tileGroup.update();
fireGroup.update(); fireGroup.update();
}else{ }else{
for(EntityGroup<?> group : unitGroups){ unitGroup.updateEvents();
group.updateEvents(); collisions.updatePhysics(unitGroup);
collisions.updatePhysics(group);
}
} }
@@ -257,17 +255,13 @@ public class Logic implements ApplicationListener{
} }
if(!state.isEditor()){ if(!state.isEditor()){
//bulletGroup
for(EntityGroup group : unitGroups){ collisions.collideGroups(bulletGroup, unitGroup);
if(group.isEmpty()) continue;
collisions.collideGroups(bulletGroup, group);
}
collisions.collideGroups(bulletGroup, playerGroup); collisions.collideGroups(bulletGroup, playerGroup);
} }
} }
if(!net.client() && !world.isInvalidMap() && !state.isEditor()){ if(!net.client() && !world.isInvalidMap() && !state.isEditor() && !state.rules.canGameOver){
checkGameOver(); checkGameOver();
} }
} }

View File

@@ -1,36 +1,36 @@
package io.anuke.mindustry.core; package mindustry.core;
import io.anuke.annotations.Annotations.*; import arc.*;
import io.anuke.arc.*; import mindustry.annotations.Annotations.*;
import io.anuke.arc.collection.*; import arc.struct.*;
import io.anuke.arc.graphics.*; import arc.graphics.*;
import io.anuke.arc.math.*; import arc.math.*;
import io.anuke.arc.util.CommandHandler.*; import arc.util.CommandHandler.*;
import io.anuke.arc.util.*; import arc.util.*;
import io.anuke.arc.util.io.*; import arc.util.io.*;
import io.anuke.arc.util.serialization.*; import arc.util.serialization.*;
import io.anuke.mindustry.*; import mindustry.*;
import io.anuke.mindustry.core.GameState.*; import mindustry.core.GameState.*;
import io.anuke.mindustry.entities.*; import mindustry.ctype.ContentType;
import io.anuke.mindustry.entities.traits.BuilderTrait.*; import mindustry.entities.*;
import io.anuke.mindustry.entities.traits.*; import mindustry.entities.traits.BuilderTrait.*;
import io.anuke.mindustry.entities.type.*; import mindustry.entities.traits.*;
import io.anuke.mindustry.game.*; import mindustry.entities.type.*;
import io.anuke.mindustry.game.EventType.*; import mindustry.game.*;
import io.anuke.mindustry.gen.*; import mindustry.game.EventType.*;
import io.anuke.mindustry.net.Administration.*; import mindustry.gen.*;
import io.anuke.mindustry.net.Net.*; import mindustry.net.Administration.*;
import io.anuke.mindustry.net.*; import mindustry.net.Net.*;
import io.anuke.mindustry.net.Packets.*; import mindustry.net.*;
import io.anuke.mindustry.type.*; import mindustry.net.Packets.*;
import io.anuke.mindustry.type.TypeID; import mindustry.type.TypeID;
import io.anuke.mindustry.world.*; import mindustry.world.*;
import io.anuke.mindustry.world.modules.*; import mindustry.world.modules.*;
import java.io.*; import java.io.*;
import java.util.zip.*; import java.util.zip.*;
import static io.anuke.mindustry.Vars.*; import static mindustry.Vars.*;
public class NetClient implements ApplicationListener{ public class NetClient implements ApplicationListener{
private final static float dataTimeout = 60 * 18; private final static float dataTimeout = 60 * 18;
@@ -160,9 +160,17 @@ public class NetClient implements ApplicationListener{
throw new ValidateException(player, "Player has sent a message above the text limit."); throw new ValidateException(player, "Player has sent a message above the text limit.");
} }
String original = message;
//check if it's a command //check if it's a command
CommandResponse response = netServer.clientCommands.handleMessage(message, player); CommandResponse response = netServer.clientCommands.handleMessage(message, player);
if(response.type == ResponseType.noCommand){ //no command to handle if(response.type == ResponseType.noCommand){ //no command to handle
message = netServer.admins.filterMessage(player, message);
//supress chat message if it's filtered out
if(message == null){
return;
}
//server console logging //server console logging
Log.info("&y{0}: &lb{1}", player.name, message); Log.info("&y{0}: &lb{1}", player.name, message);
@@ -190,7 +198,7 @@ public class NetClient implements ApplicationListener{
} }
} }
Events.fire(new PlayerChatEvent(player, message)); Events.fire(new PlayerChatEvent(player, message, original));
} }
public static String colorizeName(int id, String name){ public static String colorizeName(int id, String name){

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