From 73461e03648c78a1ab137adcd3086de3b5eede9b Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 30 Dec 2019 11:36:50 -0500 Subject: [PATCH 1/7] Added config for showing connect/disconnect messages --- core/src/mindustry/core/NetServer.java | 4 ++-- core/src/mindustry/net/Administration.java | 1 + core/src/mindustry/world/blocks/BuildBlock.java | 6 +++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/core/src/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java index b37ab7a57a..4880ad242d 100644 --- a/core/src/mindustry/core/NetServer.java +++ b/core/src/mindustry/core/NetServer.java @@ -443,7 +443,7 @@ public class NetServer implements ApplicationListener{ if(!player.con.hasDisconnected){ if(player.con.hasConnected){ Events.fire(new PlayerLeave(player)); - Call.sendMessage("[accent]" + player.name + "[accent] has disconnected."); + if(Config.showConnectMessages.bool()) Call.sendMessage("[accent]" + player.name + "[accent] has disconnected."); Call.onPlayerDisconnect(player.id); } @@ -581,7 +581,7 @@ public class NetServer implements ApplicationListener{ player.add(); player.con.hasConnected = true; - Call.sendMessage("[accent]" + player.name + "[accent] has connected."); + if(Config.showConnectMessages.bool()) Call.sendMessage("[accent]" + player.name + "[accent] has connected."); Log.info("&lm[{1}] &y{0} has connected. ", player.name, player.uuid); Events.fire(new PlayerJoin(player)); diff --git a/core/src/mindustry/net/Administration.java b/core/src/mindustry/net/Administration.java index 57a728a020..cdec5b81fd 100644 --- a/core/src/mindustry/net/Administration.java +++ b/core/src/mindustry/net/Administration.java @@ -320,6 +320,7 @@ public class Administration{ name("The server name as displayed on clients.", "Server", "servername"), port("The port to host on.", Vars.port), autoUpdate("Whether to auto-update and exit when a new bleeding-edge update arrives.", false), + showConnectMessages("Whether to display connect/disconnect messages.", true), startCommands("Commands run at startup. This should be a comma-separated list.", ""), crashReport("Whether to send crash reports.", false, "crashreport"), logging("Whether to log everything to files.", true), diff --git a/core/src/mindustry/world/blocks/BuildBlock.java b/core/src/mindustry/world/blocks/BuildBlock.java index 79061db553..bb1ea11468 100644 --- a/core/src/mindustry/world/blocks/BuildBlock.java +++ b/core/src/mindustry/world/blocks/BuildBlock.java @@ -257,7 +257,7 @@ public class BuildBlock extends Block{ if(cblock != null){ ItemStack[] requirements = cblock.requirements; if(requirements.length != accumulator.length || totalAccumulator.length != requirements.length){ - setDeconstruct(previous); + setDeconstruct(cblock); } //make sure you take into account that you can't deconstruct more than there is deconstructed @@ -342,12 +342,12 @@ public class BuildBlock extends Block{ this.progress = 1f; if(previous.buildCost >= 0.01f){ this.cblock = previous; - this.accumulator = new float[previous.requirements.length]; - this.totalAccumulator = new float[previous.requirements.length]; this.buildCost = previous.buildCost * state.rules.buildCostMultiplier; }else{ this.buildCost = 20f; //default no-requirement build cost is 20 } + this.accumulator = new float[previous.requirements.length]; + this.totalAccumulator = new float[previous.requirements.length]; } @Override From 44ef5148b477756d4c5ae39ff006126b979adb24 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 30 Dec 2019 12:47:40 -0500 Subject: [PATCH 2/7] Reduced drone lag --- .../entities/effect/ItemTransfer.java | 2 +- .../mindustry/entities/traits/MinerTrait.java | 21 +++++++++++++++++-- core/src/mindustry/entities/type/Player.java | 5 +++++ core/src/mindustry/world/Tile.java | 2 +- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/core/src/mindustry/entities/effect/ItemTransfer.java b/core/src/mindustry/entities/effect/ItemTransfer.java index ea8366c812..2018d15a69 100644 --- a/core/src/mindustry/entities/effect/ItemTransfer.java +++ b/core/src/mindustry/entities/effect/ItemTransfer.java @@ -44,7 +44,7 @@ public class ItemTransfer extends TimedEntity implements DrawTrait{ create(item, x, y, to, () -> to.addItem(item)); } - @Remote(called = Loc.server) + @Remote(called = Loc.server, unreliable = true) public static void transferItemTo(Item item, int amount, float x, float y, Tile tile){ if(tile == null || tile.entity == null || tile.entity.items == null) return; for(int i = 0; i < Mathf.clamp(amount / 3, 1, 8); i++){ diff --git a/core/src/mindustry/entities/traits/MinerTrait.java b/core/src/mindustry/entities/traits/MinerTrait.java index 4881d3720a..5b3d51c21d 100644 --- a/core/src/mindustry/entities/traits/MinerTrait.java +++ b/core/src/mindustry/entities/traits/MinerTrait.java @@ -7,6 +7,7 @@ import arc.math.*; import arc.util.Time; import mindustry.content.*; import mindustry.entities.Effects; +import mindustry.entities.effect.*; import mindustry.entities.type.*; import mindustry.gen.Call; import mindustry.graphics.*; @@ -38,11 +39,26 @@ public interface MinerTrait extends Entity{ /** Returns whether or not this builder can mine a specific item type. */ boolean canMine(Item item); + /** @return whether to offload mined items immediately at the core. if false, items are collected and dropped in a burst. */ + default boolean offloadImmediately(){ + return false; + } + default void updateMining(){ Unit unit = (Unit)this; Tile tile = getMineTile(); TileEntity core = unit.getClosestCore(); + if(core != null && tile != null && tile.drop() != null && !unit.acceptsItem(tile.drop()) && unit.dst(core) < mineTransferRange){ + int accepted = core.tile.block().acceptStack(unit.item().item, unit.item().amount, core.tile, unit); + if(accepted > 0){ + Call.transferItemTo(unit.item().item, accepted, + tile.worldx() + Mathf.range(tilesize / 2f), + tile.worldy() + Mathf.range(tilesize / 2f), core.tile); + unit.clearItem(); + } + } + if(tile == null || core == null || tile.block() != Blocks.air || dst(tile.worldx(), tile.worldy()) > getMiningRange() || tile.drop() == null || !unit.acceptsItem(tile.drop()) || !canMine(tile.drop())){ setMineTile(null); @@ -52,12 +68,13 @@ public interface MinerTrait extends Entity{ if(Mathf.chance(Time.delta() * (0.06 - item.hardness * 0.01) * getMinePower())){ - if(unit.dst(core) < mineTransferRange && core.tile.block().acceptStack(item, 1, core.tile, unit) == 1){ + if(unit.dst(core) < mineTransferRange && core.tile.block().acceptStack(item, 1, core.tile, unit) == 1 && offloadImmediately()){ Call.transferItemTo(item, 1, tile.worldx() + Mathf.range(tilesize / 2f), tile.worldy() + Mathf.range(tilesize / 2f), core.tile); }else if(unit.acceptsItem(item)){ - Call.transferItemToUnit(item, + //this is clientside, since items are synced anyway + ItemTransfer.transferItemToUnit(item, tile.worldx() + Mathf.range(tilesize / 2f), tile.worldy() + Mathf.range(tilesize / 2f), unit); diff --git a/core/src/mindustry/entities/type/Player.java b/core/src/mindustry/entities/type/Player.java index 8366c01cc6..4077da0e4e 100644 --- a/core/src/mindustry/entities/type/Player.java +++ b/core/src/mindustry/entities/type/Player.java @@ -119,6 +119,11 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ heal(); } + @Override + public boolean offloadImmediately(){ + return true; + } + @Override public TypeID getTypeID(){ return TypeIDs.player; diff --git a/core/src/mindustry/world/Tile.java b/core/src/mindustry/world/Tile.java index 119af5b8df..fe319fd02e 100644 --- a/core/src/mindustry/world/Tile.java +++ b/core/src/mindustry/world/Tile.java @@ -376,7 +376,7 @@ public class Tile implements Position, TargetTrait{ return state.teams.canInteract(team, getTeam()); } - public Item drop(){ + public @Nullable Item drop(){ return overlay == Blocks.air || overlay.itemDrop == null ? floor.itemDrop : overlay.itemDrop; } From f2e1d17ce9f58d2e98e4adc1bc738bf53d0782fc Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 30 Dec 2019 12:49:27 -0500 Subject: [PATCH 3/7] Made junction harder to spam --- core/src/mindustry/content/Blocks.java | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 58ff4a7c35..9eec1f928b 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -902,6 +902,7 @@ public class Blocks implements ContentList{ speed = 26; capacity = 12; health = 30; + buildCostMultiplier = 4f; }}; itemBridge = new BufferedItemBridge("bridge-conveyor"){{ @@ -930,7 +931,6 @@ public class Blocks implements ContentList{ router = new Router("router"){{ requirements(Category.distribution, ItemStack.with(Items.copper, 3)); - }}; distributor = new Router("distributor"){{ diff --git a/gradle.properties b/gradle.properties index 8ed0e699dd..40485198b7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=14b6027d79cda5e02d74a7c2f85eb7e768c7abeb +archash=4882a25c74ada2c0aff9dbcf2cef0ab1b7936b67 From 51bd74fcc1599552929f9717b6e8bc936a6edd66 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 30 Dec 2019 12:55:35 -0500 Subject: [PATCH 4/7] Build time increase of basic blocks --- core/src/mindustry/content/Blocks.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 9eec1f928b..f0fc54314d 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -898,11 +898,11 @@ public class Blocks implements ContentList{ }}; junction = new Junction("junction"){{ - requirements(Category.distribution, ItemStack.with(Items.copper, 1), true); + requirements(Category.distribution, ItemStack.with(Items.copper, 2), true); speed = 26; capacity = 12; health = 30; - buildCostMultiplier = 4f; + buildCostMultiplier = 6f; }}; itemBridge = new BufferedItemBridge("bridge-conveyor"){{ @@ -922,15 +922,18 @@ public class Blocks implements ContentList{ sorter = new Sorter("sorter"){{ requirements(Category.distribution, ItemStack.with(Items.lead, 2, Items.copper, 2)); + buildCostMultiplier = 3f; }}; invertedSorter = new Sorter("inverted-sorter"){{ requirements(Category.distribution, ItemStack.with(Items.lead, 2, Items.copper, 2)); + buildCostMultiplier = 3f; invert = true; }}; router = new Router("router"){{ requirements(Category.distribution, ItemStack.with(Items.copper, 3)); + buildCostMultiplier = 2f; }}; distributor = new Router("distributor"){{ @@ -940,6 +943,7 @@ public class Blocks implements ContentList{ overflowGate = new OverflowGate("overflow-gate"){{ requirements(Category.distribution, ItemStack.with(Items.lead, 2, Items.copper, 4)); + buildCostMultiplier = 3f; }}; massDriver = new MassDriver("mass-driver"){{ From 1de294cae553de957684af7659ef35dcb712ef37 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 30 Dec 2019 13:00:28 -0500 Subject: [PATCH 5/7] Bugfixes --- core/src/mindustry/world/blocks/BuildBlock.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/world/blocks/BuildBlock.java b/core/src/mindustry/world/blocks/BuildBlock.java index bb1ea11468..345300343f 100644 --- a/core/src/mindustry/world/blocks/BuildBlock.java +++ b/core/src/mindustry/world/blocks/BuildBlock.java @@ -171,7 +171,7 @@ public class BuildBlock extends Block{ return; } - if(entity.previous == null) return; + if(entity.previous == null || entity.cblock == null) return; if(Core.atlas.isFound(entity.previous.icon(mindustry.ui.Cicon.full))){ Draw.rect(entity.previous.icon(Cicon.full), tile.drawx(), tile.drawy(), entity.previous.rotate ? tile.rotation() * 90 : 0); From e7d813ab5b340d3e982d837be884008610ee7ca2 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 30 Dec 2019 13:03:29 -0500 Subject: [PATCH 6/7] Votekick config --- core/src/mindustry/core/NetServer.java | 5 +++++ core/src/mindustry/net/Administration.java | 1 + 2 files changed, 6 insertions(+) diff --git a/core/src/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java index 4880ad242d..27e1ed1198 100644 --- a/core/src/mindustry/core/NetServer.java +++ b/core/src/mindustry/core/NetServer.java @@ -321,6 +321,11 @@ public class NetServer implements ApplicationListener{ VoteSession[] currentlyKicking = {null}; clientCommands.register("votekick", "[player...]", "Vote to kick a player, with a cooldown.", (args, player) -> { + if(!Config.enableVotekick.bool()){ + player.sendMessage("[scarlet]Vote-kick is disabled on this server."); + return; + } + if(playerGroup.size() < 3){ player.sendMessage("[scarlet]At least 3 players are needed to start a votekick."); return; diff --git a/core/src/mindustry/net/Administration.java b/core/src/mindustry/net/Administration.java index cdec5b81fd..8d037b99dd 100644 --- a/core/src/mindustry/net/Administration.java +++ b/core/src/mindustry/net/Administration.java @@ -321,6 +321,7 @@ public class Administration{ port("The port to host on.", Vars.port), autoUpdate("Whether to auto-update and exit when a new bleeding-edge update arrives.", false), showConnectMessages("Whether to display connect/disconnect messages.", true), + enableVotekick("Whether votekick is enabled.", true), startCommands("Commands run at startup. This should be a comma-separated list.", ""), crashReport("Whether to send crash reports.", false, "crashreport"), logging("Whether to log everything to files.", true), From 62947b9417286064c426d22152bc07f96e505057 Mon Sep 17 00:00:00 2001 From: CinExPL <41754972+CinExPL@users.noreply.github.com> Date: Tue, 31 Dec 2019 05:03:46 +0100 Subject: [PATCH 7/7] Update bundle_pl.properties (#1285) - reverted back some changes made by @FarmerThanos, - fixed some errors, - compared to english file. --- core/assets/bundles/bundle_pl.properties | 123 +++++++++++++---------- 1 file changed, 72 insertions(+), 51 deletions(-) diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties index 8c17577654..ceef56533a 100644 --- a/core/assets/bundles/bundle_pl.properties +++ b/core/assets/bundles/bundle_pl.properties @@ -12,13 +12,14 @@ link.itch.io.description = Strona itch.io z oficjanymi wersjami do pobrania link.google-play.description = Strona na sklepie Google Play link.f-droid.description = F-Droid catalogue listing link.wiki.description = Oficjana Wiki Mindustry +link.feathub.description = Zaproponuj nowe funkcje linkfail = Nie udało się otworzyć linku!\nURL został skopiowany. screenshot = Zapisano zdjęcie w {0} screenshot.invalid = Zrzut ekranu jest zbyt duży. Najprawdopodobniej brakuje miejsca w pamięci urządzenia. gameover = Koniec Gry gameover.pvp = Zwyciężyła drużyna [accent]{0}[]! highscore = [YELLOW] Nowy rekord! -copied = Copied. +copied = Skopiowano. load.sound = Dźwięki load.map = Mapy @@ -26,6 +27,14 @@ load.image = Obrazy load.content = Treść load.system = System load.mod = Mody +load.scripts = Skrypty + +be.update = Nowa wersja Bleeding Edge jest dostępna: +be.update.confirm = Pobrać i zainstalować teraz? +be.updating = Aktualizowanie... +be.ignore = Zignoruj +be.noupdates = Nie znaleziono aktualizacji. +be.check = Sprawdź aktualizacje schematic = Schemat schematic.add = Zapisz schemat... @@ -80,7 +89,6 @@ continue = Kontynuuj maps.none = [lightgray]Nie znaleziono żadnych map! invalid = Nieprawidłowy pickcolor = Wybierz kolor - preparingconfig = Przygotowywanie Konfiguracji preparingcontent = Przygotowywanie Zawartości uploadingcontent = Przesyłanie Zawartości @@ -100,22 +108,28 @@ mod.enabled = [lightgray]Włączony mod.disabled = [scarlet]Wyłączony mod.disable = Wyłącz mod.delete.error = Nie udało się usunąć moda. Plik może być w użyciu. +mod.requiresversion = [scarlet]Wymaga gry w wersji co najmniej: [accent]{0} mod.missingdependencies = [scarlet]Brakujące zależności: {0} +mod.erroredcontent = [scarlet]Content Errors +mod.errors = Wystąpił błąd podczas ładowania treści. +mod.noerrorplay = [scarlet]Twoje mody zawierają błędy.[] Wyłącz je lub napraw błędy przed rozpoczęciem gry. mod.nowdisabled = [scarlet]Brakuje zależności dla moda '{0}':[accent] {1}\n[lightgray]Najpierw trzeba ściągnąć te mody.\nMod zostanie automatycznie wyłączony. mod.enable = Włącz mod.requiresrestart = Gra się wyłączy aby wprowadzić zmiany moda. mod.reloadrequired = [scarlet]Wymagany restart mod.import = Importuj Mod mod.import.github = Importuj mod z GitHuba +mod.item.remove = Ten przedmiot jest częścią moda[accent] '{0}'[]. Aby usunąć go, odinstaluj modyfikację. mod.remove.confirm = Ten mod zostanie usunięty. mod.author = [LIGHT_GRAY]Autor:[] {0} mod.missing = Ten zapis zawiera mody, które zostały niedawno zaktualizowane, bądź nie są już zainstalowane. Zapis może zostać uszkodzony. Czy jesteś pewien, że chcesz go załadować?\n[lightgray]Mody:\n{0} mod.preview.missing = Przed opublikowaniem tego moda na Warsztacie musisz dodać zdjęcie podglądowe.\nDodaj zdjęcie o nazwie[accent] preview.png[] do folderu moda i spróbuj jeszcze raz. -mod.folder.missing = Jedynie mody w formie folderów mogą się znaleźć na Warsztacie.\nBy zamienić moda w folder, wyciągnij go z archiwum, umieść w folderze i usuń archiwum. Później uruchom ponownie grę bądź załaduj ponownie mody. +mod.folder.missing = Jedynie mody w formie folderów mogą się znaleźć na Warsztacie.\nBy zamienić moda w folder, wyciągnij go z archiwum, umieść w folderze i usuń archiwum. Później uruchom ponownie grę lub załaduj ponownie mody. +mod.scripts.unsupported = Twoje urządzenie nie wspiera skryptów. Niektóre mody mogą nie działać poprawnie. about.button = O Grze name = Nazwa: -noname = Najpierw wybierz[accent] nazwę gracza[] +noname = Najpierw wybierz[accent] nazwę gracza[]. filename = Nazwa Pliku: unlocked = Odblokowano nową zawartość! completed = [accent]Ukończony @@ -123,8 +137,8 @@ techtree = Drzewo Technologiczne research.list = [lightgray]Badania: research = Badaj researched = [lightgray]{0} zbadane. -players = {0} graczy online -players.single = {0} gracz online +players = {0} graczy +players.single = {0} gracz server.closing = [accent] Zamykanie serwera... server.kicked.kick = Zostałeś wyrzucony z serwera! server.kicked.whitelist = Nie ma cię tu na białej liście. @@ -141,6 +155,7 @@ server.kicked.nameEmpty = Wybrana przez Ciebie nazwa jest nieprawidłowa. server.kicked.idInUse = Jesteś już na serwerze! Łączenie się z dwóch kont nie jest dozwolone. server.kicked.customClient = Ten serwer nie wspomaga wersji deweloperskich. Pobierz oficjalną wersję. server.kicked.gameover = Koniec gry! +server.kicked.serverRestarting = Restart serwera. server.versions = Twoja wersja gry:[accent] {0}[]\nWersja gry serwera:[accent] {1}[] host.info = Przycisk [accent]host[] hostuje serwer na porcie [scarlet]6567[]. \nKażdy w tej samej sieci [lightgray]wifi lub hotspocie[] powinien zobaczyć twój serwer.\n\nJeśli chcesz, aby każdy z twoim IP mógł dołączyć, musisz wykonać [accent]przekierowywanie portów[].\n\n[lightgray]Notka: Jeśli ktokolwiek ma problem z dołączeniem do gry lokalnej, upewnij się, że udostępniłeś Mindustry dostęp do sieci w ustawieniach zapory (firewall). Zauważ, że niektóre sieci publiczne mogą nie zezwalać na wykrycie serwerów. join.info = Tutaj możesz wpisać [accent]adres IP serwera[], aby dołączyć lub wyszukać [accent]serwerów w lokalnej sieci[], do których możesz dołączyć .\nGra wieloosobowa na LAN i WAN jest wspomagana.\n\n[lightgray]Notka: Nie ma automatycznej listy wszystkich serwerów; jeśli chcesz dołączyć przez IP, musisz zapytać hosta o IP. @@ -240,7 +255,7 @@ data.exported = Dane wyeksportowane. data.invalid = Nieprawidłowe dane gry. data.import.confirm = Zaimportowanie zewnętrznych danych usunie[scarlet] wszystkie[] obecne dane gry.\n[accent]Nie można tego cofnąć![]\n\nGdy dane zostaną zimportowane, gra automatycznie się wyłączy. classic.export = Eksportuj Dane Wersji Klasycznej -classic.export.text = [accent]Mindustry[] otrzymało ostatnio ważną aktualizację.\nWykryto zapis lub mapę z wersji classic (v3.5 build 40) - czy chciałbyś eksportować te zapisy do katalogu domowego swojego telefonu, do użycia w aplikacji Mindustry Classic? +classic.export.text = [accent]Mindustry[] otrzymało ostatnio ważną aktualizację.\nWykryto zapis lub mapę z wersji classic (v3.5 build 40) - czy chciałbyś eksportować te zapisy do katalogu domowego swojego telefonu, aby móc używać ich w Mindustry Classic? quit.confirm = Czy na pewno chcesz wyjść? quit.confirm.tutorial = Czy jesteś pewien tego co robisz?\nSamouczek może zostać powtórzony w[accent] Ustawienia->Gra->Ponów samouczek.[] loading = [accent]Ładowanie... @@ -248,7 +263,7 @@ reloading = [accent]Przeładowywanie Modów... saving = [accent]Zapisywanie... cancelbuilding = [accent][[{0}][] by wyczyścić plan selectschematic = [accent][[{0}][] by wybrać+skopiować -pausebuilding = [accent][[{0}][] by wtrzymać budowę +pausebuilding = [accent][[{0}][] by wstrzymać budowę resumebuilding = [scarlet][[{0}][] by kontynuować budowę wave = [accent]Fala {0} wave.waiting = Fala za {0} @@ -414,7 +429,6 @@ load = Wczytaj save = Zapisz fps = FPS: {0} ping = Ping: {0}ms - language.restart = Uruchom grę ponownie, aby ustawiony język zaczął funkcjonować. settings = Ustawienia tutorial = Poradnik @@ -456,7 +470,7 @@ boss.health = Zdrowie Bossa connectfail = [crimson]Nie można połączyć się z serwerem:\n\n[accent]{0} error.unreachable = Serwer niedostępny.\nCzy adres jest wpisany poprawnie? error.invalidaddress = Niepoprawny adres. -error.timedout = Przekroczono limit czasu!/nUpewnij się, że host ma ustawione przekierowanie portu oraz poprawność wpisanego adresu! +error.timedout = Przekroczono limit czasu!\nUpewnij się, że host ma ustawione przekierowanie portu oraz poprawność wpisanego adresu! error.mismatch = Błąd pakietu:\nprawdopodobne niedopasowanie klienta/serwera.\nUpewnij się, że ty i host macie najnowszą wersję Mindustry! error.alreadyconnected = Jesteś już połączony. error.mapnotfound = Plik mapy nie został znaleziony! @@ -493,10 +507,12 @@ zone.nuclearComplex.description = Dawny zakład produkcji i przetwarzania toru, zone.fungalPass.description = Przejściowy obszar pomiędzy wysokimi górami a nisko znajdującymi się, ogarniętymi przez zarodniki równinami. Znajduje się tu mała postawiona przez wrogów baza zwiadowcza.\nZniszcz ją.\nUżyj jednostek Nóż i Pełzak. Zniszcz oba rdzenie. zone.impact0078.description = zone.crags.description = + settings.language = Język settings.data = Dane Gry settings.reset = Przywróć Domyślne settings.rebind = Zmień +settings.resetKey = Resetuj settings.controls = Sterowanie settings.game = Gra settings.sound = Dźwięk @@ -563,8 +579,8 @@ bar.heat = Ciepło bar.power = Prąd bar.progress = Postęp Budowy bar.spawned = Jednostki: {0}/{1} -bar.input = Input -bar.output = Output +bar.input = Wejście +bar.output = Wyjście bullet.damage = [stat]{0}[lightgray] Obrażenia bullet.splashdamage = [stat]{0}[lightgray] Obrażenia obszarowe ~[stat] {1}[lightgray] kratki @@ -590,6 +606,8 @@ unit.persecond = /sekundę unit.timesspeed = x prędkość unit.percent = % unit.items = przedmioty +unit.thousands = tys. +unit.millions = mln category.general = Główne category.power = Prąd category.liquids = Płyny @@ -621,19 +639,20 @@ setting.difficulty.normal = Normalny setting.difficulty.hard = Trudny setting.difficulty.insane = Szalony setting.difficulty.name = Poziom trudności -setting.screenshake.name = Wstrząsy ekranu +setting.screenshake.name = Siła wstrząsów ekranu setting.effects.name = Wyświetlanie efektów setting.destroyedblocks.name = Wyświetl zniszczone bloki -setting.conveyorpathfinding.name = Znajdowanie Ścieżki Stawianych Taśmociągów +setting.conveyorpathfinding.name = Ustalanie ścieżki przenośników +setting.coreselect.name = Zezwalaj na schematyczne rdzenie setting.sensitivity.name = Czułość kontrolera setting.saveinterval.name = Interwał automatycznego zapisywania setting.seconds = {0} sekund setting.blockselecttimeout.name = Block Select Timeout -setting.milliseconds = {0} millisekund +setting.milliseconds = {0} milisekund setting.fullscreen.name = Pełny ekran setting.borderlesswindow.name = Bezramkowe okno[lightgray] (może wymagać restartu) setting.fps.name = Pokazuj FPS oraz ping -setting.blockselectkeys.name = Pokazuj Klawisze Wyboru Bloków +setting.blockselectkeys.name = Pokazuj skróty klawiszowe bloków setting.vsync.name = Synchronizacja pionowa setting.pixelate.name = Pikselacja [lightgray](wyłącza animacje) setting.minimap.name = Pokaż Minimapę @@ -653,7 +672,7 @@ public.confirm = Czy chcesz ustawić swoją grę jako publiczną?\n[accent]Każd 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.cancel = Anuluj i Wyjdź -setting.bloom.name = Rozproszenie +setting.bloom.name = Efekt Bloom keybind.title = Zmień 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 @@ -662,15 +681,15 @@ category.multiplayer.name = Wielu graczy command.attack = Atakuj command.rally = Zbierz command.retreat = Wycofaj -placement.blockselectkeys = \n[lightgray]Key: [{0}, +placement.blockselectkeys = \n[lightgray]Klawisz: [{0}, keybind.clear_building.name = Wyczyść budynek keybind.press = Naciśnij wybrany klawisz... keybind.press.axis = Naciśnij oś lub klawisz... keybind.screenshot.name = Zrzut ekranu mapy -keybind.toggle_power_lines.name = Przełącz Linie Energetyczne +keybind.toggle_power_lines.name = Zmień widoczność linii energetycznych keybind.move_x.name = Poruszanie w poziomie keybind.move_y.name = Poruszanie w pionie -keybind.mouse_move.name = Podążaj Za Myszką +keybind.mouse_move.name = Podążaj Za Myszą keybind.dash.name = Dash keybind.schematic_select.name = Wybierz region keybind.schematic_menu.name = Menu schematów @@ -678,20 +697,20 @@ keybind.schematic_flip_x.name = Obróć schemat horyzontalnie keybind.schematic_flip_y.name = Obróć schemat wertykalnie keybind.category_prev.name = Poprzednia kategoria keybind.category_next.name = Następna kategoria -keybind.block_select_left.name = Wybór Bloku Lewo -keybind.block_select_right.name = Wybór Bloku Prawo -keybind.block_select_up.name = Wybór Bloku Góra -keybind.block_select_down.name = Wybór Bloku Dół -keybind.block_select_01.name = Kategoria/Wybór Bloku 1 -keybind.block_select_02.name = Kategoria/Wybór Bloku 2 -keybind.block_select_03.name = Kategoria/Wybór Bloku 3 -keybind.block_select_04.name = Kategoria/Wybór Bloku 4 -keybind.block_select_05.name = Kategoria/Wybór Bloku 5 -keybind.block_select_06.name = Kategoria/Wybór Bloku 6 -keybind.block_select_07.name = Kategoria/Wybór Bloku 7 -keybind.block_select_08.name = Kategoria/Wybór Bloku 8 -keybind.block_select_09.name = Kategoria/Wybór Bloku 9 -keybind.block_select_10.name = Kategoria/Wybór Bloku 10 +keybind.block_select_left.name = Block Select Left +keybind.block_select_right.name = Block Select Right +keybind.block_select_up.name = Block Select Up +keybind.block_select_down.name = Block Select Down +keybind.block_select_01.name = Wybór bloku/kategorii 1 +keybind.block_select_02.name = Wybór bloku/kategorii 2 +keybind.block_select_03.name = Wybór bloku/kategorii 3 +keybind.block_select_04.name = Wybór bloku/kategorii 4 +keybind.block_select_05.name = Wybór bloku/kategorii 5 +keybind.block_select_06.name = Wybór bloku/kategorii 6 +keybind.block_select_07.name = Wybór bloku/kategorii 7 +keybind.block_select_08.name = Wybór bloku/kategorii 8 +keybind.block_select_09.name = Wybór bloku/kategorii 9 +keybind.block_select_10.name = Wybór bloku/kategorii 10 keybind.fullscreen.name = Przełącz Pełny Ekran keybind.select.name = Zaznacz keybind.diagonal_placement.name = Budowa po skosie @@ -708,7 +727,7 @@ keybind.chat.name = Czat keybind.player_list.name = Lista graczy keybind.console.name = Konsola keybind.rotate.name = Obracanie -keybind.rotateplaced.name = Obróć istniejące (Trzymaj) +keybind.rotateplaced.name = Rotate Existing (Hold) keybind.toggle_menus.name = Zmiana widoczności menu keybind.chat_history_prev.name = Przewiń wiadomości w górę keybind.chat_history_next.name = Przewiń wiadomości w dół @@ -736,6 +755,7 @@ rules.enemyCheat = Nieskończone zasoby komputera-przeciwnika (czerwonego zespo rules.unitdrops = Surowce ze zniszczonych jednostek rules.unitbuildspeedmultiplier = Mnożnik prędkości tworzenia jednostek rules.unithealthmultiplier = Mnożnik życia jednostek +rules.blockhealthmultiplier = Mnożnik życia bloków rules.playerhealthmultiplier = Mnożnik życia gracza rules.playerdamagemultiplier = Mnożnik obrażeń gracza rules.unitdamagemultiplier = Mnożnik obrażeń jednostek @@ -804,6 +824,7 @@ mech.trident-ship.name = Trójząb mech.trident-ship.weapon = Wnęka bombowa mech.glaive-ship.name = Glewia mech.glaive-ship.weapon = Zapalający Karabin +item.corestorable = [lightgray]Przechowywalne w rdzeniu: {0} item.explosiveness = [lightgray]Wybuchowość: {0} item.flammability = [lightgray]Palność: {0} item.radioactivity = [lightgray]Promieniotwórczość: {0} @@ -908,11 +929,11 @@ block.scorch.name = Płomień block.scatter.name = Flak block.hail.name = Grad block.lancer.name = Lansjer -block.conveyor.name = Taśmociąg -block.titanium-conveyor.name = Taśmociąg Tytanowy -block.armored-conveyor.name = Opancerzony Taśmociąg +block.conveyor.name = Przenośnik +block.titanium-conveyor.name = Przenośnik Tytanowy +block.armored-conveyor.name = Przenośnik Opancerzony 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 = Skrzyżowanie +block.junction.name = Węzeł block.router.name = Rozdzielacz block.distributor.name = Dystrybutor block.sorter.name = Sortownik @@ -930,8 +951,8 @@ block.incinerator.name = Spalacz block.spore-press.name = Prasa Zarodników block.separator.name = Rozdzielacz block.coal-centrifuge.name = Wirówka węglowa -block.power-node.name = Węzeł Prądowy -block.power-node-large.name = Duży Węzeł Prądowy +block.power-node.name = Węzeł Prądu +block.power-node-large.name = Duży Węzeł Prądu block.surge-tower.name = Wieża Energetyczna block.diode.name = Dioda baterii block.battery.name = Bateria @@ -958,8 +979,8 @@ block.item-source.name = Źródło przedmiotów block.item-void.name = Próżnia przedmiotów block.liquid-source.name = Źródło płynów block.power-void.name = Próżnia prądu -block.power-source.name = Węzeł Nieskończonego Prądu -block.unloader.name = Wyładowywacz +block.power-source.name = Nieskończony Prąd +block.unloader.name = Ekstraktor block.vault.name = Magazyn block.wave.name = Strumień block.swarmer.name = Działo Rojowe @@ -990,11 +1011,11 @@ block.plated-conduit.name = Opancerzona rura block.phase-conduit.name = Rura Fazowa block.liquid-router.name = Rozdzielacz Płynów block.liquid-tank.name = Zbiornik Płynów -block.liquid-junction.name = Skrzyżowanie Rurowe -block.bridge-conduit.name = Most Rurowy +block.liquid-junction.name = Łącznik Płynów +block.bridge-conduit.name = Most Płynów block.rotary-pump.name = Wirowa Pompa block.thorium-reactor.name = Reaktor Torowy -block.mass-driver.name = Katapulta Masowa +block.mass-driver.name = Katapulta Masy block.blast-drill.name = Wiertło Wybuchowe block.thermal-pump.name = Pompa Termalna block.thermal-generator.name = Generator Termalny @@ -1124,8 +1145,8 @@ block.copper-wall.description = Tani blok obronny.\nPrzydatny do ochrony rdzenia block.copper-wall-large.description = Tani blok obronny.\nPrzydatny do ochrony rdzenia i wieżyczek w pierwszych kilku falach.\nObejmuje wiele kratek. block.titanium-wall.description = Umiarkowanie silny blok obronny.\nZapewnia umiarkowaną ochronę przed wrogami. block.titanium-wall-large.description = Umiarkowanie silny blok obronny.\nZapewnia umiarkowaną ochronę przed wrogami.\nObejmuje wiele kratek. -block.plastanium-wall.description = A special type of wall that absorbs electric arcs and blocks automatic power node connections. -block.plastanium-wall-large.description = A special type of wall that absorbs electric arcs and blocks automatic power node connections.\nSpans multiple tiles. +block.plastanium-wall.description = Specjajny typ ściany, który pochłania łuki elektryczne oraz blokuje automatyczne łączenie węzłów. +block.plastanium-wall-large.description = Specjajny typ ściany, który pochłania łuki elektryczne oraz blokuje automatyczne łączenie węzłów.\nObejmuje wiele kratek. block.thorium-wall.description = Silny blok obronny.\nDobra ochrona przed wrogami. block.thorium-wall-large.description = Silny blok obronny.\nDobra ochrona przed wrogami.\nObejmuje wiele kratek. block.phase-wall.description = Ściana pokryta specjalną mieszanką opartą o Włókna Fazowe, która odbija większość pocisków. @@ -1164,7 +1185,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-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.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.diode.description = Energia może przepływać przez ten blok tylko w jednym kierunku, ale tylko kiedy inne strony mają zmagazynowane mniej energii. 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.combustion-generator.description = Wytwarza energię poprzez spalanie łatwopalnych materiałów. @@ -1205,7 +1226,7 @@ block.ripple.description = Duża wieża artyleryjska, która strzela jednocześn block.cyclone.description = Duża szybkostrzelna wieża. block.spectre.description = Duże działo dwulufowe, które strzela potężnymi pociskami przebijającymi pancerz w jednostki naziemne i powietrzne. block.meltdown.description = Duże działo laserowe, które strzela potężnymi wiązkami dalekiego zasięgu. Wymaga chłodzenia. -block.command-center.description = Wydaje polecenia ruchu sojuszniczym jednostkom na całej mapie.\nPowoduje patrolowanie jednostek, atakowanie wrogiego rdzenia lub wycofanie się do rdzenia / fabryki. Gdy nie ma rdzenia wroga, jednostki będą domyślnie patrolować pod dowództwem ataku. +block.command-center.description = Wydaje polecenia ruchu sojuszniczym jednostkom na całej mapie.\nPowoduje patrolowanie jednostek, atakowanie wrogiego rdzenia lub wycofanie się do rdzenia/fabryki. Gdy nie ma rdzenia wroga, jednostki będą domyślnie patrolować pod dowództwem ataku. block.draug-factory.description = Produkuje drony wydobywcze Draug. block.spirit-factory.description = Produkuje lekkie drony, które naprawiają bloki. block.phantom-factory.description = Produkuje zaawansowane drony które pomagają przy budowie. @@ -1217,7 +1238,7 @@ block.crawler-factory.description = Produkuje szybkie jednostki lądowe typu "ka block.titan-factory.description = Produkuje zaawansowane, opancerzone jednostki lądowe. block.fortress-factory.description = Produkuje naziemne jednostki ciężkiej artylerii. block.repair-point.description = Bez przerw ulecza najbliższą zniszczoną jednostkę w jego zasięgu. -block.dart-mech-pad.description = Umożliwia transformacje w podstawowego mecha bojowego.\nUżyj klikając podczas stania na nim. +block.dart-mech-pad.description = Umożliwia transformację w podstawowego mecha bojowego.\nUżyj klikając podczas stania na nim. block.delta-mech-pad.description = Opuść swój obecny statek i zamień go na szybki, lekko opancerzony mech stworzony do ataków typu uderz-uciekaj.\nUżyj, klikając dwukrotnie podczas stania na lądowisku. block.tau-mech-pad.description = Opuść swój obecny statek i zamień go na mech wsparcia który może leczyć sojusznicze struktury i jednostki.\nUżyj, klikając dwukrotnie podczas stania na lądowisku. block.omega-mech-pad.description = Opuść swój obecny statek i zamień go na masywny, dobrze opancerzony mech, przeznaczony do ataków na froncie.\nUżyj, klikając dwukrotnie podczas stania na lądowisku.