Merge branch 'master' of https://github.com/Anuken/Mindustry into v104

This commit is contained in:
Petr Gašparík 2020-02-19 19:16:52 +01:00
commit c60f817f2c
40 changed files with 294 additions and 164 deletions

View File

@ -8,7 +8,7 @@ You may want to add your server to this list. The steps for getting this done ar
1. **Ensure your server is properly moderated.** For the most part, this applies to survival servers, but PvP servers can be affected as well.
You'll need to either hire some moderators, or make use of (currently non-existent) anti-grief and anti-curse plugins.
*Consider enabling a rate limit:* `config messageRateLimit 2` will make it so that players can only send messages every 2 seconds, for example.
2. **Set an approppriate MOTD, name and description.** This is set with `config <name/desc/motd> <value>`. "Approppriate" means that:
2. **Set an appropriate MOTD, name and description.** This is set with `config <name/desc/motd> <value>`. "Appropriate" means that:
- Your name or description must reflect the type of server you're hosting.
Since new players may be exposed to the server list early on, put in a phrase like "Co-op survival" or "PvP" so players know what they're getting into. Yes, this is also displayed in the server mode info text, but having extra info in the name doesn't hurt.
- Make sure players know where to refer to for server support. It should be fairly clear that the server owner is not me, but you.

View File

@ -122,11 +122,11 @@ public class AssetsProcess extends BaseProcessor{
dispose.addStatement("arc.Core.assets.unload(" + filename + ")");
dispose.addStatement(name + " = null");
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
});
if(classname.equals("Sounds")){
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
}
type.addMethod(loadBegin.build());

View File

