Compare commits
71 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
15396b6032 | ||
|
|
75a520c3ae | ||
|
|
d7fd7db3cc | ||
|
|
144731bfb0 | ||
|
|
7c1d4a092e | ||
|
|
a28ece6424 | ||
|
|
39c5c6a6f0 | ||
|
|
77975a710c | ||
|
|
d95dc98652 | ||
|
|
7afa6a7f44 | ||
|
|
a4339b8b2b | ||
|
|
7897ca9b97 | ||
|
|
4f957017ab | ||
|
|
fa60ff2814 | ||
|
|
65ef189921 | ||
|
|
5b3b2cf4d5 | ||
|
|
d89184da43 | ||
|
|
898bddee7c | ||
|
|
860e4a2999 | ||
|
|
39ef3ab4ce | ||
|
|
e57f4c9877 | ||
|
|
30214e68b3 | ||
|
|
59a480cb30 | ||
|
|
46c6a6f6f7 | ||
|
|
b6acf1af0a | ||
|
|
16f4e300a8 | ||
|
|
b18b4cdc90 | ||
|
|
79d90ca75d | ||
|
|
b2b47353bf | ||
|
|
b7fe2bedae | ||
|
|
00e1d69348 | ||
|
|
88d1165909 | ||
|
|
b22efb8c83 | ||
|
|
a7c78c4193 | ||
|
|
5c5acb2d48 | ||
|
|
414f27a3b6 | ||
|
|
009eea1988 | ||
|
|
c9eed5a936 | ||
|
|
5d20f3a89b | ||
|
|
677e0e6f58 | ||
|
|
49c64faece | ||
|
|
f944d3d579 | ||
|
|
4dc2164468 | ||
|
|
e9612ce9f0 | ||
|
|
b19eb3fc04 | ||
|
|
699364580e | ||
|
|
085a974350 | ||
|
|
4436a5ced9 | ||
|
|
a21f6d335f | ||
|
|
2469cf0851 | ||
|
|
a82ba0567b | ||
|
|
6022fcd109 | ||
|
|
038d132da9 | ||
|
|
52238e3aa4 | ||
|
|
f2ce32cbb2 | ||
|
|
7dc492892e | ||
|
|
4e92aa2000 | ||
|
|
3c8e21ac6a | ||
|
|
8f5aa02428 | ||
|
|
f31759bb96 | ||
|
|
938b4e5a00 | ||
|
|
c6f6b8e46e | ||
|
|
3a9c0377ac | ||
|
|
324e5151aa | ||
|
|
ad8455377c | ||
|
|
3c963fb1bc | ||
|
|
af3467035b | ||
|
|
b57abf8b60 | ||
|
|
0acd339e33 | ||
|
|
e897458e94 | ||
|
|
a72adef051 |
@@ -165,7 +165,7 @@ public class AssetsProcess extends BaseProcessor{
|
|||||||
loadBegin.addStatement("$T.assets.load($S, $L.class).loaded = a -> { $L = ($L)a; soundToId.put(a, $L); idToSound.put($L, a); }",
|
loadBegin.addStatement("$T.assets.load($S, $L.class).loaded = a -> { $L = ($L)a; soundToId.put(a, $L); idToSound.put($L, a); }",
|
||||||
Core.class, filepath, rtype, name, rtype, id, id);
|
Core.class, filepath, rtype, name, rtype, id, id);
|
||||||
}else{
|
}else{
|
||||||
loadBegin.addStatement("$T.assets.load($S, $L.class)", Core.class, filepath, rtype);
|
loadBegin.addStatement("$T.assets.load($S, $L.class).loaded = a -> { $L = ($L)a; }", Core.class, filepath, rtype, name, rtype);
|
||||||
}
|
}
|
||||||
|
|
||||||
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new " + rtype + "()").build());
|
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new " + rtype + "()").build());
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ buildscript{
|
|||||||
}
|
}
|
||||||
|
|
||||||
plugins{
|
plugins{
|
||||||
id 'org.jetbrains.kotlin.jvm' version '1.5.31'
|
id 'org.jetbrains.kotlin.jvm' version '1.6.0-RC'
|
||||||
id "org.jetbrains.kotlin.kapt" version "1.5.31"
|
id "org.jetbrains.kotlin.kapt" version "1.6.0-RC"
|
||||||
}
|
}
|
||||||
|
|
||||||
allprojects{
|
allprojects{
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
@@ -288,6 +288,7 @@ save.corrupted = Save file corrupted or invalid!
|
|||||||
empty = <empty>
|
empty = <empty>
|
||||||
on = On
|
on = On
|
||||||
off = Off
|
off = Off
|
||||||
|
save.search = Search saved games...
|
||||||
save.autosave = Autosave: {0}
|
save.autosave = Autosave: {0}
|
||||||
save.map = Map: {0}
|
save.map = Map: {0}
|
||||||
save.wave = Wave {0}
|
save.wave = Wave {0}
|
||||||
@@ -379,9 +380,13 @@ editor.ingame = Edit In-Game
|
|||||||
editor.publish.workshop = Publish On Workshop
|
editor.publish.workshop = Publish On Workshop
|
||||||
editor.newmap = New Map
|
editor.newmap = New Map
|
||||||
editor.center = Center
|
editor.center = Center
|
||||||
editor.search = Search Maps...
|
editor.search = Search maps...
|
||||||
editor.filters = Filter Maps
|
editor.filters = Filter Maps
|
||||||
editor.showAll = Show Default Maps
|
editor.filters.mode = Gamemodes:
|
||||||
|
editor.filters.type = Map Type:
|
||||||
|
editor.filters.search = Search In:
|
||||||
|
editor.filters.author = Author
|
||||||
|
editor.filters.description = Description
|
||||||
workshop = Workshop
|
workshop = Workshop
|
||||||
waves.title = Waves
|
waves.title = Waves
|
||||||
waves.remove = Remove
|
waves.remove = Remove
|
||||||
|
|||||||
@@ -78,13 +78,12 @@ schematic.tagexists = Dieses Tag gibt es schon.
|
|||||||
|
|
||||||
stats = Statistiken
|
stats = Statistiken
|
||||||
stat.wave = Wellen besiegt:[accent] {0}
|
stat.wave = Wellen besiegt:[accent] {0}
|
||||||
|
stat.unitsCreated = Einheiten erzeugt:[accent] {0}
|
||||||
stat.enemiesDestroyed = Gegner zerstört:[accent] {0}
|
stat.enemiesDestroyed = Gegner zerstört:[accent] {0}
|
||||||
stat.built = Blöcke gebaut:[accent] {0}
|
stat.built = Blöcke gebaut:[accent] {0}
|
||||||
stat.destroyed = Blöcke zerstört:[accent] {0}
|
stat.destroyed = Blöcke zerstört:[accent] {0}
|
||||||
stat.deconstructed = Blöcke abgebaut:[accent] {0}
|
stat.deconstructed = Blöcke abgebaut:[accent] {0}
|
||||||
stat.delivered = Übertragene Ressourcen:
|
|
||||||
stat.playtime = Spielzeit:[accent] {0}
|
stat.playtime = Spielzeit:[accent] {0}
|
||||||
stat.rank = Finaler Rang:[accent] {0}
|
|
||||||
|
|
||||||
globalitems = [accent]Gesamtitems
|
globalitems = [accent]Gesamtitems
|
||||||
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?
|
||||||
@@ -94,6 +93,7 @@ level.mode = Spielmodus:
|
|||||||
coreattack = < Der Kern wird angegriffen! >
|
coreattack = < Der Kern wird angegriffen! >
|
||||||
nearpoint = [[ [scarlet]SOFORT DEN SPAWNPUNKT VERLASSEN[] ]\nVernichtung droht
|
nearpoint = [[ [scarlet]SOFORT DEN SPAWNPUNKT VERLASSEN[] ]\nVernichtung droht
|
||||||
database = Kern-Datenbank
|
database = Kern-Datenbank
|
||||||
|
database.button = Datenbank
|
||||||
savegame = Spiel speichern
|
savegame = Spiel speichern
|
||||||
loadgame = Spiel laden
|
loadgame = Spiel laden
|
||||||
joingame = Spiel beitreten
|
joingame = Spiel beitreten
|
||||||
@@ -169,6 +169,7 @@ launchcore = Kern starten
|
|||||||
filename = Dateiname:
|
filename = Dateiname:
|
||||||
unlocked = Neuer Inhalt freigeschaltet!
|
unlocked = Neuer Inhalt freigeschaltet!
|
||||||
available = Neue Forschung möglich
|
available = Neue Forschung möglich
|
||||||
|
unlock.incampaign = < Für Details in Kampagne freischalten >
|
||||||
completed = [accent]Abgeschlossen
|
completed = [accent]Abgeschlossen
|
||||||
techtree = Forschung
|
techtree = Forschung
|
||||||
research.legacy = [accent]5.0[] Forschungsdaten gefunden.\nMöchtest du [accent]diese Daten behalten[] oder [accent]sie löschen[] und neu anfangen (empfohlen)?
|
research.legacy = [accent]5.0[] Forschungsdaten gefunden.\nMöchtest du [accent]diese Daten behalten[] oder [accent]sie löschen[] und neu anfangen (empfohlen)?
|
||||||
@@ -215,6 +216,7 @@ hosts.none = [lightgray]Keine LAN-Spiele gefunden!
|
|||||||
host.invalid = [scarlet]Kann keine Verbindung zum Host herstellen.
|
host.invalid = [scarlet]Kann keine Verbindung zum Host herstellen.
|
||||||
|
|
||||||
servers.local = Lokale Server
|
servers.local = Lokale Server
|
||||||
|
servers.local.steam = Offene Spiele & Lokale Server
|
||||||
servers.remote = Andere Server
|
servers.remote = Andere Server
|
||||||
servers.global = Community-Server
|
servers.global = Community-Server
|
||||||
|
|
||||||
@@ -316,7 +318,7 @@ data.invalid = Dies sind keine gültigen Spieldaten.
|
|||||||
data.import.confirm = Der Import von externen Daten wird [scarlet] alle[] deine gegenwärtigen Spieldaten löschen.\n[accent]Das kann nicht rückgängig gemacht werden![]\n\nSobald der Import abgeschlossen ist, wird dein Spiel sofort beendet.
|
data.import.confirm = Der Import von externen Daten wird [scarlet] alle[] deine gegenwärtigen Spieldaten löschen.\n[accent]Das kann nicht rückgängig gemacht werden![]\n\nSobald der Import abgeschlossen ist, wird dein Spiel sofort beendet.
|
||||||
quit.confirm = Willst du wirklich aufhören?
|
quit.confirm = Willst du wirklich aufhören?
|
||||||
loading = [accent]Wird geladen...
|
loading = [accent]Wird geladen...
|
||||||
reloading = [accent]Lade Mods neu...
|
downloading = [accent]Herunterladen...
|
||||||
saving = [accent]Speichere...
|
saving = [accent]Speichere...
|
||||||
respawn = [accent][[{0}][] um im Kern zu spawnen
|
respawn = [accent][[{0}][] um im Kern zu spawnen
|
||||||
cancelbuilding = [accent][[{0}][] um den Plan zu leeren
|
cancelbuilding = [accent][[{0}][] um den Plan zu leeren
|
||||||
@@ -344,9 +346,9 @@ custom = Benutzerdefiniert
|
|||||||
builtin = Enthalten
|
builtin = Enthalten
|
||||||
map.delete.confirm = Bist du sicher, dass du diese Karte löschen willst? Dies kann nicht rückgängig gemacht werden!
|
map.delete.confirm = Bist du sicher, dass du diese Karte löschen willst? Dies kann nicht rückgängig gemacht werden!
|
||||||
map.random = [accent]Zufällige Karte
|
map.random = [accent]Zufällige Karte
|
||||||
map.nospawn = Diese Karte hat keine Kerne, in denen die Spieler beginnen können! Füge einen [royal]orangen[] Kern zu dieser Karte im Editor hinzu.
|
map.nospawn = Diese Karte hat keine Kerne, in denen die Spieler beginnen können! Füge einen [#{0}]{1}[] Kern zu dieser Karte im Editor hinzu.
|
||||||
map.nospawn.pvp = Diese Karte hat keine Kerne für die gegnerischen Spieler! Füge über den Editor [scarlet] nicht-orange[] Kerne zu dieser Karte hinzu.
|
map.nospawn.pvp = Diese Karte hat keine Kerne für die gegnerischen Spieler! Füge über den Editor [scarlet] nicht-orange[] Kerne zu dieser Karte hinzu.
|
||||||
map.nospawn.attack = Diese Karte hat keine gegnerischen 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 gegnerischen Kerne, die Spieler angreifen können! Füge über den Editor a [#{0}]{1}[] Kerne zu dieser Karte hinzu.
|
||||||
map.invalid = Fehler beim Laden der Karte: Beschädigte oder ungültige Kartendatei.
|
map.invalid = Fehler beim Laden der Karte: Beschädigte oder ungültige Kartendatei.
|
||||||
workshop.update = Objekt aktualisieren
|
workshop.update = Objekt aktualisieren
|
||||||
workshop.error = Fehler beim Laden von Workshop-Details: {0}
|
workshop.error = Fehler beim Laden von Workshop-Details: {0}
|
||||||
@@ -361,6 +363,7 @@ publish.confirm = Willst du das wirklich veröffentlichen?\n\n[lightgray]Vergewi
|
|||||||
publish.error = Fehler beim Veröffentlichen des Objekts: {0}
|
publish.error = Fehler beim Veröffentlichen des Objekts: {0}
|
||||||
steam.error = Fehler beim Laden der Steam-Dienste.\nError: {0}
|
steam.error = Fehler beim Laden der Steam-Dienste.\nError: {0}
|
||||||
|
|
||||||
|
editor.cliffs = Wände zu Klippen
|
||||||
editor.brush = Pinsel
|
editor.brush = Pinsel
|
||||||
editor.openin = Öffne im Editor
|
editor.openin = Öffne im Editor
|
||||||
editor.oregen = Erze generieren
|
editor.oregen = Erze generieren
|
||||||
@@ -376,6 +379,9 @@ editor.ingame = Im Spiel bearbeiten
|
|||||||
editor.publish.workshop = Im Workshop veröffentlichen
|
editor.publish.workshop = Im Workshop veröffentlichen
|
||||||
editor.newmap = Neue Karte
|
editor.newmap = Neue Karte
|
||||||
editor.center = Zur Mitte
|
editor.center = Zur Mitte
|
||||||
|
editor.search = Karten durchsuchen...
|
||||||
|
editor.filters = Karten filtern
|
||||||
|
editor.showAll = Standard-Karten anzeigen
|
||||||
workshop = Workshop
|
workshop = Workshop
|
||||||
waves.title = Wellen
|
waves.title = Wellen
|
||||||
waves.remove = Entfernen
|
waves.remove = Entfernen
|
||||||
@@ -384,6 +390,7 @@ waves.waves = Welle(n)
|
|||||||
waves.perspawn = pro Spawn
|
waves.perspawn = pro Spawn
|
||||||
waves.shields = Schilder pro Welle
|
waves.shields = Schilder pro Welle
|
||||||
waves.to = bis
|
waves.to = bis
|
||||||
|
waves.max = maximale Einheiten
|
||||||
waves.guardian = Boss
|
waves.guardian = Boss
|
||||||
waves.preview = Vorschau
|
waves.preview = Vorschau
|
||||||
waves.edit = Bearbeiten...
|
waves.edit = Bearbeiten...
|
||||||
@@ -392,6 +399,13 @@ waves.load = Aus der Zwischenablage laden
|
|||||||
waves.invalid = Ungültige Wellen in der Zwischenablage.
|
waves.invalid = Ungültige Wellen in der Zwischenablage.
|
||||||
waves.copied = Wellen kopiert.
|
waves.copied = Wellen kopiert.
|
||||||
waves.none = Keine Gegner definiert.\nInfo: Leere Wellenentwürfe werden automatisch mit dem Standard-Entwurf ersetzt.
|
waves.none = Keine Gegner definiert.\nInfo: Leere Wellenentwürfe werden automatisch mit dem Standard-Entwurf ersetzt.
|
||||||
|
waves.sort = Sortieren nach
|
||||||
|
waves.sort.reverse = Rückwärts sortieren
|
||||||
|
waves.sort.begin = Anfang
|
||||||
|
waves.sort.health = Lebenspunkte
|
||||||
|
waves.sort.type = Sorte
|
||||||
|
waves.units.hide = Alle verstecken
|
||||||
|
waves.units.show = Alle anzeigen
|
||||||
|
|
||||||
|
|
||||||
wavemode.counts = Menge
|
wavemode.counts = Menge
|
||||||
@@ -538,6 +552,7 @@ configure = Anfangsressourcen festlegen
|
|||||||
loadout = Anfangsressourcen
|
loadout = Anfangsressourcen
|
||||||
resources = Ressourcen
|
resources = Ressourcen
|
||||||
bannedblocks = Gesperrte Blöcke
|
bannedblocks = Gesperrte Blöcke
|
||||||
|
bannedunits = Gesperrte Einheiten
|
||||||
addall = Alle hinzufügen
|
addall = Alle hinzufügen
|
||||||
launch.from = Items werden von [accent]{0} []gestartet
|
launch.from = Items werden von [accent]{0} []gestartet
|
||||||
launch.destination = Ziel: {0}
|
launch.destination = Ziel: {0}
|
||||||
@@ -562,6 +577,8 @@ weather.sandstorm.name = Sandsturm
|
|||||||
weather.sporestorm.name = Sporensturm
|
weather.sporestorm.name = Sporensturm
|
||||||
weather.fog.name = Nebel
|
weather.fog.name = Nebel
|
||||||
|
|
||||||
|
sectorlist = Sektoren
|
||||||
|
sectorlist.attacked = {0} wird angegriffen
|
||||||
sectors.unexplored = [lightgray]Unentdeckt
|
sectors.unexplored = [lightgray]Unentdeckt
|
||||||
sectors.resources = Ressourcen:
|
sectors.resources = Ressourcen:
|
||||||
sectors.production = Produktion:
|
sectors.production = Produktion:
|
||||||
@@ -617,6 +634,8 @@ sector.biomassFacility.name = Biomass Synthesis Facility
|
|||||||
sector.windsweptIslands.name = Windswept Islands
|
sector.windsweptIslands.name = Windswept Islands
|
||||||
sector.extractionOutpost.name = Extraction Outpost
|
sector.extractionOutpost.name = Extraction Outpost
|
||||||
sector.planetaryTerminal.name = Planetary Launch Terminal
|
sector.planetaryTerminal.name = Planetary Launch Terminal
|
||||||
|
sector.coastline.name = Küstenlinie
|
||||||
|
sector.navalFortress.name = Wasserfestung
|
||||||
|
|
||||||
sector.groundZero.description = Der optimale Ort, um anzufangen. Schwache Gegner und weniger Ressourcen.\nSammele so viel Kupfer und Blei wie möglich.\nGeh weiter.
|
sector.groundZero.description = Der optimale Ort, um anzufangen. Schwache Gegner und weniger Ressourcen.\nSammele so viel Kupfer und Blei wie möglich.\nGeh weiter.
|
||||||
sector.frozenForest.description = Auch hier, näher an den Bergen, sind die Sporen. Sogar die niedrigen Temperaturen können sie nicht zurückhalten.\n\nLerne, Strom zu verwenden. Baue Verbrennungsgeneratoren und Reparateure.
|
sector.frozenForest.description = Auch hier, näher an den Bergen, sind die Sporen. Sogar die niedrigen Temperaturen können sie nicht zurückhalten.\n\nLerne, Strom zu verwenden. Baue Verbrennungsgeneratoren und Reparateure.
|
||||||
@@ -644,10 +663,12 @@ status.sapped.name = Schwächend
|
|||||||
status.electrified.name = Elektrisch
|
status.electrified.name = Elektrisch
|
||||||
status.spore-slowed.name = Sporen-verlangsamt
|
status.spore-slowed.name = Sporen-verlangsamt
|
||||||
status.tarred.name = Teerend
|
status.tarred.name = Teerend
|
||||||
|
status.overdrive.name = Overdrive
|
||||||
status.overclock.name = Übertaktend
|
status.overclock.name = Übertaktend
|
||||||
status.shocked.name = Schockend
|
status.shocked.name = Schockend
|
||||||
status.blasted.name = Sprengend
|
status.blasted.name = Sprengend
|
||||||
status.unmoving.name = Unbeweglich
|
status.unmoving.name = Unbeweglich
|
||||||
|
status.boss.name = Boss
|
||||||
|
|
||||||
settings.language = Sprache
|
settings.language = Sprache
|
||||||
settings.data = Spieldaten
|
settings.data = Spieldaten
|
||||||
@@ -875,6 +896,7 @@ setting.seconds = {0} Sekunden
|
|||||||
setting.milliseconds = {0} Millisekunden
|
setting.milliseconds = {0} Millisekunden
|
||||||
setting.fullscreen.name = Vollbild
|
setting.fullscreen.name = Vollbild
|
||||||
setting.borderlesswindow.name = Randloses Fenster
|
setting.borderlesswindow.name = Randloses Fenster
|
||||||
|
setting.borderlesswindow.name.windows = Randloses Vollbild
|
||||||
setting.borderlesswindow.description = Neustart vielleicht erforderlich.
|
setting.borderlesswindow.description = Neustart vielleicht erforderlich.
|
||||||
setting.fps.name = FPS anzeigen
|
setting.fps.name = FPS anzeigen
|
||||||
setting.smoothcamera.name = Sanfte Kamerabewegungen
|
setting.smoothcamera.name = Sanfte Kamerabewegungen
|
||||||
@@ -998,6 +1020,7 @@ rules.wavetimer = Wellen-Timer
|
|||||||
rules.waves = Wellen
|
rules.waves = Wellen
|
||||||
rules.attack = Angriff-Modus
|
rules.attack = Angriff-Modus
|
||||||
rules.buildai = KI kann bauen
|
rules.buildai = KI kann bauen
|
||||||
|
rules.aitier = KI Stärke
|
||||||
rules.cleanupdeadteams = Blöcke von erorberten Teams zerstören (PvP)
|
rules.cleanupdeadteams = Blöcke von erorberten Teams zerstören (PvP)
|
||||||
rules.corecapture = Kern nach Zerstörung einnehmen
|
rules.corecapture = Kern nach Zerstörung einnehmen
|
||||||
rules.polygoncoreprotection = Polygonaler Kernschutz
|
rules.polygoncoreprotection = Polygonaler Kernschutz
|
||||||
@@ -1017,12 +1040,15 @@ rules.deconstructrefundmultiplier = Abbau Ressourcen-Rückerstattung
|
|||||||
rules.waitForWaveToEnd = Warten bis Welle endet
|
rules.waitForWaveToEnd = Warten bis Welle endet
|
||||||
rules.dropzoneradius = Drop-Zonen-Radius:[lightgray] (Kacheln)
|
rules.dropzoneradius = Drop-Zonen-Radius:[lightgray] (Kacheln)
|
||||||
rules.unitammo = Einheiten benötigen Munition
|
rules.unitammo = Einheiten benötigen Munition
|
||||||
|
rules.enemyteam = Gegnerteam
|
||||||
|
rules.playerteam = Spielerteam
|
||||||
rules.title.waves = Wellen
|
rules.title.waves = Wellen
|
||||||
rules.title.resourcesbuilding = Ressourcen & Blöcke
|
rules.title.resourcesbuilding = Ressourcen & Blöcke
|
||||||
rules.title.enemy = Gegner
|
rules.title.enemy = Gegner
|
||||||
rules.title.unit = Einheiten
|
rules.title.unit = Einheiten
|
||||||
rules.title.experimental = Experimentell
|
rules.title.experimental = Experimentell
|
||||||
rules.title.environment = Umgebung
|
rules.title.environment = Umgebung
|
||||||
|
rules.title.teams = Teams
|
||||||
rules.lighting = Blitze
|
rules.lighting = Blitze
|
||||||
rules.enemyLights = Gegnerisches Licht
|
rules.enemyLights = Gegnerisches Licht
|
||||||
rules.fire = Feuer
|
rules.fire = Feuer
|
||||||
@@ -1101,13 +1127,13 @@ unit.reign.name = Reign
|
|||||||
unit.vela.name = Vela
|
unit.vela.name = Vela
|
||||||
unit.corvus.name = Korvus
|
unit.corvus.name = Korvus
|
||||||
|
|
||||||
block.resupply-point.name = Munitionsvorrat
|
|
||||||
block.parallax.name = Parallax
|
block.parallax.name = Parallax
|
||||||
block.cliff.name = Klippe
|
block.cliff.name = Klippe
|
||||||
block.sand-boulder.name = Sandbrocken
|
block.sand-boulder.name = Sandbrocken
|
||||||
block.basalt-boulder.name = Basaltbrocken
|
block.basalt-boulder.name = Basaltbrocken
|
||||||
block.grass.name = Gras
|
block.grass.name = Gras
|
||||||
block.molten-slag.name = Schlacke
|
block.molten-slag.name = Schlacke
|
||||||
|
block.pooled-cryofluid.name = Cryoflüssigkeit
|
||||||
block.space.name = Weltall
|
block.space.name = Weltall
|
||||||
block.salt.name = Salz
|
block.salt.name = Salz
|
||||||
block.salt-wall.name = Salzwand
|
block.salt-wall.name = Salzwand
|
||||||
@@ -1141,6 +1167,7 @@ block.core-nucleus.name = Kern: Nukleus
|
|||||||
block.deep-water.name = Tiefes Wasser
|
block.deep-water.name = Tiefes Wasser
|
||||||
block.shallow-water.name = Wasser
|
block.shallow-water.name = Wasser
|
||||||
block.tainted-water.name = Dreckiges Wasser
|
block.tainted-water.name = Dreckiges Wasser
|
||||||
|
block.deep-tainted-water.name = Tiefes dreckiges Wasser
|
||||||
block.darksand-tainted-water.name = Dreckiges Wasser (Dunkler Sand)
|
block.darksand-tainted-water.name = Dreckiges Wasser (Dunkler Sand)
|
||||||
block.tar.name = Teer
|
block.tar.name = Teer
|
||||||
block.stone.name = Stein
|
block.stone.name = Stein
|
||||||
@@ -1352,6 +1379,7 @@ hint.placeTurret = Platziere \uf861 [accent]Geschütze[], um deine Basis vor Geg
|
|||||||
hint.breaking = Benutze [accent]Rechtsklick[] und bewege deine Maus, um zu zerstören.
|
hint.breaking = Benutze [accent]Rechtsklick[] und bewege deine Maus, um zu zerstören.
|
||||||
hint.breaking.mobile = Aktiviere den \ue817 [accent]Hammer[] unten rechts und tippe, um Blöcke zu zerstören.\n\nHalte deinen Finger auf dem Bildschirm, um eine Fläche auszuwählen.
|
hint.breaking.mobile = Aktiviere den \ue817 [accent]Hammer[] unten rechts und tippe, um Blöcke zu zerstören.\n\nHalte deinen Finger auf dem Bildschirm, um eine Fläche auszuwählen.
|
||||||
hint.blockInfo = Genauere Blockinformationen können im [accent]Baumenü[] rechts beim [accent][[?][]-Symbol gefunden werden.
|
hint.blockInfo = Genauere Blockinformationen können im [accent]Baumenü[] rechts beim [accent][[?][]-Symbol gefunden werden.
|
||||||
|
hint.derelict = [accent]Derelikte[] Blöcke sind kaputte Teile alter Basen, die nicht mehr funktionieren.\n\nSie können für Ressourcen [accent]abgebaut[] werden.
|
||||||
hint.research = Nehme den \ue875 [accent]Forschen[]-Knopf um neue Technologien zu erforschen.
|
hint.research = Nehme den \ue875 [accent]Forschen[]-Knopf um neue Technologien zu erforschen.
|
||||||
hint.research.mobile = Nehme den \ue875 [accent]Forschen[]-Knopf im \ue88c [accent]Menü[], um neue Technologien zu erforschen.
|
hint.research.mobile = Nehme den \ue875 [accent]Forschen[]-Knopf im \ue88c [accent]Menü[], um neue Technologien zu erforschen.
|
||||||
hint.unitControl = Halte [accent][[L-STRG][] und [accent]klicke[], um alliierte Einheiten oder Geschütze zu steuern.
|
hint.unitControl = Halte [accent][[L-STRG][] und [accent]klicke[], um alliierte Einheiten oder Geschütze zu steuern.
|
||||||
@@ -1373,6 +1401,7 @@ hint.generator = \uf879 [accent]Verbrennungsgeneratoren[] verbrennen Kohle und
|
|||||||
hint.guardian = [accent]Boss[]-Einheiten sind gepanzert. Schwache Munition wie [accent]Kupfer[] und [accent]Blei[] sind [scarlet]nicht effektiv[].\n\nBenutze bessere Geschütze oder \uf835 [accent]Graphit[] als \uf861Duo-/\uf859Salvenmunition um einen Boss zu besiegen.
|
hint.guardian = [accent]Boss[]-Einheiten sind gepanzert. Schwache Munition wie [accent]Kupfer[] und [accent]Blei[] sind [scarlet]nicht effektiv[].\n\nBenutze bessere Geschütze oder \uf835 [accent]Graphit[] als \uf861Duo-/\uf859Salvenmunition um einen Boss zu besiegen.
|
||||||
hint.coreUpgrade = Kerne können aufgerüstet werden, indem man [accent]bessere Kerne über sie platziert[].\n\nPlatziere einen [accent]Fundament[]-Kern über einen [accent]Scherben[]-Kern. Stelle sicher, dass ausreichend Platz verfügbar ist.
|
hint.coreUpgrade = Kerne können aufgerüstet werden, indem man [accent]bessere Kerne über sie platziert[].\n\nPlatziere einen [accent]Fundament[]-Kern über einen [accent]Scherben[]-Kern. Stelle sicher, dass ausreichend Platz verfügbar ist.
|
||||||
hint.presetLaunch = Zu grauen [accent]Sektoren[] wie dem [accent]Frozen Forest[] kann man von überall aus hin starten. Es ist nicht nötig, benachbarte Sektoren zu erobern.\n\n[accent]Nummerierte Sektoren[] wie dieser hier sind [accent]optional[].
|
hint.presetLaunch = Zu grauen [accent]Sektoren[] wie dem [accent]Frozen Forest[] kann man von überall aus hin starten. Es ist nicht nötig, benachbarte Sektoren zu erobern.\n\n[accent]Nummerierte Sektoren[] wie dieser hier sind [accent]optional[].
|
||||||
|
hint.presetDifficulty = Dieser Sektor hat eine [scarlet]hohe Gefahrenstufe[].\nOhne richtige Technologie und Vorbereitung ist es [accent]nicht empfohlen[], zu diesem Sektor zu starten.
|
||||||
hint.coreIncinerate = Wenn dem Kern Materialien zugeführt werden, für die er keinen Platz mehr hat, werden diese [accent]verbrannt[].
|
hint.coreIncinerate = Wenn dem Kern Materialien zugeführt werden, für die er keinen Platz mehr hat, werden diese [accent]verbrannt[].
|
||||||
hint.coopCampaign = Wenn du die [accent]Mehrspielerkampagne[] spielst, werden produzierte Items [accent]zu deinen lokalen Sektoren[] geschickt.\n\nNeuen Erforschungen vom Host werden auch übertragen.
|
hint.coopCampaign = Wenn du die [accent]Mehrspielerkampagne[] spielst, werden produzierte Items [accent]zu deinen lokalen Sektoren[] geschickt.\n\nNeuen Erforschungen vom Host werden auch übertragen.
|
||||||
|
|
||||||
@@ -1403,7 +1432,7 @@ liquid.slag.description = Kann in Trennern verfeinert oder als Waffe gegen Gegne
|
|||||||
liquid.oil.description = Wird in fortgeschrittener Materialgewinnung und als brennende Munition verwendet.
|
liquid.oil.description = Wird in fortgeschrittener Materialgewinnung und als brennende Munition verwendet.
|
||||||
liquid.cryofluid.description = Wird als Kühlung in Geschützen, Fabriken oder Reaktoren verwendet.
|
liquid.cryofluid.description = Wird als Kühlung in Geschützen, Fabriken oder Reaktoren verwendet.
|
||||||
|
|
||||||
block.resupply-point.description = Füllt Einheiten in der Nähe mit Kupfermunition wieder auf. Nicht mit Einheiten kompatibel, die Strom benötigen.
|
block.derelict = [lightgray]Derelikt
|
||||||
block.armored-conveyor.description = Bewegt Materialien voran. Materialien können von der Seite nicht auf das Förderband.
|
block.armored-conveyor.description = Bewegt Materialien voran. Materialien können von der Seite nicht auf das Förderband.
|
||||||
block.illuminator.description = Eine Lichtquelle.
|
block.illuminator.description = Eine Lichtquelle.
|
||||||
block.message.description = Speichert eine Nachricht, die genutzt wird, um mit Verbündeten zu kommunizieren.
|
block.message.description = Speichert eine Nachricht, die genutzt wird, um mit Verbündeten zu kommunizieren.
|
||||||
@@ -1429,6 +1458,8 @@ block.item-source.description = Produziert unendlich viele Gegenstände. Nur im
|
|||||||
block.item-void.description = Zerstört Materialien, die hereingegeben werden, ohne Strom zu verbrauchen. Nur im Sandkasten-Modus verfügbar.
|
block.item-void.description = Zerstört Materialien, die hereingegeben werden, ohne Strom zu verbrauchen. Nur im Sandkasten-Modus verfügbar.
|
||||||
block.liquid-source.description = Produziert unendlich Flüssigkeiten. Nur im Sandkasten-Modus verfügbar.
|
block.liquid-source.description = Produziert unendlich Flüssigkeiten. Nur im Sandkasten-Modus verfügbar.
|
||||||
block.liquid-void.description = Entfernt jegliche Flüssigkeiten. Nur im Sandkasten-Modus verfügbar.
|
block.liquid-void.description = Entfernt jegliche Flüssigkeiten. Nur im Sandkasten-Modus verfügbar.
|
||||||
|
block.payload-source.description = Produziert unendlich Einheiten. Nur im Sandkasten-Modus verfügbar.
|
||||||
|
block.payload-void.description = Entfernt jegliche Einheiten. Nur im Sandkasten-Modus verfügbar.
|
||||||
block.copper-wall.description = Beschützt Blöcke vor Gegnern.
|
block.copper-wall.description = Beschützt Blöcke vor Gegnern.
|
||||||
block.copper-wall-large.description = Beschützt Blöcke vor Gegnern.
|
block.copper-wall-large.description = Beschützt Blöcke vor Gegnern.
|
||||||
block.titanium-wall.description = Beschützt Blöcke vor Gegnern.
|
block.titanium-wall.description = Beschützt Blöcke vor Gegnern.
|
||||||
@@ -1583,7 +1614,7 @@ unit.omura.description = Schießt eine Railgun mit hoher Reichweite, um Gegner z
|
|||||||
unit.alpha.description = Beschützt den Scherbenkern vor Feinden. Baut Blöcke.
|
unit.alpha.description = Beschützt den Scherbenkern vor Feinden. Baut Blöcke.
|
||||||
unit.beta.description = Beschützt den Fundamentkern vor Feinden. Baut Blöcke.
|
unit.beta.description = Beschützt den Fundamentkern vor Feinden. Baut Blöcke.
|
||||||
unit.gamma.description = Beschützt den Nukleuskern vor Feinden. Baut Blöcke.
|
unit.gamma.description = Beschützt den Nukleuskern vor Feinden. Baut Blöcke.
|
||||||
unit.retusa.description = Platziert Minen und heilt verbündete Einheiten.
|
unit.retusa.description = Schießt zielsuchende Torpedos auf Gegner und heilt verbündete Einheiten.
|
||||||
unit.oxynoe.description = Schießt Block-heilendes Feuer auf Gegner und zerstört gegnerische Projektile.
|
unit.oxynoe.description = Schießt Block-heilendes Feuer auf Gegner und zerstört gegnerische Projektile.
|
||||||
unit.cyerce.description = Schießt zielsuchende Cluster-Raketen auf Gegner und heilt verbündete Einheiten.
|
unit.cyerce.description = Schießt zielsuchende Cluster-Raketen auf Gegner und heilt verbündete Einheiten.
|
||||||
unit.aegires.description = Schockt alle gegnerische Einheiten und Blöcke, die das Energiefeld betreten. Heilt alle verbündete.
|
unit.aegires.description = Schockt alle gegnerische Einheiten und Blöcke, die das Energiefeld betreten. Heilt alle verbündete.
|
||||||
|
|||||||
@@ -379,6 +379,13 @@ editor.ingame = Editar dentro del juego
|
|||||||
editor.publish.workshop = Publicar en el Steam Workshop
|
editor.publish.workshop = Publicar en el Steam Workshop
|
||||||
editor.newmap = Nuevo Mapa
|
editor.newmap = Nuevo Mapa
|
||||||
editor.center = Centrar
|
editor.center = Centrar
|
||||||
|
editor.search = Buscar mapas...
|
||||||
|
editor.filters = Filtrar Mapas
|
||||||
|
editor.filters.mode = Modos de juego:
|
||||||
|
editor.filters.type = Tipo de mapa:
|
||||||
|
editor.filters.search = Buscar en:
|
||||||
|
editor.filters.author = Autor
|
||||||
|
editor.filters.description = Descripción
|
||||||
workshop = Steam Workshop
|
workshop = Steam Workshop
|
||||||
waves.title = Oleadas
|
waves.title = Oleadas
|
||||||
waves.remove = Borrar
|
waves.remove = Borrar
|
||||||
@@ -412,6 +419,7 @@ wavemode.health = por salud
|
|||||||
editor.default = [lightgray]<Por defecto>
|
editor.default = [lightgray]<Por defecto>
|
||||||
details = Detalles...
|
details = Detalles...
|
||||||
edit = Editar...
|
edit = Editar...
|
||||||
|
variables = Variables
|
||||||
editor.name = Nombre:
|
editor.name = Nombre:
|
||||||
editor.spawn = Aparecer unidad
|
editor.spawn = Aparecer unidad
|
||||||
editor.removeunit = Borrar Unidad
|
editor.removeunit = Borrar Unidad
|
||||||
@@ -1291,6 +1299,7 @@ block.plated-conduit.name = Conducto Acorazado
|
|||||||
block.phase-conduit.name = Conducto de Fase
|
block.phase-conduit.name = Conducto de Fase
|
||||||
block.liquid-router.name = Enrutador de Líquidos
|
block.liquid-router.name = Enrutador de Líquidos
|
||||||
block.liquid-tank.name = Tanque de Líquidos
|
block.liquid-tank.name = Tanque de Líquidos
|
||||||
|
block.liquid-container.name = Contenedor de Líquidos
|
||||||
block.liquid-junction.name = Cruce de Líquidos
|
block.liquid-junction.name = Cruce de Líquidos
|
||||||
block.bridge-conduit.name = Conducto Puente
|
block.bridge-conduit.name = Conducto Puente
|
||||||
block.rotary-pump.name = Bomba Rotatoria
|
block.rotary-pump.name = Bomba Rotatoria
|
||||||
@@ -1337,13 +1346,19 @@ block.disassembler.name = Desensamblador
|
|||||||
block.silicon-crucible.name = Crisol de silicio
|
block.silicon-crucible.name = Crisol de silicio
|
||||||
block.overdrive-dome.name = Campo de Aceleración
|
block.overdrive-dome.name = Campo de Aceleración
|
||||||
block.interplanetary-accelerator.name = Acelerador Interplanetario
|
block.interplanetary-accelerator.name = Acelerador Interplanetario
|
||||||
#experimental, puede ser eliminado
|
block.constructor.name = Constructor
|
||||||
block.block-forge.name = Forja de Carga
|
block.constructor.description = Construye estructuras de hasta un tamaño de 2x2.
|
||||||
block.block-loader.name = Cargador de Carga
|
block.large-constructor.name = Constructor grande
|
||||||
block.block-unloader.name = Descargador de Carga
|
block.large-constructor.description = Construye estructuras de hasta un tamaño de 4x4.
|
||||||
|
block.deconstructor.name = Deconstructor
|
||||||
|
block.deconstructor.description = Deconstruye estructuras y unidades, devuelve el 100% de su costo original.
|
||||||
|
block.payload-loader.name = Cargador de carga útil
|
||||||
|
block.payload-loader.description = Carga objetos y líquidos en los bloques.
|
||||||
|
block.payload-unloader.name = Descargador de carga útil
|
||||||
|
block.payload-unloader.description = Descarga objetos y líquidos de los bloques.
|
||||||
block.switch.name = Interruptor
|
block.switch.name = Interruptor
|
||||||
block.micro-processor.name = Micro Processador
|
block.micro-processor.name = Micro Procesador
|
||||||
|
|
||||||
block.logic-processor.name = Procesador lógico
|
block.logic-processor.name = Procesador lógico
|
||||||
block.hyper-processor.name = Hiperprocesador
|
block.hyper-processor.name = Hiperprocesador
|
||||||
block.logic-display.name = Pantalla lógica
|
block.logic-display.name = Pantalla lógica
|
||||||
@@ -1496,6 +1511,7 @@ block.conduit.description = Mueve líquidos hacia delante. Se usa junto con bomb
|
|||||||
block.pulse-conduit.description = Transporta líquidos rápidamente y almacena más que los conductos estándar.
|
block.pulse-conduit.description = Transporta líquidos rápidamente y almacena más que los conductos estándar.
|
||||||
block.plated-conduit.description = Transporta líquidos rápidamente pero no acepta líquidos por los lados. Resiste más ante fugas, por lo que no gotea.
|
block.plated-conduit.description = Transporta líquidos rápidamente pero no acepta líquidos por los lados. Resiste más ante fugas, por lo que no gotea.
|
||||||
block.liquid-router.description = Acepta líquidos de una dirección y los reparte en hasta 3 direcciones equitativamente. También puede almacenar cierta capacidad de líquido.
|
block.liquid-router.description = Acepta líquidos de una dirección y los reparte en hasta 3 direcciones equitativamente. También puede almacenar cierta capacidad de líquido.
|
||||||
|
block-liquid-container.description = Almacena una cantidad considerable de líquidos. Lo devuelve en todas las direcciones de salida válidas, como un enrutador de líquidos.
|
||||||
block.liquid-tank.description = Almacena una gran cantidad de líquidos. Lo devuelve en todas direcciones de salida válidas, como un enrutador de líquidos.
|
block.liquid-tank.description = Almacena una gran cantidad de líquidos. Lo devuelve en todas direcciones de salida válidas, como un enrutador de líquidos.
|
||||||
block.liquid-junction.description = Actúa como un puente para dos conductos que se cruzan.
|
block.liquid-junction.description = Actúa como un puente para dos conductos que se cruzan.
|
||||||
block.bridge-conduit.description = Permite transportar líquidos sobre cualquier terreno o estructura.
|
block.bridge-conduit.description = Permite transportar líquidos sobre cualquier terreno o estructura.
|
||||||
|
|||||||
@@ -288,6 +288,7 @@ save.corrupted = Fichier de sauvegarde corrompu ou invalide !
|
|||||||
empty = <vide>
|
empty = <vide>
|
||||||
on = Activé
|
on = Activé
|
||||||
off = Désactivé
|
off = Désactivé
|
||||||
|
save.search = Recherche de parties sauvegardées...
|
||||||
save.autosave = Sauvegarde automatique : {0}
|
save.autosave = Sauvegarde automatique : {0}
|
||||||
save.map = Carte : {0}
|
save.map = Carte : {0}
|
||||||
save.wave = Vague {0}
|
save.wave = Vague {0}
|
||||||
@@ -381,7 +382,11 @@ editor.newmap = Nouvelle carte
|
|||||||
editor.center = Centrer
|
editor.center = Centrer
|
||||||
editor.search = Recherche de cartes...
|
editor.search = Recherche de cartes...
|
||||||
editor.filters = Filtrer les cartes
|
editor.filters = Filtrer les cartes
|
||||||
editor.showAll = Afficher les cartes par défaut
|
editor.filters.mode = Modes de jeu :
|
||||||
|
editor.filters.type = Type de carte :
|
||||||
|
editor.filters.search = Rechercher dans :
|
||||||
|
editor.filters.author = Auteur
|
||||||
|
editor.filters.description = Description
|
||||||
workshop = Steam Workshop
|
workshop = Steam Workshop
|
||||||
waves.title = Vagues
|
waves.title = Vagues
|
||||||
waves.remove = Supprimer
|
waves.remove = Supprimer
|
||||||
|
|||||||
@@ -78,13 +78,12 @@ schematic.tagexists = Tanda ini sudah ada.
|
|||||||
|
|
||||||
stats = Statistik
|
stats = Statistik
|
||||||
stat.wave = Gelombang Terkalahkan:[accent] {0}
|
stat.wave = Gelombang Terkalahkan:[accent] {0}
|
||||||
|
stat.unitsCreated = Unit Terbentuk:[accent] {0}
|
||||||
stat.enemiesDestroyed = Musuh Terhancurkan:[accent] {0}
|
stat.enemiesDestroyed = Musuh Terhancurkan:[accent] {0}
|
||||||
stat.built = Jumlah Blok yang Dibangun:[accent] {0}
|
stat.built = Jumlah Blok yang Dibangun:[accent] {0}
|
||||||
stat.destroyed = Jumlah Blok Dihancurkan Musuh:[accent] {0}
|
stat.destroyed = Jumlah Blok Dihancurkan Musuh:[accent] {0}
|
||||||
stat.deconstructed = Jumlah Blok Dihancurkan Pemain:[accent] {0}
|
stat.deconstructed = Jumlah Blok Dihancurkan Pemain:[accent] {0}
|
||||||
stat.delivered = Sumber Daya yang Diluncurkan:
|
|
||||||
stat.playtime = Waktu Bermain:[accent] {0}
|
stat.playtime = Waktu Bermain:[accent] {0}
|
||||||
stat.rank = Nilai Akhir: [accent]{0}
|
|
||||||
|
|
||||||
globalitems = [accent]Bahan Keseluruhan
|
globalitems = [accent]Bahan Keseluruhan
|
||||||
map.delete = Apakah Anda yakin ingin menghapus peta "[accent]{0}[]"?
|
map.delete = Apakah Anda yakin ingin menghapus peta "[accent]{0}[]"?
|
||||||
@@ -94,6 +93,7 @@ level.mode = Mode Permainan:
|
|||||||
coreattack = < Inti sedang diserang! >
|
coreattack = < Inti sedang diserang! >
|
||||||
nearpoint = [[ [scarlet]TINGGALKAN TITIK JATUH SEGERA[] ]\npenghancuran akan terjadi
|
nearpoint = [[ [scarlet]TINGGALKAN TITIK JATUH SEGERA[] ]\npenghancuran akan terjadi
|
||||||
database = Basis Data Inti
|
database = Basis Data Inti
|
||||||
|
database.button = Basis Data
|
||||||
savegame = Simpan Permainan
|
savegame = Simpan Permainan
|
||||||
loadgame = Muat Permainan
|
loadgame = Muat Permainan
|
||||||
joingame = Bermain Bersama
|
joingame = Bermain Bersama
|
||||||
@@ -169,6 +169,7 @@ launchcore = Luncurkan Inti
|
|||||||
filename = Nama File:
|
filename = Nama File:
|
||||||
unlocked = Konten baru terbuka!
|
unlocked = Konten baru terbuka!
|
||||||
available = Penelitian baru tersedia!
|
available = Penelitian baru tersedia!
|
||||||
|
unlock.incampaign = < Buka dalam kampanye untuk detail lebih lanjut >
|
||||||
completed = [accent]Terselesaikan
|
completed = [accent]Terselesaikan
|
||||||
techtree = Cabang Teknologi
|
techtree = Cabang Teknologi
|
||||||
research.legacy = Data penelitian [accent]5.0[] ditemukan.\nApakah kamu ingin [accent]memuat data ini[], atau [accent]mengabaikannya[] dan memulai ulang penelitian di kampanye terbaru (disarankan)?
|
research.legacy = Data penelitian [accent]5.0[] ditemukan.\nApakah kamu ingin [accent]memuat data ini[], atau [accent]mengabaikannya[] dan memulai ulang penelitian di kampanye terbaru (disarankan)?
|
||||||
@@ -287,6 +288,7 @@ save.corrupted = [accent]File simpanan rusak atau tidak sah!\nJika Anda baru saj
|
|||||||
empty = <kosong>
|
empty = <kosong>
|
||||||
on = Aktif
|
on = Aktif
|
||||||
off = Nonaktif
|
off = Nonaktif
|
||||||
|
save.search = Cari permainan tersimpan...
|
||||||
save.autosave = Simpan otomatis: {0}
|
save.autosave = Simpan otomatis: {0}
|
||||||
save.map = Peta: {0}
|
save.map = Peta: {0}
|
||||||
save.wave = Gelombang {0}
|
save.wave = Gelombang {0}
|
||||||
@@ -362,6 +364,7 @@ publish.confirm = Apakah Anda yakin untuk menerbitkan item ini?\n\n[lightgray]Pa
|
|||||||
publish.error = Terjadi kesalahan saat menerbitkan item: {0}
|
publish.error = Terjadi kesalahan saat menerbitkan item: {0}
|
||||||
steam.error = Gagal untuk menjalankan layanan Steam.\nKesalahan: {0}
|
steam.error = Gagal untuk menjalankan layanan Steam.\nKesalahan: {0}
|
||||||
|
|
||||||
|
editor.cliffs = Dinding Ke Jurang
|
||||||
editor.brush = Kuas
|
editor.brush = Kuas
|
||||||
editor.openin = Buka di Penyunting
|
editor.openin = Buka di Penyunting
|
||||||
editor.oregen = Generasi Sumber Daya
|
editor.oregen = Generasi Sumber Daya
|
||||||
@@ -377,6 +380,13 @@ editor.ingame = Sunting dalam Permainan
|
|||||||
editor.publish.workshop = Terbitkan di Workshop
|
editor.publish.workshop = Terbitkan di Workshop
|
||||||
editor.newmap = Peta Baru
|
editor.newmap = Peta Baru
|
||||||
editor.center = Pusat
|
editor.center = Pusat
|
||||||
|
editor.search = Cari peta...
|
||||||
|
editor.filters = Filter Peta
|
||||||
|
editor.filters.mode = Mode Permainan:
|
||||||
|
editor.filters.type = Tipe Peta:
|
||||||
|
editor.filters.search = Cari Dalam:
|
||||||
|
editor.filters.author = Pembuat
|
||||||
|
editor.filters.description = Deskripsi
|
||||||
workshop = Workshop
|
workshop = Workshop
|
||||||
waves.title = Gelombang
|
waves.title = Gelombang
|
||||||
waves.remove = Hapus
|
waves.remove = Hapus
|
||||||
@@ -385,6 +395,7 @@ waves.waves = gelombang
|
|||||||
waves.perspawn = per muncul
|
waves.perspawn = per muncul
|
||||||
waves.shields = perisai/gelombang
|
waves.shields = perisai/gelombang
|
||||||
waves.to = sampai
|
waves.to = sampai
|
||||||
|
waves.max = unit maks
|
||||||
waves.guardian = Penjaga
|
waves.guardian = Penjaga
|
||||||
waves.preview = Pratinjau
|
waves.preview = Pratinjau
|
||||||
waves.edit = Sunting...
|
waves.edit = Sunting...
|
||||||
@@ -393,6 +404,13 @@ waves.load = Tempel dari Papan klip
|
|||||||
waves.invalid = Gelombang tidak valid di papan klip.
|
waves.invalid = Gelombang tidak valid di papan klip.
|
||||||
waves.copied = Gelombang tersalin.
|
waves.copied = Gelombang tersalin.
|
||||||
waves.none = Tidak ada musuh yang didefinisikan.\nIngat bahwa susunan gelombang yang kosong akan diubah menjadi susunan gelombang standar secara otomatis.
|
waves.none = Tidak ada musuh yang didefinisikan.\nIngat bahwa susunan gelombang yang kosong akan diubah menjadi susunan gelombang standar secara otomatis.
|
||||||
|
waves.sort = Urut Berdasarkan
|
||||||
|
waves.sort.reverse = Urut Balik
|
||||||
|
waves.sort.begin = Mulai
|
||||||
|
waves.sort.health = Darah
|
||||||
|
waves.sort.type = Tipe
|
||||||
|
waves.units.hide = Sembunyikan Semua
|
||||||
|
waves.units.show = Lihat Semua
|
||||||
|
|
||||||
#memang sengaja diberi huruf kecil
|
#memang sengaja diberi huruf kecil
|
||||||
wavemode.counts = jumlah
|
wavemode.counts = jumlah
|
||||||
@@ -402,6 +420,7 @@ wavemode.health = darah
|
|||||||
editor.default = [lightgray]<Standar>
|
editor.default = [lightgray]<Standar>
|
||||||
details = Detail...
|
details = Detail...
|
||||||
edit = Sunting...
|
edit = Sunting...
|
||||||
|
variables = Vars
|
||||||
editor.name = Nama:
|
editor.name = Nama:
|
||||||
editor.spawn = Munculkan Unit
|
editor.spawn = Munculkan Unit
|
||||||
editor.removeunit = Hapus Unit
|
editor.removeunit = Hapus Unit
|
||||||
@@ -538,7 +557,8 @@ configure = Konfigurasi Muatan
|
|||||||
|
|
||||||
loadout = Muatan
|
loadout = Muatan
|
||||||
resources = Sumber Daya
|
resources = Sumber Daya
|
||||||
bannedblocks = Balok yang dilarang
|
bannedblocks = Balok yang Dilarang
|
||||||
|
bannedunits = Unit yang Dilarang
|
||||||
addall = Tambah Semua
|
addall = Tambah Semua
|
||||||
launch.from = Meluncurkan Dari: [accent]{0}
|
launch.from = Meluncurkan Dari: [accent]{0}
|
||||||
launch.destination = Destinasi: {0}
|
launch.destination = Destinasi: {0}
|
||||||
@@ -563,6 +583,8 @@ weather.sandstorm.name = Badai Pasir
|
|||||||
weather.sporestorm.name = Badai Spora
|
weather.sporestorm.name = Badai Spora
|
||||||
weather.fog.name = Kabut
|
weather.fog.name = Kabut
|
||||||
|
|
||||||
|
sectorlist = Sektor
|
||||||
|
sectorlist.attacked = {0} sedang diserang
|
||||||
sectors.unexplored = [lightgray]Belum Ditelusuri
|
sectors.unexplored = [lightgray]Belum Ditelusuri
|
||||||
sectors.resources = Sumber Daya:
|
sectors.resources = Sumber Daya:
|
||||||
sectors.production = Produksi:
|
sectors.production = Produksi:
|
||||||
@@ -618,6 +640,8 @@ sector.biomassFacility.name = Pabrik Sintesis Biomassa
|
|||||||
sector.windsweptIslands.name = Pulau Bersemilir
|
sector.windsweptIslands.name = Pulau Bersemilir
|
||||||
sector.extractionOutpost.name = Pos Ekstraksi Terdepan
|
sector.extractionOutpost.name = Pos Ekstraksi Terdepan
|
||||||
sector.planetaryTerminal.name = Pusat Peluncuran Planet
|
sector.planetaryTerminal.name = Pusat Peluncuran Planet
|
||||||
|
sector.coastline.name = Tepi Pantai
|
||||||
|
sector.navalFortress.name = Benteng Laut
|
||||||
|
|
||||||
sector.groundZero.description = Lokasi yang optimal untuk bermain satu kali lagi. Sangat sedikit musuh. Beberapa sumber daya dapat dikumpulkan.\nKumpulkan timah dan tembaga sebanyak yang kamu bisa.\nMulai dari sini.
|
sector.groundZero.description = Lokasi yang optimal untuk bermain satu kali lagi. Sangat sedikit musuh. Beberapa sumber daya dapat dikumpulkan.\nKumpulkan timah dan tembaga sebanyak yang kamu bisa.\nMulai dari sini.
|
||||||
sector.frozenForest.description = Disini, dekat dengan gunung, spora sudah menyebar. Suhu dingin tidak dapat menahannya.\n\nHasilkan listrik. Bangun generator pembakar. Pelajari cara menggunakan mender.
|
sector.frozenForest.description = Disini, dekat dengan gunung, spora sudah menyebar. Suhu dingin tidak dapat menahannya.\n\nHasilkan listrik. Bangun generator pembakar. Pelajari cara menggunakan mender.
|
||||||
@@ -645,10 +669,12 @@ status.sapped.name = Melemahkan
|
|||||||
status.electrified.name = Dialiri Listrik
|
status.electrified.name = Dialiri Listrik
|
||||||
status.spore-slowed.name = Spora Melambat
|
status.spore-slowed.name = Spora Melambat
|
||||||
status.tarred.name = Berminyak
|
status.tarred.name = Berminyak
|
||||||
|
status.overdrive.name = Dipercepat
|
||||||
status.overclock.name = Melebihi Batas
|
status.overclock.name = Melebihi Batas
|
||||||
status.shocked.name = Mengkejut
|
status.shocked.name = Mengkejut
|
||||||
status.blasted.name = Meledak
|
status.blasted.name = Meledak
|
||||||
status.unmoving.name = Terdiam
|
status.unmoving.name = Terdiam
|
||||||
|
status.boss.name = Guardian
|
||||||
|
|
||||||
settings.language = Bahasa
|
settings.language = Bahasa
|
||||||
settings.data = Data Game
|
settings.data = Data Game
|
||||||
@@ -875,7 +901,8 @@ setting.saveinterval.name = Jarak Menyimpan
|
|||||||
setting.seconds = {0} detik
|
setting.seconds = {0} detik
|
||||||
setting.milliseconds = {0} milidetik
|
setting.milliseconds = {0} milidetik
|
||||||
setting.fullscreen.name = Layar Penuh
|
setting.fullscreen.name = Layar Penuh
|
||||||
setting.borderlesswindow.name = Jendela tak Berbatas[lightgray]
|
setting.borderlesswindow.name = Jendela tak Berbatas
|
||||||
|
setting.borderlesswindow.name.windows = Layar Penuh tak Berbatas
|
||||||
setting.borderlesswindow.description = Mulai ulang mungkin diperlukan untuk menerapkan perubahan.
|
setting.borderlesswindow.description = Mulai ulang mungkin diperlukan untuk menerapkan perubahan.
|
||||||
setting.fps.name = Tunjukkan FPS
|
setting.fps.name = Tunjukkan FPS
|
||||||
setting.smoothcamera.name = Kamera Halus
|
setting.smoothcamera.name = Kamera Halus
|
||||||
@@ -999,10 +1026,11 @@ rules.wavetimer = Pengaturan Waktu Gelombang
|
|||||||
rules.waves = Gelombang
|
rules.waves = Gelombang
|
||||||
rules.attack = Mode Penyerangan
|
rules.attack = Mode Penyerangan
|
||||||
rules.buildai = Bangunan A.I.
|
rules.buildai = Bangunan A.I.
|
||||||
|
rules.aitier = Tingkatan A.I.
|
||||||
rules.cleanupdeadteams = Bersihkan Bangunan Tim yang Kalah (PvP)
|
rules.cleanupdeadteams = Bersihkan Bangunan Tim yang Kalah (PvP)
|
||||||
rules.corecapture = Tangkap Inti Saat Kehancuran
|
rules.corecapture = Tangkap Inti Saat Kehancuran
|
||||||
rules.polygoncoreprotection = Poligon Pelindung Inti
|
rules.polygoncoreprotection = Poligon Pelindung Inti
|
||||||
rules.enemyCheat = Sumber Daya A.I. Musuh (Tim Merah) Tak Terbatas
|
rules.enemyCheat = Sumber Daya A.I. (Tim Merah) Tak Terbatas
|
||||||
rules.blockhealthmultiplier = Penggandaan Darah Blok
|
rules.blockhealthmultiplier = Penggandaan Darah Blok
|
||||||
rules.blockdamagemultiplier = Penggandaan Kekuatan Blok
|
rules.blockdamagemultiplier = Penggandaan Kekuatan Blok
|
||||||
rules.unitbuildspeedmultiplier = Penggandaan Kecepatan Munculnya Unit
|
rules.unitbuildspeedmultiplier = Penggandaan Kecepatan Munculnya Unit
|
||||||
@@ -1018,12 +1046,15 @@ rules.deconstructrefundmultiplier = Penggandaan Kembalinya Bahan Bangunan yang D
|
|||||||
rules.waitForWaveToEnd = Gelombang Menunggu Musuh
|
rules.waitForWaveToEnd = Gelombang Menunggu Musuh
|
||||||
rules.dropzoneradius = Radius Titik Muncul:[lightgray] (Blok)
|
rules.dropzoneradius = Radius Titik Muncul:[lightgray] (Blok)
|
||||||
rules.unitammo = Unit Membutuhkan Amunisi
|
rules.unitammo = Unit Membutuhkan Amunisi
|
||||||
|
rules.enemyteam = Tim Musuh
|
||||||
|
rules.playerteam = Tim Pemain
|
||||||
rules.title.waves = Gelombang
|
rules.title.waves = Gelombang
|
||||||
rules.title.resourcesbuilding = Sumber Daya & Bangunan
|
rules.title.resourcesbuilding = Sumber Daya & Bangunan
|
||||||
rules.title.enemy = Musuh
|
rules.title.enemy = Musuh
|
||||||
rules.title.unit = Unit
|
rules.title.unit = Unit
|
||||||
rules.title.experimental = Eksperimental
|
rules.title.experimental = Eksperimental
|
||||||
rules.title.environment = Lingkungan
|
rules.title.environment = Lingkungan
|
||||||
|
rules.title.teams = Tim
|
||||||
rules.lighting = Penerangan
|
rules.lighting = Penerangan
|
||||||
rules.enemyLights = Sinar dari Musuh
|
rules.enemyLights = Sinar dari Musuh
|
||||||
rules.fire = Api
|
rules.fire = Api
|
||||||
@@ -1102,13 +1133,13 @@ unit.reign.name = Reign
|
|||||||
unit.vela.name = Vela
|
unit.vela.name = Vela
|
||||||
unit.corvus.name = Corvus
|
unit.corvus.name = Corvus
|
||||||
|
|
||||||
block.resupply-point.name = Titik Pemasok Ulang
|
|
||||||
block.parallax.name = Parallax
|
block.parallax.name = Parallax
|
||||||
block.cliff.name = Cliff
|
block.cliff.name = Cliff
|
||||||
block.sand-boulder.name = Batu Pasir Besar
|
block.sand-boulder.name = Batu Pasir Besar
|
||||||
block.basalt-boulder.name = Batu Basal Besar
|
block.basalt-boulder.name = Batu Basal Besar
|
||||||
block.grass.name = Rumput
|
block.grass.name = Rumput
|
||||||
block.molten-slag.name = Lahar
|
block.molten-slag.name = Lahar
|
||||||
|
block.pooled-cryofluid.name = Cairan Dingin
|
||||||
block.space.name = Luar Angkasa
|
block.space.name = Luar Angkasa
|
||||||
block.salt.name = Garam
|
block.salt.name = Garam
|
||||||
block.salt-wall.name = Bukit Garam
|
block.salt-wall.name = Bukit Garam
|
||||||
@@ -1142,6 +1173,7 @@ block.core-nucleus.name = Inti: Nukleus
|
|||||||
block.deep-water.name = Air Dalam
|
block.deep-water.name = Air Dalam
|
||||||
block.shallow-water.name = Air
|
block.shallow-water.name = Air
|
||||||
block.tainted-water.name = Air Ternoda
|
block.tainted-water.name = Air Ternoda
|
||||||
|
block.deep-tainted-water.name = Air Dalam Ternoda
|
||||||
block.darksand-tainted-water.name = Air Ternodai Pasir Hitam
|
block.darksand-tainted-water.name = Air Ternodai Pasir Hitam
|
||||||
block.tar.name = Minyak Mentah
|
block.tar.name = Minyak Mentah
|
||||||
block.stone.name = Batu
|
block.stone.name = Batu
|
||||||
@@ -1268,7 +1300,8 @@ block.pulse-conduit.name = Selang Denyut
|
|||||||
block.plated-conduit.name = Pipa Terlapis
|
block.plated-conduit.name = Pipa Terlapis
|
||||||
block.phase-conduit.name = Selang Phase
|
block.phase-conduit.name = Selang Phase
|
||||||
block.liquid-router.name = Pengarah Cairan
|
block.liquid-router.name = Pengarah Cairan
|
||||||
block.liquid-tank.name = Bak Cairan
|
block.liquid-tank.name = Tangki Cairan
|
||||||
|
block.liquid-container.name = Kontainer Cairan
|
||||||
block.liquid-junction.name = Simpangan Cairan
|
block.liquid-junction.name = Simpangan Cairan
|
||||||
block.bridge-conduit.name = Jembatan Saluran
|
block.bridge-conduit.name = Jembatan Saluran
|
||||||
block.rotary-pump.name = Pompa Putaran
|
block.rotary-pump.name = Pompa Putaran
|
||||||
@@ -1315,10 +1348,16 @@ block.disassembler.name = Pembongkar
|
|||||||
block.silicon-crucible.name = Pelebur Raksasa
|
block.silicon-crucible.name = Pelebur Raksasa
|
||||||
block.overdrive-dome.name = Kubah Projektor Pemercepat
|
block.overdrive-dome.name = Kubah Projektor Pemercepat
|
||||||
block.interplanetary-accelerator.name = Akselerator Antarplanet
|
block.interplanetary-accelerator.name = Akselerator Antarplanet
|
||||||
#experimental, may be removed
|
block.constructor.name = Konstruktor
|
||||||
block.block-forge.name = Pemadu Blok
|
block.constructor.description = Membuat struktur hingga ubin berukuran 2x2.
|
||||||
block.block-loader.name = Pemuat Blok
|
block.large-constructor.name = Konstruktor Besar
|
||||||
block.block-unloader.name = Pembongkar Blok
|
block.large-constructor.description = Membuat struktur hingga ubin berukuran 4x4.
|
||||||
|
block.deconstructor.name = Deskontruktor
|
||||||
|
block.deconstructor.description = Mendekonstruksi bangunan dan unit. Mengembalikan 100% dari biaya bahan.
|
||||||
|
block.payload-loader.name = Pemuat Blok
|
||||||
|
block.payload-loader.description = Memuat cairan dan item ke dalam blok.
|
||||||
|
block.payload-unloader.name = Pembongkar Blok
|
||||||
|
block.payload-unloader.description = Membongkar cairan dan item dari blok.
|
||||||
|
|
||||||
block.switch.name = Saklar
|
block.switch.name = Saklar
|
||||||
block.micro-processor.name = Prosesor Mikro
|
block.micro-processor.name = Prosesor Mikro
|
||||||
@@ -1375,6 +1414,7 @@ hint.generator = \uf879 [accent]Generator Pembakar[] membakar batu bara dan meng
|
|||||||
hint.guardian = Unit [accent]Penjaga[] adalah unit yang diperkuat. Amunisi lemah seperti [accent]Tembaga[] dan [accent]Timah[] [scarlet]tidak efektif[].\n\nGunakan menara yang lebih bagus atau amunisi yang lebih kuat seperti \uf835 [accent]Grafit[] \uf861Duo/\uf859Salvo untuk menghancurkan Penjaga.
|
hint.guardian = Unit [accent]Penjaga[] adalah unit yang diperkuat. Amunisi lemah seperti [accent]Tembaga[] dan [accent]Timah[] [scarlet]tidak efektif[].\n\nGunakan menara yang lebih bagus atau amunisi yang lebih kuat seperti \uf835 [accent]Grafit[] \uf861Duo/\uf859Salvo untuk menghancurkan Penjaga.
|
||||||
hint.coreUpgrade = Inti dapat ditingkatkan dengan cara [accent]meletakkan yang lebih besar diatasnya[].\n\nLetakan sebuah inti [accent]Fondasi[] diatas inti [accent]Shard[]. Pastikan terdapat ruang kosong dari bangunan yang lain.
|
hint.coreUpgrade = Inti dapat ditingkatkan dengan cara [accent]meletakkan yang lebih besar diatasnya[].\n\nLetakan sebuah inti [accent]Fondasi[] diatas inti [accent]Shard[]. Pastikan terdapat ruang kosong dari bangunan yang lain.
|
||||||
hint.presetLaunch = [accent]Zona pendaratan[] yang berwarna abu-abu, seperti [accent]Hutan yang Beku[], dapat diluncurkan dari mana saja. Sektor seperti ini tidak perlu diluncurkan dari sektor terdekat milik kamu.\n\n[accent]Sektor yang bernomor[], seperti yang ini, bisa [accent]dikuasai atau diabaikan[].
|
hint.presetLaunch = [accent]Zona pendaratan[] yang berwarna abu-abu, seperti [accent]Hutan yang Beku[], dapat diluncurkan dari mana saja. Sektor seperti ini tidak perlu diluncurkan dari sektor terdekat milik kamu.\n\n[accent]Sektor yang bernomor[], seperti yang ini, bisa [accent]dikuasai atau diabaikan[].
|
||||||
|
hint.presetDifficulty = Sektor ini memiliki [scarlet]ancaman bahaya musuh yang tinggi[].\nMeluncurkan ke sektor tersebut [accent]tidak disarankan[] tanpa teknologi yang sesuai dan persiapan yang matang.
|
||||||
hint.coreIncinerate = Setelah inti penuh dengan suatu barang, barang yang setipe akan [accent]dihancurkan[].
|
hint.coreIncinerate = Setelah inti penuh dengan suatu barang, barang yang setipe akan [accent]dihancurkan[].
|
||||||
hint.coopCampaign = Ketika bermain [accent]kampanye multiplayer[], barang yang diproduksi di map ini akan diberikan ke [accent]sektor kamu juga[].\n\nSetiap penelitian baru yang dilakukan oleh host juga akan diberikan kepadamu.
|
hint.coopCampaign = Ketika bermain [accent]kampanye multiplayer[], barang yang diproduksi di map ini akan diberikan ke [accent]sektor kamu juga[].\n\nSetiap penelitian baru yang dilakukan oleh host juga akan diberikan kepadamu.
|
||||||
|
|
||||||
@@ -1406,7 +1446,6 @@ liquid.oil.description = Digunakan di produksi material lanjutan dan sebagai amu
|
|||||||
liquid.cryofluid.description = Digunakan sebagai pendingin di reaktor, menara, dan pabrik.
|
liquid.cryofluid.description = Digunakan sebagai pendingin di reaktor, menara, dan pabrik.
|
||||||
|
|
||||||
block.derelict = [lightgray] Derelik
|
block.derelict = [lightgray] Derelik
|
||||||
block.resupply-point.description = Mengisi ulang amunisi unit terdekat dengan tembaga. Tidak dapat mengisi ulang unit yang menggunakan tenaga baterai.
|
|
||||||
block.armored-conveyor.description = Memindahkan barang ke depan. Tidak dapat menerima masukan dari samping.
|
block.armored-conveyor.description = Memindahkan barang ke depan. Tidak dapat menerima masukan dari samping.
|
||||||
block.illuminator.description = Memancarkan cahaya.
|
block.illuminator.description = Memancarkan cahaya.
|
||||||
block.message.description = Menyimpan pesan untuk komunikasi antar sekutu.
|
block.message.description = Menyimpan pesan untuk komunikasi antar sekutu.
|
||||||
@@ -1417,7 +1456,7 @@ block.kiln.description = Membakar pasir dan timah menjadi metaglass.
|
|||||||
block.plastanium-compressor.description = Memproduksi plastanium dari minyak dan titanium.
|
block.plastanium-compressor.description = Memproduksi plastanium dari minyak dan titanium.
|
||||||
block.phase-weaver.description = Memproduksi kain phase dari thorium dan banyak pasir.
|
block.phase-weaver.description = Memproduksi kain phase dari thorium dan banyak pasir.
|
||||||
block.alloy-smelter.description = Memproduksi campuran logam dari titanium, timah, silikon dan tembaga.
|
block.alloy-smelter.description = Memproduksi campuran logam dari titanium, timah, silikon dan tembaga.
|
||||||
block.cryofluidmixer.description = Mencampur air dan titanium menjadi cairan dingin.
|
block.cryofluid-mixer.description = Mencampur air dan titanium menjadi cairan dingin.
|
||||||
block.blast-mixer.description = Memproduksi senyawa peledak dari pyratit dan polong spora.
|
block.blast-mixer.description = Memproduksi senyawa peledak dari pyratit dan polong spora.
|
||||||
block.pyratite-mixer.description = Mencampur batu bara, timah dan pasir menjadi pyratit.
|
block.pyratite-mixer.description = Mencampur batu bara, timah dan pasir menjadi pyratit.
|
||||||
block.melter.description = Melelehkan rongsokan menjadi lava.
|
block.melter.description = Melelehkan rongsokan menjadi lava.
|
||||||
@@ -1432,6 +1471,8 @@ block.item-source.description = Mengeluarkan bahan tak terhingga. Sandbox eksklu
|
|||||||
block.item-void.description = Menghancurkan bahan apa saja. Sandbox eksklusif.
|
block.item-void.description = Menghancurkan bahan apa saja. Sandbox eksklusif.
|
||||||
block.liquid-source.description = Mengeluarkan zat cair tak terhingga. Sandbox eksklusif.
|
block.liquid-source.description = Mengeluarkan zat cair tak terhingga. Sandbox eksklusif.
|
||||||
block.liquid-void.description = Menghancurkan zat cair apa saja. Sandbox eksklusif.
|
block.liquid-void.description = Menghancurkan zat cair apa saja. Sandbox eksklusif.
|
||||||
|
block.payload-source.description = Infinitely outputs payloads. Sandbox only.
|
||||||
|
block.payload-void.description = Destroys any payloads. Sandbox only.
|
||||||
block.copper-wall.description = Melindungi bangunan dari tembakan musuh.
|
block.copper-wall.description = Melindungi bangunan dari tembakan musuh.
|
||||||
block.copper-wall-large.description = Melindungi bangunan dari tembakan musuh.
|
block.copper-wall-large.description = Melindungi bangunan dari tembakan musuh.
|
||||||
block.titanium-wall.description = Melindungi bangunan dari tembakan musuh.
|
block.titanium-wall.description = Melindungi bangunan dari tembakan musuh.
|
||||||
@@ -1472,7 +1513,8 @@ block.conduit.description = Memindahkan cairan ke depan. Digunakan dengan pompa
|
|||||||
block.pulse-conduit.description = Memindahkan cairan ke depan. Mengantarkan lebih cepat dan banyak daripada saluran biasa.
|
block.pulse-conduit.description = Memindahkan cairan ke depan. Mengantarkan lebih cepat dan banyak daripada saluran biasa.
|
||||||
block.plated-conduit.description = Memindahkan cairan ke depan. Tidak menerima cairan dari samping. Tidak bocor.
|
block.plated-conduit.description = Memindahkan cairan ke depan. Tidak menerima cairan dari samping. Tidak bocor.
|
||||||
block.liquid-router.description = Menerima cairan dari satu arah dan mengeluarkannya ke 3 arah secara rata. Dapat digunakan untuk menyimpan sejumlah cairan.
|
block.liquid-router.description = Menerima cairan dari satu arah dan mengeluarkannya ke 3 arah secara rata. Dapat digunakan untuk menyimpan sejumlah cairan.
|
||||||
block.liquid-tank.description = Menyimpan jumlah cairan yang banyak. Mengeluarkan cairan ke segala arah, sama seperti pengarah cairan.
|
block.liquid-container.description = Menyimpan jumlah cairan yang banyak. Mengeluarkan cairan ke segala arah, sama seperti pengarah cairan.
|
||||||
|
block.liquid-tank.description = Menyimpan jumlah cairan yang sangat banyak. Mengeluarkan cairan ke segala arah, sama seperti pengarah cairan.
|
||||||
block.liquid-junction.description = Berguna seperti jembatan untuk dua saluran yang bersimpangan.
|
block.liquid-junction.description = Berguna seperti jembatan untuk dua saluran yang bersimpangan.
|
||||||
block.bridge-conduit.description = Memindahkan cairan melewati tanah atau bangunan.
|
block.bridge-conduit.description = Memindahkan cairan melewati tanah atau bangunan.
|
||||||
block.phase-conduit.description = Memindahkan cairan melewati tanah atau bangunan. Memiliki jarak yang lebih jauh daripada jembatan cairan, namun memerlukan tenaga.
|
block.phase-conduit.description = Memindahkan cairan melewati tanah atau bangunan. Memiliki jarak yang lebih jauh daripada jembatan cairan, namun memerlukan tenaga.
|
||||||
@@ -1737,6 +1779,7 @@ lenum.itemdrop = Menjatuhkan bahan.
|
|||||||
lenum.itemtake = Mengambil bahan dari suatu bangunan.
|
lenum.itemtake = Mengambil bahan dari suatu bangunan.
|
||||||
lenum.paydrop = Menurunkan muatan yang ada.
|
lenum.paydrop = Menurunkan muatan yang ada.
|
||||||
lenum.paytake = Mengangkut muatan pada lokasi ini.
|
lenum.paytake = Mengangkut muatan pada lokasi ini.
|
||||||
|
lenum.payenter = Masuk/mendarat pada blok muatan yang saat ini unit sedang berdiri.
|
||||||
lenum.flag = Tanda numerik unit.
|
lenum.flag = Tanda numerik unit.
|
||||||
lenum.mine = Menambang pada sebuah posisi.
|
lenum.mine = Menambang pada sebuah posisi.
|
||||||
lenum.build = Membangun sebuah sttruktur.
|
lenum.build = Membangun sebuah sttruktur.
|
||||||
|
|||||||
@@ -288,6 +288,7 @@ save.corrupted = [accent]セーブファイルが無効、または破損しま
|
|||||||
empty = <空>
|
empty = <空>
|
||||||
on = オン
|
on = オン
|
||||||
off = オフ
|
off = オフ
|
||||||
|
save.search = セーブデータを検索...
|
||||||
save.autosave = 自動保存: {0}
|
save.autosave = 自動保存: {0}
|
||||||
save.map = マップ: {0}
|
save.map = マップ: {0}
|
||||||
save.wave = ウェーブ {0}
|
save.wave = ウェーブ {0}
|
||||||
@@ -381,7 +382,11 @@ editor.newmap = 新しいマップ
|
|||||||
editor.center = 中心
|
editor.center = 中心
|
||||||
editor.search = マップを検索...
|
editor.search = マップを検索...
|
||||||
editor.filters = マップをフィルターする
|
editor.filters = マップをフィルターする
|
||||||
editor.showAll = デフォルトマップを表示
|
editor.filters.mode = ゲームモード:
|
||||||
|
editor.filters.type = マップタイプ:
|
||||||
|
editor.filters.search = 検索:
|
||||||
|
editor.filters.author = 作者
|
||||||
|
editor.filters.description = 説明
|
||||||
workshop = ワークショップ
|
workshop = ワークショップ
|
||||||
waves.title = ウェーブ
|
waves.title = ウェーブ
|
||||||
waves.remove = 削除
|
waves.remove = 削除
|
||||||
@@ -415,6 +420,7 @@ wavemode.health = 総体力
|
|||||||
editor.default = [lightgray]<デフォルト>
|
editor.default = [lightgray]<デフォルト>
|
||||||
details = 詳細...
|
details = 詳細...
|
||||||
edit = 編集...
|
edit = 編集...
|
||||||
|
variables = 変数
|
||||||
editor.name = 名前:
|
editor.name = 名前:
|
||||||
editor.spawn = ユニットを出す
|
editor.spawn = ユニットを出す
|
||||||
editor.removeunit = ユニットを消す
|
editor.removeunit = ユニットを消す
|
||||||
@@ -1299,6 +1305,7 @@ block.plated-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-container.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 = ロータリーポンプ
|
||||||
@@ -1345,10 +1352,16 @@ block.disassembler.name = ディスアセンブラー
|
|||||||
block.silicon-crucible.name = シリコンクルーシブル
|
block.silicon-crucible.name = シリコンクルーシブル
|
||||||
block.overdrive-dome.name = 加速ドーム
|
block.overdrive-dome.name = 加速ドーム
|
||||||
block.interplanetary-accelerator.name = 惑星間加速器
|
block.interplanetary-accelerator.name = 惑星間加速器
|
||||||
#experimental, may be removed
|
block.constructor.name = コンストラクター
|
||||||
block.block-forge.name = ブロックフォージ
|
block.constructor.description = 最大で2x2の大きさの構造物を建造します。
|
||||||
block.block-loader.name = ブロック積載機
|
block.large-constructor.name = 大型コンストラクター
|
||||||
block.block-unloader.name = ブロック搬出機
|
block.large-constructor.description = 最大で4x4の大きさの構造物を建造します。
|
||||||
|
block.deconstructor.name = デコンストラクター
|
||||||
|
block.deconstructor.description = 構造物やユニットを解体します。建造費の100%が戻ってきます。
|
||||||
|
block.payload-loader.name = ペイロード搬入機
|
||||||
|
block.payload-loader.description = 液体や資源をブロックに搬入します。
|
||||||
|
block.payload-unloader.name = ペイロード搬出機
|
||||||
|
block.payload-unloader.description = ブロックから液体や資源を搬出します。
|
||||||
|
|
||||||
block.switch.name = スイッチ
|
block.switch.name = スイッチ
|
||||||
block.micro-processor.name = マイクロプロセッサー
|
block.micro-processor.name = マイクロプロセッサー
|
||||||
@@ -1505,6 +1518,7 @@ block.conduit.description = 一般的な液体輸送ブロックです。液体
|
|||||||
block.pulse-conduit.description = 高度な液体輸送ブロックです。通常のパイプより速くたくさんの液体を輸送することができます。
|
block.pulse-conduit.description = 高度な液体輸送ブロックです。通常のパイプより速くたくさんの液体を輸送することができます。
|
||||||
block.plated-conduit.description = パルスパイプと同じ速度で液体を輸送することができ、耐久性に優れています。\nまた、パイプ以外による側面への入力を受け入れません。
|
block.plated-conduit.description = パルスパイプと同じ速度で液体を輸送することができ、耐久性に優れています。\nまた、パイプ以外による側面への入力を受け入れません。
|
||||||
block.liquid-router.description = 搬入したアイテムをほかの3方向へ均等に搬出します。液体の漏れを防ぐことができます。一つの資源から複数に分ける際などに使われます。
|
block.liquid-router.description = 搬入したアイテムをほかの3方向へ均等に搬出します。液体の漏れを防ぐことができます。一つの資源から複数に分ける際などに使われます。
|
||||||
|
block.liquid-container.description = 中量の液体を保管しておくことができます。液体ルーターと同様に四方へ搬出できます。
|
||||||
block.liquid-tank.description = 大量の液体を保管しておくことができます。需要が不安定な製造設備や重要な施設の冷却水の予備などとして使用されます。
|
block.liquid-tank.description = 大量の液体を保管しておくことができます。需要が不安定な製造設備や重要な施設の冷却水の予備などとして使用されます。
|
||||||
block.liquid-junction.description = パイプを他のパイプと交差できるようにします。それぞれ搬入した液体を前方に搬出します。パイプで複雑な構造を組み立てるときなどに使われます。
|
block.liquid-junction.description = パイプを他のパイプと交差できるようにします。それぞれ搬入した液体を前方に搬出します。パイプで複雑な構造を組み立てるときなどに使われます。
|
||||||
block.bridge-conduit.description = 高度な液体輸送ブロックです。地形や建物を超えて、3ブロック離れた場所に液体を輸送することができます。
|
block.bridge-conduit.description = 高度な液体輸送ブロックです。地形や建物を超えて、3ブロック離れた場所に液体を輸送することができます。
|
||||||
|
|||||||
@@ -288,6 +288,7 @@ save.corrupted = [accent]손상되었거나 잘못된 저장 파일입니다!
|
|||||||
empty = <비어있음>
|
empty = <비어있음>
|
||||||
on = 활성화
|
on = 활성화
|
||||||
off = 비활성화
|
off = 비활성화
|
||||||
|
save.search = 세이브 파일 검색
|
||||||
save.autosave = 자동저장: {0}
|
save.autosave = 자동저장: {0}
|
||||||
save.map = 맵: {0}
|
save.map = 맵: {0}
|
||||||
save.wave = {0} 단계
|
save.wave = {0} 단계
|
||||||
@@ -381,7 +382,11 @@ editor.newmap = 신규 맵
|
|||||||
editor.center = 중앙
|
editor.center = 중앙
|
||||||
editor.search = 맵 검색하기
|
editor.search = 맵 검색하기
|
||||||
editor.filters = 맵 필터링하기
|
editor.filters = 맵 필터링하기
|
||||||
editor.showAll = 기본 맵 보기
|
editor.filters.mode = 게임 모드:
|
||||||
|
editor.filters.type = 맵 유형:
|
||||||
|
editor.filters.search = 검색:
|
||||||
|
editor.filters.author = 제작자
|
||||||
|
editor.filters.description = 설명
|
||||||
workshop = 창작마당
|
workshop = 창작마당
|
||||||
waves.title = 단계
|
waves.title = 단계
|
||||||
waves.remove = 삭제
|
waves.remove = 삭제
|
||||||
@@ -415,6 +420,7 @@ wavemode.health = 체력
|
|||||||
editor.default = [lightgray]<기본값>
|
editor.default = [lightgray]<기본값>
|
||||||
details = 설명...
|
details = 설명...
|
||||||
edit = 편집...
|
edit = 편집...
|
||||||
|
variables = 변수
|
||||||
editor.name = 이름:
|
editor.name = 이름:
|
||||||
editor.spawn = 유닛 생성
|
editor.spawn = 유닛 생성
|
||||||
editor.removeunit = 유닛 삭제
|
editor.removeunit = 유닛 삭제
|
||||||
@@ -1342,15 +1348,15 @@ block.disassembler.name = 광재 분해기
|
|||||||
block.silicon-crucible.name = 실리콘 도가니
|
block.silicon-crucible.name = 실리콘 도가니
|
||||||
block.overdrive-dome.name = 대형 과부하 프로젝터
|
block.overdrive-dome.name = 대형 과부하 프로젝터
|
||||||
block.interplanetary-accelerator.name = 성간 코어 가속기
|
block.interplanetary-accelerator.name = 성간 코어 가속기
|
||||||
block.constructor.name = 제작대
|
block.constructor.name = 블록 제작대
|
||||||
block.constructor.description = 최대 2x2 크기의 블록을 제작합니다.
|
block.constructor.description = 최대 2x2 크기의 블록을 제작합니다.
|
||||||
block.large-constructor.name = 대형 제작대
|
block.large-constructor.name = 대형 블록 제작대
|
||||||
block.large-constructor.description = 최대 4x4 크기의 블록을 제작합니다.
|
block.large-constructor.description = 최대 4x4 크기의 블록을 제작합니다.
|
||||||
block.deconstructor.name = 분해기
|
block.deconstructor.name = 화물 해체기
|
||||||
block.deconstructor.description = 블록과 유닛을 분해합니다. 건설 비용의 100%를 돌려받습니다.
|
block.deconstructor.description = 블록과 유닛을 분해합니다. 건설 비용의 100%를 돌려받습니다.
|
||||||
block.payload-loader.name = 블록 로더
|
block.payload-loader.name = 화물 로더
|
||||||
block.payload-loader.description = 들어간 블록에 액체와 아이템을 저장합니다.
|
block.payload-loader.description = 들어간 블록에 액체와 아이템을 저장합니다.
|
||||||
block.payload-unloader.name = 블록 언로더
|
block.payload-unloader.name = 화물 언로더
|
||||||
block.payload-unloader.description = 들어간 블록에서 액체와 아이템을 가져옵니다.
|
block.payload-unloader.description = 들어간 블록에서 액체와 아이템을 가져옵니다.
|
||||||
|
|
||||||
block.switch.name = 스위치
|
block.switch.name = 스위치
|
||||||
|
|||||||
@@ -286,6 +286,7 @@ save.corrupted = [accent]Сохранённый файл повреждён ил
|
|||||||
empty = <пусто>
|
empty = <пусто>
|
||||||
on = Вкл
|
on = Вкл
|
||||||
off = Выкл
|
off = Выкл
|
||||||
|
save.search = Поиск сохранений...
|
||||||
save.autosave = Автосохранение: {0}
|
save.autosave = Автосохранение: {0}
|
||||||
save.map = Карта: {0}
|
save.map = Карта: {0}
|
||||||
save.wave = Волна {0}
|
save.wave = Волна {0}
|
||||||
@@ -378,7 +379,11 @@ editor.newmap = Новая карта
|
|||||||
editor.center = Центрировать
|
editor.center = Центрировать
|
||||||
editor.search = Поиск карт...
|
editor.search = Поиск карт...
|
||||||
editor.filters = Фильтры
|
editor.filters = Фильтры
|
||||||
editor.showAll = Показать карты по умолчанию
|
editor.filters.mode = Режимы игры:
|
||||||
|
editor.filters.type = Тип карты
|
||||||
|
editor.filters.search = Искать по
|
||||||
|
editor.filters.author = Автору
|
||||||
|
editor.filters.description = Описанию
|
||||||
workshop = Мастерская
|
workshop = Мастерская
|
||||||
waves.title = Волны
|
waves.title = Волны
|
||||||
waves.remove = Удалить
|
waves.remove = Удалить
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ mod.import.file = นำเข้าไฟล์
|
|||||||
mod.import.github = นำเข้าม็อดจาก Github
|
mod.import.github = นำเข้าม็อดจาก Github
|
||||||
mod.jarwarn = [scarlet]ม็อดไฟล์ JAR นั้นค่อนข้างไม่ปลอดภัย[]\nกรุณาเช็กให้แน่ใจว่าคุณนำเข้าม็อดนี้จะแหล่งที่เชื่อถือได้!
|
mod.jarwarn = [scarlet]ม็อดไฟล์ JAR นั้นค่อนข้างไม่ปลอดภัย[]\nกรุณาเช็กให้แน่ใจว่าคุณนำเข้าม็อดนี้จะแหล่งที่เชื่อถือได้!
|
||||||
mod.item.remove = ไอเท็มนี้เป็นส่วนหนึ่งของม็อด [accent]'{0}'[] หากต้องการนำออก กรุณาถอนการติดตั้งม็อดนั้น
|
mod.item.remove = ไอเท็มนี้เป็นส่วนหนึ่งของม็อด [accent]'{0}'[] หากต้องการนำออก กรุณาถอนการติดตั้งม็อดนั้น
|
||||||
mod.remove.confirm = ม็อดนี้จะถูกลบ
|
mod.remove.confirm = ม็อดนี้จะถูกลบออกไป
|
||||||
mod.author = [lightgray]ผู้สร้าง:[] {0}
|
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[] ลงในโฟลเดอร์ของม็อดแล้วลองอีกครั้ง
|
||||||
@@ -233,7 +233,7 @@ trace.mobile = ไคลเอนต์โทรศัพท์: [accent]{0}
|
|||||||
trace.modclient = ไคลเอนต์ปรับแต่ง: [accent]{0}
|
trace.modclient = ไคลเอนต์ปรับแต่ง: [accent]{0}
|
||||||
trace.times.joined = เวลาเข้า: [accent]{0}
|
trace.times.joined = เวลาเข้า: [accent]{0}
|
||||||
trace.times.kicked = เวลาโดนเตะ: [accent]{0}
|
trace.times.kicked = เวลาโดนเตะ: [accent]{0}
|
||||||
invalidid = client ID ไม่ถูกต้อง! กรุณารายงานบัคนี้
|
invalidid = ไคลเอนต์ ID ไม่ถูกต้อง! กรุณารายงานบัคนี้
|
||||||
server.bans = แบน
|
server.bans = แบน
|
||||||
server.bans.none = ไม่พบผู้เล่นที่ถูกแบน!
|
server.bans.none = ไม่พบผู้เล่นที่ถูกแบน!
|
||||||
server.admins = แอดมิน
|
server.admins = แอดมิน
|
||||||
@@ -282,12 +282,13 @@ save.newslot = ชื่อเซฟ:
|
|||||||
save.rename = เปลี่ยนชื่อ
|
save.rename = เปลี่ยนชื่อ
|
||||||
save.rename.text = ชื่อใหม่:
|
save.rename.text = ชื่อใหม่:
|
||||||
selectslot = เลือกเซฟ
|
selectslot = เลือกเซฟ
|
||||||
slot = [accent]Slot {0}
|
slot = [accent]สล็อต {0}
|
||||||
editmessage = แก้ไขข้อความ
|
editmessage = แก้ไขข้อความ
|
||||||
save.corrupted = ไฟล์เซฟเสียหายหรือไม่ถูกต้อง!
|
save.corrupted = ไฟล์เซฟเสียหายหรือไม่ถูกต้อง!
|
||||||
empty = <ว่างเปล่า>
|
empty = <ว่างเปล่า>
|
||||||
on = เปิด
|
on = เปิด
|
||||||
off = ปิด
|
off = ปิด
|
||||||
|
save.search = ค้นหาเซฟเกม...
|
||||||
save.autosave = เซฟอัตโนมัติ: {0}
|
save.autosave = เซฟอัตโนมัติ: {0}
|
||||||
save.map = แมพ: {0}
|
save.map = แมพ: {0}
|
||||||
save.wave = คลื่นที่ {0}
|
save.wave = คลื่นที่ {0}
|
||||||
@@ -361,14 +362,14 @@ missing = ไอเท็มนี้ถูกลบหรือย้าย\n[l
|
|||||||
publishing = [accent]กำลังเผยแพร่...
|
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 service ได้\nError: {0}
|
steam.error = ไม่สามารถเริ่ม Steam service ได้\nข้อผิดพลาด: {0}
|
||||||
|
|
||||||
editor.cliffs = เปลี่ยนกำแพงเป็นหน้าผา
|
editor.cliffs = เปลี่ยนกำแพงเป็นหน้าผา
|
||||||
editor.brush = แปรง
|
editor.brush = แปรง
|
||||||
editor.openin = เปิดในตัวแก้ไข
|
editor.openin = เปิดในตัวแก้ไข
|
||||||
editor.oregen = การเกิดของแร่
|
editor.oregen = การเกิดของแร่
|
||||||
editor.oregen.info = การเกิดของแร่:
|
editor.oregen.info = การเกิดของแร่:
|
||||||
editor.mapinfo = ข้อมูลของแมพ
|
editor.mapinfo = ข้อมูลแมพ
|
||||||
editor.author = ผู้สร้าง:
|
editor.author = ผู้สร้าง:
|
||||||
editor.description = คำอธิบาย:
|
editor.description = คำอธิบาย:
|
||||||
editor.nodescription = แมพจำเป็นต้องมีคำอธิบายอย่างน้อย 4 ตัวอักษรจึงจะสามารถเผยแพร่ได้
|
editor.nodescription = แมพจำเป็นต้องมีคำอธิบายอย่างน้อย 4 ตัวอักษรจึงจะสามารถเผยแพร่ได้
|
||||||
@@ -381,7 +382,11 @@ editor.newmap = แมพใหม่
|
|||||||
editor.center = ศูนย์กลางแมพ
|
editor.center = ศูนย์กลางแมพ
|
||||||
editor.search = ค้นหาแมพ...
|
editor.search = ค้นหาแมพ...
|
||||||
editor.filters = ตัวกรองแมพ
|
editor.filters = ตัวกรองแมพ
|
||||||
editor.showAll = แสดงแมพค่าเริ่มต้น
|
editor.filters.mode = เกมโหมด:
|
||||||
|
editor.filters.type = ประเภทแมพ:
|
||||||
|
editor.filters.search = ค้นหาจาก:
|
||||||
|
editor.filters.author = ผู้สร้าง
|
||||||
|
editor.filters.description = คำอธิบาย
|
||||||
workshop = เวิร์กช็อป
|
workshop = เวิร์กช็อป
|
||||||
waves.title = คลื่น
|
waves.title = คลื่น
|
||||||
waves.remove = ลบ
|
waves.remove = ลบ
|
||||||
@@ -415,6 +420,7 @@ wavemode.health = พลังชีวิต
|
|||||||
editor.default = [lightgray]<ค่าเริ่มต้น>
|
editor.default = [lightgray]<ค่าเริ่มต้น>
|
||||||
details = รายละเอียด...
|
details = รายละเอียด...
|
||||||
edit = แก้ไข...
|
edit = แก้ไข...
|
||||||
|
variables = ตัวแปร
|
||||||
editor.name = ชื่อ:
|
editor.name = ชื่อ:
|
||||||
editor.spawn = สร้างยูนิต
|
editor.spawn = สร้างยูนิต
|
||||||
editor.removeunit = ลบยูนิต
|
editor.removeunit = ลบยูนิต
|
||||||
@@ -425,7 +431,7 @@ editor.errorimage = ไฟล์นั้นคือไฟล์รูป ไ
|
|||||||
editor.errorlegacy = แมพนี้เก่าเกินไปและใช้รูปแบบแมพแบบเก่าที่ไม่สนับสนุนแล้ว
|
editor.errorlegacy = แมพนี้เก่าเกินไปและใช้รูปแบบแมพแบบเก่าที่ไม่สนับสนุนแล้ว
|
||||||
editor.errornot = นี่ไม่ใช้ไฟล์แมพ
|
editor.errornot = นี่ไม่ใช้ไฟล์แมพ
|
||||||
editor.errorheader = ไฟล์แมพนี้เสียหรือไม่ถูกต้อง
|
editor.errorheader = ไฟล์แมพนี้เสียหรือไม่ถูกต้อง
|
||||||
editor.errorname = แมพไม่มีการกำหนดชื่อ คุณกำลังโหลดไฟล์เซฟอยู่หรือป่าว?
|
editor.errorname = แมพไม่มีการกำหนดชื่อ คุณกำลังพยายามโหลดไฟล์เซฟอยู่หรือไม่?
|
||||||
editor.update = อัปเดต
|
editor.update = อัปเดต
|
||||||
editor.randomize = สุ่ม
|
editor.randomize = สุ่ม
|
||||||
editor.apply = ใช้
|
editor.apply = ใช้
|
||||||
@@ -563,12 +569,12 @@ guardian = ผู้พิทักษ์
|
|||||||
connectfail = [crimson]การเชื่อมต่อผิดพลาด:\n\n[accent]{0}
|
connectfail = [crimson]การเชื่อมต่อผิดพลาด:\n\n[accent]{0}
|
||||||
error.unreachable = เซิร์ฟเวอร์ไม่สามารถเข้าถึงได้\nแน่ใจหรือว่าที่อยู่เขียนถูกต้อง?
|
error.unreachable = เซิร์ฟเวอร์ไม่สามารถเข้าถึงได้\nแน่ใจหรือว่าที่อยู่เขียนถูกต้อง?
|
||||||
error.invalidaddress = ที่อยู่ไม่ถูกต้อง
|
error.invalidaddress = ที่อยู่ไม่ถูกต้อง
|
||||||
error.timedout = Timed out!\nเช็กให้แน่ใจว่า port forwarding ของโฮสต์เปิดอยู่และที่อยู่นั้นถูกต้อง!
|
error.timedout = หมดเวลา!\nเช็กให้แน่ใจว่า port forwarding ของโฮสต์เปิดอยู่และที่อยู่นั้นถูกต้อง!
|
||||||
error.mismatch = Packet error:\nอาจเกิดจากเวอร์ชั่นของ ไคลเอนต์/เซิร์ฟเวอร์ ไม่ตรงกัน\nเช็กให้แน่ใจว่าคุณและโฮสต์ใช้ Mindustry เวอร์ชั่นล่าสุด!
|
error.mismatch = ข้อผิดพลาดของแพ็คเก็ต:\nอาจเกิดจากเวอร์ชั่นของ ไคลเอนต์/เซิร์ฟเวอร์ ไม่ตรงกัน\nเช็กให้แน่ใจว่าคุณและโฮสต์ใช้ Mindustry เวอร์ชั่นล่าสุด!
|
||||||
error.alreadyconnected = เชื่อมต่ออยู่แล้ว
|
error.alreadyconnected = เชื่อมต่ออยู่แล้ว
|
||||||
error.mapnotfound = ไม่พบไฟล์แมพ
|
error.mapnotfound = ไม่พบไฟล์แมพ
|
||||||
error.io = Network I/O error
|
error.io = ข้อผิดพลาด I/O ของเครือข่าย
|
||||||
error.any = Error: เครือข่ายที่ไม่รู้จัก
|
error.any = ข้อผิดพลาด: เครือข่ายที่ไม่รู้จัก
|
||||||
error.bloom = ไม่สามารถเริ่มต้นบลูมได้\nอุปกรณ์ของคุณอาจไม่รองรับ
|
error.bloom = ไม่สามารถเริ่มต้นบลูมได้\nอุปกรณ์ของคุณอาจไม่รองรับ
|
||||||
|
|
||||||
weather.rain.name = ฝน
|
weather.rain.name = ฝน
|
||||||
@@ -610,8 +616,8 @@ sector.changeicon = เปลี่ยนไอคอน
|
|||||||
threat.low = ต่ำ
|
threat.low = ต่ำ
|
||||||
threat.medium = กลาง
|
threat.medium = กลาง
|
||||||
threat.high = สูง
|
threat.high = สูง
|
||||||
threat.extreme = ร้ายแรง
|
threat.extreme = วิบัติภัย
|
||||||
threat.eradication = มหาวิบัติ
|
threat.eradication = ทำลายล้าง
|
||||||
|
|
||||||
planets = ดาวเคราะห์
|
planets = ดาวเคราะห์
|
||||||
|
|
||||||
@@ -630,8 +636,8 @@ sector.overgrowth.name = โอเวอร์โกรว์ด
|
|||||||
sector.tarFields.name = ราบลุ่มน้ำมัน
|
sector.tarFields.name = ราบลุ่มน้ำมัน
|
||||||
sector.saltFlats.name = ที่ราบเกลือ
|
sector.saltFlats.name = ที่ราบเกลือ
|
||||||
sector.fungalPass.name = ทางผ่านฟังกัล
|
sector.fungalPass.name = ทางผ่านฟังกัล
|
||||||
sector.biomassFacility.name = แหล่งสังเคราะห์ชีวมวล
|
sector.biomassFacility.name = สถานสังเคราะห์ชีวมวล
|
||||||
sector.windsweptIslands.name = หมู่เกาะวินด์สเวปท์
|
sector.windsweptIslands.name = หมู่เกาะพหุวายุ
|
||||||
sector.extractionOutpost.name = ด่านส่งทรัพยากร
|
sector.extractionOutpost.name = ด่านส่งทรัพยากร
|
||||||
sector.planetaryTerminal.name = ท่าปล่อยจรวดอวกาศยาน
|
sector.planetaryTerminal.name = ท่าปล่อยจรวดอวกาศยาน
|
||||||
sector.coastline.name = แนวชายฝั่ง
|
sector.coastline.name = แนวชายฝั่ง
|
||||||
@@ -1138,7 +1144,7 @@ block.space.name = อวกาศ
|
|||||||
block.salt.name = เกลือ
|
block.salt.name = เกลือ
|
||||||
block.salt-wall.name = กำแพงเกลือ
|
block.salt-wall.name = กำแพงเกลือ
|
||||||
block.pebbles.name = ก้อนกรวด
|
block.pebbles.name = ก้อนกรวด
|
||||||
block.tendrils.name = ไม้เลื้อย
|
block.tendrils.name = เถาวัลย์
|
||||||
block.sand-wall.name = กำแพงทราย
|
block.sand-wall.name = กำแพงทราย
|
||||||
block.spore-pine.name = ต้นสนสปอร์
|
block.spore-pine.name = ต้นสนสปอร์
|
||||||
block.spore-wall.name = กำแพงสปอร์
|
block.spore-wall.name = กำแพงสปอร์
|
||||||
@@ -1343,15 +1349,10 @@ block.silicon-crucible.name = เบ้าหลอมซิลิคอน
|
|||||||
block.overdrive-dome.name = โดมเร่งประสิทธิภาพ
|
block.overdrive-dome.name = โดมเร่งประสิทธิภาพ
|
||||||
block.interplanetary-accelerator.name = ฐานเร่งความเร็วระหว่างดาวเคราะห์
|
block.interplanetary-accelerator.name = ฐานเร่งความเร็วระหว่างดาวเคราะห์
|
||||||
block.constructor.name = เครื่องก่อสร้าง
|
block.constructor.name = เครื่องก่อสร้าง
|
||||||
block.constructor.description = สรรค์สร้างสิ่งก่อสร้างขนาดจนถึง 2x2 ช่อง
|
|
||||||
block.large-constructor.name = เครื่องก่อสร้างขนาดใหญ่
|
block.large-constructor.name = เครื่องก่อสร้างขนาดใหญ่
|
||||||
block.large-constructor.description = สรรค์สร้างสิ่งก่อสร้างขนาดจนถึง 4x4 ช่อง
|
|
||||||
block.deconstructor.name = เครื่องลบทำลาย
|
block.deconstructor.name = เครื่องลบทำลาย
|
||||||
block.deconstructor.description = ลบทำลายสิ่งก่อสร้างและยูนิต คืน 100% ของทรัพยากรที่ใช้ในการสร้าง
|
|
||||||
block.payload-loader.name = เครื่องโหลดสิ่งบรรทุก
|
block.payload-loader.name = เครื่องโหลดสิ่งบรรทุก
|
||||||
block.payload-loader.description = โหลดของเหลวและไอเท็มเข้าไปในบล็อก
|
|
||||||
block.payload-unloader.name = เครื่องถ่ายสิ่งบรรทุก
|
block.payload-unloader.name = เครื่องถ่ายสิ่งบรรทุก
|
||||||
block.payload-unloader.description = ถ่ายของเหลวและไอเท็มออกจากบล็อก
|
|
||||||
|
|
||||||
block.switch.name = สวิตช์
|
block.switch.name = สวิตช์
|
||||||
block.micro-processor.name = ตัวประมวลผลขนาดเล็ก
|
block.micro-processor.name = ตัวประมวลผลขนาดเล็ก
|
||||||
@@ -1522,7 +1523,7 @@ block.conduit.description = เคลื่อนย้ายของเหล
|
|||||||
block.pulse-conduit.description = เคลื่อนย้ายของเหลวไปข้างหน้า เคลื่อนย้ายได้เร็วขึ้นและเก็บของเหลวได้เยอะกว่าท่อน้ำธรรมดา
|
block.pulse-conduit.description = เคลื่อนย้ายของเหลวไปข้างหน้า เคลื่อนย้ายได้เร็วขึ้นและเก็บของเหลวได้เยอะกว่าท่อน้ำธรรมดา
|
||||||
block.plated-conduit.description = เคลื่อนย้ายของเหลวไปข้างหน้า ไม่รับของเหลวจากด้านข้างนอกจากท่อน้ำด้วยกันเอง\nไม่รั่ว และมีเกราะที่หนากว่า
|
block.plated-conduit.description = เคลื่อนย้ายของเหลวไปข้างหน้า ไม่รับของเหลวจากด้านข้างนอกจากท่อน้ำด้วยกันเอง\nไม่รั่ว และมีเกราะที่หนากว่า
|
||||||
block.liquid-router.description = รับของเหลวจากทางเดียวแล้วส่งออกสามทางเท่าๆกัน สามารถเก็บของเหลวได้จำนวนหนึ่ง\nมีประโยชน์สำหรับการส่งของเหลวจากปั้มไปยังหลายที่
|
block.liquid-router.description = รับของเหลวจากทางเดียวแล้วส่งออกสามทางเท่าๆกัน สามารถเก็บของเหลวได้จำนวนหนึ่ง\nมีประโยชน์สำหรับการส่งของเหลวจากปั้มไปยังหลายที่
|
||||||
block.liquid-container.description = เก็บของเหลวจำนวนปานกลาง ส่งออกไปรอบด้านคล้ายกับเร้าเตอร์ของเหลว\nเหมาะในการใช้กับเครื่องโหลดและถ่ายสิ่งบรรทุกสำหรับการขนส่งของเหลวทางไกล
|
block.liquid-container.description = เก็บของเหลวจำนวนปานกลาง ส่งออกไปรอบด้านคล้ายกับ\nเร้าเตอร์ของเหลว เหมาะในการใช้กับเครื่องโหลดและถ่ายสิ่งบรรทุกสำหรับ\nการขนส่งของเหลวทางไกล
|
||||||
block.liquid-tank.description = เก็บของเหลวจำนวนมาก ส่งออกไปรอบด้านคล้ายกับเร้าเตอร์ของเหลว\nเหมาะในการใช้เพื่อสร้างกันชนในเวลาที่ของเหลวไม่คงที่\nหรือเวลาที่ใช้ของเหลวเป็นจำนวนมาก
|
block.liquid-tank.description = เก็บของเหลวจำนวนมาก ส่งออกไปรอบด้านคล้ายกับเร้าเตอร์ของเหลว\nเหมาะในการใช้เพื่อสร้างกันชนในเวลาที่ของเหลวไม่คงที่\nหรือเวลาที่ใช้ของเหลวเป็นจำนวนมาก
|
||||||
block.liquid-junction.description = ทำหน้าที่เป็นสะพานสำหรับท่อน้ำสองท่อตัดกันที่มีของเหลวสองชนิดแล้วจะไปคนละที่
|
block.liquid-junction.description = ทำหน้าที่เป็นสะพานสำหรับท่อน้ำสองท่อตัดกันที่มีของเหลวสองชนิดแล้วจะไปคนละที่
|
||||||
block.bridge-conduit.description = เคลื่อนย้ายของเหลวข้ามสิ่งก่อสร้างหรือกำแพง
|
block.bridge-conduit.description = เคลื่อนย้ายของเหลวข้ามสิ่งก่อสร้างหรือกำแพง
|
||||||
@@ -1604,6 +1605,11 @@ block.large-logic-display.description = แสดงกราฟิกโดย
|
|||||||
block.interplanetary-accelerator.description = หอคอยเรลกันแม่เหล็กไฟฟ้าขนาดมหึมา เร่งความเร็วแกนกลางเพื่อบินสู่อวกาศไปยังดาวเคราะห์อื่นๆ
|
block.interplanetary-accelerator.description = หอคอยเรลกันแม่เหล็กไฟฟ้าขนาดมหึมา เร่งความเร็วแกนกลางเพื่อบินสู่อวกาศไปยังดาวเคราะห์อื่นๆ
|
||||||
block.repair-turret.description = ซ่อมแซมยูนิตที่อยู่ในรัศมีของมันอย่างต่อเนื่อง สามารถใช้ของเหลวมาหล่อเย็นเพื่อเพิ่มประสิทธิภาพได้
|
block.repair-turret.description = ซ่อมแซมยูนิตที่อยู่ในรัศมีของมันอย่างต่อเนื่อง สามารถใช้ของเหลวมาหล่อเย็นเพื่อเพิ่มประสิทธิภาพได้
|
||||||
block.payload-propulsion-tower.description = บล็อกขนส่งสิ่งบรรทุกทางไกล\nยิงสิ่งบรรทุกไปยังหอเคลื่อนย้ายสิ่งบรรทุกอีกเครื่องที่เชื่อมต่อไว้
|
block.payload-propulsion-tower.description = บล็อกขนส่งสิ่งบรรทุกทางไกล\nยิงสิ่งบรรทุกไปยังหอเคลื่อนย้ายสิ่งบรรทุกอีกเครื่องที่เชื่อมต่อไว้
|
||||||
|
block.constructor.description = สรรค์สร้างสิ่งก่อสร้างขนาดจนถึง 2x2 ช่อง
|
||||||
|
block.large-constructor.description = สรรค์สร้างสิ่งก่อสร้างขนาดจนถึง 4x4 ช่อง
|
||||||
|
block.deconstructor.description = ลบทำลายสิ่งก่อสร้างและยูนิต คืนทรัพยากรทั้งหมดที่ใช้ในการก่อสร้าง
|
||||||
|
block.payload-loader.description = โหลดของเหลวและไอเท็มเข้าไปในบล็อก
|
||||||
|
block.payload-unloader.description = ถ่ายของเหลวและไอเท็มออกจากบล็อก
|
||||||
|
|
||||||
unit.dagger.description = ยิงกระสุนธรรมดาใส่ศัตรูที่อยู่ใกล้เคียง
|
unit.dagger.description = ยิงกระสุนธรรมดาใส่ศัตรูที่อยู่ใกล้เคียง
|
||||||
unit.mace.description = ยิงเปลวไฟเผาไหม้ใส่ศัตรูที่อยู่ใกล้เคียง
|
unit.mace.description = ยิงเปลวไฟเผาไหม้ใส่ศัตรูที่อยู่ใกล้เคียง
|
||||||
|
|||||||
@@ -288,6 +288,7 @@ save.corrupted = [accent]Kayıt dosyası bozuk veya geçersiz!
|
|||||||
empty = <boş>
|
empty = <boş>
|
||||||
on = Aç
|
on = Aç
|
||||||
off = Kapa
|
off = Kapa
|
||||||
|
save.search = Kayıtlı Oyun Ara...
|
||||||
save.autosave = Otomatik kayıt: {0}
|
save.autosave = Otomatik kayıt: {0}
|
||||||
save.map = Harita: {0}
|
save.map = Harita: {0}
|
||||||
save.wave = Dalga {0}
|
save.wave = Dalga {0}
|
||||||
@@ -381,7 +382,11 @@ editor.newmap = Yeni Harita
|
|||||||
editor.center = Ortala
|
editor.center = Ortala
|
||||||
editor.search = Harita Ara...
|
editor.search = Harita Ara...
|
||||||
editor.filters = Harita Filtrele
|
editor.filters = Harita Filtrele
|
||||||
editor.showAll = Varsayılan Haritaları Göster
|
editor.filters.mode = Oyun Modları:
|
||||||
|
editor.filters.type = Harita Türleri:
|
||||||
|
editor.filters.search = Ara:
|
||||||
|
editor.filters.author = Yapımcı
|
||||||
|
editor.filters.description = Açıklama
|
||||||
workshop = Atölye
|
workshop = Atölye
|
||||||
waves.title = Dalgalar
|
waves.title = Dalgalar
|
||||||
waves.remove = Kaldır
|
waves.remove = Kaldır
|
||||||
|
|||||||
@@ -350,6 +350,7 @@ workshop.error = Помилка під час отримання інформа
|
|||||||
map.publish.confirm = Ви дійсно хочете опублікувати цю мапу?\n\n[lightgray]Спершу переконайтеся, що ви згодні з Ліцензійною угодою Steam, або ваші мапи не з’являться!
|
map.publish.confirm = Ви дійсно хочете опублікувати цю мапу?\n\n[lightgray]Спершу переконайтеся, що ви згодні з Ліцензійною угодою Steam, або ваші мапи не з’являться!
|
||||||
workshop.menu = Виберіть, що ви хочете зробити з цим предметом.
|
workshop.menu = Виберіть, що ви хочете зробити з цим предметом.
|
||||||
workshop.info = Інформація про предмет
|
workshop.info = Інформація про предмет
|
||||||
|
workshop.info = Інформація про предмет
|
||||||
changelog = Змінопис (за бажанням):
|
changelog = Змінопис (за бажанням):
|
||||||
eula = Ліцензійна угода Steam
|
eula = Ліцензійна угода Steam
|
||||||
missing = Цей предмет було видалено або переміщено.\n[lightgray]Список Майстерні тепер автоматично від’єднано.
|
missing = Цей предмет було видалено або переміщено.\n[lightgray]Список Майстерні тепер автоматично від’єднано.
|
||||||
@@ -643,6 +644,7 @@ status.overclock.name = Прискорений
|
|||||||
status.shocked.name = Шокований
|
status.shocked.name = Шокований
|
||||||
status.blasted.name = Підірваний
|
status.blasted.name = Підірваний
|
||||||
status.unmoving.name = Незворушний
|
status.unmoving.name = Незворушний
|
||||||
|
status.boss.name = Вартовий
|
||||||
|
|
||||||
settings.language = Мова
|
settings.language = Мова
|
||||||
settings.data = Ігрові дані
|
settings.data = Ігрові дані
|
||||||
@@ -1422,6 +1424,8 @@ block.item-source.description = Постійно створює предмети
|
|||||||
block.item-void.description = Руйнує будь-які предмети. Тільки пісочниця.
|
block.item-void.description = Руйнує будь-які предмети. Тільки пісочниця.
|
||||||
block.liquid-source.description = Постійно виробляє рідини. Тільки пісочниця.
|
block.liquid-source.description = Постійно виробляє рідини. Тільки пісочниця.
|
||||||
block.liquid-void.description = Випаровує будь-які рідини. Тільки пісочниця.
|
block.liquid-void.description = Випаровує будь-які рідини. Тільки пісочниця.
|
||||||
|
block.payload-source.description = Нескінченно створює і виводить вантажі. Тільки пісочниця.
|
||||||
|
block.payload-void.description = Знищує будь-які вантажі. Тільки пісочниця.
|
||||||
block.copper-wall.description = Захищає споруди від ворожих снарядів.
|
block.copper-wall.description = Захищає споруди від ворожих снарядів.
|
||||||
block.copper-wall-large.description = Захищає споруди від ворожих снарядів.
|
block.copper-wall-large.description = Захищає споруди від ворожих снарядів.
|
||||||
block.titanium-wall.description = Захищає споруди від ворожих снарядів.
|
block.titanium-wall.description = Захищає споруди від ворожих снарядів.
|
||||||
@@ -1454,7 +1458,7 @@ block.router.details = Необхідне зло. Не використовуй
|
|||||||
block.distributor.description = Розділяє предмети до 7 інших напрямків порівну.
|
block.distributor.description = Розділяє предмети до 7 інших напрямків порівну.
|
||||||
block.overflow-gate.description = Вивантажує лише ліворуч і праворуч, якщо передній шлях заблокований.
|
block.overflow-gate.description = Вивантажує лише ліворуч і праворуч, якщо передній шлях заблокований.
|
||||||
block.underflow-gate.description = Повна протилежність надмірному затвору. Виводить предмет прямо, якщо лівий і правий шлях заблоковано.
|
block.underflow-gate.description = Повна протилежність надмірному затвору. Виводить предмет прямо, якщо лівий і правий шлях заблоковано.
|
||||||
block.mass-driver.description = Найкращий блок для транспортування предметів. Збирає кілька предметів, а потім вистрілює їх до іншої електромагнітної катапульти на велику відстань. Для роботи потребує енергія.
|
block.mass-driver.description = Найкращий блок для транспортування предметів. Збирає кілька предметів, а потім вистрілює їх до іншої електромагнітної катапульти на велику відстань. Для роботи потребує енергію.
|
||||||
block.mechanical-pump.description = Дешевий насос із повільним виходом, але не потребує енергоспоживання.
|
block.mechanical-pump.description = Дешевий насос із повільним виходом, але не потребує енергоспоживання.
|
||||||
block.rotary-pump.description = Удосконалений насос. Насоси більше викачують, але потребують енергію.
|
block.rotary-pump.description = Удосконалений насос. Насоси більше викачують, але потребують енергію.
|
||||||
block.thermal-pump.description = Найкращий насос.
|
block.thermal-pump.description = Найкращий насос.
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ committingchanges = 正在提交更改
|
|||||||
done = 完成
|
done = 完成
|
||||||
feature.unsupported = 您的设备不支持此特性。
|
feature.unsupported = 您的设备不支持此特性。
|
||||||
|
|
||||||
mods.initfailed = [red]⚠[]Mindustry的上一次启动失败了,可能是异常的模组导致的。 \n\n为了防止连续崩溃,[red]所有模组都被禁用了。 []\n\n这个功能可以在[accent]设置->游戏->游戏启动崩溃后禁用模组[]里关闭。
|
mods.initfailed = [red]⚠[]Mindustry的上一次启动失败了,可能是异常的模组导致的。 \n\n为了防止连续崩溃,[red]所有模组都被禁用了。 []
|
||||||
mods = 模组
|
mods = 模组
|
||||||
mods.none = [lightgray]没有找到模组!
|
mods.none = [lightgray]没有找到模组!
|
||||||
mods.guide = 模组制作教程
|
mods.guide = 模组制作教程
|
||||||
@@ -288,6 +288,7 @@ save.corrupted = 存档损坏或无效!
|
|||||||
empty = < 空 >
|
empty = < 空 >
|
||||||
on = 开
|
on = 开
|
||||||
off = 关
|
off = 关
|
||||||
|
save.search = 搜索已保存的游戏…
|
||||||
save.autosave = 自动保存:{0}
|
save.autosave = 自动保存:{0}
|
||||||
save.map = 地图:{0}
|
save.map = 地图:{0}
|
||||||
save.wave = 波次:{0}
|
save.wave = 波次:{0}
|
||||||
@@ -379,6 +380,14 @@ editor.ingame = 游戏内编辑
|
|||||||
editor.publish.workshop = 上传到创意工坊
|
editor.publish.workshop = 上传到创意工坊
|
||||||
editor.newmap = 新地图
|
editor.newmap = 新地图
|
||||||
editor.center = 居中
|
editor.center = 居中
|
||||||
|
editor.search = 搜索地图…
|
||||||
|
editor.filters = 筛选地图
|
||||||
|
editor.showAll = 显示默认地图
|
||||||
|
editor.filters.mode = 游戏模式:
|
||||||
|
editor.filters.type = 地图类型:
|
||||||
|
editor.filters.search = 关键词搜索:
|
||||||
|
editor.filters.author = 作者
|
||||||
|
editor.filters.description = 描述
|
||||||
workshop = 创意工坊
|
workshop = 创意工坊
|
||||||
waves.title = 波次
|
waves.title = 波次
|
||||||
waves.remove = 移除
|
waves.remove = 移除
|
||||||
@@ -412,6 +421,7 @@ wavemode.health = 生命值
|
|||||||
editor.default = [lightgray]<默认>
|
editor.default = [lightgray]<默认>
|
||||||
details = 详情…
|
details = 详情…
|
||||||
edit = 编辑…
|
edit = 编辑…
|
||||||
|
variables = 变量
|
||||||
editor.name = 名称:
|
editor.name = 名称:
|
||||||
editor.spawn = 生成单位
|
editor.spawn = 生成单位
|
||||||
editor.removeunit = 移除单位
|
editor.removeunit = 移除单位
|
||||||
@@ -593,7 +603,7 @@ sectors.rename = 重命名区块
|
|||||||
sectors.enemybase = [scarlet]敌方基地
|
sectors.enemybase = [scarlet]敌方基地
|
||||||
sectors.vulnerable = [scarlet]易受攻击
|
sectors.vulnerable = [scarlet]易受攻击
|
||||||
sectors.underattack = [scarlet]遭到攻击![accent]{0}%损毁度
|
sectors.underattack = [scarlet]遭到攻击![accent]{0}%损毁度
|
||||||
sectors.survives = [accent]已坚持{0}波
|
sectors.survives = [accent]预测可守{0}波
|
||||||
sectors.go = 进入
|
sectors.go = 进入
|
||||||
sector.curcapture = 区块已占领
|
sector.curcapture = 区块已占领
|
||||||
sector.curlost = 区块已丢失
|
sector.curlost = 区块已丢失
|
||||||
@@ -635,7 +645,7 @@ sector.coastline.name = 边际海湾
|
|||||||
sector.navalFortress.name = 海军要塞
|
sector.navalFortress.name = 海军要塞
|
||||||
|
|
||||||
sector.groundZero.description = 踏上旅程的最佳位置。 这里的敌人威胁很小,但资源也少。 \n\n尽你所能收集铅和铜,出发吧!
|
sector.groundZero.description = 踏上旅程的最佳位置。 这里的敌人威胁很小,但资源也少。 \n\n尽你所能收集铅和铜,出发吧!
|
||||||
sector.frozenForest.description = 一个靠近山脉的地方。 哪怕是在这里,也有了孢子扩散的痕迹。 \n不过它们无法在低温下长期存活。 \n\n开始运用电力,建造火力发电机并学会使用修理器。
|
sector.frozenForest.description = 一个靠近山脉的地方。 哪怕是在这里,也有了孢子扩散的痕迹。 \n连极寒也无法长久地约束它们。 \n\n开始运用电力,建造火力发电机并学会使用修理器。
|
||||||
sector.saltFlats.description = 盐碱荒滩,位于沙漠的边缘地带,几乎没有什么资源。 \n敌人在这里建立了一个资源存储区。 \n\n摧毁他们的核心,片甲不留。
|
sector.saltFlats.description = 盐碱荒滩,位于沙漠的边缘地带,几乎没有什么资源。 \n敌人在这里建立了一个资源存储区。 \n\n摧毁他们的核心,片甲不留。
|
||||||
sector.craters.description = 这片陨石地带有积水,它也是旧时战争的遗迹。 \n\n夺下该区块,收集沙子来冶炼玻璃。 \n用水泵抽水来加速炮塔和钻头。
|
sector.craters.description = 这片陨石地带有积水,它也是旧时战争的遗迹。 \n\n夺下该区块,收集沙子来冶炼玻璃。 \n用水泵抽水来加速炮塔和钻头。
|
||||||
sector.ruinousShores.description = 穿过荒地就是海滩。 \n这里曾经有一条海岸防线,但现在已所剩无几。 \n一些基础的防御建筑还完好无损,除此之外都变成了废墟。 \n\n继续向外扩张并研究科技。
|
sector.ruinousShores.description = 穿过荒地就是海滩。 \n这里曾经有一条海岸防线,但现在已所剩无几。 \n一些基础的防御建筑还完好无损,除此之外都变成了废墟。 \n\n继续向外扩张并研究科技。
|
||||||
@@ -694,7 +704,7 @@ no = 否
|
|||||||
info.title = 详情
|
info.title = 详情
|
||||||
error.title = [scarlet]发生了一个错误
|
error.title = [scarlet]发生了一个错误
|
||||||
error.crashtitle = 发生了一个错误
|
error.crashtitle = 发生了一个错误
|
||||||
unit.nobuild = [scarlet]不能建造单位
|
unit.nobuild = [scarlet]单位不可建造
|
||||||
lastaccessed = [lightgray]上次操作:{0}
|
lastaccessed = [lightgray]上次操作:{0}
|
||||||
block.unknown = [lightgray]??
|
block.unknown = [lightgray]??
|
||||||
|
|
||||||
@@ -1075,7 +1085,7 @@ item.phase-fabric.name = 相位织物
|
|||||||
item.surge-alloy.name = 巨浪合金
|
item.surge-alloy.name = 巨浪合金
|
||||||
item.spore-pod.name = 孢子荚
|
item.spore-pod.name = 孢子荚
|
||||||
item.sand.name = 沙
|
item.sand.name = 沙
|
||||||
item.blast-compound.name = 炸药
|
item.blast-compound.name = 爆炸混合物
|
||||||
item.pyratite.name = 硫化物
|
item.pyratite.name = 硫化物
|
||||||
item.metaglass.name = 钢化玻璃
|
item.metaglass.name = 钢化玻璃
|
||||||
item.scrap.name = 废料
|
item.scrap.name = 废料
|
||||||
@@ -1130,6 +1140,7 @@ block.sand-boulder.name = 砂岩
|
|||||||
block.basalt-boulder.name = 玄武岩巨石
|
block.basalt-boulder.name = 玄武岩巨石
|
||||||
block.grass.name = 草地
|
block.grass.name = 草地
|
||||||
block.molten-slag.name = 矿渣液
|
block.molten-slag.name = 矿渣液
|
||||||
|
block.pooled-cryofluid.name = 冷冻液
|
||||||
block.space.name = 太空
|
block.space.name = 太空
|
||||||
block.salt.name = 盐碱地
|
block.salt.name = 盐碱地
|
||||||
block.salt-wall.name = 盐墙
|
block.salt-wall.name = 盐墙
|
||||||
@@ -1280,7 +1291,7 @@ 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 = 爆炸物混合器
|
||||||
block.solar-panel.name = 太阳能板
|
block.solar-panel.name = 太阳能板
|
||||||
block.solar-panel-large.name = 大型太阳能板
|
block.solar-panel-large.name = 大型太阳能板
|
||||||
block.oil-extractor.name = 石油钻井
|
block.oil-extractor.name = 石油钻井
|
||||||
@@ -1291,6 +1302,7 @@ block.plated-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-container.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 = 回转泵
|
||||||
@@ -1337,10 +1349,16 @@ block.disassembler.name = 解离机
|
|||||||
block.silicon-crucible.name = 热能坩埚
|
block.silicon-crucible.name = 热能坩埚
|
||||||
block.overdrive-dome.name = 超速穹顶投射器
|
block.overdrive-dome.name = 超速穹顶投射器
|
||||||
block.interplanetary-accelerator.name = 行星际加速器
|
block.interplanetary-accelerator.name = 行星际加速器
|
||||||
#experimental, may be removed (仅供测试,行将移除)
|
block.constructor.name = 构造器
|
||||||
block.block-forge.name = 方块建造厂
|
block.constructor.description = 制造尺寸不超过2x2方块的建筑。
|
||||||
block.block-loader.name = 方块装载机
|
block.large-constructor.name = 大型构造器
|
||||||
block.block-unloader.name = 方块卸载机
|
block.large-constructor.description = 制造尺寸不超过4x4方块的建筑。
|
||||||
|
block.deconstructor.name = 解构器
|
||||||
|
block.deconstructor.description = 解构建筑与单位,并返还100%的制造成本。
|
||||||
|
block.payload-loader.name = 荷载装载器
|
||||||
|
block.payload-loader.description = 将液体和物品装载进方块中。
|
||||||
|
block.payload-unloader.name = 荷载卸载器
|
||||||
|
block.payload-unloader.description = 将液体和物品从方块中卸载。
|
||||||
|
|
||||||
block.switch.name = 开关
|
block.switch.name = 开关
|
||||||
block.micro-processor.name = 微型处理器
|
block.micro-processor.name = 微型处理器
|
||||||
@@ -1418,7 +1436,7 @@ item.silicon.description = 用于太阳能板、 复杂的电气元件或作为
|
|||||||
item.plastanium.description = 用于高级单位、 绝缘材料,或作为分裂性弹药。
|
item.plastanium.description = 用于高级单位、 绝缘材料,或作为分裂性弹药。
|
||||||
item.phase-fabric.description = 用于高级电子设备和自修复建筑。
|
item.phase-fabric.description = 用于高级电子设备和自修复建筑。
|
||||||
item.surge-alloy.description = 用于先进武器和反应防御建筑。
|
item.surge-alloy.description = 用于先进武器和反应防御建筑。
|
||||||
item.spore-pod.description = 用于转化成石油、 炸药或作为燃料。
|
item.spore-pod.description = 用于转化成石油、 爆炸混合物或作为燃料。
|
||||||
item.spore-pod.details = 孢子。 可能是人工合成的生命形式,释放对其他生物有毒的气体,极具侵略性。 在某些条件下高度易燃。
|
item.spore-pod.details = 孢子。 可能是人工合成的生命形式,释放对其他生物有毒的气体,极具侵略性。 在某些条件下高度易燃。
|
||||||
item.blast-compound.description = 用作炸弹或爆炸性弹药。
|
item.blast-compound.description = 用作炸弹或爆炸性弹药。
|
||||||
item.pyratite.description = 用于火焰发射类武器和使用燃料的发电设备。
|
item.pyratite.description = 用于火焰发射类武器和使用燃料的发电设备。
|
||||||
@@ -1440,7 +1458,7 @@ block.plastanium-compressor.description = 用石油和钛生产塑钢。
|
|||||||
block.phase-weaver.description = 用钍和沙合成相位织物。
|
block.phase-weaver.description = 用钍和沙合成相位织物。
|
||||||
block.alloy-smelter.description = 将钛、 铅、 硅和铜熔合成巨浪合金。
|
block.alloy-smelter.description = 将钛、 铅、 硅和铜熔合成巨浪合金。
|
||||||
block.cryofluid-mixer.description = 将水和细钛粉混合制成冷冻液。
|
block.cryofluid-mixer.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 = 将矿渣液分离成矿物成分。
|
||||||
@@ -1496,7 +1514,8 @@ block.conduit.description = 向前方传输液体。 与泵或者其他导管联
|
|||||||
block.pulse-conduit.description = 向前方传输液体。 比普通导管传输液体更快,且能储存更多液体。
|
block.pulse-conduit.description = 向前方传输液体。 比普通导管传输液体更快,且能储存更多液体。
|
||||||
block.plated-conduit.description = 向前方传输液体,不接受侧面输入。 不会发生泄露。
|
block.plated-conduit.description = 向前方传输液体,不接受侧面输入。 不会发生泄露。
|
||||||
block.liquid-router.description = 接受一个方向的液体输入,并平均输出到其他3个方向。 可以储存一定量的液体。
|
block.liquid-router.description = 接受一个方向的液体输入,并平均输出到其他3个方向。 可以储存一定量的液体。
|
||||||
block.liquid-tank.description = 储存大量液体,并像液体路由器一样朝各个方向输出液体。
|
block.liquid-container.description = 储存可观数量的液体,并像液体路由器一样朝各个方向输出液体。
|
||||||
|
block.liquid-tank.description = 储存大量的液体,并像液体路由器一样朝各个方向输出液体。
|
||||||
block.liquid-junction.description = 两条交叉导管的桥梁。
|
block.liquid-junction.description = 两条交叉导管的桥梁。
|
||||||
block.bridge-conduit.description = 跨越任意地形或建筑物传输液体。
|
block.bridge-conduit.description = 跨越任意地形或建筑物传输液体。
|
||||||
block.phase-conduit.description = 跨越任意地形或建筑物传输液体。 比导管桥范围更大,但需要电力。
|
block.phase-conduit.description = 跨越任意地形或建筑物传输液体。 比导管桥范围更大,但需要电力。
|
||||||
@@ -1610,7 +1629,7 @@ unit.omura.description = 向敌人发射远程穿透轨道炮。 可自动生产
|
|||||||
unit.alpha.description = 保护初代核心,可建造建筑。
|
unit.alpha.description = 保护初代核心,可建造建筑。
|
||||||
unit.beta.description = 保护次代核心,可建造建筑。
|
unit.beta.description = 保护次代核心,可建造建筑。
|
||||||
unit.gamma.description = 保护终代核心,可建造建筑。
|
unit.gamma.description = 保护终代核心,可建造建筑。
|
||||||
unit.retusa.description = 放置水雷,并修复友方单位。
|
unit.retusa.description = 向附近的敌人发射追踪鱼雷,并修复友方单位。
|
||||||
unit.oxynoe.description = 向附近的敌人发射火焰束,并修复友方建筑。 具备一台单点防御炮塔,能够防御来袭的子弹。
|
unit.oxynoe.description = 向附近的敌人发射火焰束,并修复友方建筑。 具备一台单点防御炮塔,能够防御来袭的子弹。
|
||||||
unit.cyerce.description = 向敌人发射追踪集束导弹,并修复友方单位。
|
unit.cyerce.description = 向敌人发射追踪集束导弹,并修复友方单位。
|
||||||
unit.aegires.description = 产生能量场,使范围内的敌方建筑与单位受到电击,对友方则进行修复。
|
unit.aegires.description = 产生能量场,使范围内的敌方建筑与单位受到电击,对友方则进行修复。
|
||||||
@@ -1761,6 +1780,7 @@ lenum.itemdrop = 将携带的物品放入一座建筑
|
|||||||
lenum.itemtake = 从建筑中取出某种物品
|
lenum.itemtake = 从建筑中取出某种物品
|
||||||
lenum.paydrop = 卸下当前载荷
|
lenum.paydrop = 卸下当前载荷
|
||||||
lenum.paytake = 从当前位置拾取载荷
|
lenum.paytake = 从当前位置拾取载荷
|
||||||
|
lenum.payenter = 进入/降落到单位下方的荷载方块中
|
||||||
lenum.flag = 给单位赋予数字形式的标记
|
lenum.flag = 给单位赋予数字形式的标记
|
||||||
lenum.mine = 从某个位置采集矿物
|
lenum.mine = 从某个位置采集矿物
|
||||||
lenum.build = 建造建筑
|
lenum.build = 建造建筑
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ committingchanges = 遞交變更
|
|||||||
done = 完成
|
done = 完成
|
||||||
feature.unsupported = 您的裝置不支援此功能。
|
feature.unsupported = 您的裝置不支援此功能。
|
||||||
|
|
||||||
mods.initfailed = [red]⚠[] Mindustry 無法啟動。這可能是因模組造成。\n\n為了避免不斷閃退,[red]所有的模組已被停用。[]\n\n若要取消此設定,可在[accent]設定->遊戲->閃退後停用模組[]關閉設定.
|
mods.initfailed = [red]⚠[] Mindustry 無法啟動。這可能是因模組造成。\n\n為了避免不斷閃退,[red]所有的模組已被停用。[]
|
||||||
mods = 模組
|
mods = 模組
|
||||||
mods.none = [lightgray]找不到模組!
|
mods.none = [lightgray]找不到模組!
|
||||||
mods.guide = 模組指南
|
mods.guide = 模組指南
|
||||||
@@ -363,6 +363,7 @@ publish.confirm = 您確定要發布嗎?\n\n[lightgray]首先確定您同意 W
|
|||||||
publish.error = 發佈項目時發生問題:{0}
|
publish.error = 發佈項目時發生問題:{0}
|
||||||
steam.error = Steam 服務初始化失敗。\n錯誤:{0}
|
steam.error = Steam 服務初始化失敗。\n錯誤:{0}
|
||||||
|
|
||||||
|
editor.cliffs = 牆轉為懸崖
|
||||||
editor.brush = 筆刷
|
editor.brush = 筆刷
|
||||||
editor.openin = 在編輯器中開啟
|
editor.openin = 在編輯器中開啟
|
||||||
editor.oregen = 礦石生成
|
editor.oregen = 礦石生成
|
||||||
@@ -378,6 +379,9 @@ editor.ingame = 在遊戲中編輯
|
|||||||
editor.publish.workshop = 在工作坊上發佈
|
editor.publish.workshop = 在工作坊上發佈
|
||||||
editor.newmap = 新地圖
|
editor.newmap = 新地圖
|
||||||
editor.center = 中心
|
editor.center = 中心
|
||||||
|
editor.search = 尋找地圖...
|
||||||
|
editor.filters = 篩選地圖
|
||||||
|
editor.showAll = 顯示內建地圖
|
||||||
workshop = 工作坊
|
workshop = 工作坊
|
||||||
waves.title = 波次
|
waves.title = 波次
|
||||||
waves.remove = 移除
|
waves.remove = 移除
|
||||||
@@ -400,6 +404,8 @@ waves.sort.reverse = 反向排序
|
|||||||
waves.sort.begin = 開始
|
waves.sort.begin = 開始
|
||||||
waves.sort.health = 血量
|
waves.sort.health = 血量
|
||||||
waves.sort.type = 兵種
|
waves.sort.type = 兵種
|
||||||
|
waves.units.hide = 全部隱藏
|
||||||
|
waves.units.show = 全部顯示
|
||||||
|
|
||||||
#校正用空行
|
#校正用空行
|
||||||
wavemode.counts = 數量
|
wavemode.counts = 數量
|
||||||
@@ -628,6 +634,8 @@ sector.biomassFacility.name = 生物質合成工廠
|
|||||||
sector.windsweptIslands.name = 風之島
|
sector.windsweptIslands.name = 風之島
|
||||||
sector.extractionOutpost.name = 萃取哨站
|
sector.extractionOutpost.name = 萃取哨站
|
||||||
sector.planetaryTerminal.name = 星際發射站
|
sector.planetaryTerminal.name = 星際發射站
|
||||||
|
sector.coastline.name = 海岸
|
||||||
|
sector.navalFortress.name = 海上要塞
|
||||||
|
|
||||||
sector.groundZero.description = 再次開始的最佳位置。敵人威脅程度低。資源少。\n盡可能地採集鉛與銅。\n繼續前進。
|
sector.groundZero.description = 再次開始的最佳位置。敵人威脅程度低。資源少。\n盡可能地採集鉛與銅。\n繼續前進。
|
||||||
sector.frozenForest.description = 即使是在如此靠近山脈的地方,孢子也已經擴散了。如此低溫也無法永遠遏止它們。\n\n開始冒險發電。建造火力發電機。並學習使用修理單位。
|
sector.frozenForest.description = 即使是在如此靠近山脈的地方,孢子也已經擴散了。如此低溫也無法永遠遏止它們。\n\n開始冒險發電。建造火力發電機。並學習使用修理單位。
|
||||||
@@ -1125,6 +1133,7 @@ block.sand-boulder.name = 沙礫巨岩
|
|||||||
block.basalt-boulder.name = 玄武岩巨石
|
block.basalt-boulder.name = 玄武岩巨石
|
||||||
block.grass.name = 草
|
block.grass.name = 草
|
||||||
block.molten-slag.name = 熔渣
|
block.molten-slag.name = 熔渣
|
||||||
|
block.pooled-cryofluid.name = 冷凍液
|
||||||
block.space.name = 太空
|
block.space.name = 太空
|
||||||
block.salt.name = 鹽
|
block.salt.name = 鹽
|
||||||
block.salt-wall.name = 鹽牆
|
block.salt-wall.name = 鹽牆
|
||||||
@@ -1158,6 +1167,7 @@ block.core-nucleus.name = 核心:核子
|
|||||||
block.deep-water.name = 深水
|
block.deep-water.name = 深水
|
||||||
block.shallow-water.name = 水
|
block.shallow-water.name = 水
|
||||||
block.tainted-water.name = 污水
|
block.tainted-water.name = 污水
|
||||||
|
block.deep-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 = 石頭
|
||||||
@@ -1390,7 +1400,8 @@ hint.waveFire = 以[accent]水[]裝填的[accent]波浪[]會自動撲滅附近
|
|||||||
hint.generator = \uf879 [accent]燃燒發電機[]消耗煤炭產生能源給相鄰的方塊。\n\n使用 \uf87f [accent]能量節點[]增加電力涵蓋範圍。
|
hint.generator = \uf879 [accent]燃燒發電機[]消耗煤炭產生能源給相鄰的方塊。\n\n使用 \uf87f [accent]能量節點[]增加電力涵蓋範圍。
|
||||||
hint.guardian = [accent]頭目[]擁有厚實的裝甲。較弱的彈藥如[accent]銅[]和[accent]鉛[]並[scarlet]沒有效果[].\n\n使用更高等的砲臺或以\uf835 [accent]石墨[]配合\uf861雙砲、\uf859齊射砲摧毀頭目。
|
hint.guardian = [accent]頭目[]擁有厚實的裝甲。較弱的彈藥如[accent]銅[]和[accent]鉛[]並[scarlet]沒有效果[].\n\n使用更高等的砲臺或以\uf835 [accent]石墨[]配合\uf861雙砲、\uf859齊射砲摧毀頭目。
|
||||||
hint.coreUpgrade = 核心可以透過在上面[accent]覆蓋一個更高等級的核心[]來升級。\n\n放置 [accent]核心:基地[] 到 [accent]核心:碎片[] 上. 確保沒有其他障礙物。
|
hint.coreUpgrade = 核心可以透過在上面[accent]覆蓋一個更高等級的核心[]來升級。\n\n放置 [accent]核心:基地[] 到 [accent]核心:碎片[] 上. 確保沒有其他障礙物。
|
||||||
hint.presetLaunch = 灰色的[accent]降落地區[],例如[accent]冰凍森林[],可由任何地區發射。這類地區無須由相鄰地區進攻。\n\n[accent]數字編號地區[],像是這一個,可不是完成戰役的必要條件。
|
hint.presetLaunch = 灰色的[accent]降落地區[],例如[accent]冰凍森林[],可由任何地區發射。這類地區無須由相鄰地區進攻。\n\n[accent]數字編號地區[],如同這一個,不是完成戰役的必要條件。
|
||||||
|
hint.presetDifficulty = 此地區為[scarlet]高危險等級[]區域。\n[accent]不建議[]在準備好科技和資源以前發射至此區域。
|
||||||
hint.coreIncinerate = 當任一物品的核心庫存滿了後,後續進入的同種資源會被[accent]銷毀[]。
|
hint.coreIncinerate = 當任一物品的核心庫存滿了後,後續進入的同種資源會被[accent]銷毀[]。
|
||||||
hint.coopCampaign = 遊玩[accent]多人合作戰役[]時,同地圖所生產的資源皆會被送入[accent]自己的地區[]。\n\n任何新科技也會單向同步到自己的科技。
|
hint.coopCampaign = 遊玩[accent]多人合作戰役[]時,同地圖所生產的資源皆會被送入[accent]自己的地區[]。\n\n任何新科技也會單向同步到自己的科技。
|
||||||
|
|
||||||
@@ -1603,7 +1614,7 @@ unit.omura.description = 對敵人發射遠程穿透型砲彈。建造曳光戰
|
|||||||
unit.alpha.description = 抵禦敵軍對核心:碎片的攻擊。建造建築物。
|
unit.alpha.description = 抵禦敵軍對核心:碎片的攻擊。建造建築物。
|
||||||
unit.beta.description = 抵禦敵軍對核心:基地的攻擊。建造建築物。
|
unit.beta.description = 抵禦敵軍對核心:基地的攻擊。建造建築物。
|
||||||
unit.gamma.description = 抵禦敵軍對核心:核子的攻擊。建造建築物。
|
unit.gamma.description = 抵禦敵軍對核心:核子的攻擊。建造建築物。
|
||||||
unit.retusa.description = 布置水雷。修復友方單位。
|
unit.retusa.description = 對周遭敵人發射追蹤魚雷。修復友方單位。
|
||||||
unit.oxynoe.description = 射出帶回復建築的火焰。具小型方陣炮。
|
unit.oxynoe.description = 射出帶回復建築的火焰。具小型方陣炮。
|
||||||
unit.cyerce.description = 發射追蹤集束飛彈。修復友方單位。
|
unit.cyerce.description = 發射追蹤集束飛彈。修復友方單位。
|
||||||
unit.aegires.description = 電擊所有在能量場內的敵方單位、建築。修復友方單位。
|
unit.aegires.description = 電擊所有在能量場內的敵方單位、建築。修復友方單位。
|
||||||
|
|||||||
@@ -128,3 +128,4 @@ SAMBUYYA
|
|||||||
genNAowl
|
genNAowl
|
||||||
TranquillyUnpleasant
|
TranquillyUnpleasant
|
||||||
Darkness6030
|
Darkness6030
|
||||||
|
hortiSquash
|
||||||
@@ -26,6 +26,7 @@ import mindustry.maps.*;
|
|||||||
import mindustry.mod.*;
|
import mindustry.mod.*;
|
||||||
import mindustry.net.*;
|
import mindustry.net.*;
|
||||||
import mindustry.service.*;
|
import mindustry.service.*;
|
||||||
|
import mindustry.world.*;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.charset.*;
|
import java.nio.charset.*;
|
||||||
@@ -195,6 +196,8 @@ public class Vars implements Loadable{
|
|||||||
public static Fi launchIDFile;
|
public static Fi launchIDFile;
|
||||||
/** empty map, indicates no current map */
|
/** empty map, indicates no current map */
|
||||||
public static Map emptyMap;
|
public static Map emptyMap;
|
||||||
|
/** empty tile for payloads */
|
||||||
|
public static Tile emptyTile;
|
||||||
/** map file extension */
|
/** map file extension */
|
||||||
public static final String mapExtension = "msav";
|
public static final String mapExtension = "msav";
|
||||||
/** save file extension */
|
/** save file extension */
|
||||||
@@ -310,6 +313,10 @@ public class Vars implements Loadable{
|
|||||||
|
|
||||||
modDirectory.mkdirs();
|
modDirectory.mkdirs();
|
||||||
|
|
||||||
|
Events.on(ContentInitEvent.class, e -> {
|
||||||
|
emptyTile = new Tile(Short.MAX_VALUE - 20, Short.MAX_VALUE - 20);
|
||||||
|
});
|
||||||
|
|
||||||
mods.load();
|
mods.load();
|
||||||
maps.load();
|
maps.load();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -901,7 +901,7 @@ public class Blocks implements ContentList{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
mendProjector = new MendProjector("mend-projector"){{
|
mendProjector = new MendProjector("mend-projector"){{
|
||||||
requirements(Category.effect, with(Items.lead, 100, Items.titanium, 25, Items.silicon, 40));
|
requirements(Category.effect, with(Items.lead, 100, Items.titanium, 25, Items.silicon, 40, Items.copper, 50));
|
||||||
consumes.power(1.5f);
|
consumes.power(1.5f);
|
||||||
size = 2;
|
size = 2;
|
||||||
reload = 250f;
|
reload = 250f;
|
||||||
@@ -1346,7 +1346,7 @@ public class Blocks implements ContentList{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
waterExtractor = new SolidPump("water-extractor"){{
|
waterExtractor = new SolidPump("water-extractor"){{
|
||||||
requirements(Category.production, with(Items.metaglass, 30, Items.graphite, 30, Items.lead, 30));
|
requirements(Category.production, with(Items.metaglass, 30, Items.graphite, 30, Items.lead, 30, Items.copper, 30));
|
||||||
result = Liquids.water;
|
result = Liquids.water;
|
||||||
pumpAmount = 0.11f;
|
pumpAmount = 0.11f;
|
||||||
size = 2;
|
size = 2;
|
||||||
@@ -1645,7 +1645,7 @@ public class Blocks implements ContentList{
|
|||||||
shots = 4;
|
shots = 4;
|
||||||
burstSpacing = 5;
|
burstSpacing = 5;
|
||||||
inaccuracy = 10f;
|
inaccuracy = 10f;
|
||||||
range = 235f;
|
range = 240f;
|
||||||
xRand = 6f;
|
xRand = 6f;
|
||||||
size = 2;
|
size = 2;
|
||||||
health = 300 * size * size;
|
health = 300 * size * size;
|
||||||
@@ -2062,12 +2062,12 @@ public class Blocks implements ContentList{
|
|||||||
//region payloads
|
//region payloads
|
||||||
|
|
||||||
payloadConveyor = new PayloadConveyor("payload-conveyor"){{
|
payloadConveyor = new PayloadConveyor("payload-conveyor"){{
|
||||||
requirements(Category.units, with(Items.graphite, 10, Items.copper, 20));
|
requirements(Category.units, with(Items.graphite, 10, Items.lead, 10));
|
||||||
canOverdrive = false;
|
canOverdrive = false;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
payloadRouter = new PayloadRouter("payload-router"){{
|
payloadRouter = new PayloadRouter("payload-router"){{
|
||||||
requirements(Category.units, with(Items.graphite, 15, Items.copper, 20));
|
requirements(Category.units, with(Items.graphite, 15, Items.lead, 15));
|
||||||
canOverdrive = false;
|
canOverdrive = false;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -2163,14 +2163,12 @@ public class Blocks implements ContentList{
|
|||||||
requirements(Category.units, BuildVisibility.sandboxOnly, with());
|
requirements(Category.units, BuildVisibility.sandboxOnly, with());
|
||||||
size = 5;
|
size = 5;
|
||||||
alwaysUnlocked = true;
|
alwaysUnlocked = true;
|
||||||
group = BlockGroup.units;
|
|
||||||
}};
|
}};
|
||||||
|
|
||||||
payloadVoid = new PayloadVoid("payload-void"){{
|
payloadVoid = new PayloadVoid("payload-void"){{
|
||||||
requirements(Category.units, BuildVisibility.sandboxOnly, with());
|
requirements(Category.units, BuildVisibility.sandboxOnly, with());
|
||||||
size = 5;
|
size = 5;
|
||||||
alwaysUnlocked = true;
|
alwaysUnlocked = true;
|
||||||
group = BlockGroup.units;
|
|
||||||
}};
|
}};
|
||||||
|
|
||||||
//TODO move
|
//TODO move
|
||||||
|
|||||||
@@ -275,7 +275,7 @@ public class NetServer implements ApplicationListener{
|
|||||||
int page = args.length > 0 ? Strings.parseInt(args[0]) : 1;
|
int page = args.length > 0 ? Strings.parseInt(args[0]) : 1;
|
||||||
int pages = Mathf.ceil((float)clientCommands.getCommandList().size / commandsPerPage);
|
int pages = Mathf.ceil((float)clientCommands.getCommandList().size / commandsPerPage);
|
||||||
|
|
||||||
page --;
|
page--;
|
||||||
|
|
||||||
if(page >= pages || page < 0){
|
if(page >= pages || page < 0){
|
||||||
player.sendMessage("[scarlet]'page' must be a number between[orange] 1[] and[orange] " + pages + "[scarlet].");
|
player.sendMessage("[scarlet]'page' must be a number between[orange] 1[] and[orange] " + pages + "[scarlet].");
|
||||||
@@ -724,6 +724,8 @@ public class NetServer implements ApplicationListener{
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Events.fire(new EventType.AdminRequestEvent(player, other, action));
|
||||||
|
|
||||||
if(action == AdminAction.wave){
|
if(action == AdminAction.wave){
|
||||||
//no verification is done, so admins can hypothetically spam waves
|
//no verification is done, so admins can hypothetically spam waves
|
||||||
//not a real issue, because server owners may want to do just that
|
//not a real issue, because server owners may want to do just that
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ abstract class BlockUnitComp implements Unitc{
|
|||||||
|
|
||||||
//sets up block stats
|
//sets up block stats
|
||||||
maxHealth(tile.block.health);
|
maxHealth(tile.block.health);
|
||||||
health(tile.health());
|
health(tile.health);
|
||||||
hitSize(tile.block.size * tilesize * 0.7f);
|
hitSize(tile.block.size * tilesize * 0.7f);
|
||||||
set(tile);
|
set(tile);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -291,7 +291,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
}
|
}
|
||||||
|
|
||||||
public byte relativeTo(Building tile){
|
public byte relativeTo(Building tile){
|
||||||
return relativeTo(tile.tile());
|
return relativeTo(tile.tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte relativeToEdge(Tile other){
|
public byte relativeToEdge(Tile other){
|
||||||
@@ -923,6 +923,10 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
drawTeamTop();
|
drawTeamTop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void payloadDraw(){
|
||||||
|
draw();
|
||||||
|
}
|
||||||
|
|
||||||
public void drawTeamTop(){
|
public void drawTeamTop(){
|
||||||
if(block.teamRegion.found()){
|
if(block.teamRegion.found()){
|
||||||
if(block.teamRegions[team.id] == block.teamRegion) Draw.color(team.color);
|
if(block.teamRegions[team.id] == block.teamRegion) Draw.color(team.color);
|
||||||
@@ -974,6 +978,11 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @return whether this building is in a payload */
|
||||||
|
public boolean isPayload(){
|
||||||
|
return tile == emptyTile;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a block is placed over some other blocks. This seq will always have at least one item.
|
* Called when a block is placed over some other blocks. This seq will always have at least one item.
|
||||||
* Should load some previous state, if necessary. */
|
* Should load some previous state, if necessary. */
|
||||||
@@ -1062,7 +1071,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
|
|
||||||
for(int i = 0; i < Mathf.clamp(amount / 5, 0, 30); i++){
|
for(int i = 0; i < Mathf.clamp(amount / 5, 0, 30); i++){
|
||||||
Time.run(i / 2f, () -> {
|
Time.run(i / 2f, () -> {
|
||||||
Tile other = world.tile(tileX() + Mathf.range(block.size / 2), tileY() + Mathf.range(block.size / 2));
|
Tile other = world.tileWorld(x + Mathf.range(block.size * tilesize / 2), y + Mathf.range(block.size * tilesize / 2));
|
||||||
if(other != null){
|
if(other != null){
|
||||||
Puddles.deposit(other, liquid, splash);
|
Puddles.deposit(other, liquid, splash);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{
|
|||||||
@Override
|
@Override
|
||||||
@Replace
|
@Replace
|
||||||
public int pathType(){
|
public int pathType(){
|
||||||
return type.allowLegStep ? Pathfinder.costGround : Pathfinder.costLegs;
|
return type.allowLegStep ? Pathfinder.costLegs : Pathfinder.costGround;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -24,6 +24,38 @@ abstract class PayloadComp implements Posc, Rotc, Hitboxc, Unitc{
|
|||||||
|
|
||||||
Seq<Payload> payloads = new Seq<>();
|
Seq<Payload> payloads = new Seq<>();
|
||||||
|
|
||||||
|
//uncomment for insanity
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
private transient @Nullable PowerGraph payloadPower;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(){
|
||||||
|
if(payloadPower != null){
|
||||||
|
payloadPower.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
//update power graph first, resolve everything
|
||||||
|
for(Payload pay : payloads){
|
||||||
|
if(pay instanceof BuildPayload pb && pb.build.power != null){
|
||||||
|
if(payloadPower == null) payloadPower = new PowerGraph();
|
||||||
|
|
||||||
|
pb.build.power.graph = null;
|
||||||
|
payloadPower.add(pb.build);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(payloadPower != null){
|
||||||
|
payloadPower.update();
|
||||||
|
}
|
||||||
|
|
||||||
|
for(Payload pay : payloads){
|
||||||
|
pay.set(x, y, rotation);
|
||||||
|
pay.update(true);
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
float payloadUsed(){
|
float payloadUsed(){
|
||||||
return payloads.sumf(p -> p.size() * p.size());
|
return payloads.sumf(p -> p.size() * p.size());
|
||||||
}
|
}
|
||||||
@@ -50,7 +82,7 @@ abstract class PayloadComp implements Posc, Rotc, Hitboxc, Unitc{
|
|||||||
|
|
||||||
void pickup(Unit unit){
|
void pickup(Unit unit){
|
||||||
unit.remove();
|
unit.remove();
|
||||||
payloads.add(new UnitPayload(unit));
|
addPayload(new UnitPayload(unit));
|
||||||
Fx.unitPickup.at(unit);
|
Fx.unitPickup.at(unit);
|
||||||
if(Vars.net.client()){
|
if(Vars.net.client()){
|
||||||
Vars.netClient.clearRemovedEntity(unit.id);
|
Vars.netClient.clearRemovedEntity(unit.id);
|
||||||
@@ -61,7 +93,8 @@ abstract class PayloadComp implements Posc, Rotc, Hitboxc, Unitc{
|
|||||||
void pickup(Building tile){
|
void pickup(Building tile){
|
||||||
tile.pickedUp();
|
tile.pickedUp();
|
||||||
tile.tile.remove();
|
tile.tile.remove();
|
||||||
payloads.add(new BuildPayload(tile));
|
tile.tile = Vars.emptyTile;
|
||||||
|
addPayload(new BuildPayload(tile));
|
||||||
Fx.unitPickup.at(tile);
|
Fx.unitPickup.at(tile);
|
||||||
Events.fire(new PickupEvent(self(), tile));
|
Events.fire(new PickupEvent(self(), tile));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -544,4 +544,15 @@ public class EventType{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class AdminRequestEvent{
|
||||||
|
public final Player player;
|
||||||
|
public final @Nullable Player other;
|
||||||
|
public final AdminAction action;
|
||||||
|
|
||||||
|
public AdminRequestEvent(Player player, Player other, AdminAction action){
|
||||||
|
this.player = player;
|
||||||
|
this.other = other;
|
||||||
|
this.action = action;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,6 +101,8 @@ public class Rules{
|
|||||||
public ObjectSet<Block> revealedBlocks = new ObjectSet<>();
|
public ObjectSet<Block> revealedBlocks = new ObjectSet<>();
|
||||||
/** Unlocked content names. Only used in multiplayer when the campaign is enabled. */
|
/** Unlocked content names. Only used in multiplayer when the campaign is enabled. */
|
||||||
public ObjectSet<String> researched = new ObjectSet<>();
|
public ObjectSet<String> researched = new ObjectSet<>();
|
||||||
|
/** Block containing these items as requirements are hidden. */
|
||||||
|
public ObjectSet<Item> hiddenBuildItems = new ObjectSet<>();
|
||||||
/** Whether ambient lighting is enabled. */
|
/** Whether ambient lighting is enabled. */
|
||||||
public boolean lighting = false;
|
public boolean lighting = false;
|
||||||
/** Whether enemy lighting is visible.
|
/** Whether enemy lighting is visible.
|
||||||
|
|||||||
@@ -155,6 +155,7 @@ public class Saves{
|
|||||||
SaveSlot slot = new SaveSlot(getNextSlotFile());
|
SaveSlot slot = new SaveSlot(getNextSlotFile());
|
||||||
slot.importFile(file);
|
slot.importFile(file);
|
||||||
slot.setName(file.nameWithoutExtension());
|
slot.setName(file.nameWithoutExtension());
|
||||||
|
|
||||||
saves.add(slot);
|
saves.add(slot);
|
||||||
slot.meta = SaveIO.getMeta(slot.file);
|
slot.meta = SaveIO.getMeta(slot.file);
|
||||||
current = slot;
|
current = slot;
|
||||||
@@ -330,6 +331,10 @@ public class Saves{
|
|||||||
public void importFile(Fi from) throws IOException{
|
public void importFile(Fi from) throws IOException{
|
||||||
try{
|
try{
|
||||||
from.copyTo(file);
|
from.copyTo(file);
|
||||||
|
if(previewFile().exists()){
|
||||||
|
requestedPreview = false;
|
||||||
|
previewFile().delete();
|
||||||
|
}
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
throw new IOException(e);
|
throw new IOException(e);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -285,7 +285,7 @@ public class Waves{
|
|||||||
if(naval){
|
if(naval){
|
||||||
species = Structs.filter(UnitType[].class, species, v -> v[0].flying || v[0].naval);
|
species = Structs.filter(UnitType[].class, species, v -> v[0].flying || v[0].naval);
|
||||||
}else{
|
}else{
|
||||||
species = Structs.filter(UnitType[].class, species, v -> v[0].flying && !v[0].naval);
|
species = Structs.filter(UnitType[].class, species, v -> !v[0].naval);
|
||||||
}
|
}
|
||||||
|
|
||||||
UnitType[][] fspec = species;
|
UnitType[][] fspec = species;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import arc.graphics.*;
|
|||||||
import arc.graphics.Texture.*;
|
import arc.graphics.Texture.*;
|
||||||
import arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import arc.graphics.gl.*;
|
import arc.graphics.gl.*;
|
||||||
|
import arc.math.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
|
|
||||||
import static arc.Core.*;
|
import static arc.Core.*;
|
||||||
@@ -35,6 +36,8 @@ public class Pixelator implements Disposable{
|
|||||||
w = (int)(Core.camera.width * renderer.landScale() / renderer.getScale());
|
w = (int)(Core.camera.width * renderer.landScale() / renderer.getScale());
|
||||||
h = (int)(Core.camera.height * renderer.landScale() / renderer.getScale());
|
h = (int)(Core.camera.height * renderer.landScale() / renderer.getScale());
|
||||||
}
|
}
|
||||||
|
w = Mathf.clamp(w, 2, graphics.getWidth());
|
||||||
|
h = Mathf.clamp(h, 2, graphics.getHeight());
|
||||||
|
|
||||||
buffer.resize(w, h);
|
buffer.resize(w, h);
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package mindustry.graphics.g3d;
|
package mindustry.graphics.g3d;
|
||||||
|
|
||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
|
import arc.math.*;
|
||||||
import arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import arc.util.noise.*;
|
import arc.util.noise.*;
|
||||||
@@ -42,6 +43,9 @@ public class HexSkyMesh extends PlanetMesh{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(PlanetParams params, Mat3D projection, Mat3D transform){
|
public void render(PlanetParams params, Mat3D projection, Mat3D transform){
|
||||||
|
//don't waste performance rendering 0-alpha clouds
|
||||||
|
if(Mathf.zero(1f - params.uiAlpha, 0.01f)) return;
|
||||||
|
|
||||||
preRender(params);
|
preRender(params);
|
||||||
shader.bind();
|
shader.bind();
|
||||||
shader.setUniformMatrix4("u_proj", projection.val);
|
shader.setUniformMatrix4("u_proj", projection.val);
|
||||||
|
|||||||
@@ -19,8 +19,7 @@ public abstract class PlanetMesh implements GenericMesh{
|
|||||||
|
|
||||||
public PlanetMesh(){}
|
public PlanetMesh(){}
|
||||||
|
|
||||||
/** Should be overridden to set up any shader parameters such as planet position, normals, etc.
|
/** Should be overridden to set up any shader parameters such as planet position, normals, etc. */
|
||||||
* @param params*/
|
|
||||||
public void preRender(PlanetParams params){
|
public void preRender(PlanetParams params){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -176,7 +176,7 @@ public class GameService{
|
|||||||
});
|
});
|
||||||
|
|
||||||
Events.on(UnitControlEvent.class, e -> {
|
Events.on(UnitControlEvent.class, e -> {
|
||||||
if(e.unit instanceof BlockUnitc && ((BlockUnitc)e.unit).tile().block == Blocks.router){
|
if(e.unit instanceof BlockUnitc unit && unit.tile().block == Blocks.router){
|
||||||
becomeRouter.complete();
|
becomeRouter.complete();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ public class Weapon implements Cloneable{
|
|||||||
Draw.rect(outlineRegion,
|
Draw.rect(outlineRegion,
|
||||||
wx, wy,
|
wx, wy,
|
||||||
outlineRegion.width * Draw.scl * -Mathf.sign(flipSprite),
|
outlineRegion.width * Draw.scl * -Mathf.sign(flipSprite),
|
||||||
region.height * Draw.scl,
|
outlineRegion.height * Draw.scl,
|
||||||
weaponRotation);
|
weaponRotation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -259,15 +259,6 @@ public class FileChooser extends BaseDialog{
|
|||||||
Core.settings.put("lastDirectory", directory.absolutePath());
|
Core.settings.put("lastDirectory", directory.absolutePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
private String shorten(String string){
|
|
||||||
int max = 30;
|
|
||||||
if(string.length() <= max){
|
|
||||||
return string;
|
|
||||||
}else{
|
|
||||||
return string.substring(0, max - 3).concat("...");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class FileHistory{
|
public class FileHistory{
|
||||||
private Seq<Fi> history = new Seq<>();
|
private Seq<Fi> history = new Seq<>();
|
||||||
private int index;
|
private int index;
|
||||||
@@ -305,19 +296,5 @@ public class FileChooser extends BaseDialog{
|
|||||||
public boolean canBack(){
|
public boolean canBack(){
|
||||||
return !(index == 1) && index > 0;
|
return !(index == 1) && index > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void print(){
|
|
||||||
|
|
||||||
System.out.println("\n\n\n\n\n\n");
|
|
||||||
int i = 0;
|
|
||||||
for(Fi file : history){
|
|
||||||
i++;
|
|
||||||
if(index == i){
|
|
||||||
System.out.println("[[" + file.toString() + "]]");
|
|
||||||
}else{
|
|
||||||
System.out.println("--" + file.toString() + "--");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -365,7 +365,8 @@ public class JoinDialog extends BaseDialog{
|
|||||||
|
|
||||||
global.clear();
|
global.clear();
|
||||||
global.background(null);
|
global.background(null);
|
||||||
for(ServerGroup group : defaultServers){
|
for(int i = 0; i < defaultServers.size; i ++){
|
||||||
|
ServerGroup group = defaultServers.get((i + defaultServers.size/2) % defaultServers.size);
|
||||||
boolean hidden = group.hidden();
|
boolean hidden = group.hidden();
|
||||||
if(hidden && !showHidden){
|
if(hidden && !showHidden){
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -8,7 +8,9 @@ import arc.scene.ui.*;
|
|||||||
import arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
|
import mindustry.*;
|
||||||
import mindustry.core.GameState.*;
|
import mindustry.core.GameState.*;
|
||||||
|
import mindustry.game.*;
|
||||||
import mindustry.game.Saves.*;
|
import mindustry.game.Saves.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.io.*;
|
import mindustry.io.*;
|
||||||
@@ -20,8 +22,12 @@ import java.io.*;
|
|||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class LoadDialog extends BaseDialog{
|
public class LoadDialog extends BaseDialog{
|
||||||
ScrollPane pane;
|
|
||||||
Table slots;
|
Table slots;
|
||||||
|
String searchString;
|
||||||
|
Gamemode filteredMode;
|
||||||
|
TextField searchField;
|
||||||
|
ScrollPane pane;
|
||||||
|
BaseDialog dialog;
|
||||||
|
|
||||||
public LoadDialog(){
|
public LoadDialog(){
|
||||||
this("@loadgame");
|
this("@loadgame");
|
||||||
@@ -43,9 +49,38 @@ public class LoadDialog extends BaseDialog{
|
|||||||
|
|
||||||
slots = new Table();
|
slots = new Table();
|
||||||
pane = new ScrollPane(slots);
|
pane = new ScrollPane(slots);
|
||||||
|
|
||||||
|
rebuild();
|
||||||
|
|
||||||
|
Table search = new Table();
|
||||||
|
search.image(Icon.zoom);
|
||||||
|
searchField = search.field("", t -> {
|
||||||
|
searchString = t.length() > 0 ? t.toLowerCase() : null;
|
||||||
|
rebuild();
|
||||||
|
}).maxTextLength(50).growX().get();
|
||||||
|
searchField.setMessageText("@save.search");
|
||||||
|
for(Gamemode mode : Gamemode.all){
|
||||||
|
TextureRegionDrawable icon = Vars.ui.getIcon("mode" + Strings.capitalize(mode.name()));
|
||||||
|
boolean sandbox = mode == Gamemode.sandbox;
|
||||||
|
if(Core.atlas.isFound(icon.getRegion()) || sandbox){
|
||||||
|
search.button(sandbox ? Icon.terrain : icon, Styles.emptytogglei, () -> {
|
||||||
|
filteredMode = filteredMode == mode ? null : mode;
|
||||||
|
rebuild();
|
||||||
|
}).size(60f).checked(b -> filteredMode == mode).tooltip("@mode." + mode.name() + ".name");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pane.setFadeScrollBars(false);
|
pane.setFadeScrollBars(false);
|
||||||
pane.setScrollingDisabled(true, false);
|
pane.setScrollingDisabled(true, false);
|
||||||
|
|
||||||
|
cont.add(search).growX();
|
||||||
|
cont.row();
|
||||||
|
cont.add(pane).growY();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void rebuild(){
|
||||||
|
|
||||||
|
slots.clear();
|
||||||
slots.marginRight(24).marginLeft(20f);
|
slots.marginRight(24).marginLeft(20f);
|
||||||
|
|
||||||
Time.runTask(2f, () -> Core.scene.setScrollFocus(pane));
|
Time.runTask(2f, () -> Core.scene.setScrollFocus(pane));
|
||||||
@@ -58,7 +93,11 @@ public class LoadDialog extends BaseDialog{
|
|||||||
boolean any = false;
|
boolean any = false;
|
||||||
|
|
||||||
for(SaveSlot slot : array){
|
for(SaveSlot slot : array){
|
||||||
if(slot.isHidden()) continue;
|
if(slot.isHidden()
|
||||||
|
|| (searchString != null && !Strings.stripColors(slot.getName()).toLowerCase().contains(searchString))
|
||||||
|
|| (filteredMode != null && filteredMode != slot.mode())){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
any = true;
|
any = true;
|
||||||
|
|
||||||
@@ -82,14 +121,14 @@ public class LoadDialog extends BaseDialog{
|
|||||||
t.button(Icon.trash, Styles.emptyi, () -> {
|
t.button(Icon.trash, Styles.emptyi, () -> {
|
||||||
ui.showConfirm("@confirm", "@save.delete.confirm", () -> {
|
ui.showConfirm("@confirm", "@save.delete.confirm", () -> {
|
||||||
slot.delete();
|
slot.delete();
|
||||||
setup();
|
rebuild();
|
||||||
});
|
});
|
||||||
}).right();
|
}).right();
|
||||||
|
|
||||||
t.button(Icon.pencil, Styles.emptyi, () -> {
|
t.button(Icon.pencil, Styles.emptyi, () -> {
|
||||||
ui.showTextInput("@save.rename", "@save.rename.text", slot.getName(), text -> {
|
ui.showTextInput("@save.rename", "@save.rename.text", slot.getName(), text -> {
|
||||||
slot.setName(text);
|
slot.setName(text);
|
||||||
setup();
|
rebuild();
|
||||||
});
|
});
|
||||||
}).right();
|
}).right();
|
||||||
|
|
||||||
@@ -141,10 +180,8 @@ public class LoadDialog extends BaseDialog{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!any){
|
if(!any){
|
||||||
slots.button("@save.none", () -> {}).disabled(true).fillX().margin(20f).minWidth(340f).height(80f).pad(4f);
|
slots.add("@save.none");
|
||||||
}
|
}
|
||||||
|
|
||||||
cont.add(pane);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addSetup(){
|
public void addSetup(){
|
||||||
@@ -154,7 +191,7 @@ public class LoadDialog extends BaseDialog{
|
|||||||
if(SaveIO.isSaveValid(file)){
|
if(SaveIO.isSaveValid(file)){
|
||||||
try{
|
try{
|
||||||
control.saves.importSave(file);
|
control.saves.importSave(file);
|
||||||
setup();
|
rebuild();
|
||||||
}catch(IOException e){
|
}catch(IOException e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
ui.showException("@save.import.fail", e);
|
ui.showException("@save.import.fail", e);
|
||||||
@@ -193,4 +230,15 @@ public class LoadDialog extends BaseDialog{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Dialog show(){
|
||||||
|
super.show();
|
||||||
|
|
||||||
|
if(Core.app.isDesktop() && searchField != null){
|
||||||
|
Core.scene.setKeyboardFocus(searchField);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,10 @@ public class MapsDialog extends BaseDialog{
|
|||||||
private Table mapTable = new Table();
|
private Table mapTable = new Table();
|
||||||
private TextField searchField;
|
private TextField searchField;
|
||||||
|
|
||||||
private boolean showAll = Core.settings.getBool("editorShowAllMaps", true);
|
private boolean showBuiltIn = Core.settings.getBool("editorshowbuiltinmaps", true);
|
||||||
|
private boolean showCustom = Core.settings.getBool("editorshowcustommaps", true);
|
||||||
|
private boolean searchAuthor = Core.settings.getBool("editorsearchauthor", false);
|
||||||
|
private boolean searchDescription = Core.settings.getBool("editorsearchdescription", false);
|
||||||
|
|
||||||
public MapsDialog(){
|
public MapsDialog(){
|
||||||
super("@maps");
|
super("@maps");
|
||||||
@@ -87,7 +90,7 @@ public class MapsDialog extends BaseDialog{
|
|||||||
String name = map.tags.get("name", () -> {
|
String name = map.tags.get("name", () -> {
|
||||||
String result = "unknown";
|
String result = "unknown";
|
||||||
int number = 0;
|
int number = 0;
|
||||||
while(maps.byName(result + number++) != null);
|
while(maps.byName(result + number++) != null) ;
|
||||||
return result + number;
|
return result + number;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -153,35 +156,43 @@ public class MapsDialog extends BaseDialog{
|
|||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
Seq<Map> mapList = showAll ? Vars.maps.all() : Vars.maps.customMaps();
|
Seq<Map> mapList = showCustom ?
|
||||||
for(Map map : mapList){
|
showBuiltIn ? maps.all() : maps.customMaps() :
|
||||||
|
showBuiltIn ? maps.defaultMaps() : null;
|
||||||
|
|
||||||
boolean invalid = false;
|
if(mapList != null){
|
||||||
for(Gamemode mode : modes){
|
for(Map map : mapList){
|
||||||
invalid |= !mode.valid(map);
|
|
||||||
|
boolean invalid = false;
|
||||||
|
for(Gamemode mode : modes){
|
||||||
|
invalid |= !mode.valid(map);
|
||||||
|
}
|
||||||
|
if(invalid || (searchString != null
|
||||||
|
&& !Strings.stripColors(map.name()).toLowerCase().contains(searchString)
|
||||||
|
&& (!searchAuthor || !Strings.stripColors(map.author()).toLowerCase().contains(searchString))
|
||||||
|
&& (!searchDescription || !Strings.stripColors(map.description()).toLowerCase().contains(searchString)))){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
noMapsShown = false;
|
||||||
|
|
||||||
|
if(i % maxwidth == 0){
|
||||||
|
mapTable.row();
|
||||||
|
}
|
||||||
|
|
||||||
|
TextButton button = mapTable.button("", Styles.cleart, () -> showMapInfo(map)).width(mapsize).pad(8).get();
|
||||||
|
button.clearChildren();
|
||||||
|
button.margin(9);
|
||||||
|
button.add(map.name()).width(mapsize - 18f).center().get().setEllipsis(true);
|
||||||
|
button.row();
|
||||||
|
button.image().growX().pad(4).color(Pal.gray);
|
||||||
|
button.row();
|
||||||
|
button.stack(new Image(map.safeTexture()).setScaling(Scaling.fit), new BorderImage(map.safeTexture()).setScaling(Scaling.fit)).size(mapsize - 20f);
|
||||||
|
button.row();
|
||||||
|
button.add(map.custom ? "@custom" : map.workshop ? "@workshop" : map.mod != null ? "[lightgray]" + map.mod.meta.displayName() : "@builtin").color(Color.gray).padTop(3);
|
||||||
|
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
if(invalid || (searchString != null && !Strings.stripColors(map.name()).toLowerCase().contains(searchString))){
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
noMapsShown = false;
|
|
||||||
|
|
||||||
if(i % maxwidth == 0){
|
|
||||||
mapTable.row();
|
|
||||||
}
|
|
||||||
|
|
||||||
TextButton button = mapTable.button("", Styles.cleart, () -> showMapInfo(map)).width(mapsize).pad(8).get();
|
|
||||||
button.clearChildren();
|
|
||||||
button.margin(9);
|
|
||||||
button.add(map.name()).width(mapsize - 18f).center().get().setEllipsis(true);
|
|
||||||
button.row();
|
|
||||||
button.image().growX().pad(4).color(Pal.gray);
|
|
||||||
button.row();
|
|
||||||
button.stack(new Image(map.safeTexture()).setScaling(Scaling.fit), new BorderImage(map.safeTexture()).setScaling(Scaling.fit)).size(mapsize - 20f);
|
|
||||||
button.row();
|
|
||||||
button.add(map.custom ? "@custom" : map.workshop ? "@workshop" : map.mod != null ? "[lightgray]" + map.mod.meta.displayName() : "@builtin").color(Color.gray).padTop(3);
|
|
||||||
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(noMapsShown){
|
if(noMapsShown){
|
||||||
@@ -192,30 +203,57 @@ public class MapsDialog extends BaseDialog{
|
|||||||
void showMapFilters(){
|
void showMapFilters(){
|
||||||
dialog = new BaseDialog("@editor.filters");
|
dialog = new BaseDialog("@editor.filters");
|
||||||
dialog.addCloseButton();
|
dialog.addCloseButton();
|
||||||
dialog.setFillParent(false);
|
dialog.cont.table(menu -> {
|
||||||
dialog.cont.table(Tex.button, t -> {
|
menu.add("@editor.filters.mode").width(150f).left();
|
||||||
int i = 0;
|
menu.table(t -> {
|
||||||
for(Gamemode mode : Gamemode.all){
|
for(Gamemode mode : Gamemode.all){
|
||||||
TextureRegionDrawable icon = Vars.ui.getIcon("mode" + Strings.capitalize(mode.name()));
|
TextureRegionDrawable icon = Vars.ui.getIcon("mode" + Strings.capitalize(mode.name()));
|
||||||
if(Core.atlas.isFound(icon.getRegion())){
|
if(Core.atlas.isFound(icon.getRegion())){
|
||||||
t.button(mode.name(), icon, Styles.clearTogglet, () -> {
|
t.button(icon, Styles.emptytogglei, () -> {
|
||||||
if(modes.contains(mode)){
|
if(modes.contains(mode)){
|
||||||
modes.remove(mode);
|
modes.remove(mode);
|
||||||
}else{
|
}else{
|
||||||
modes.add(mode);
|
modes.add(mode);
|
||||||
}
|
}
|
||||||
rebuildMaps();
|
rebuildMaps();
|
||||||
}).size(150f, 60f).marginLeft(6f).checked(modes.contains(mode));
|
}).size(60f).checked(modes.contains(mode)).tooltip("@mode." + mode.name() + ".name");
|
||||||
if(++i % 3 == 0) t.row();
|
}
|
||||||
}
|
}
|
||||||
}
|
}).padBottom(10f);
|
||||||
t.row();
|
menu.row();
|
||||||
t.button("@editor.showAll", Styles.clearTogglet, () -> {
|
|
||||||
showAll = !showAll;
|
menu.add("@editor.filters.type").width(150f).left();
|
||||||
Core.settings.put("editorShowAllMaps", showAll);
|
menu.table(Tex.button, t -> {
|
||||||
Core.settings.forceSave();
|
t.button("@custom", Styles.clearTogglet, () -> {
|
||||||
rebuildMaps();
|
showCustom = !showCustom;
|
||||||
}).checked(b -> showAll).colspan(3).growX().height(40f);
|
Core.settings.put("editorshowcustommaps", showCustom);
|
||||||
|
Core.settings.forceSave();
|
||||||
|
rebuildMaps();
|
||||||
|
}).size(150f, 60f).checked(showCustom);
|
||||||
|
t.button("@builtin", Styles.clearTogglet, () -> {
|
||||||
|
showBuiltIn = !showBuiltIn;
|
||||||
|
Core.settings.put("editorshowbuiltinmaps", showBuiltIn);
|
||||||
|
Core.settings.forceSave();
|
||||||
|
rebuildMaps();
|
||||||
|
}).size(150f, 60f).checked(showBuiltIn);
|
||||||
|
}).padBottom(10f);
|
||||||
|
menu.row();
|
||||||
|
|
||||||
|
menu.add("@editor.filters.search").width(150f).left();
|
||||||
|
menu.table(Tex.button, t -> {
|
||||||
|
t.button("@editor.filters.author", Styles.clearTogglet, () -> {
|
||||||
|
searchAuthor = !searchAuthor;
|
||||||
|
Core.settings.put("editorsearchauthor", searchAuthor);
|
||||||
|
Core.settings.forceSave();
|
||||||
|
rebuildMaps();
|
||||||
|
}).size(150f, 60f).checked(searchAuthor);
|
||||||
|
t.button("@editor.filters.description", Styles.clearTogglet, () -> {
|
||||||
|
searchDescription = !searchDescription;
|
||||||
|
Core.settings.put("editorsearchdescription", searchDescription);
|
||||||
|
Core.settings.forceSave();
|
||||||
|
rebuildMaps();
|
||||||
|
}).size(150f, 60f).checked(searchDescription);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
dialog.show();
|
dialog.show();
|
||||||
|
|||||||
@@ -151,13 +151,13 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
}
|
}
|
||||||
|
|
||||||
zoom = (Mathf.clamp(initialDistance / distance * lastZoom, state.planet.minZoom, 2f));
|
zoom = (Mathf.clamp(initialDistance / distance * lastZoom, state.planet.minZoom, 2f));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void touchUp(InputEvent event, float x, float y, int pointer, KeyCode button){
|
public void touchUp(InputEvent event, float x, float y, int pointer, KeyCode button){
|
||||||
lastZoom = zoom;
|
lastZoom = zoom;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
shown(this::setup);
|
shown(this::setup);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ public class PlacementFragment extends Fragment{
|
|||||||
boolean gridUpdate(InputHandler input){
|
boolean gridUpdate(InputHandler input){
|
||||||
scrollPositions.put(currentCategory, blockPane.getScrollY());
|
scrollPositions.put(currentCategory, blockPane.getScrollY());
|
||||||
|
|
||||||
if(Core.input.keyTap(Binding.pick) && player.isBuilder()){ //mouse eyedropper select
|
if(Core.input.keyTap(Binding.pick) && player.isBuilder() && !Core.scene.hasDialog()){ //mouse eyedropper select
|
||||||
var build = world.buildWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y);
|
var build = world.buildWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y);
|
||||||
Block tryRecipe = build == null ? null : build instanceof ConstructBuild c ? c.current : build.block;
|
Block tryRecipe = build == null ? null : build instanceof ConstructBuild c ? c.current : build.block;
|
||||||
Object tryConfig = build == null || !build.block.copyConfig ? null : build.config();
|
Object tryConfig = build == null || !build.block.copyConfig ? null : build.config();
|
||||||
@@ -445,7 +445,7 @@ public class PlacementFragment extends Fragment{
|
|||||||
}
|
}
|
||||||
|
|
||||||
boolean unlocked(Block block){
|
boolean unlocked(Block block){
|
||||||
return block.unlockedNow() && block.placeablePlayer;
|
return block.unlockedNow() && block.placeablePlayer && (state.rules.hiddenBuildItems.isEmpty() || !Structs.contains(block.requirements, i -> state.rules.hiddenBuildItems.contains(i.item)));
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean hasInfoBox(){
|
boolean hasInfoBox(){
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
package mindustry.ui.fragments;
|
package mindustry.ui.fragments;
|
||||||
|
|
||||||
import arc.*;
|
import arc.*;
|
||||||
|
import arc.graphics.*;
|
||||||
import arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import arc.scene.*;
|
import arc.scene.*;
|
||||||
import arc.scene.event.*;
|
import arc.scene.event.*;
|
||||||
import arc.scene.ui.*;
|
import arc.scene.ui.*;
|
||||||
|
import arc.scene.ui.ImageButton.*;
|
||||||
import arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
@@ -115,6 +117,23 @@ public class PlayerListFragment extends Fragment{
|
|||||||
|
|
||||||
button.image(Icon.admin).visible(() -> user.admin && !(!user.isLocal() && net.server())).padRight(5).get().updateVisibility();
|
button.image(Icon.admin).visible(() -> user.admin && !(!user.isLocal() && net.server())).padRight(5).get().updateVisibility();
|
||||||
|
|
||||||
|
var style = new ImageButtonStyle(){{
|
||||||
|
down = Styles.none;
|
||||||
|
up = Styles.none;
|
||||||
|
imageCheckedColor = Pal.accent;
|
||||||
|
imageDownColor = Pal.accent;
|
||||||
|
imageUpColor = Color.white;
|
||||||
|
imageOverColor = Color.lightGray;
|
||||||
|
}};
|
||||||
|
|
||||||
|
var ustyle = new ImageButtonStyle(){{
|
||||||
|
down = Styles.none;
|
||||||
|
up = Styles.none;
|
||||||
|
imageDownColor = Pal.accent;
|
||||||
|
imageUpColor = Color.white;
|
||||||
|
imageOverColor = Color.lightGray;
|
||||||
|
}};
|
||||||
|
|
||||||
if((net.server() || player.admin) && !user.isLocal() && (!user.admin || net.server())){
|
if((net.server() || player.admin) && !user.isLocal() && (!user.admin || net.server())){
|
||||||
button.add().growY();
|
button.add().growY();
|
||||||
|
|
||||||
@@ -123,35 +142,41 @@ public class PlayerListFragment extends Fragment{
|
|||||||
button.table(t -> {
|
button.table(t -> {
|
||||||
t.defaults().size(bs);
|
t.defaults().size(bs);
|
||||||
|
|
||||||
t.button(Icon.hammer, Styles.clearPartiali,
|
t.button(Icon.hammer, ustyle,
|
||||||
() -> ui.showConfirm("@confirm", Core.bundle.format("confirmban", user.name()), () -> Call.adminRequest(user, AdminAction.ban)));
|
() -> ui.showConfirm("@confirm", Core.bundle.format("confirmban", user.name()), () -> Call.adminRequest(user, AdminAction.ban)));
|
||||||
t.button(Icon.cancel, Styles.clearPartiali,
|
t.button(Icon.cancel, ustyle,
|
||||||
() -> ui.showConfirm("@confirm", Core.bundle.format("confirmkick", user.name()), () -> Call.adminRequest(user, AdminAction.kick)));
|
() -> ui.showConfirm("@confirm", Core.bundle.format("confirmkick", user.name()), () -> Call.adminRequest(user, AdminAction.kick)));
|
||||||
|
|
||||||
t.row();
|
t.row();
|
||||||
|
|
||||||
t.button(Icon.admin, Styles.clearTogglePartiali, () -> {
|
t.button(Icon.admin, style, () -> {
|
||||||
if(net.client()) return;
|
if(net.client()) return;
|
||||||
|
|
||||||
String id = user.uuid();
|
String id = user.uuid();
|
||||||
|
|
||||||
if(netServer.admins.isAdmin(id, connection.address)){
|
if(user.admin){
|
||||||
ui.showConfirm("@confirm", Core.bundle.format("confirmunadmin", user.name()), () -> netServer.admins.unAdminPlayer(id));
|
ui.showConfirm("@confirm", Core.bundle.format("confirmunadmin", user.name()), () -> {
|
||||||
|
netServer.admins.unAdminPlayer(id);
|
||||||
|
user.admin = false;
|
||||||
|
});
|
||||||
}else{
|
}else{
|
||||||
ui.showConfirm("@confirm", Core.bundle.format("confirmadmin", user.name()), () -> netServer.admins.adminPlayer(id, user.usid()));
|
ui.showConfirm("@confirm", Core.bundle.format("confirmadmin", user.name()), () -> {
|
||||||
|
netServer.admins.adminPlayer(id, user.usid());
|
||||||
|
user.admin = true;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}).update(b -> b.setChecked(user.admin))
|
}).update(b -> b.setChecked(user.admin))
|
||||||
.disabled(b -> net.client())
|
.disabled(b -> net.client())
|
||||||
.touchable(() -> net.client() ? Touchable.disabled : Touchable.enabled)
|
.touchable(() -> net.client() ? Touchable.disabled : Touchable.enabled)
|
||||||
.checked(user.admin);
|
.checked(user.admin);
|
||||||
|
|
||||||
t.button(Icon.zoom, Styles.clearPartiali, () -> Call.adminRequest(user, AdminAction.trace));
|
t.button(Icon.zoom, ustyle, () -> Call.adminRequest(user, AdminAction.trace));
|
||||||
|
|
||||||
}).padRight(12).size(bs + 10f, bs);
|
}).padRight(12).size(bs + 10f, bs);
|
||||||
}else if(!user.isLocal() && !user.admin && net.client() && Groups.player.size() >= 3 && player.team() == user.team()){ //votekick
|
}else if(!user.isLocal() && !user.admin && net.client() && Groups.player.size() >= 3 && player.team() == user.team()){ //votekick
|
||||||
button.add().growY();
|
button.add().growY();
|
||||||
|
|
||||||
button.button(Icon.hammer, Styles.clearPartiali,
|
button.button(Icon.hammer, ustyle,
|
||||||
() -> {
|
() -> {
|
||||||
ui.showConfirm("@confirm", Core.bundle.format("confirmvotekick", user.name()), () -> {
|
ui.showConfirm("@confirm", Core.bundle.format("confirmvotekick", user.name()), () -> {
|
||||||
Call.sendChatMessage("/votekick " + user.name());
|
Call.sendChatMessage("/votekick " + user.name());
|
||||||
|
|||||||
@@ -120,6 +120,8 @@ public class Block extends UnlockableContent{
|
|||||||
public boolean autoResetEnabled = true;
|
public boolean autoResetEnabled = true;
|
||||||
/** if true, the block stops updating when disabled */
|
/** if true, the block stops updating when disabled */
|
||||||
public boolean noUpdateDisabled = false;
|
public boolean noUpdateDisabled = false;
|
||||||
|
/** if true, this block updates when a payload of a unit. Currently unused! */
|
||||||
|
public boolean updateInUnits = true;
|
||||||
/** Whether to use this block's color in the minimap. Only used for overlays. */
|
/** Whether to use this block's color in the minimap. Only used for overlays. */
|
||||||
public boolean useColor = true;
|
public boolean useColor = true;
|
||||||
/** item that drops from this block, used for drills */
|
/** item that drops from this block, used for drills */
|
||||||
@@ -152,7 +154,7 @@ public class Block extends UnlockableContent{
|
|||||||
public boolean alwaysReplace = false;
|
public boolean alwaysReplace = false;
|
||||||
/** if false, this block can never be replaced. */
|
/** if false, this block can never be replaced. */
|
||||||
public boolean replaceable = true;
|
public boolean replaceable = true;
|
||||||
/** The block group. Unless {@link #canReplace} is overriden, blocks in the same group can replace each other. */
|
/** The block group. Unless {@link #canReplace} is overridden, blocks in the same group can replace each other. */
|
||||||
public BlockGroup group = BlockGroup.none;
|
public BlockGroup group = BlockGroup.none;
|
||||||
/** List of block flags. Used for AI indexing. */
|
/** List of block flags. Used for AI indexing. */
|
||||||
public EnumSet<BlockFlag> flags = EnumSet.of();
|
public EnumSet<BlockFlag> flags = EnumSet.of();
|
||||||
@@ -263,7 +265,10 @@ public class Block extends UnlockableContent{
|
|||||||
public boolean quickRotate = true;
|
public boolean quickRotate = true;
|
||||||
/** Main subclass. Non-anonymous. */
|
/** Main subclass. Non-anonymous. */
|
||||||
public @Nullable Class<?> subclass;
|
public @Nullable Class<?> subclass;
|
||||||
|
/** Determines if this block gets a higher unloader priority. */
|
||||||
|
public boolean highUnloadPriority = false;
|
||||||
|
|
||||||
|
public float selectScroll; //scroll position for certain blocks
|
||||||
public Prov<Building> buildType = null; //initialized later
|
public Prov<Building> buildType = null; //initialized later
|
||||||
public ObjectMap<Class<?>, Cons2> configurations = new ObjectMap<>();
|
public ObjectMap<Class<?>, Cons2> configurations = new ObjectMap<>();
|
||||||
|
|
||||||
|
|||||||
@@ -5,20 +5,29 @@ import arc.scene.style.*;
|
|||||||
import arc.scene.ui.*;
|
import arc.scene.ui.*;
|
||||||
import arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
|
import arc.util.*;
|
||||||
import mindustry.ctype.*;
|
import mindustry.ctype.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
|
import mindustry.world.*;
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class ItemSelection{
|
public class ItemSelection{
|
||||||
private static float scrollPos = 0f;
|
|
||||||
|
|
||||||
public static <T extends UnlockableContent> void buildTable(Table table, Seq<T> items, Prov<T> holder, Cons<T> consumer){
|
public static <T extends UnlockableContent> void buildTable(Table table, Seq<T> items, Prov<T> holder, Cons<T> consumer){
|
||||||
buildTable(table, items, holder, consumer, true);
|
buildTable(table, items, holder, consumer, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static <T extends UnlockableContent> void buildTable(Block block, Table table, Seq<T> items, Prov<T> holder, Cons<T> consumer){
|
||||||
|
buildTable(block, table, items, holder, consumer, true);
|
||||||
|
}
|
||||||
|
|
||||||
public static <T extends UnlockableContent> void buildTable(Table table, Seq<T> items, Prov<T> holder, Cons<T> consumer, boolean closeSelect){
|
public static <T extends UnlockableContent> void buildTable(Table table, Seq<T> items, Prov<T> holder, Cons<T> consumer, boolean closeSelect){
|
||||||
|
buildTable(null, table, items, holder, consumer, closeSelect);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T extends UnlockableContent> void buildTable(@Nullable Block block, Table table, Seq<T> items, Prov<T> holder, Cons<T> consumer, boolean closeSelect){
|
||||||
|
|
||||||
ButtonGroup<ImageButton> group = new ButtonGroup<>();
|
ButtonGroup<ImageButton> group = new ButtonGroup<>();
|
||||||
group.setMinCheckCount(0);
|
group.setMinCheckCount(0);
|
||||||
@@ -52,10 +61,13 @@ public class ItemSelection{
|
|||||||
|
|
||||||
ScrollPane pane = new ScrollPane(cont, Styles.smallPane);
|
ScrollPane pane = new ScrollPane(cont, Styles.smallPane);
|
||||||
pane.setScrollingDisabled(true, false);
|
pane.setScrollingDisabled(true, false);
|
||||||
pane.setScrollYForce(scrollPos);
|
|
||||||
pane.update(() -> {
|
if(block != null){
|
||||||
scrollPos = pane.getScrollY();
|
pane.setScrollYForce(block.selectScroll);
|
||||||
});
|
pane.update(() -> {
|
||||||
|
block.selectScroll = pane.getScrollY();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
pane.setOverscroll(false, false);
|
pane.setOverscroll(false, false);
|
||||||
table.add(pane).maxHeight(Scl.scl(40 * 5));
|
table.add(pane).maxHeight(Scl.scl(40 * 5));
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ public class OverdriveProjector extends Block{
|
|||||||
float realRange = range + phaseHeat * phaseRangeBoost;
|
float realRange = range + phaseHeat * phaseRangeBoost;
|
||||||
|
|
||||||
charge = 0f;
|
charge = 0f;
|
||||||
indexer.eachBlock(this, realRange, other -> true, other -> other.applyBoost(realBoost(), reload + 1f));
|
indexer.eachBlock(this, realRange, other -> other.block.canOverdrive, other -> other.applyBoost(realBoost(), reload + 1f));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(timer(timerUse, useTime) && efficiency() > 0 && consValid()){
|
if(timer(timerUse, useTime) && efficiency() > 0 && consValid()){
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ public class BaseTurret extends Block{
|
|||||||
priority = TargetPriority.turret;
|
priority = TargetPriority.turret;
|
||||||
group = BlockGroup.turrets;
|
group = BlockGroup.turrets;
|
||||||
flags = EnumSet.of(BlockFlag.turret);
|
flags = EnumSet.of(BlockFlag.turret);
|
||||||
|
updateInUnits = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ public class LaserTurret extends PowerTurret{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void bullet(BulletType type, float angle){
|
protected void bullet(BulletType type, float angle){
|
||||||
bullet = type.create(tile.build, team, x + tr.x, y + tr.y, angle);
|
bullet = type.create(this, team, x + tr.x, y + tr.y, angle);
|
||||||
bulletLife = shootDuration;
|
bulletLife = shootDuration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import arc.graphics.g2d.*;
|
|||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
|
import mindustry.core.*;
|
||||||
import mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
import mindustry.entities.bullet.*;
|
import mindustry.entities.bullet.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
@@ -90,9 +91,7 @@ public class LiquidTurret extends Turret{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateTile(){
|
public void updateTile(){
|
||||||
if(unit != null){
|
unit.ammo(unit.type().ammoCapacity * liquids.currentAmount() / liquidCapacity);
|
||||||
unit.ammo(unit.type().ammoCapacity * liquids.currentAmount() / liquidCapacity);
|
|
||||||
}
|
|
||||||
|
|
||||||
super.updateTile();
|
super.updateTile();
|
||||||
}
|
}
|
||||||
@@ -100,13 +99,14 @@ public class LiquidTurret extends Turret{
|
|||||||
@Override
|
@Override
|
||||||
protected void findTarget(){
|
protected void findTarget(){
|
||||||
if(extinguish && liquids.current().canExtinguish()){
|
if(extinguish && liquids.current().canExtinguish()){
|
||||||
|
int tx = World.toTile(x), ty = World.toTile(y);
|
||||||
Fire result = null;
|
Fire result = null;
|
||||||
float mindst = 0f;
|
float mindst = 0f;
|
||||||
int tr = (int)(range / tilesize);
|
int tr = (int)(range / tilesize);
|
||||||
for(int x = -tr; x <= tr; x++){
|
for(int x = -tr; x <= tr; x++){
|
||||||
for(int y = -tr; y <= tr; y++){
|
for(int y = -tr; y <= tr; y++){
|
||||||
Tile other = world.tile(x + tile.x, y + tile.y);
|
Tile other = world.tile(x + tx, y + ty);
|
||||||
var fire = Fires.get(x + tile.x, y + tile.y);
|
var fire = Fires.get(x + tx, y + ty);
|
||||||
float dst = fire == null ? 0 : dst2(fire);
|
float dst = fire == null ? 0 : dst2(fire);
|
||||||
//do not extinguish fires on other team blocks
|
//do not extinguish fires on other team blocks
|
||||||
if(other != null && fire != null && Fires.has(other.x, other.y) && dst <= range * range && (result == null || dst < mindst) && (other.build == null || other.team() == team)){
|
if(other != null && fire != null && Fires.has(other.x, other.y) && dst <= range * range && (result == null || dst < mindst) && (other.build == null || other.team() == team)){
|
||||||
|
|||||||
@@ -31,9 +31,7 @@ public class PowerTurret extends Turret{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateTile(){
|
public void updateTile(){
|
||||||
if(unit != null){
|
unit.ammo(power.status * unit.type().ammoCapacity);
|
||||||
unit.ammo(power.status * unit.type().ammoCapacity);
|
|
||||||
}
|
|
||||||
|
|
||||||
super.updateTile();
|
super.updateTile();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -149,15 +149,9 @@ public class Turret extends ReloadTurret{
|
|||||||
public boolean logicShooting = false;
|
public boolean logicShooting = false;
|
||||||
public @Nullable Posc target;
|
public @Nullable Posc target;
|
||||||
public Vec2 targetPos = new Vec2();
|
public Vec2 targetPos = new Vec2();
|
||||||
public @Nullable BlockUnitc unit;
|
public BlockUnitc unit = (BlockUnitc)UnitTypes.block.create(team);
|
||||||
public boolean wasShooting, charging;
|
public boolean wasShooting, charging;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void created(){
|
|
||||||
unit = (BlockUnitc)UnitTypes.block.create(team);
|
|
||||||
unit.tile(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canControl(){
|
public boolean canControl(){
|
||||||
return playerControllable;
|
return playerControllable;
|
||||||
@@ -165,7 +159,7 @@ public class Turret extends ReloadTurret{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void control(LAccess type, double p1, double p2, double p3, double p4){
|
public void control(LAccess type, double p1, double p2, double p3, double p4){
|
||||||
if(type == LAccess.shoot && (unit == null || !unit.isPlayer())){
|
if(type == LAccess.shoot && !unit.isPlayer()){
|
||||||
targetPos.set(World.unconv((float)p1), World.unconv((float)p2));
|
targetPos.set(World.unconv((float)p1), World.unconv((float)p2));
|
||||||
logicControlTime = logicControlCooldown;
|
logicControlTime = logicControlCooldown;
|
||||||
logicShooting = !Mathf.zero(p3);
|
logicShooting = !Mathf.zero(p3);
|
||||||
@@ -203,15 +197,14 @@ public class Turret extends ReloadTurret{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isShooting(){
|
public boolean isShooting(){
|
||||||
return (isControlled() ? (unit != null && unit.isShooting()) : logicControlled() ? logicShooting : target != null);
|
return (isControlled() ? unit.isShooting() : logicControlled() ? logicShooting : target != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Unit unit(){
|
public Unit unit(){
|
||||||
if(unit == null){
|
//make sure stats are correct
|
||||||
unit = (BlockUnitc)UnitTypes.block.create(team);
|
unit.tile(this);
|
||||||
unit.tile(this);
|
unit.team(team);
|
||||||
}
|
|
||||||
return (Unit)unit;
|
return (Unit)unit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -267,12 +260,9 @@ public class Turret extends ReloadTurret{
|
|||||||
recoil = Mathf.lerpDelta(recoil, 0f, restitution);
|
recoil = Mathf.lerpDelta(recoil, 0f, restitution);
|
||||||
heat = Mathf.lerpDelta(heat, 0f, cooldown);
|
heat = Mathf.lerpDelta(heat, 0f, cooldown);
|
||||||
|
|
||||||
if(unit != null){
|
unit.tile(this);
|
||||||
unit.health(health);
|
unit.rotation(rotation);
|
||||||
unit.rotation(rotation);
|
unit.team(team);
|
||||||
unit.team(team);
|
|
||||||
unit.set(x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(logicControlTime > 0){
|
if(logicControlTime > 0){
|
||||||
logicControlTime -= Time.delta;
|
logicControlTime -= Time.delta;
|
||||||
@@ -338,7 +328,7 @@ public class Turret extends ReloadTurret{
|
|||||||
if(targetAir && !targetGround){
|
if(targetAir && !targetGround){
|
||||||
target = Units.bestEnemy(team, x, y, range, e -> !e.dead() && !e.isGrounded(), unitSort);
|
target = Units.bestEnemy(team, x, y, range, e -> !e.dead() && !e.isGrounded(), unitSort);
|
||||||
}else{
|
}else{
|
||||||
target = Units.bestTarget(team, x, y, range, e -> !e.dead() && (e.isGrounded() || targetAir) && (!e.isGrounded() || targetGround), b -> true, unitSort);
|
target = Units.bestTarget(team, x, y, range, e -> !e.dead() && (e.isGrounded() || targetAir) && (!e.isGrounded() || targetGround), b -> targetGround, unitSort);
|
||||||
|
|
||||||
if(target == null && canHeal()){
|
if(target == null && canHeal()){
|
||||||
target = Units.findAllyTile(team, x, y, range, b -> b.damaged() && b != this);
|
target = Units.findAllyTile(team, x, y, range, b -> b.damaged() && b != this);
|
||||||
@@ -405,7 +395,7 @@ public class Turret extends ReloadTurret{
|
|||||||
|
|
||||||
for(int i = 0; i < chargeEffects; i++){
|
for(int i = 0; i < chargeEffects; i++){
|
||||||
Time.run(Mathf.random(chargeMaxDelay), () -> {
|
Time.run(Mathf.random(chargeMaxDelay), () -> {
|
||||||
if(!isValid()) return;
|
if(dead) return;
|
||||||
tr.trns(rotation, shootLength);
|
tr.trns(rotation, shootLength);
|
||||||
chargeEffect.at(x + tr.x, y + tr.y, rotation);
|
chargeEffect.at(x + tr.x, y + tr.y, rotation);
|
||||||
});
|
});
|
||||||
@@ -414,7 +404,7 @@ public class Turret extends ReloadTurret{
|
|||||||
charging = true;
|
charging = true;
|
||||||
|
|
||||||
Time.run(chargeTime, () -> {
|
Time.run(chargeTime, () -> {
|
||||||
if(!isValid()) return;
|
if(dead) return;
|
||||||
tr.trns(rotation, shootLength);
|
tr.trns(rotation, shootLength);
|
||||||
recoil = recoilAmount;
|
recoil = recoilAmount;
|
||||||
heat = 1f;
|
heat = 1f;
|
||||||
@@ -428,7 +418,7 @@ public class Turret extends ReloadTurret{
|
|||||||
for(int i = 0; i < shots; i++){
|
for(int i = 0; i < shots; i++){
|
||||||
int ii = i;
|
int ii = i;
|
||||||
Time.run(burstSpacing * i, () -> {
|
Time.run(burstSpacing * i, () -> {
|
||||||
if(!isValid() || !hasAmmo()) return;
|
if(dead || !hasAmmo()) return;
|
||||||
|
|
||||||
recoil = recoilAmount;
|
recoil = recoilAmount;
|
||||||
|
|
||||||
@@ -488,7 +478,7 @@ public class Turret extends ReloadTurret{
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void ejectEffects(){
|
protected void ejectEffects(){
|
||||||
if(!isValid()) return;
|
if(dead) return;
|
||||||
|
|
||||||
//alternate sides when using a double turret
|
//alternate sides when using a double turret
|
||||||
float scl = (shots == 2 && alternate && shotCounter % 2 == 1 ? -1f : 1f);
|
float scl = (shots == 2 && alternate && shotCounter % 2 == 1 ? -1f : 1f);
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ public class Conveyor extends Block implements Autotiler{
|
|||||||
public float minitem = 1;
|
public float minitem = 1;
|
||||||
|
|
||||||
public int blendbits, blending;
|
public int blendbits, blending;
|
||||||
public int blendsclx, blendscly;
|
public int blendsclx = 1, blendscly = 1;
|
||||||
|
|
||||||
public float clogHeat = 0f;
|
public float clogHeat = 0f;
|
||||||
|
|
||||||
@@ -163,12 +163,17 @@ public class Conveyor extends Block implements Autotiler{
|
|||||||
tr2.trns(rotation * 90, -tilesize / 2f, xs[i] * tilesize / 2f);
|
tr2.trns(rotation * 90, -tilesize / 2f, xs[i] * tilesize / 2f);
|
||||||
|
|
||||||
Draw.rect(item.fullIcon,
|
Draw.rect(item.fullIcon,
|
||||||
(tile.x * tilesize + tr1.x * ys[i] + tr2.x),
|
(x + tr1.x * ys[i] + tr2.x),
|
||||||
(tile.y * tilesize + tr1.y * ys[i] + tr2.y),
|
(y + tr1.y * ys[i] + tr2.y),
|
||||||
itemSize, itemSize);
|
itemSize, itemSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void payloadDraw(){
|
||||||
|
Draw.rect(block.fullIcon,x, y);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawCracks(){
|
public void drawCracks(){
|
||||||
Draw.z(Layer.block - 0.15f);
|
Draw.z(Layer.block - 0.15f);
|
||||||
|
|||||||
@@ -184,6 +184,11 @@ public class ItemBridge extends Block{
|
|||||||
public boolean wasMoved, moved;
|
public boolean wasMoved, moved;
|
||||||
public float transportCounter;
|
public float transportCounter;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void pickedUp(){
|
||||||
|
link = -1;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void playerPlaced(Object config){
|
public void playerPlaced(Object config){
|
||||||
super.playerPlaced(config);
|
super.playerPlaced(config);
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ public class MassDriver extends Block{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//align to shooter rotation
|
//align to shooter rotation
|
||||||
rotation = Angles.moveToward(rotation, tile.angleTo(currentShooter()), rotateSpeed * efficiency());
|
rotation = Angles.moveToward(rotation, angleTo(currentShooter()), rotateSpeed * efficiency());
|
||||||
}else if(state == DriverState.shooting){
|
}else if(state == DriverState.shooting){
|
||||||
//if there's nothing to shoot at OR someone wants to shoot at this thing, bail
|
//if there's nothing to shoot at OR someone wants to shoot at this thing, bail
|
||||||
if(!hasLink || (!waitingShooters.isEmpty() && (itemCapacity - items.total() >= minDistribute))){
|
if(!hasLink || (!waitingShooters.isEmpty() && (itemCapacity - items.total() >= minDistribute))){
|
||||||
@@ -173,7 +173,7 @@ public class MassDriver extends Block{
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
float targetRotation = tile.angleTo(link);
|
float targetRotation = angleTo(link);
|
||||||
|
|
||||||
if(
|
if(
|
||||||
items.total() >= minDistribute && //must shoot minimum amount of items
|
items.total() >= minDistribute && //must shoot minimum amount of items
|
||||||
|
|||||||
@@ -126,6 +126,10 @@ public class PayloadConveyor extends Block{
|
|||||||
public void updateTile(){
|
public void updateTile(){
|
||||||
if(!enabled) return;
|
if(!enabled) return;
|
||||||
|
|
||||||
|
if(item != null){
|
||||||
|
item.update(false);
|
||||||
|
}
|
||||||
|
|
||||||
lastInterp = curInterp;
|
lastInterp = curInterp;
|
||||||
curInterp = fract();
|
curInterp = fract();
|
||||||
//rollover skip
|
//rollover skip
|
||||||
@@ -231,6 +235,11 @@ public class PayloadConveyor extends Block{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void payloadDraw(){
|
||||||
|
Draw.rect(block.fullIcon,x, y);
|
||||||
|
}
|
||||||
|
|
||||||
public float time(){
|
public float time(){
|
||||||
return Time.time;
|
return Time.time;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ public class Sorter extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void buildConfiguration(Table table){
|
public void buildConfiguration(Table table){
|
||||||
ItemSelection.buildTable(table, content.items(), () -> sortItem, this::configure);
|
ItemSelection.buildTable(Sorter.this, table, content.items(), () -> sortItem, this::configure);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ public class StackConveyor extends Block implements Autotiler{
|
|||||||
hasItems = true;
|
hasItems = true;
|
||||||
itemCapacity = 10;
|
itemCapacity = 10;
|
||||||
conveyorPlacement = true;
|
conveyorPlacement = true;
|
||||||
|
highUnloadPriority = true;
|
||||||
|
|
||||||
ambientSound = Sounds.conveyor;
|
ambientSound = Sounds.conveyor;
|
||||||
ambientSoundVolume = 0.004f;
|
ambientSoundVolume = 0.004f;
|
||||||
@@ -312,7 +313,7 @@ public class StackConveyor extends Block implements Autotiler{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean acceptItem(Building source, Item item){
|
public boolean acceptItem(Building source, Item item){
|
||||||
if(this == source) return true; //player threw items
|
if(this == source) return items.total() < itemCapacity && (!items.any() || items.has(item)); //player threw items
|
||||||
if(cooldown > recharge - 1f) return false; //still cooling down
|
if(cooldown > recharge - 1f) return false; //still cooling down
|
||||||
return !((state != stateLoad) //not a loading dock
|
return !((state != stateLoad) //not a loading dock
|
||||||
|| (items.any() && !items.has(item)) //incompatible items
|
|| (items.any() && !items.has(item)) //incompatible items
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ public class Conduit extends LiquidBlock implements Autotiler{
|
|||||||
|
|
||||||
public class ConduitBuild extends LiquidBuild implements ChainedBuilding{
|
public class ConduitBuild extends LiquidBuild implements ChainedBuilding{
|
||||||
public float smoothLiquid;
|
public float smoothLiquid;
|
||||||
public int blendbits, xscl, yscl, blending;
|
public int blendbits, xscl = 1, yscl = 1, blending;
|
||||||
public boolean capped;
|
public boolean capped;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ public class MessageBlock extends Block{
|
|||||||
dialog.hide();
|
dialog.hide();
|
||||||
}).size(130f, 60f);
|
}).size(130f, 60f);
|
||||||
dialog.update(() -> {
|
dialog.update(() -> {
|
||||||
if(tile.block() != MessageBlock.this){
|
if(tile.build != this){
|
||||||
dialog.hide();
|
dialog.hide();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ public abstract class BlockProducer extends PayloadBlock{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateTile(){
|
public void updateTile(){
|
||||||
|
super.updateTile();
|
||||||
var recipe = recipe();
|
var recipe = recipe();
|
||||||
boolean produce = recipe != null && consValid() && payload == null;
|
boolean produce = recipe != null && consValid() && payload == null;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package mindustry.world.blocks.payloads;
|
package mindustry.world.blocks.payloads;
|
||||||
|
|
||||||
import arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
|
import arc.math.*;
|
||||||
import arc.util.io.*;
|
import arc.util.io.*;
|
||||||
import mindustry.game.*;
|
import mindustry.game.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
@@ -15,6 +16,7 @@ public class BuildPayload implements Payload{
|
|||||||
|
|
||||||
public BuildPayload(Block block, Team team){
|
public BuildPayload(Block block, Team team){
|
||||||
this.build = block.newBuilding().create(block, team);
|
this.build = block.newBuilding().create(block, team);
|
||||||
|
this.build.tile = emptyTile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BuildPayload(Building build){
|
public BuildPayload(Building build){
|
||||||
@@ -34,6 +36,14 @@ public class BuildPayload implements Payload{
|
|||||||
build.dropped();
|
build.dropped();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(boolean inUnit){
|
||||||
|
if(inUnit && !build.block.updateInUnits) return;
|
||||||
|
|
||||||
|
if(build.tile == null) build.tile = emptyTile;
|
||||||
|
build.update();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack[] requirements(){
|
public ItemStack[] requirements(){
|
||||||
return build.block.requirements;
|
return build.block.requirements;
|
||||||
@@ -80,7 +90,10 @@ public class BuildPayload implements Payload{
|
|||||||
@Override
|
@Override
|
||||||
public void draw(){
|
public void draw(){
|
||||||
drawShadow(1f);
|
drawShadow(1f);
|
||||||
Draw.rect(build.block.fullIcon, build.x, build.y);
|
float prevZ = Draw.z();
|
||||||
|
Draw.zTransform(z -> 0.0011f + Mathf.clamp(z, prevZ - 0.001f, prevZ + 0.9f));
|
||||||
|
build.payloadDraw();
|
||||||
|
Draw.zTransform();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import arc.scene.ui.layout.*;
|
|||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import arc.util.io.*;
|
import arc.util.io.*;
|
||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
|
import mindustry.gen.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
import mindustry.world.blocks.*;
|
import mindustry.world.blocks.*;
|
||||||
import mindustry.world.blocks.storage.*;
|
import mindustry.world.blocks.storage.*;
|
||||||
@@ -54,7 +55,18 @@ public class Constructor extends BlockProducer{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void buildConfiguration(Table table){
|
public void buildConfiguration(Table table){
|
||||||
ItemSelection.buildTable(table, content.blocks().select(Constructor.this::canProduce), () -> recipe, this::configure);
|
ItemSelection.buildTable(Constructor.this, table, content.blocks().select(Constructor.this::canProduce), () -> recipe, this::configure);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onConfigureTileTapped(Building other){
|
||||||
|
if(this == other){
|
||||||
|
deselect();
|
||||||
|
configure(null);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ public interface Payload extends Position{
|
|||||||
/** @return the time taken to build this payload. */
|
/** @return the time taken to build this payload. */
|
||||||
float buildTime();
|
float buildTime();
|
||||||
|
|
||||||
|
/** update this payload if it is a block
|
||||||
|
* @param inUnit whether this payload is in a unit */
|
||||||
|
default void update(boolean inUnit){}
|
||||||
|
|
||||||
/** @return whether this payload was dumped. */
|
/** @return whether this payload was dumped. */
|
||||||
default boolean dump(){
|
default boolean dump(){
|
||||||
return false;
|
return false;
|
||||||
@@ -94,6 +98,7 @@ public interface Payload extends Position{
|
|||||||
BuildPayload payload = new BuildPayload(block, Team.derelict);
|
BuildPayload payload = new BuildPayload(block, Team.derelict);
|
||||||
byte version = read.b();
|
byte version = read.b();
|
||||||
payload.build.readAll(read, version);
|
payload.build.readAll(read, version);
|
||||||
|
payload.build.tile = emptyTile;
|
||||||
return (T)payload;
|
return (T)payload;
|
||||||
}else if(type == payloadUnit){
|
}else if(type == payloadUnit){
|
||||||
byte id = read.b();
|
byte id = read.b();
|
||||||
|
|||||||
@@ -135,6 +135,13 @@ public class PayloadBlock extends Block{
|
|||||||
if(payload != null && !carried) payload.dump();
|
if(payload != null && !carried) payload.dump();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateTile(){
|
||||||
|
if(payload != null){
|
||||||
|
payload.update(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public boolean blends(int direction){
|
public boolean blends(int direction){
|
||||||
return PayloadBlock.blends(this, direction);
|
return PayloadBlock.blends(this, direction);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ public class PayloadDeconstructor extends PayloadBlock{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateTile(){
|
public void updateTile(){
|
||||||
|
super.updateTile();
|
||||||
if(items.total() > 0){
|
if(items.total() > 0){
|
||||||
for(int i = 0; i < dumpRate; i++){
|
for(int i = 0; i < dumpRate; i++){
|
||||||
dumpAccumulate();
|
dumpAccumulate();
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package mindustry.world.blocks.payloads;
|
|||||||
import arc.*;
|
import arc.*;
|
||||||
import arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
|
import arc.util.io.*;
|
||||||
import mindustry.entities.units.*;
|
import mindustry.entities.units.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
@@ -58,6 +59,7 @@ public class PayloadLoader extends PayloadBlock{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class PayloadLoaderBuild extends PayloadBlockBuild<BuildPayload>{
|
public class PayloadLoaderBuild extends PayloadBlockBuild<BuildPayload>{
|
||||||
|
public boolean exporting = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean acceptPayload(Building source, Payload payload){
|
public boolean acceptPayload(Building source, Payload payload){
|
||||||
@@ -68,6 +70,12 @@ public class PayloadLoader extends PayloadBlock{
|
|||||||
build.build.block().hasLiquids && build.block().liquidCapacity >= 10f);
|
build.build.block().hasLiquids && build.block().liquidCapacity >= 10f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handlePayload(Building source, Payload payload){
|
||||||
|
super.handlePayload(source, payload);
|
||||||
|
exporting = false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean acceptItem(Building source, Item item){
|
public boolean acceptItem(Building source, Item item){
|
||||||
return items.total() < itemCapacity;
|
return items.total() < itemCapacity;
|
||||||
@@ -103,6 +111,7 @@ public class PayloadLoader extends PayloadBlock{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateTile(){
|
public void updateTile(){
|
||||||
|
super.updateTile();
|
||||||
if(shouldExport()){
|
if(shouldExport()){
|
||||||
moveOutPayload();
|
moveOutPayload();
|
||||||
}else if(moveInPayload()){
|
}else if(moveInPayload()){
|
||||||
@@ -120,6 +129,9 @@ public class PayloadLoader extends PayloadBlock{
|
|||||||
payload.build.handleItem(payload.build, item);
|
payload.build.handleItem(payload.build, item);
|
||||||
items.remove(item, 1);
|
items.remove(item, 1);
|
||||||
break;
|
break;
|
||||||
|
}else if(payload.block().separateItemCapacity || payload.block().consumes.consumesItem(item)){
|
||||||
|
exporting = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -147,11 +159,28 @@ public class PayloadLoader extends PayloadBlock{
|
|||||||
|
|
||||||
public boolean shouldExport(){
|
public boolean shouldExport(){
|
||||||
return payload != null && (
|
return payload != null && (
|
||||||
|
exporting ||
|
||||||
(payload.block().hasLiquids && payload.build.liquids.total() >= payload.block().liquidCapacity - 0.001f) ||
|
(payload.block().hasLiquids && payload.build.liquids.total() >= payload.block().liquidCapacity - 0.001f) ||
|
||||||
(payload.block().hasItems &&
|
(payload.block().hasItems && payload.block().separateItemCapacity && content.items().contains(i -> payload.build.items.get(i) >= payload.block().itemCapacity)));
|
||||||
payload.block().separateItemCapacity ?
|
}
|
||||||
content.items().contains(i -> payload.build.items.get(i) >= payload.block().itemCapacity) :
|
|
||||||
payload.build.items.total() >= payload.block().itemCapacity));
|
@Override
|
||||||
|
public byte version(){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(Writes write){
|
||||||
|
super.write(write);
|
||||||
|
write.bool(exporting);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void read(Reads read, byte revision){
|
||||||
|
super.read(read, revision);
|
||||||
|
if(revision >= 1){
|
||||||
|
exporting = read.bool();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ public class PayloadMassDriver extends PayloadBlock{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateTile(){
|
public void updateTile(){
|
||||||
|
super.updateTile();
|
||||||
Building link = world.build(this.link);
|
Building link = world.build(this.link);
|
||||||
boolean hasLink = linkValid();
|
boolean hasLink = linkValid();
|
||||||
|
|
||||||
@@ -233,7 +234,7 @@ public class PayloadMassDriver extends PayloadBlock{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//align to shooter rotation
|
//align to shooter rotation
|
||||||
turretRotation = Angles.moveToward(turretRotation, tile.angleTo(currentShooter()), rotateSpeed * efficiency());
|
turretRotation = Angles.moveToward(turretRotation, angleTo(currentShooter()), rotateSpeed * efficiency());
|
||||||
}else if(state == shooting){
|
}else if(state == shooting){
|
||||||
//if there's nothing to shoot at OR someone wants to shoot at this thing, bail
|
//if there's nothing to shoot at OR someone wants to shoot at this thing, bail
|
||||||
if(!hasLink || (!waitingShooters.isEmpty() && payload == null)){
|
if(!hasLink || (!waitingShooters.isEmpty() && payload == null)){
|
||||||
@@ -241,7 +242,7 @@ public class PayloadMassDriver extends PayloadBlock{
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
float targetRotation = tile.angleTo(link);
|
float targetRotation = angleTo(link);
|
||||||
boolean movedOut = false;
|
boolean movedOut = false;
|
||||||
|
|
||||||
payRotation = Angles.moveToward(payRotation, turretRotation, payloadRotateSpeed * delta());
|
payRotation = Angles.moveToward(payRotation, turretRotation, payloadRotateSpeed * delta());
|
||||||
|
|||||||
@@ -85,12 +85,23 @@ public class PayloadSource extends PayloadBlock{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void buildConfiguration(Table table){
|
public void buildConfiguration(Table table){
|
||||||
ItemSelection.buildTable(table,
|
ItemSelection.buildTable(PayloadSource.this, table,
|
||||||
content.blocks().select(PayloadSource.this::canProduce).<UnlockableContent>as()
|
content.blocks().select(PayloadSource.this::canProduce).<UnlockableContent>as()
|
||||||
.and(content.units().select(PayloadSource.this::canProduce).as()),
|
.and(content.units().select(PayloadSource.this::canProduce).as()),
|
||||||
() -> (UnlockableContent)config(), this::configure);
|
() -> (UnlockableContent)config(), this::configure);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onConfigureTileTapped(Building other){
|
||||||
|
if(this == other){
|
||||||
|
deselect();
|
||||||
|
configure(null);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object config(){
|
public Object config(){
|
||||||
return unit == null ? block : unit;
|
return unit == null ? block : unit;
|
||||||
@@ -103,6 +114,7 @@ public class PayloadSource extends PayloadBlock{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateTile(){
|
public void updateTile(){
|
||||||
|
super.updateTile();
|
||||||
if(payload == null){
|
if(payload == null){
|
||||||
scl = 0f;
|
scl = 0f;
|
||||||
if(unit != null){
|
if(unit != null){
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ public class PayloadUnloader extends PayloadLoader{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateTile(){
|
public void updateTile(){
|
||||||
|
super.updateTile();
|
||||||
if(shouldExport()){
|
if(shouldExport()){
|
||||||
//one-use, disposable block
|
//one-use, disposable block
|
||||||
if(payload.block().instantDeconstruct){
|
if(payload.block().instantDeconstruct){
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ public class PayloadVoid extends PayloadBlock{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateTile(){
|
public void updateTile(){
|
||||||
|
super.updateTile();
|
||||||
if(moveInPayload(false) && cons.valid()){
|
if(moveInPayload(false) && cons.valid()){
|
||||||
payload = null;
|
payload = null;
|
||||||
incinerateEffect.at(this);
|
incinerateEffect.at(this);
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ public class ImpactReactor extends PowerGenerator{
|
|||||||
|
|
||||||
if(warmup < 0.3f || !state.rules.reactorExplosions) return;
|
if(warmup < 0.3f || !state.rules.reactorExplosions) return;
|
||||||
|
|
||||||
Sounds.explosionbig.at(tile);
|
Sounds.explosionbig.at(this);
|
||||||
|
|
||||||
Damage.damage(x, y, explosionRadius * tilesize, explosionDamage * 4);
|
Damage.damage(x, y, explosionRadius * tilesize, explosionDamage * 4);
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ public class NuclearReactor extends PowerGenerator{
|
|||||||
|
|
||||||
public NuclearReactor(String name){
|
public NuclearReactor(String name){
|
||||||
super(name);
|
super(name);
|
||||||
|
updateInUnits = false;
|
||||||
itemCapacity = 30;
|
itemCapacity = 30;
|
||||||
liquidCapacity = 30;
|
liquidCapacity = 30;
|
||||||
hasItems = true;
|
hasItems = true;
|
||||||
@@ -76,6 +77,7 @@ public class NuclearReactor extends PowerGenerator{
|
|||||||
|
|
||||||
public class NuclearReactorBuild extends GeneratorBuild{
|
public class NuclearReactorBuild extends GeneratorBuild{
|
||||||
public float heat;
|
public float heat;
|
||||||
|
public float flash;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateTile(){
|
public void updateTile(){
|
||||||
@@ -130,13 +132,14 @@ public class NuclearReactor extends PowerGenerator{
|
|||||||
public void onDestroyed(){
|
public void onDestroyed(){
|
||||||
super.onDestroyed();
|
super.onDestroyed();
|
||||||
|
|
||||||
Sounds.explosionbig.at(tile);
|
Sounds.explosionbig.at(this);
|
||||||
|
|
||||||
int fuel = items.get(consumes.<ConsumeItems>get(ConsumeType.item).items[0].item);
|
int fuel = items.get(consumes.<ConsumeItems>get(ConsumeType.item).items[0].item);
|
||||||
|
|
||||||
if((fuel < 5 && heat < 0.5f) || !state.rules.reactorExplosions) return;
|
if((fuel < 5 && heat < 0.5f) || !state.rules.reactorExplosions) return;
|
||||||
|
|
||||||
Effect.shake(6f, 16f, x, y);
|
Effect.shake(6f, 16f, x, y);
|
||||||
|
// * ((float)fuel / itemCapacity) to scale based on fullness
|
||||||
Damage.damage(x, y, explosionRadius * tilesize, explosionDamage * 4);
|
Damage.damage(x, y, explosionRadius * tilesize, explosionDamage * 4);
|
||||||
|
|
||||||
explodeEffect.at(x, y);
|
explodeEffect.at(x, y);
|
||||||
@@ -160,10 +163,9 @@ public class NuclearReactor extends PowerGenerator{
|
|||||||
Draw.rect(topRegion, x, y);
|
Draw.rect(topRegion, x, y);
|
||||||
|
|
||||||
if(heat > flashThreshold){
|
if(heat > flashThreshold){
|
||||||
float flash = 1f + ((heat - flashThreshold) / (1f - flashThreshold)) * 5.4f;
|
flash += (1f + ((heat - flashThreshold) / (1f - flashThreshold)) * 5.4f) * Time.delta;
|
||||||
flash += flash * Time.delta;
|
|
||||||
Draw.color(Color.red, Color.yellow, Mathf.absin(flash, 9f, 1f));
|
Draw.color(Color.red, Color.yellow, Mathf.absin(flash, 9f, 1f));
|
||||||
Draw.alpha(0.6f);
|
Draw.alpha(0.3f);
|
||||||
Draw.rect(lightsRegion, x, y);
|
Draw.rect(lightsRegion, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public class PowerDiode extends Block{
|
|||||||
public void updateTile(){
|
public void updateTile(){
|
||||||
super.updateTile();
|
super.updateTile();
|
||||||
|
|
||||||
if(front() == null || back() == null || !back().block.hasPower || !front().block.hasPower || back().team != front().team) return;
|
if(tile == null || front() == null || back() == null || !back().block.hasPower || !front().block.hasPower || back().team != front().team) return;
|
||||||
|
|
||||||
PowerGraph backGraph = back().power.graph;
|
PowerGraph backGraph = back().power.graph;
|
||||||
PowerGraph frontGraph = front().power.graph;
|
PowerGraph frontGraph = front().power.graph;
|
||||||
|
|||||||
@@ -280,6 +280,13 @@ public class PowerGraph{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void clear(){
|
||||||
|
all.clear();
|
||||||
|
producers.clear();
|
||||||
|
consumers.clear();
|
||||||
|
batteries.clear();
|
||||||
|
}
|
||||||
|
|
||||||
public void reflow(Building tile){
|
public void reflow(Building tile){
|
||||||
queue.clear();
|
queue.clear();
|
||||||
queue.addLast(tile);
|
queue.addLast(tile);
|
||||||
|
|||||||
@@ -444,7 +444,7 @@ public class PowerNode extends PowerBlock{
|
|||||||
public void draw(){
|
public void draw(){
|
||||||
super.draw();
|
super.draw();
|
||||||
|
|
||||||
if(Mathf.zero(Renderer.laserOpacity)) return;
|
if(Mathf.zero(Renderer.laserOpacity) || isPayload()) return;
|
||||||
|
|
||||||
Draw.z(Layer.power);
|
Draw.z(Layer.power);
|
||||||
setupColor(power.graph.getSatisfaction());
|
setupColor(power.graph.getSatisfaction());
|
||||||
|
|||||||
@@ -52,6 +52,11 @@ public class AttributeCrafter extends GenericCrafter{
|
|||||||
return baseEfficiency + Math.min(maxBoost, boostScale * attrsum) + attribute.env();
|
return baseEfficiency + Math.min(maxBoost, boostScale * attrsum) + attribute.env();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void pickedUp(){
|
||||||
|
attrsum = 0f;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onProximityUpdate(){
|
public void onProximityUpdate(){
|
||||||
super.onProximityUpdate();
|
super.onProximityUpdate();
|
||||||
|
|||||||
@@ -243,6 +243,11 @@ public class Drill extends Block{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void pickedUp(){
|
||||||
|
dominantItem = null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onProximityUpdate(){
|
public void onProximityUpdate(){
|
||||||
super.onProximityUpdate();
|
super.onProximityUpdate();
|
||||||
|
|||||||
@@ -91,6 +91,11 @@ public class Pump extends LiquidBlock{
|
|||||||
Drawf.liquid(liquidRegion, x, y, liquids.currentAmount() / liquidCapacity, liquids.current().color);
|
Drawf.liquid(liquidRegion, x, y, liquids.currentAmount() / liquidCapacity, liquids.current().color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void pickedUp(){
|
||||||
|
amount = 0f;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onProximityUpdate(){
|
public void onProximityUpdate(){
|
||||||
super.onProximityUpdate();
|
super.onProximityUpdate();
|
||||||
|
|||||||
@@ -95,6 +95,11 @@ public class SolidPump extends Pump{
|
|||||||
@Override
|
@Override
|
||||||
public void drawCracks(){}
|
public void drawCracks(){}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void pickedUp(){
|
||||||
|
boost = validTiles = 0f;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(){
|
public void draw(){
|
||||||
Draw.rect(region, x, y);
|
Draw.rect(region, x, y);
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ public class ItemSource extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void buildConfiguration(Table table){
|
public void buildConfiguration(Table table){
|
||||||
ItemSelection.buildTable(table, content.items(), () -> outputItem, this::configure);
|
ItemSelection.buildTable(ItemSource.this, table, content.items(), () -> outputItem, this::configure);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ public class LiquidSource extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void buildConfiguration(Table table){
|
public void buildConfiguration(Table table){
|
||||||
ItemSelection.buildTable(table, content.liquids(), () -> source, this::configure);
|
ItemSelection.buildTable(LiquidSource.this, table, content.liquids(), () -> source, this::configure);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ public class StorageBlock extends Block{
|
|||||||
flags = EnumSet.of(BlockFlag.storage);
|
flags = EnumSet.of(BlockFlag.storage);
|
||||||
allowResupply = true;
|
allowResupply = true;
|
||||||
envEnabled = Env.any;
|
envEnabled = Env.any;
|
||||||
|
highUnloadPriority = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package mindustry.world.blocks.storage;
|
|||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import arc.util.io.*;
|
import arc.util.io.*;
|
||||||
import mindustry.entities.units.*;
|
import mindustry.entities.units.*;
|
||||||
@@ -54,56 +55,131 @@ public class Unloader extends Block{
|
|||||||
public class UnloaderBuild extends Building{
|
public class UnloaderBuild extends Building{
|
||||||
public float unloadTimer = 0f;
|
public float unloadTimer = 0f;
|
||||||
public Item sortItem = null;
|
public Item sortItem = null;
|
||||||
public Building dumpingTo;
|
|
||||||
public int offset = 0;
|
public int offset = 0;
|
||||||
public int[] rotations;
|
public int rotations = 0;
|
||||||
|
public Seq<ContainerStat> possibleBlocks = new Seq<>();
|
||||||
|
|
||||||
|
public class ContainerStat{
|
||||||
|
Building building;
|
||||||
|
float loadFactor;
|
||||||
|
boolean canLoad;
|
||||||
|
boolean canUnload;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateTile(){
|
public void updateTile(){
|
||||||
if((unloadTimer += delta()) >= speed){
|
if(((unloadTimer += delta()) < speed) || (proximity.size < 2)) return;
|
||||||
boolean any = false;
|
Item item = null;
|
||||||
if(rotations == null || rotations.length != proximity.size){
|
boolean any = false;
|
||||||
rotations = new int[proximity.size];
|
int itemslength = content.items().size;
|
||||||
|
|
||||||
|
//initialize possibleBlocks only if the new size is bigger than the previous, to avoid unnecessary allocations
|
||||||
|
if(possibleBlocks.size != proximity.size){
|
||||||
|
int tmp = possibleBlocks.size;
|
||||||
|
possibleBlocks.setSize(proximity.size);
|
||||||
|
for(int i = tmp; i < proximity.size; i++){
|
||||||
|
possibleBlocks.set(i, new ContainerStat());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sortItem != null){
|
||||||
|
item = sortItem;
|
||||||
|
|
||||||
|
for(int pos = 0; pos < proximity.size; pos++){
|
||||||
|
var other = proximity.get(pos);
|
||||||
|
boolean interactable = other.interactable(team);
|
||||||
|
|
||||||
|
//set the stats of all buildings in possibleBlocks
|
||||||
|
ContainerStat pb = possibleBlocks.get(pos);
|
||||||
|
pb.building = other;
|
||||||
|
pb.canUnload = interactable && other.canUnload() && other.items != null && other.items.has(sortItem);
|
||||||
|
pb.canLoad = interactable && !(other.block instanceof StorageBlock) && other.acceptItem(this, sortItem);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
//select the next item for nulloaders
|
||||||
|
//inspired of nextIndex() but for all proximity at once, and also way more powerful
|
||||||
|
for(int i = 0; i < itemslength; i++){
|
||||||
|
int total = (rotations + i + 1) % itemslength;
|
||||||
|
boolean hasProvider = false;
|
||||||
|
boolean hasReceiver = false;
|
||||||
|
boolean isDistinct = false;
|
||||||
|
Item possibleItem = content.item(total);
|
||||||
|
|
||||||
|
for(int pos = 0; pos < proximity.size; pos++){
|
||||||
|
var other = proximity.get(pos);
|
||||||
|
boolean interactable = other.interactable(team);
|
||||||
|
|
||||||
|
//set the stats of all buildings in possibleBlocks while we are at it
|
||||||
|
ContainerStat pb = possibleBlocks.get(pos);
|
||||||
|
pb.building = other;
|
||||||
|
pb.canUnload = interactable && other.canUnload() && other.items != null && other.items.has(possibleItem);
|
||||||
|
pb.canLoad = interactable && !(other.block instanceof StorageBlock) && other.acceptItem(this, possibleItem);
|
||||||
|
|
||||||
|
//the part handling framerate issues and slow conveyor belts, to avoid skipping items
|
||||||
|
if(hasProvider && pb.canLoad) isDistinct = true;
|
||||||
|
if(hasReceiver && pb.canUnload) isDistinct = true;
|
||||||
|
hasProvider = hasProvider || pb.canUnload;
|
||||||
|
hasReceiver = hasReceiver || pb.canLoad;
|
||||||
|
}
|
||||||
|
if(isDistinct){
|
||||||
|
item = possibleItem;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(item != null){
|
||||||
|
//only compute the load factor if a transfer is possible
|
||||||
|
for(int pos = 0; pos < proximity.size; pos++){
|
||||||
|
ContainerStat pb = possibleBlocks.get(pos);
|
||||||
|
var other = pb.building;
|
||||||
|
pb.loadFactor = (other.getMaximumAccepted(item) == 0) || (other.items == null) ? 0 : other.items.get(item) / (float)other.getMaximumAccepted(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < proximity.size; i++){
|
//sort so it gives full priority to blocks that can give but not receive (stackConveyors and Storage), and then by load
|
||||||
int pos = (offset + i) % proximity.size;
|
possibleBlocks.sort(Structs.comps(
|
||||||
var other = proximity.get(pos);
|
Structs.comparingBool(e -> e.building.block.highUnloadPriority),
|
||||||
|
Structs.comparingFloat(e -> e.loadFactor)
|
||||||
|
));
|
||||||
|
|
||||||
if(other.interactable(team) && other.block.unloadable && other.canUnload() && other.block.hasItems
|
ContainerStat dumpingFrom = null;
|
||||||
&& ((sortItem == null && other.items.total() > 0) || (sortItem != null && other.items.has(sortItem)))){
|
ContainerStat dumpingTo = null;
|
||||||
//make sure the item can't be dumped back into this block
|
|
||||||
dumpingTo = other;
|
|
||||||
|
|
||||||
//get item to be taken
|
//choose the building to accept the item
|
||||||
Item item = sortItem == null ? other.items.takeIndex(rotations[pos]) : sortItem;
|
for(int i = 0; i < possibleBlocks.size; i++){
|
||||||
|
if(possibleBlocks.get(i).canLoad){
|
||||||
//remove item if it's dumped correctly
|
dumpingTo = possibleBlocks.get(i);
|
||||||
if(put(item)){
|
break;
|
||||||
other.items.remove(item, 1);
|
|
||||||
any = true;
|
|
||||||
|
|
||||||
if(sortItem == null){
|
|
||||||
rotations[pos] = item.id + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
other.itemTaken(item);
|
|
||||||
}else if(sortItem == null){
|
|
||||||
rotations[pos] = other.items.nextIndex(rotations[pos]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(any){
|
//choose the building to give the item
|
||||||
unloadTimer %= speed;
|
for(int i = possibleBlocks.size - 1; i >= 0; i--){
|
||||||
}else{
|
if(possibleBlocks.get(i).canUnload){
|
||||||
unloadTimer = Math.min(unloadTimer, speed);
|
dumpingFrom = possibleBlocks.get(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(proximity.size > 0){
|
//trade the items
|
||||||
offset ++;
|
if(dumpingFrom != null && dumpingTo != null && (dumpingFrom.loadFactor != dumpingTo.loadFactor || dumpingFrom.building.block.highUnloadPriority)){
|
||||||
offset %= proximity.size;
|
dumpingTo.building.handleItem(this, item);
|
||||||
|
dumpingFrom.building.removeStack(item, 1);
|
||||||
|
any = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(sortItem == null) rotations = item.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(any){
|
||||||
|
unloadTimer %= speed;
|
||||||
|
}else{
|
||||||
|
unloadTimer = Math.min(unloadTimer, speed);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(proximity.size > 0){
|
||||||
|
offset++;
|
||||||
|
offset %= proximity.size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,7 +194,7 @@ public class Unloader extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void buildConfiguration(Table table){
|
public void buildConfiguration(Table table){
|
||||||
ItemSelection.buildTable(table, content.items(), () -> sortItem, this::configure);
|
ItemSelection.buildTable(Unloader.this, table, content.items(), () -> sortItem, this::configure);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -132,11 +208,6 @@ public class Unloader extends Block{
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canDump(Building to, Item item){
|
|
||||||
return !(to.block instanceof StorageBlock) && to != dumpingTo;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Item config(){
|
public Item config(){
|
||||||
return sortItem;
|
return sortItem;
|
||||||
|
|||||||
@@ -97,9 +97,9 @@ public class CommandCenter extends Block{
|
|||||||
float size = 6f;
|
float size = 6f;
|
||||||
|
|
||||||
Draw.color(bottomColor);
|
Draw.color(bottomColor);
|
||||||
Draw.rect(commandRegions[team.data().command.ordinal()].getRegion(), tile.drawx(), tile.drawy() - 1, size, size);
|
Draw.rect(commandRegions[team.data().command.ordinal()].getRegion(), x, y - 1, size, size);
|
||||||
Draw.color(topColor == null ? team.color : topColor);
|
Draw.color(topColor == null ? team.color : topColor);
|
||||||
Draw.rect(commandRegions[team.data().command.ordinal()].getRegion(), tile.drawx(), tile.drawy(), size, size);
|
Draw.rect(commandRegions[team.data().command.ordinal()].getRegion(), x, y, size, size);
|
||||||
Draw.color();
|
Draw.color();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -231,7 +231,7 @@ public class Reconstructor extends UnitBlock{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldConsume(){
|
public boolean shouldConsume(){
|
||||||
return constructing();
|
return constructing() && enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UnitType unit(){
|
public UnitType unit(){
|
||||||
|
|||||||
@@ -176,7 +176,7 @@ public class RepairPoint extends Block{
|
|||||||
multiplier = liq.valid(this) ? 1f + liquids.current().heatCapacity * coolantMultiplier : 1f;
|
multiplier = liq.valid(this) ? 1f + liquids.current().heatCapacity * coolantMultiplier : 1f;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(target != null && (target.dead() || target.dst(tile) - target.hitSize/2f > repairRadius || target.health() >= target.maxHealth())){
|
if(target != null && (target.dead() || target.dst(this) - target.hitSize/2f > repairRadius || target.health() >= target.maxHealth())){
|
||||||
target = null;
|
target = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -160,12 +160,23 @@ public class UnitFactory extends UnitBlock{
|
|||||||
Seq<UnitType> units = Seq.with(plans).map(u -> u.unit).filter(u -> u.unlockedNow() && !u.isBanned());
|
Seq<UnitType> units = Seq.with(plans).map(u -> u.unit).filter(u -> u.unlockedNow() && !u.isBanned());
|
||||||
|
|
||||||
if(units.any()){
|
if(units.any()){
|
||||||
ItemSelection.buildTable(table, units, () -> currentPlan == -1 ? null : plans.get(currentPlan).unit, unit -> configure(plans.indexOf(u -> u.unit == unit)));
|
ItemSelection.buildTable(UnitFactory.this, table, units, () -> currentPlan == -1 ? null : plans.get(currentPlan).unit, unit -> configure(plans.indexOf(u -> u.unit == unit)));
|
||||||
}else{
|
}else{
|
||||||
table.table(Styles.black3, t -> t.add("@none").color(Color.lightGray));
|
table.table(Styles.black3, t -> t.add("@none").color(Color.lightGray));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onConfigureTileTapped(Building other){
|
||||||
|
if(this == other){
|
||||||
|
deselect();
|
||||||
|
configure(null);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean acceptPayload(Building source, Payload payload){
|
public boolean acceptPayload(Building source, Payload payload){
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -68,7 +68,8 @@ public class ConsumePower extends Consume{
|
|||||||
* @return The amount of power which is requested per tick.
|
* @return The amount of power which is requested per tick.
|
||||||
*/
|
*/
|
||||||
public float requestedPower(Building entity){
|
public float requestedPower(Building entity){
|
||||||
if(entity.tile().build == null) return 0f;
|
if(entity == null) return 0f;
|
||||||
|
|
||||||
if(buffered){
|
if(buffered){
|
||||||
return (1f-entity.power.status)*capacity;
|
return (1f-entity.power.status)*capacity;
|
||||||
}else{
|
}else{
|
||||||
|
|||||||
@@ -16,6 +16,14 @@ public class Consumers{
|
|||||||
public final Bits itemFilters = new Bits(Vars.content.items().size);
|
public final Bits itemFilters = new Bits(Vars.content.items().size);
|
||||||
public final Bits liquidfilters = new Bits(Vars.content.liquids().size);
|
public final Bits liquidfilters = new Bits(Vars.content.liquids().size);
|
||||||
|
|
||||||
|
public boolean consumesItem(Item item){
|
||||||
|
return itemFilters.get(item.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean consumesLiquid(Liquid liq){
|
||||||
|
return liquidfilters.get(liq.id);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean any(){
|
public boolean any(){
|
||||||
return results != null && results.length > 0;
|
return results != null && results.length > 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ import mindustry.graphics.*;
|
|||||||
public enum BlockStatus{
|
public enum BlockStatus{
|
||||||
active(Color.valueOf("5ce677")),
|
active(Color.valueOf("5ce677")),
|
||||||
noOutput(Color.orange),
|
noOutput(Color.orange),
|
||||||
noInput(Pal.remove);
|
noInput(Pal.remove),
|
||||||
|
logicDisable(Color.valueOf("8a73c6"));
|
||||||
|
|
||||||
public final Color color;
|
public final Color color;
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,10 @@ public class ConsumeModule extends BlockModule{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public BlockStatus status(){
|
public BlockStatus status(){
|
||||||
|
if(entity.enabledControlTime > 0 && !entity.enabled){
|
||||||
|
return BlockStatus.logicDisable;
|
||||||
|
}
|
||||||
|
|
||||||
if(!entity.shouldConsume()){
|
if(!entity.shouldConsume()){
|
||||||
return BlockStatus.noOutput;
|
return BlockStatus.noOutput;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,4 +24,4 @@ android.useAndroidX=true
|
|||||||
#used for slow jitpack builds; TODO see if this actually works
|
#used for slow jitpack builds; TODO see if this actually works
|
||||||
org.gradle.internal.http.socketTimeout=100000
|
org.gradle.internal.http.socketTimeout=100000
|
||||||
org.gradle.internal.http.connectionTimeout=100000
|
org.gradle.internal.http.connectionTimeout=100000
|
||||||
archash=6c228e534e3950e6254d6e7af4c6db67f834bc1d
|
archash=026c9216c893c9b768748cc63b4c2b8c3739f892
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 706 KiB |
|
Before Width: | Height: | Size: 905 KiB |
|
Before Width: | Height: | Size: 2.0 MiB |
|
Before Width: | Height: | Size: 1.6 MiB |
|
Before Width: | Height: | Size: 1.8 MiB |
|
Before Width: | Height: | Size: 632 KiB |
|
Before Width: | Height: | Size: 2.1 MiB |
|
Before Width: | Height: | Size: 725 KiB |
|
Before Width: | Height: | Size: 598 KiB |
|
Before Width: | Height: | Size: 204 KiB |
@@ -4,8 +4,8 @@
|
|||||||
"address": ["185.104.248.61", "easyplay.su"]
|
"address": ["185.104.248.61", "easyplay.su"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "SMokeOfAnarchy.duckdns.org",
|
"name": "SkaarjDustry",
|
||||||
"address": ["smokeofanarchy.duckdns.org:6853"]
|
"address": ["skaarjproject.duckdns.org"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "{AA}",
|
"name": "{AA}",
|
||||||
@@ -117,6 +117,10 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "MindustryBR",
|
"name": "MindustryBR",
|
||||||
"address": ["mindustryptbr.ddns.net", "mindustryptbr.myddns.me", "mindustry.me:4447"]
|
"address": ["mindustryptbr.ddns.net", "mindustryptbr.myddns.me", "n2.mindustry.me:4002", "n2.mindustry.me:4007"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Conservatory",
|
||||||
|
"address": ["143.198.71.232"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||