@ -21,7 +21,7 @@ public class SerializeProcess extends BaseProcessor{
/** Target class name. */
private static final String className = "Serialization";
/** Name of the base package to put all the generated classes. */
private static final String data = "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";
private static final String data = "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";
@Override
public void process(RoundEnvironment env) throws Exception{

View File

@ -39,7 +39,6 @@ be.check = Check for updates
schematic = Schematic
schematic.add = Save Schematic...
schematics = Schematics
schematic.replace = A schematic by that name already exists. Replace it?
schematic.import = Import Schematic...
schematic.exportfile = Export File
schematic.importfile = Import File
@ -65,7 +64,7 @@ stat.rank = Final Rank: [accent]{0}
launcheditems = [accent]Launched Items
launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue.
map.delete = Are you sure you want to delete the map "[accent]{0}[]"?
level.highscore = High Score: [accent]{0}
level.highscore = High Score: [accent]{0}1
level.select = Level Select
level.mode = Gamemode:
showagain = Don't show again next session
@ -664,7 +663,7 @@ setting.borderlesswindow.name = Borderless Window[lightgray] (may require restar
setting.fps.name = Show FPS & Ping
setting.blockselectkeys.name = Show Block Select Keys
setting.vsync.name = VSync
setting.pixelate.name = Pixelate[lightgray] (disables animations)
setting.pixelate.name = Pixelate
setting.minimap.name = Show Minimap
setting.position.name = Show Player Position
setting.musicvol.name = Music Volume

View File

@ -59,6 +59,7 @@ stat.built = Estructuras Construidas:[accent] {0}
stat.destroyed = Estructuras Destruidas:[accent] {0}
stat.deconstructed = Estructuras Desconstruidas:[accent] {0}
stat.delivered = Recursos Lanzados:
stat.playtime= Tiempo jugado:[accent] {0}
stat.rank = Rango final: [accent]{0}
launcheditems = [accent]Recursos Lanzados
@ -104,6 +105,7 @@ mods.none = [LIGHT_GRAY]No se encontraron Mods!
mods.guide = Guia de Modding
mods.report = Reportar Error
mods.openfolder = Abrir carpeta de mods
mod. display = [greay] mod: [orange] {0}
mod.enabled = [lightgray]Activado
mod.disabled = [scarlet]Desactivado
mod.disable = Desactivar
@ -170,6 +172,11 @@ hosts.discovering.any = Descubrir juegos
server.refreshing = Actualizando servidor...
hosts.none = [lightgray]¡No se han encontrado partidas LAN!
host.invalid = [scarlet]No se ha podido conectar al anfitrión.
servers.local = Servidores Locales
servers. remote = Servidores Remotos
servers.global = Global Servers
trace = Rastrear Jugador
trace.playername = Nombre de jugador: [accent]{0}
trace.ip = IP: [accent]{0}
@ -251,6 +258,7 @@ copylink = Copiar Enlace
back = Atrás
data.export = Exportar Datos
data.import = Importar Datos
data.openfolder = Abrir Carpeta de Datos
data.exported = Datos exportados.
data.invalid = Esta data del juego no es valida.
data.import.confirm = Importando los datos externos borrará[scarlet] todo[] tu progreso.\n[accent]Esto no se puede rehacer![]\n\nUna vez que los datos hayan sido importados, el juego saldrá automaticamente.
@ -261,7 +269,7 @@ quit.confirm.tutorial = ¿Estás seguro de que sabes qué estas haciendo?\nSe pu
loading = [accent]Cargando...
reloading = [accent]Recargando mods...
saving = [accent]Guardando...
cancelbuilding = [accent][[{0}][] para impiar el plan
cancelbuilding = [accent][[{0}][] para limpiar el plan
selectschematic = [accent][[{0}][] para seleccionar+copiar
pausebuilding = [accent][[{0}][] para pausar la construcción
resumebuilding = [scarlet][[{0}][] para resumir la construcción
@ -531,6 +539,8 @@ error.crashtitle = Un error ha ocurrido.
blocks.input = Entrada
blocks.output = Salida
blocks.booster = Potenciador
block.tiles = Casillas Requeridas
block.affinities = Afinidades
block.unknown = [LIGHT_GRAY]???
blocks.powercapacity = Capacidad de Energía
blocks.powershot = Energía/Disparo
@ -665,9 +675,11 @@ setting.mutesound.name = Silenciar Sonido
setting.crashreport.name = Enviar informes de fallos anónimos
setting.savecreate.name = Crear puntos de guardado automáticamente
setting.publichost.name = Visibilidad del juego público
setting.playerlimit.name = Limite de Jugadores
setting.chatopacity.name = Opacidad del Chat
setting.lasersopacity.name = Opacidad de los rayos láser
setting.playerchat.name = Mostrar el chat in-game
setting.bridgeopacity.name = Opacidad de Puentes
setting.playerchat.name = Mostrar el chat de burbuja
public.confirm = ¿Quieres hacer público tu juego?\n[lightgray]Esto se puede cambiar más tarde en Configuración->Juego->Visibilidad pública del juego.
public.beta = Recuerda que en las versiones beta del juego no puedes crear partidas públicas.
uiscale.reset = La escala de la interfaz ha sido modificada con éxito.\nPulsa "OK" para conservar esta escala.\n[scarlet]Deshaciendo los cambios y saliendo al menu en [accent] {0}[]segundos...
@ -885,7 +897,7 @@ block.snow.name = Nieve
block.craters.name = Cráteres
block.sand-water.name = Agua con Arena
block.darksand-water.name = Agua con Arena Oscura
block.char.name = Charbonizado
block.char.name = Carbonizado
block.holostone.name = Piedra hologramatica
block.ice-snow.name = Hielo Nieve
block.rocks.name = Rocas
@ -926,7 +938,7 @@ block.door.name = Puerta
block.door-large.name = Puerta Grande
block.duo.name = Dúo
block.scorch.name = Quemador
block.scatter.name = Scatter
block.scatter.name = Dispersor
block.hail.name = Granizo
block.lancer.name = Lancero
block.conveyor.name = Cinta Transportadora
@ -942,6 +954,7 @@ block.message.name = Mensaje
block.illuminator.name = Iluminador
block.illuminator.description = Una fuente de luz pequeña, compacta y configurable. Requiere poder para funcionar.
block.overflow-gate.name = Compuerta de Desborde
block.underflow-gate.name = Compuerta de Subdesbordamiento
block.silicon-smelter.name = Horno para Silicona
block.phase-weaver.name = Tejedor de Fase
block.pulverizer.name = Pulverizador
@ -983,8 +996,8 @@ block.power-void.name = Vacío de energía
block.power-source.name = Energía Infinita
block.unloader.name = Descargador
block.vault.name = Bóveda
block.wave.name = Horda
block.swarmer.name = Enjambredor
block.wave.name = Ola
block.swarmer.name = Enjambre
block.salvo.name = Salva
block.ripple.name = Onda
block.phase-conveyor.name = Cinta Transportadora de Fase
@ -1057,7 +1070,7 @@ unit.revenant.name = Revenante
unit.eruptor.name = Erupcionador
unit.chaos-array.name = Matriz del caos
unit.eradicator.name = Erradicador
unit.lich.name = Lich
unit.lich.name = Exánime
unit.reaper.name = Segador
tutorial.next = [lightgray]<Toca para continuar>
tutorial.intro = Has entrado en el[scarlet]Tutorial de Mindustry.[]\nComienza[accent]minando cobre[]. Toca en una veta de cobre cercana al núcleo para hacer esto.\n\n[accent]{0}/{1} cobre
@ -1172,6 +1185,7 @@ block.inverted-sorter.description = Procesa elementos como un clasificador está
block.router.description = Acepta objetos de una dirección y deja objetos equitativamente en hasta 3 direcciones diferentes. Útil para dividir los materiales de una fuente de recursos a múltiples objetivos.
block.distributor.description = Un enrutador avanzado que distribuye objetos equitativamente en hasta otras 7 direcciones.
block.overflow-gate.description = Un enrutador que solo saca por la izquierda y la derecha si la cinta del frente está llena.
block.underflow-gate.description = El opuesto de la compuerda de desborde. Solo dispensa hacia el frente si los lados están bloqueados.
block.mass-driver.description = El mejor bloque de transorte. Recoge varios objetos y los dispara a otro conductor de masa en un largo rango.
block.mechanical-pump.description = Una bomba barata con extracción lenta, pero sin uso de energía.
block.rotary-pump.description = Una bomba avanzada. Bombea más líquido, pero requiere energía.
@ -1199,13 +1213,13 @@ block.solar-panel.description = Proporciona una pequeña cantidad de energía pr
block.solar-panel-large.description = Genera un mucho mejor suministro de energía que un panel solar estándar, pero también es mucho más caro de construir.
block.thorium-reactor.description = Genera grandes cantidades de energía del torio altamente radioactivo. Necesita enfriamiento constante. Explotará violentamente si no se le aporta suficiente enfriamiento.
block.impact-reactor.description = Un generador avanzado, capaz de crear cantidades masivas de energía a máxima eficiencia. Requiere una cantidad significante de energía para impulsar el comienzo del proceso.
block.mechanical-drill.description = Un taladro barato. Cuando es colocado en casillas apropiadas, extrae objetos lentamente de forma indefinida.
block.pneumatic-drill.description = Un taladro mejorado que es más rápido y puede obtener minerales más duros usando la presión.
block.mechanical-drill.description = Un taladro barato. Cuando es colocado en casillas apropiadas, extrae objetos lentamente de forma indefinida. Solo es capaz de minar recursos básicos.
block.pneumatic-drill.description = Un taladro mejorado, es capaz de minar titanio más rápido que un taladro mécanico.
block.laser-drill.description = Permite obtener minerales incluso más rápido con la tecnología láser, pero requiere energía. Además, se puede obtener torio radioactivo con este taladro.
block.blast-drill.description = El mejor taladro. Requiere grandes cantidades de energía.
block.water-extractor.description = Extrae agua de la tierra. Úsalo cuando no haya lagos cercanos.
block.cultivator.description = Cultiva la tierra para obtener biomateria.
block.oil-extractor.description = Usa grandes cantidades de energía para extraer aceite de la arena. Úsalo cuando no hay fuentes directas de aceite cerca.
block.cultivator.description = Cultiva concentraciones de esporas en la atmosfera a vainas.
block.oil-extractor.description = Usa grandes cantidades de energía, arena y agua para obtener petróleo. Úsalo cuando no hay fuentes directas de petróleo cerca.
block.core-shard.description = La primera iteración de la cápsula del núcleo. Una vez destruido, todo el contacto con la región es perdido. No permitas que esto ocurra.
block.core-foundation.description = La segunda versión del núcleo. Mejor blindado. Almacena más recursos.
block.core-nucleus.description = La tercera y última iteración de la cápsula del núcleo. Muy bien blindado. Almacena cantidades masivas dde recursos.
@ -1214,30 +1228,30 @@ block.container.description = Almacena una pequeña cantidad de objetos. Úsalo
block.unloader.description = Descarga objetos de un contenedor, almacén o el núcleo a un transportador o directamente a un bloque adyacente. El tipo de objeto descargado puede ser cambiado tocando el descagador.
block.launch-pad.description = Lanza paquetes de recursos sin necesitar lanzar con el núcleo.
block.launch-pad-large.description = Una versión mejorada del pad de lanzamiento. Almacena más recursos y los lanza más frecuentemente.
block.duo.description = Una torre pequeña y barata.
block.scatter.description = Una torreta antiaérea de tamaño medio. Dispara fuego aéreo de plomo o chatarra a las unidades enemigas.
block.duo.description = Una torre pequeña y barata. Útil contra enemigos terrestres.
block.scatter.description = Una torreta escencial antiaérea de tamaño medio. Dispara fuego anti-aéreo de plomo o chatarra a las unidades enemigas.
block.scorch.description = Quema a cualquier enemigo terrestre cercano a él. Altamente efectivo a corto alcance.
block.hail.description = Una torre de artillería pequeña.
block.wave.description = Una torre de tamaño mediano que dispara burbujas de líquido.
block.lancer.description = Una torre de tamaño mediano que dispara rayos cargados eléctricamente.
block.arc.description = Una torre pequeña que disapra electricidad en un arco aleatorio al enemigo.
block.swarmer.description = Una torre de tamaño mediano que dispara misiles en grupo.
block.salvo.description = Una torre de tramaño mediano que dispara balas en salvos.
block.fuse.description = Una torre grande que dispara rayos poderosos de corto alcance.
block.ripple.description = Una torre de artillería grande que dispara varios disparos simultáneamente.
block.cyclone.description = Una torre de disparo rápido grande.
block.spectre.description = Una torre grande que dispara dos balas poderosas de una vez.
block.meltdown.description = Una torre grande que dispara rayos poderosos de largo alcance.
block.hail.description = Una torre de artillería pequeña de largo alcance.
block.wave.description = Una torre de tamaño mediano. Dispara chorros de líquido a enemigos. Automaticamente apaga fuegos cuando recibe agua.
block.lancer.description = Una torre láser anti-terrestre de tamaño mediano. Dispara y carga poderosos rayos de energía.
block.arc.description = Una pequeña torre eléctrica de rango corto. Dispara arcos de electricidad a los enemigos.
block.swarmer.description = Una torre de tamaño mediano que dispara misiles. Ataca a aire y tierra. Dispara misiles teledirigidos.
block.salvo.description = Una versión más grande y avanzada dela torre dúo. Dispara salvas rápidas al enemigo
block.fuse.description = Una torre grande de energía de corto alcance. Dispara tres rayos perforantes a enemigos cercanos.
block.ripple.description = Una extramadamente poderosa torre. Dispara conjuntos de balas a los enemigos en grandes distancias.
block.cyclone.description = Una torre grande anti-aérea y anti-terrestre. Dispara conjuntos explosivos de Flak a enemigos cercanos.
block.spectre.description = Un cañon masivo de dos barriles. Dispara balas perforantes a objetivos de aire y tierra.
block.meltdown.description = Un cañon láser masivo. Carga y dispara un rayo láser constante a enemigos cercanos. Requiere enfriamiento para operar.
block.command-center.description = Emite comandos de movimiento a las unidades aliadas en el mapa.\nHace que las unidades patrullen, ataquen un núcleo enemigo o se retiren al núcleo / fábrica. When no enemy core is present, units will default to patrolling under the attack command.
block.draug-factory.description = Producedrones mineros primitivos.
block.spirit-factory.description = Produce drones ligeros que obtienen minerales y reparan bloques.
block.phantom-factory.description = Produce drones avanzados que son significativamente más eficientes que un dron espíritu.
block.draug-factory.description = Produce drones mineros primitivos.
block.spirit-factory.description = Produce drones ligeros que reparan bloques.
block.phantom-factory.description = Produce drones avanzados de construcción.
block.wraith-factory.description = Produce unidades aéreas rápidas e interceptoras.
block.ghoul-factory.description = Produce unidades bombarderas pesadas.
block.revenant-factory.description = Produce unidades terrestres láser pesadas.
block.revenant-factory.description = Produce unidades aéreas lanzamisiles pesadas.
block.dagger-factory.description = Produce unidades terrestres básicas.
block.crawler-factory.description = Produces fast self-destructing swarm units.
block.titan-factory.description = Produce unidades terrestres avanzadas.
block.crawler-factory.description = Produce unidades rápidas terrestres explosivas.
block.titan-factory.description = Produce unidades terrestres avanzadas con armadura.
block.fortress-factory.description = Produce unidades terrestres de artillería pesada.
block.repair-point.description = Repara la unidad dañada más cercana a su alrededor.
block.dart-mech-pad.description = Proporciona transformación en un mecanoide de ataque básico.\nÚsalo tocándolo mientras estés en él.

View File

@ -59,6 +59,7 @@ stat.built = Construções construídas:[accent] {0}
stat.destroyed = Construções destruídas:[accent] {0}
stat.deconstructed = Construções desconstruídas:[accent] {0}
stat.delivered = Recursos lançados:
stat.playtime = Tempo jogado:[accent] {0}
stat.rank = Rank Final: [accent]{0}
launcheditems = [accent]Itens lançados
@ -103,7 +104,8 @@ mods = Mods
mods.none = [LIGHT_GRAY]Mods não encontrados!
mods.guide = Guia de mods
mods.report = Reportar Bug
mods.openfolder = Open Mod Folder
mods.openfolder = Abrir pasta de Mods
mod.display = [gray]Mod:[orange] {0}
mod.enabled = [lightgray]Ativado
mod.disabled = [scarlet]Desativado
mod.disable = Desativar
@ -167,9 +169,14 @@ hosting = [accent]Abrindo servidor...
hosts.refresh = Atualizar
hosts.discovering = Descobrindo jogos em lan
hosts.discovering.any = Descobrindo jogos
server.refreshing = Atualizando servidor
server.refreshing = A atualizar servidor
hosts.none = [lightgray]Nenhum jogo lan encontrado!
host.invalid = [scarlet]Não foi possivel Hospedar.
servers.local = Servidores Locais
servers.remote = Servidores Remotos
servers.global = Servidores Globais
trace = Traçar jogador
trace.playername = Nome do jogador: [accent]{0}
trace.ip = IP: [accent]{0}
@ -251,6 +258,7 @@ copylink = Copiar ligação
back = Voltar
data.export = Exportar dados
data.import = Importar dados
data.openfolder = Abrir pasta de dados
data.exported = Dados exportados.
data.invalid = Estes dados de jogo não são válidos.
data.import.confirm = Importar dados externos irá deletar[scarlet] todos[] os seus dados atuais.\n[accent]Isso não pode ser desfeito![]\n\nQuando sua data é importada, seu jogo ira sair imediatamente.
@ -530,6 +538,8 @@ error.title = [crimson]Ocorreu um Erro.
error.crashtitle = Ocorreu um Erro
blocks.input = Entrada
blocks.output = Saida
blocks.tiles = Telhas Requeridas
blocks.affinities = Afinidades
blocks.booster = Booster
block.unknown = [LIGHT_GRAY]???
blocks.powercapacity = Capacidade de Energia
@ -641,14 +651,14 @@ setting.difficulty.insane = Insano
setting.difficulty.name = Dificuldade
setting.screenshake.name = Balanço do Ecrã
setting.effects.name = Efeitos
setting.destroyedblocks.name = Display Destroyed Blocks
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
setting.coreselect.name = Allow Schematic Cores
setting.destroyedblocks.name = Mostrar Blocos Destruidos
setting.conveyorpathfinding.name = Localização do caminho do transportador
setting.coreselect.name = Permitir cores esquemáticas
setting.sensitivity.name = Sensibilidade do Controle
setting.saveinterval.name = Intervalo de autogravamento
setting.seconds = {0} Segundos
setting.blockselecttimeout.name = Block Select Timeout
setting.milliseconds = {0} milliseconds
setting.blockselecttimeout.name = Tempo limite de seleção do bloco
setting.milliseconds = {0} milissegundos
setting.fullscreen.name = Ecrã inteiro
setting.borderlesswindow.name = Janela sem borda[LIGHT_GRAY] (Pode precisar reiniciar)
setting.fps.name = Mostrar FPS
@ -665,8 +675,10 @@ setting.mutesound.name = Desligar Som
setting.crashreport.name = Enviar denuncias de crash anonimas
setting.savecreate.name = Criar gravamentos automaticamente
setting.publichost.name = Visibilidade do jogo público
setting.playerlimit.name = Limite de Jogadores
setting.chatopacity.name = Opacidade do chat
setting.lasersopacity.name = Opacidade do Power Laser
setting.bridgeopacity.name = Opacidade da Ponte
setting.playerchat.name = Mostrar chat em jogo
public.confirm = Queres que o teu jogo fique publico?\n[accent]Qualquer jogador vai conseguir juntar-se ao teu jogo.\n[lightgray]Isto pode ser alterado mais tarde in Settings->Game->Public Game Visibility.
public.beta = Observe que as versões beta do jogo não podem criar lobbies públicos.
@ -942,6 +954,7 @@ block.message.name = Mensagem
block.illuminator.name = Illuminator
block.illuminator.description = A small, compact, configurable light source. Requires power to function.
block.overflow-gate.name = Portão Sobrecarregado
block.underflow-gate.name = Portão Desobrecarregado
block.silicon-smelter.name = Fundidora de silicio
block.phase-weaver.name = Palheta de fase
block.pulverizer.name = Pulverizador
@ -1130,7 +1143,7 @@ block.phase-weaver.description = Produz tecido de fase usando tório radioativo
block.alloy-smelter.description = Combina titânio, chumbo, silicio e cobre para produzir liga de surto.
block.cryofluidmixer.description = Mistura água e pó fino de titânio para produzir criofluido. Essencial para o uso do reator a tório.
block.blast-mixer.description = Quebra e mistura aglomerados de esporos com piratita para produzir composto de explosão.
block.pyratite-mixer.description = Mistura carvão, cobre e areia em piratita altamente inflamável
block.pyratite-mixer.description = Mistura carvão, chumbo e areia em piratita altamente inflamável
block.melter.description = Derrete sucata em escória para processamento posterior ou uso em torretas.
block.separator.description = Separa escória em seus minerais componentes, oferece o resultado refriado.
block.spore-press.description = Comprime cápsulas de esporos em petróleo.
@ -1172,6 +1185,7 @@ block.inverted-sorter.description = Processes items like a standard sorter, but
block.router.description = Aceita itens de uma direção e os divide em 3 direções igualmente. Util para espalhar materiais da fonte para multiplos alvos.
block.distributor.description = Um roteador avancada que espalhas os itens em 7 outras direções igualmente.
block.overflow-gate.description = Uma combinação de roteador e divisor Que apenas manda para a esquerda e Direita se a frente estiver bloqueada.
block.underflow-gate.description = O oposto de um portão de transbordamento. Saídas para a frente se os caminhos esquerdo e direito estiverem bloqueados.
block.mass-driver.description = Bloco de transporte de itens supremo. Coleta itens severos e atira eles em outro mass driver de uma longa distancia.
block.mechanical-pump.description = Uma bomba barata com baixa saída de líquidos, mas sem consumo de energia.
block.rotary-pump.description = Uma bomba avançada. Bombeia mais líquido, mas requer energia.
@ -1246,4 +1260,4 @@ block.tau-mech-pad.description = Deixe sua atual embarcação e mude para o meca
block.omega-mech-pad.description = Deixe sua atual embarcação e mude para o volumoso e bem armadurado meca feito para ataques da primeira linha.\nUse o pad clicando duas vezes em cima enquando fica em cima dele.
block.javelin-ship-pad.description = Deixe sua atual embarcação e mude para um interceptador forte e rapido com armas de raio.\nUse o pad clicando duas vezes em cima enquando fica em cima dele.
block.trident-ship-pad.description = Deixe sua atual embarcação e mude para um bombardeiro resionavelmente bem armadurado.\nUse o pad clicando duas vezes em cima enquando fica em cima dele.
block.glaive-ship-pad.description = Deixe sua atual embarcação e mude para grande, bem armadurada nave de combate.\nUse o pad clicando duas vezes em cima enquando fica em cima dele.
block.glaive-ship-pad.description = Deixe sua atual embarcação e mude para grande, bem armadurada nave de combate.\nUse o pad clicando duas vezes em cima enquando fica em cima dele.

View File

@ -29,17 +29,17 @@ load.system = Sistem
load.mod = Modlar
load.scripts = Scripts
be.update = A new Bleeding Edge build is available:
be.update.confirm = Download it and restart now?
be.updating = Updating...
be.ignore = Ignore
be.noupdates = No updates found.
be.check = Check for updates
be.update = Yeni bir erken erişim sürümü var:
be.update.confirm = Yüklenip yeniden başlatılsın mı?
be.updating = Yeni sürüm yükleniyor...
be.ignore = Hayır
be.noupdates = Yeni güncelleme bulunamadı.
be.check = Güncellemeleri kontrol et
schematic = Şema
schematic.add = Şemayı Kaydet...
schematics = Şemalar
schematic.replace = A schematic by that name already exists. Replace it?
schematic.replace = Aynı isimde bir şema zaten var. Üzerine yazılsın mı?
schematic.import = Şema İçeri Aktar...
schematic.exportfile = Dışa Aktar
schematic.importfile = İçe Aktar
@ -49,8 +49,8 @@ schematic.copy.import = Panodan İçeri Aktar
schematic.shareworkshop = Workshop'ta Kaydet
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Şemayı döndür
schematic.saved = Şema Kaydedildi.
schematic.delete.confirm = Bu şema tamamen yokedilecek.
schematic.rename = Şemayı yeniden Adlandır
schematic.delete.confirm = Bu şema tamamen yok edilecek.
schematic.rename = Şemayı yeniden adlandır
schematic.info = {0}x{1}, {2} blok
stat.wave = Yenilen Dalgalar:[accent] {0}
@ -70,7 +70,7 @@ level.mode = Oyun Modu:
showagain = Bir daha gösterme
coreattack = < Merkez saldırı altında! >
nearpoint = [[ [scarlet]İNİŞ PİSTİNDEN AYRIL[] ]\nimha tehlikesi
database = Ana Veritabanı
database = Çekirdek Veritabanı
savegame = Oyunu Kaydet
loadgame = Oyunu Yükle
joingame = Oyuna Katıl
@ -95,7 +95,7 @@ uploadingcontent = İçerik Yükleniyor
uploadingpreviewfile = Önizleme Dosyası Yükleniyor
committingchanges = Değişiklikler Uygulanıyor
done = Bitti
feature.unsupported = Your device does not support this feature.
feature.unsupported = Cihazınızda bu özellik desteklenmemektedir.
mods.alphainfo = Modların alfa aşamasında olduğunu ve [scarlet]oldukça hatalı olabileceklerini[] unutmayın.\nBulduğunuz sorunları Mindustry GitHub'ı veya Discord'una bildirin.
mods.alpha = [accent](Alpha)
@ -103,29 +103,29 @@ mods = Modlar
mods.none = [LIGHT_GRAY]Hiç mod bulunamadı!
mods.guide = Mod Rehberi
mods.report = Hata bildir
mods.openfolder = Open Mod Folder
mods.openfolder = Mod klasörünü aç
mod.enabled = [lightgray]Etkin
mod.disabled = [scarlet]Devre Dışı
mod.disable = Devre Dışı Bırak
mod.delete.error = Unable to delete mod. File may be in use.
mod.requiresversion = [scarlet]Requires min game version: [accent]{0}
mod.missingdependencies = [scarlet]Missing dependencies: {0}
mod.erroredcontent = [scarlet]Content Errors
mod.errors = Errors have occurred loading content.
mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing.
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled.
mod.delete.error = Mod silinemiyor. Dosya kullanımda olabilir.
mod.requiresversion = [scarlet]Gereken en düşük oun versiyonu: [accent]{0}
mod.missingdependencies = [scarlet]Bu modun çalışması için gereken modlar: {0}
mod.erroredcontent = [scarlet]İçerik hatası.
mod.errors = İçerik yüklenirken bir hata oluştu.
mod.noerrorplay = [scarlet]Hatalı modlarınız var.[] Oynamadan önce bu modları devre dışı bırakın veya dosyadaki hataları düzeltin.
mod.nowdisabled = [scarlet]'{0}' modunun çalışması için gerekli olan modlardan bazıları bulunamadı:[accent] {1}\n[lightgray]Önce bu modların indirilmesi gerekmektedir.\nBu mod otomatik olarak devre dışı bırakılacaktır.
mod.enable = Etkinleştir
mod.requiresrestart = Oyun mod değişikliklerini uygulamak için kapatılacak.
mod.reloadrequired = [scarlet]Yeniden Yükleme Gerekli
mod.import = Mod İçeri Aktar
mod.import.github = GitHub Modu İçeri Aktar
mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod.
mod.item.remove = Bu eşya[accent] '{0}'[] modunun bir parçası. Kaldırmak için modu silebilirsiniz.
mod.remove.confirm = Bu mod silinecek.
mod.author = [LIGHT_GRAY]Yayıncı:[] {0}
mod.missing = Bu kayıt yakın zamanda güncellediğiniz ya da artık yüklü olmayan modlar içermekte. Kayıt bozulmaları yaşanabilir. Kaydı yüklemek istediğinizden emin misiniz?\n[lightgray]Modlar:\n{0}
mod.preview.missing = Bu modu atölyede yayınlamadan önce bir resim önizlemesi eklemelisiniz.\nMod dosyasına [accent]preview.png[] adlı bir resim yerleştirin ve tekrar deneyin.
mod.folder.missing = Atölyede sadece klasör halindeki modlar yayınlanabilir.Bir modu klasöre çevirmek için, sadece mod dosyalarını bir klasöre çıkarın ve eski sıkıştırılmış dosyayı silin, sonra da oyunu tekrar başlatın ya da modlarınızı tekrar yükleyin.
mod.scripts.unsupported = Your device does not support mod scripts. Some mods will not function correctly.
mod.scripts.unsupported = Cihazınız bazı betik dosyalarını desteklemiyor. Bazı modlar düzgün çalışmayabilir.
about.button = Hakkında
name = İsim:
@ -155,7 +155,7 @@ server.kicked.nameEmpty = Seçtiğin isim geçersiz.
server.kicked.idInUse = Zaten bu sunucudasın! İki hesapla bir sunucuya bağlanamazsın.
server.kicked.customClient = Bu sunucu özel sürümleri kabul etmiyor. Resmi bir sürüm indir.
server.kicked.gameover = Oyun bitti!
server.kicked.serverRestarting = The server is restarting.
server.kicked.serverRestarting = Sunucu yeniden başlatılıyor.
server.versions = Kullandığın surum:[accent] {0}[]\nSunucunun sürümü:[accent] {1}[]
host.info = [accent]host[], [scarlet]6567[] portunda bir sunucuya ev sahipliği yapıyor. \nAynı [lightgray]wifi veya yerel ağdaki[] herkes sunucu listelerinde senin sunucunu görebiliyor olmalı.\n\nEğer diğerlerinin herhangi bir yerden IP ile bağlanabilmesini istiyorsan [accent]port yönlendirmesi[] gerekli.\n\n[lightgray]Not: Eğer birisi senin yerel ağ oyununa katılmakta sorun yaşıyorsa güvenlik duvarı ayarlarında Mindustry'ye yerel ağ bağlantısı izni verdiğinden emin olun. Halka açık ağların zaman zaman sunucu aramaya engel olduğunu unutmayın.
join.info = Burada, bağlanmak istediğin sunucunun [accent]IP[] adresini girebilir veya [accent]yerel ağ[] sunucularını görebilirsin..\nHem yerel ağ hem de geniş alan ağı çoklu oyuncu için destekleniyor.\n\n[lightgray]Not: Otomatik bir global sunucu listesi yok; eğer birisine IP adresi kullanarak bağlanmak istiyorsan IP adresini istemelisin.
@ -289,12 +289,12 @@ map.publish.confirm = Bu haritayı yayınlamak istediğinize emin misiniz?\n[lig
workshop.menu = Select what you would like to do with this item.
workshop.info = Nesne Açıklaması
changelog = Değişim Listesi (isteğe bağlı):
eula = Steam EULA
missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked.
eula = Steam Kullanıvı Sözleşmesi
missing = Bu eşya silinmiş veya taşınmış.\n[lightgray]Workshop listesinden kaldırıldı.
publishing = [accent]Yayınlanıyor...
publish.confirm = Bunu yayınlamak istediğinize emin misiniz?\n[lightgray]önce Atölye EULA'sına uyduğunuza emin olun, yoksa yapıtlarınız gözükmeyecektir!
publish.confirm = Bunu yayınlamak istediğinize emin misiniz?\n[lightgray]önce Atölye Sözleşmesine uyduğunuza emin olun, yoksa yapıtlarınız gözükmeyecektir!
publish.error = Nesneyi yayınlarken hata oluştu: {0}
steam.error = Failed to initialize Steam services.\nError: {0}
steam.error = Steam hatası.\nHata kodu: {0}
editor.brush = Fırça
editor.openin = Düzenleyici'de Aç
@ -530,7 +530,7 @@ error.title = [crimson]Bir hata oldu
error.crashtitle = Bir hata oldu
blocks.input = Giriş
blocks.output = Çıkış
blocks.booster = Booster
blocks.booster = Güçlendirici
block.unknown = [lightgray]???
blocks.powercapacity = Enerji Kapasitesi
blocks.powershot = Enerji/Atış
@ -652,7 +652,7 @@ setting.milliseconds = {0} milliseconds
setting.fullscreen.name = Tam Ekran
setting.borderlesswindow.name = Kenarsız Pencere[lightgray] (yeniden açmak gerekebilir)
setting.fps.name = FPS Göster
setting.blockselectkeys.name = Show Block Select Keys
setting.blockselectkeys.name = Blok seçim tüşlarını göster
setting.vsync.name = VSync
setting.pixelate.name = Pixelleştir[lightgray] (animasyonları kapatır)
setting.minimap.name = Haritayı Göster
@ -681,7 +681,7 @@ category.multiplayer.name = Çok Oyunculu
command.attack = Saldır
command.rally = Toplan
command.retreat = Geri Çekil
placement.blockselectkeys = \n[lightgray]Key: [{0},
placement.blockselectkeys = \n[lightgray]Tuş: [{0},
keybind.clear_building.name = Binayı Temizle
keybind.press = Bir tuşa basın...
keybind.press.axis = Bir tuşa ya da yöne basın...
@ -695,22 +695,22 @@ keybind.schematic_select.name = Bölge Seç
keybind.schematic_menu.name = Şema Menüsü
keybind.schematic_flip_x.name = Şemayı X ekseninde Döndür
keybind.schematic_flip_y.name = Şemayı Y Ekseninde Döndür
keybind.category_prev.name = Previous Category
keybind.category_next.name = Next Category
keybind.block_select_left.name = Block Select Left
keybind.block_select_right.name = Block Select Right
keybind.block_select_up.name = Block Select Up
keybind.block_select_down.name = Block Select Down
keybind.block_select_01.name = Category/Block Select 1
keybind.block_select_02.name = Category/Block Select 2
keybind.block_select_03.name = Category/Block Select 3
keybind.block_select_04.name = Category/Block Select 4
keybind.block_select_05.name = Category/Block Select 5
keybind.block_select_06.name = Category/Block Select 6
keybind.block_select_07.name = Category/Block Select 7
keybind.block_select_08.name = Category/Block Select 8
keybind.block_select_09.name = Category/Block Select 9
keybind.block_select_10.name = Category/Block Select 10
keybind.category_prev.name = Önceki Kategori
keybind.category_next.name = Sonraki Kategori
keybind.block_select_left.name = Sol Blok Seçimi
keybind.block_select_right.name = Sağ Blok Seçimi
keybind.block_select_up.name = Yukarı Blok Seçimi
keybind.block_select_down.name = Aşağı Blok Seçimi
keybind.block_select_01.name = Kategori 1
keybind.block_select_02.name = Kategori 2
keybind.block_select_03.name = Kategori 3
keybind.block_select_04.name = Kategori 4
keybind.block_select_05.name = Kategori 5
keybind.block_select_06.name = Kategori 6
keybind.block_select_07.name = Kategori 7
keybind.block_select_08.name = Kategori 8
keybind.block_select_09.name = Kategori 9
keybind.block_select_10.name = Kategori 10
keybind.fullscreen.name = Tam Ekran
keybind.select.name = Seç/Ateş Et
keybind.diagonal_placement.name = Çapraz Yerleştirme
@ -718,7 +718,7 @@ keybind.pick.name = Blok Seç
keybind.break_block.name = Blok Kır
keybind.deselect.name = Seçimleri Kaldır
keybind.shoot.name = Ateş Et
keybind.zoom.name = Zum
keybind.zoom.name = Yakınlaştırma/Uzaklaştırma
keybind.menu.name = Menü
keybind.pause.name = Durdur
keybind.pause_building.name = İnşaatı Duraklat/İnşaata Devam Et
@ -732,8 +732,8 @@ keybind.toggle_menus.name = Menüleri Aç/Kapa
keybind.chat_history_prev.name = Sohbet geçmişi önceki
keybind.chat_history_next.name = Sohbet geçmişi sonraki
keybind.chat_scroll.name = Sohbet Kaydırma
keybind.drop_unit.name = Drop Unit
keybind.zoom_minimap.name = Mini Haritada Zum
keybind.drop_unit.name = Birlik Düşürme
keybind.zoom_minimap.name = Mini Haritada Yakınlaştırma/Uzaklaştırma
mode.help.title = Modların açıklamaları
mode.survival.name = Hayatta Kalma
mode.survival.description = Normal oyun oyun modu. Kaynak sınırlı ve dalgalar otomatik olarak gönderilir.\n[gray]Oynamak için haritada düşman doğma noktaları olması gerekir.
@ -747,7 +747,7 @@ mode.attack.description = Düşman üssünü yok et. Dalga yok.\n[gray]Oynamak i
mode.custom = Özel Kurallar
rules.infiniteresources = Sınırsız Kaynaklar
rules.reactorexplosions = Reactor Explosions
rules.reactorexplosions = Reaktör Patlamaları
rules.wavetimer = Dalga Zamanlayıcısı
rules.waves = Dalgalar
rules.attack = Saldırı Modu
@ -755,7 +755,7 @@ rules.enemyCheat = Sonsuz AI (Kırmızı Takım) Kaynakları
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Birim Üretim Hızı Çarpanı
rules.unithealthmultiplier = Birim Canı Çarpanı
rules.blockhealthmultiplier = Block Health Multiplier
rules.blockhealthmultiplier = Blok Canı Çarpanı
rules.playerhealthmultiplier = Oyuncu Canı Çarpanı
rules.playerdamagemultiplier = Oyuncu Hasarı Çarpanı
rules.unitdamagemultiplier = Birim Hasarı Çapanı
@ -773,10 +773,10 @@ rules.title.respawns = Tekrar Canlanmalar
rules.title.resourcesbuilding = Kaynaklar & İnşa
rules.title.player = Oyuncular
rules.title.enemy = Düşmanlar
rules.title.unit = Unitler
rules.title.experimental = Experimental
rules.lighting = Lighting
rules.ambientlight = Ambient Light
rules.title.unit = Birlikler
rules.title.experimental = Deneysel
rules.lighting = ıklandırma
rules.ambientlight = Ortam Işığı
content.item.name = Eşyalar
content.liquid.name = Sıvılar
@ -824,7 +824,7 @@ mech.trident-ship.name = Trident
mech.trident-ship.weapon = Bomba Bölmesi
mech.glaive-ship.name = Glaive
mech.glaive-ship.weapon = Alevli Makineli Tüfek
item.corestorable = [lightgray]Storable in Core: {0}
item.corestorable = [lightgray]Çekirdekte depolanabilir mi?: {0}
item.explosiveness = [lightgray]Patlama: {0}%
item.flammability = [lightgray]Yanıcılık: {0}%
item.radioactivity = [lightgray]Radyoaktivite: {0}%

View File

@ -105,6 +105,7 @@ mods.none = [LIGHT_GRAY]没有找到模组!
mods.guide = 模组教程
mods.report = 报告 Bug
mods.openfolder = 打开模组文件夹
mod.display = [gray]模组:[orange] {0}
mod.enabled = [lightgray]已启用
mod.disabled = [scarlet]已禁用
mod.disable = 禁用
@ -171,6 +172,11 @@ hosts.discovering.any = 正在搜索服务器
server.refreshing = 正在刷新服务器
hosts.none = [lightgray]未发现局域网游戏!
host.invalid = [scarlet]无法连接服务器。
servers.local = 本地服务器
servers.remote = 远程服务器
servers.global = 全球服务器
trace = 跟踪玩家
trace.playername = 玩家名称:[accent]{0}
trace.ip = IP 地址:[accent]{0}
@ -252,6 +258,7 @@ copylink = 复制链接
back = 返回
data.export = 导出数据
data.import = 导入数据
data.openfolder = 打开数据文件夹
data.exported = 数据已导出。
data.invalid = 非有效游戏数据。
data.import.confirm = 导入外部游戏数据将覆盖本地[scarlet]全部[]的游戏数据。\n[accent]此操作无法撤销![]\n\n数据导入后将自动退出游戏。
@ -532,6 +539,8 @@ error.crashtitle = 发生了一个错误
blocks.input = 输入
blocks.output = 输出
blocks.booster = 增强物品/液体
blocks.tiles = 所需地型
blocks.affinities = 相关
block.unknown = [lightgray]???
blocks.powercapacity = 能量容量
blocks.powershot = 能量/发射
@ -666,6 +675,7 @@ setting.mutesound.name = 无音效
setting.crashreport.name = 发送匿名的崩溃报告
setting.savecreate.name = 自动创建存档
setting.publichost.name = 游戏公开可见
setting.playerlimit.name = 玩家限制
setting.chatopacity.name = 聊天界面不透明度
setting.lasersopacity.name = 能量激光不透明度
setting.bridgeopacity.name = 桥梁不透明度

View File

@ -85,3 +85,4 @@ Draco
Quezler
Alicila
Daniel Dusek
DeltaNedas

Binary file not shown.

Binary file not shown.

View File

@ -33,6 +33,8 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
@Override
public void setup(){
Events.fire(new ClientCreateEvent());
Vars.loadLogger();
Vars.loadFileLogger();
Vars.platform = this;

View File

@ -102,6 +102,7 @@ public class NetClient implements ApplicationListener{
state.set(State.menu);
logic.reset();
platform.updateRPC();
player.name = Core.settings.getString("name");
if(quiet) return;

View File

@ -270,7 +270,7 @@ public class Renderer implements ApplicationListener{
drawAllTeams(true);
Draw.flush();
if(bloom != null && !pixelator.enabled()){
if(bloom != null){
bloom.capture();
}
@ -278,7 +278,7 @@ public class Renderer implements ApplicationListener{
effectGroup.draw();
Draw.flush();
if(bloom != null && !pixelator.enabled()){
if(bloom != null){
bloom.render();
}
@ -417,11 +417,6 @@ public class Renderer implements ApplicationListener{
return;
}
boolean hadShields = Core.settings.getBool("animatedshields");
boolean hadWater = Core.settings.getBool("animatedwater");
Core.settings.put("animatedwater", false);
Core.settings.put("animatedshields", false);
FrameBuffer buffer = new FrameBuffer(w, h);
float vpW = camera.width, vpH = camera.height, px = camera.position.x, py = camera.position.y;
@ -453,9 +448,6 @@ public class Renderer implements ApplicationListener{
ui.showInfoFade(Core.bundle.format("screenshot", file.toString()));
buffer.dispose();
Core.settings.put("animatedwater", hadWater);
Core.settings.put("animatedshields", hadShields);
}
}

View File

@ -1,14 +1,15 @@
package mindustry.entities.traits;
import arc.*;
import arc.struct.Queue;
import arc.graphics.g2d.*;
import arc.math.*;
import arc.math.geom.*;
import arc.struct.Queue;
import arc.util.ArcAnnotate.*;
import arc.util.*;
import mindustry.*;
import mindustry.content.*;
import mindustry.entities.type.TileEntity;
import mindustry.entities.type.*;
import mindustry.game.EventType.*;
import mindustry.gen.*;
@ -21,7 +22,7 @@ import java.io.*;
import java.util.*;
import static mindustry.Vars.*;
import static mindustry.entities.traits.BuilderTrait.BuildDataStatic.*;
import static mindustry.entities.traits.BuilderTrait.BuildDataStatic.tmptr;
/** Interface for units that build things.*/
public interface BuilderTrait extends Entity, TeamTrait{
@ -74,6 +75,9 @@ public interface BuilderTrait extends Entity, TeamTrait{
buildQueue().removeFirst();
return;
}
}else if(tile.getTeam() != getTeam()){
buildQueue().removeFirst();
return;
}
if(tile.entity instanceof BuildEntity && !current.initialized){

View File

@ -92,6 +92,10 @@ public class EventType{
}
}
public static class ClientCreateEvent{
}
/** Called when the client game is first loaded. */
public static class ClientLoadEvent{

View File

@ -98,6 +98,7 @@ public class Teams{
/** Do not modify. */
public Array<TeamData> getActive(){
active.removeAll(t -> !t.active());
return active;
}
@ -167,6 +168,14 @@ public class Teams{
public CoreEntity core(){
return cores.first();
}
@Override
public String toString(){
return "TeamData{" +
"cores=" + cores +
", team=" + team +
'}';
}
}
/** Represents a block made by this team that was destroyed somewhere on the map.

View File

@ -168,7 +168,6 @@ public class BlockRenderer implements Disposable{
shadowEvents.clear();
Draw.proj(camera.projection());
renderer.pixelator.rebind();
}
float ww = world.width() * tilesize, wh = world.height() * tilesize;

View File

@ -28,10 +28,6 @@ public class Pixelator implements Disposable{
camera.width = (int)camera.width;
camera.height = (int)camera.height;
boolean hadShields = Core.settings.getBool("animatedshields");
boolean hadWater = Core.settings.getBool("animatedwater");
Core.settings.put("animatedwater", false);
Core.settings.put("animatedshields", false);
graphics.clear(0f, 0f, 0f, 1f);
float px = Core.camera.position.x, py = Core.camera.position.y;
@ -58,17 +54,9 @@ public class Pixelator implements Disposable{
playerGroup.draw(p -> !p.isDead(), Player::drawName);
Core.camera.position.set(px, py);
Core.settings.put("animatedwater", hadWater);
Core.settings.put("animatedshields", hadShields);
renderer.setScale(pre);
}
public void rebind(){
if(enabled()){
buffer.begin();
}
}
public boolean enabled(){
return Core.settings.getBool("pixelate");
}

View File

@ -255,19 +255,10 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
if(lastSchematic == null) return;
ui.showTextInput("$schematic.add", "$name", "", text -> {
Schematic replacement = schematics.all().find(s -> s.name().equals(text));
if(replacement != null){
ui.showConfirm("$confirm", "$schematic.replace", () -> {
schematics.overwrite(replacement, lastSchematic);
ui.showInfoFade("$schematic.saved");
ui.schematics.showInfo(replacement);
});
}else{
lastSchematic.tags.put("name", text);
schematics.add(lastSchematic);
ui.showInfoFade("$schematic.saved");
ui.schematics.showInfo(lastSchematic);
}
lastSchematic.tags.put("name", text);
schematics.add(lastSchematic);
ui.showInfoFade("$schematic.saved");
ui.schematics.showInfo(lastSchematic);
});
}

View File

@ -3,7 +3,7 @@ package mindustry.mod;
import arc.*;
import arc.assets.*;
import arc.audio.*;
import arc.audio.mock.*;
import arc.mock.*;
import arc.struct.Array;
import arc.struct.*;
import arc.files.*;

View File

@ -1,8 +1,8 @@
package mindustry.mod;
import arc.audio.*;
import arc.audio.mock.*;
import arc.math.geom.*;
import arc.mock.*;
import arc.util.ArcAnnotate.*;
public class ModLoadingSound implements Sound{

View File

@ -242,6 +242,9 @@ public class JoinDialog extends FloatingDialog{
}
void setup(){
local.clear();
remote.clear();
global.clear();
float w = targetWidth();
hosts.clear();
@ -255,7 +258,6 @@ public class JoinDialog extends FloatingDialog{
pane.setScrollingDisabled(true, false);
setupRemote();
refreshRemote();
cont.clear();
cont.table(t -> {

View File

@ -1,7 +1,7 @@
package mindustry.ui.dialogs;
import arc.*;
import arc.struct.*;
import arc.files.*;
import arc.graphics.*;
import arc.graphics.Texture.*;
import arc.graphics.g2d.*;
@ -10,6 +10,7 @@ import arc.scene.ui.*;
import arc.scene.ui.ImageButton.*;
import arc.scene.ui.TextButton.*;
import arc.scene.ui.layout.*;
import arc.struct.*;
import arc.util.*;
import mindustry.core.GameState.*;
import mindustry.game.*;
@ -214,14 +215,27 @@ public class SchematicsDialog extends FloatingDialog{
Core.app.setClipboardText(schematics.writeBase64(s));
}).marginLeft(12f);
t.row();
t.addImageTextButton("$schematic.exportfile", Icon.export, style, () -> platform.showFileChooser(false, schematicExtension, file -> {
dialog.hide();
try{
Schematics.write(s, file);
}catch(Exception e){
ui.showException(e);
t.addImageTextButton("$schematic.exportfile", Icon.export, style, () -> {
if(!ios){
platform.showFileChooser(false, schematicExtension, file -> {
dialog.hide();
try{
Schematics.write(s, file);
}catch(Throwable e){
ui.showException(e);
}
});
}else{
dialog.hide();
try{
Fi file = Core.files.local(s.name() + "." + schematicExtension);
Schematics.write(s, file);
platform.shareFile(file);
}catch(Throwable e){
ui.showException(e);
}
}
})).marginLeft(12f);
}).marginLeft(12f);
});
});

View File

@ -330,7 +330,12 @@ public class SettingsMenuDialog extends SettingsDialog{
if(Shaders.shield != null){
graphics.checkPref("animatedshields", !mobile);
}
graphics.checkPref("bloom", !mobile, val -> renderer.toggleBloom(val));
if(!ios){
graphics.checkPref("bloom", !mobile, val -> renderer.toggleBloom(val));
}else{
Core.settings.put("bloom", false);
}
graphics.checkPref("pixelate", false, val -> {
if(val){
Events.fire(Trigger.enablePixelation);

View File

@ -51,6 +51,7 @@ public class ItemSelection{
scrollPos = pane.getScrollY();
});
table.add(pane).maxHeight(40 * 5);
pane.setOverscroll(false, false);
table.add(pane).maxHeight(Scl.scl(40 * 5));
}
}

View File

@ -264,6 +264,7 @@ public class Conveyor extends Block implements Autotiler{
@Override
public void handleStack(Item item, int amount, Tile tile, Unit source){
ConveyorEntity e = tile.ent();
amount = Math.min(amount, itemCapacity - e.len);
for(int i = amount - 1; i >= 0; i--){
e.add(0);

View File

@ -9,6 +9,8 @@ import mindustry.world.meta.BlockGroup;
import java.io.*;
import static mindustry.Vars.world;
public class OverflowGate extends Block{
public float speed = 1f;
public boolean invert = false;
@ -125,19 +127,24 @@ public class OverflowGate extends Block{
@Override
public byte version(){
return 2;
return 3;
}
@Override
public void write(DataOutput stream) throws IOException{
super.write(stream);
stream.writeInt(lastInput == null ? Pos.invalid : lastInput.pos());
}
@Override
public void read(DataInput stream, byte revision) throws IOException{
super.read(stream, revision);
if(revision == 1){
new DirectionalItemBuffer(25, 50f).read(stream);
}else if(revision == 3){
lastInput = world.tile(stream.readInt());
lastItem = items.first();
}
}
}

View File

@ -14,7 +14,7 @@ import mindustry.world.meta.*;
import java.io.*;
import static mindustry.Vars.content;
import static mindustry.Vars.*;
public class Sorter extends Block{
private static Item lastItem;
@ -46,6 +46,9 @@ public class Sorter extends Block{
@Override
public void configured(Tile tile, Player player, int value){
tile.<SorterEntity>ent().sortItem = content.item(value);
if(!headless){
renderer.minimap.update(tile);
}
}
@Override

View File

@ -107,6 +107,7 @@ public class Separator extends Block{
entity.cons.trigger();
if(item != null && entity.items.get(item) < itemCapacity){
useContent(tile, item);
offloadNear(tile, item);
}
}

View File

@ -111,6 +111,7 @@ public class SolidPump extends Pump{
tile.entity.liquids.add(result, maxPump);
entity.lastPump = maxPump;
entity.warmup = Mathf.lerpDelta(entity.warmup, 1f, 0.02f);
if(tile.entity.timer.get(timerContentCheck, 10)) useContent(tile, result);
if(Mathf.chance(entity.delta() * updateEffectChance))
Effects.effect(updateEffect, entity.x + Mathf.range(size * 2f), entity.y + Mathf.range(size * 2f));
}else{

View File

@ -1,10 +1,9 @@
package mindustry.world.modules;
import mindustry.type.Item;
import mindustry.type.ItemStack;
import mindustry.type.*;
import java.io.*;
import java.util.Arrays;
import java.util.*;
import static mindustry.Vars.content;
@ -69,15 +68,24 @@ public class ItemModule extends BlockModule{
return total;
}
public Item first(){
for(int i = 0; i < items.length; i++){
if(items[i] > 0){
return content.item(i);
}
}
return null;
}
public Item take(){
for(int i = 0; i < items.length; i++){
int index = (i + takeRotation);
if(index >= items.length) index -= items.length; //conditional instead of mod
if(index >= items.length) index -= items.length;
if(items[index] > 0){
items[index] --;
total --;
takeRotation = index + 1;
return content.item(index % items.length);
return content.item(index);
}
}
return null;

View File

@ -0,0 +1,6 @@
- Optimized and cleaned up conveyors
- Made unloaders take items from blocks in equal amounts
- Added server categories (Partially contributed by @Quezler)
- Added require() function for scripts (Contributed by @DeltaNedas)
- Added color gradient for battery status (Contributed by @Arkanic (eventually))
- Changed script loading: For mods with more than one script file, the main file must be named "main.js" and must require() other files to run them

View File

@ -0,0 +1,6 @@
- Optimized and cleaned up conveyors
- Made unloaders take items from blocks in equal amounts
- Added server categories (Partially contributed by @Quezler)
- Added require() function for scripts (Contributed by @DeltaNedas)
- Added color gradient for battery status (Contributed by @Arkanic (eventually))
- Changed script loading: For mods with more than one script file, the main file must be named "main.js" and must require() other files to run them

View File

@ -0,0 +1,6 @@
- Optimized and cleaned up conveyors
- Made unloaders take items from blocks in equal amounts
- Added server categories (Partially contributed by @Quezler)
- Added require() function for scripts (Contributed by @DeltaNedas)
- Added color gradient for battery status (Contributed by @Arkanic (eventually))
- Changed script loading: For mods with more than one script file, the main file must be named "main.js" and must require() other files to run them

View File

@ -0,0 +1,6 @@
- Optimized and cleaned up conveyors
- Made unloaders take items from blocks in equal amounts
- Added server categories (Partially contributed by @Quezler)
- Added require() function for scripts (Contributed by @DeltaNedas)
- Added color gradient for battery status (Contributed by @Arkanic (eventually))
- Changed script loading: For mods with more than one script file, the main file must be named "main.js" and must require() other files to run them

View File

@ -1,3 +1,3 @@
org.gradle.daemon=true
org.gradle.jvmargs=-Xms256m -Xmx1024m
archash=a3edc4804b57ac9f8c59216cc470f05133f8c804
archash=589c7e171a8b558f50b99d374e05942a5909ba4d

View File

@ -1,12 +1,13 @@
package mindustry.ios;
import arc.*;
import com.badlogic.gdx.backends.iosrobovm.*;
import arc.Input.*;
import arc.files.*;
import arc.func.*;
import arc.scene.ui.layout.*;
import arc.util.*;
import arc.util.io.*;
import com.badlogic.gdx.backends.iosrobovm.*;
import mindustry.*;
import mindustry.game.EventType.*;
import mindustry.game.Saves.*;
@ -40,13 +41,32 @@ public class IOSLauncher extends IOSApplication.Delegate{
@Override
public void showFileChooser(boolean open, String extension, Cons<Fi> cons){
UIDocumentBrowserViewController cont = new UIDocumentBrowserViewController((NSArray<NSString>)null);
if(!open){ //when exporting, just share it.
//ask for export name
Core.input.getTextInput(new TextInput(){{
title = Core.bundle.get("filename");
accepted = name -> {
try{
//write result
Fi result = tmpDirectory.child(name + "." + extension);
cons.get(result);
//import the document
shareFile(result);
}catch(Throwable t){
ui.showException(t);
}
};
}});
return;
}
UIDocumentBrowserViewController cont = new UIDocumentBrowserViewController((NSArray<NSString>)null);
NSArray<UIBarButtonItem> arr = new NSArray<>(new UIBarButtonItem(Core.bundle.get("cancel"), UIBarButtonItemStyle.Plain,
uiBarButtonItem -> cont.dismissViewController(true, () -> {})));
cont.setAllowsDocumentCreation(!open);
cont.setAllowsDocumentCreation(false);
cont.setAdditionalLeadingNavigationBarButtonItems(arr);
class ChooserDelegate extends NSObject implements UIDocumentBrowserViewControllerDelegate{
@ -97,7 +117,6 @@ public class IOSLauncher extends IOSApplication.Delegate{
@Override
public void failedToImportDocument(UIDocumentBrowserViewController controller, NSURL documentURL, NSError error){
}
@Override

View File

@ -2,6 +2,12 @@
{
"address": "mindustry.us.to"
},
{
"address": "mindustry.indielm.com:1101"
},
{
"address": "mindustry.indielm.com"
},
{
"address": "mindustry.ecansol.com:6597"
},

View File

@ -214,6 +214,16 @@ public class ApplicationTests{
assertTrue(state.teams.playerCores().size > 0);
}
@Test
void conveyorCrash(){
world.loadMap(testMap);
state.set(State.playing);
world.tile(0, 0).setBlock(Blocks.conveyor);
world.tile(0, 0).rotation(0);
Blocks.conveyor.acceptStack(Items.copper, 1000, world.tile(0, 0), null);
}
@Test
void conveyorBench(){
int[] items = {0};