From 5e2bf1f931e69105d6b03eb8d74ea4c5bae7919d Mon Sep 17 00:00:00 2001 From: alex <67626131+alexpvpmindustry@users.noreply.github.com> Date: Fri, 13 Aug 2021 22:55:06 +0800 Subject: [PATCH 01/45] change address of pvp server (#5758) --- servers_v6.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v6.json b/servers_v6.json index dc06079f12..ab13f5176e 100644 --- a/servers_v6.json +++ b/servers_v6.json @@ -45,7 +45,7 @@ }, { "name": "ALEX", - "address": ["alexmindustryhub.ddns.net:6568", "alexmindustry.ddns.net:25586", "alexmindustry.ddns.net:25587", "alexmindustryattac.ddns.net:25800","alexmindustryturbo.ddns.net:25581","alexmindustryhex.ddns.net:25583"] + "address": ["alexmindustryhub.ddns.net:6568", "dogemindustry.ddns.net:25586", "alexmindustry.ddns.net:25587", "alexmindustryattac.ddns.net:25800","alexmindustryturbo.ddns.net:25581","alexmindustryhex.ddns.net:25583"] }, { "name": "Minty [subzero]", From cd53cf0991fbf42d258adb80816061fae63e2265 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 13 Aug 2021 11:29:22 -0400 Subject: [PATCH 02/45] Fixed planet zoom --- core/src/mindustry/ui/dialogs/PlanetDialog.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 7e1e68d2b7..8aa4862da2 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -130,7 +130,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ @Override public boolean scrolled(InputEvent event, float x, float y, float amountX, float amountY){ if(event.targetActor == PlanetDialog.this){ - zoom = Mathf.clamp(zoom + y / 10f, 0.5f, 2f); + zoom = Mathf.clamp(zoom + amountY / 10f, 0.5f, 2f); } return true; } From 6e5ad304e46bb581f8dc7bc7eb12e114507c25c5 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 13 Aug 2021 12:17:32 -0400 Subject: [PATCH 03/45] Fixed #5759 --- .../src/mindustry/world/blocks/distribution/DuctBridge.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/src/mindustry/world/blocks/distribution/DuctBridge.java b/core/src/mindustry/world/blocks/distribution/DuctBridge.java index 608467eaa5..58457d5f22 100644 --- a/core/src/mindustry/world/blocks/distribution/DuctBridge.java +++ b/core/src/mindustry/world/blocks/distribution/DuctBridge.java @@ -43,6 +43,12 @@ public class DuctBridge extends Block{ drawArrow = false; } + @Override + public void init(){ + clipSize = Math.max(clipSize, (range + 0.5f) * 2 * tilesize); + super.init(); + } + @Override public void drawRequestRegion(BuildPlan req, Eachable list){ Draw.rect(region, req.drawx(), req.drawy()); From 0e6d9ea9339d8c25c347038ee964b9b0fcccbaad Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 13 Aug 2021 13:58:25 -0400 Subject: [PATCH 04/45] Fixed #5760 / Fixed #5761 --- core/src/mindustry/ai/BaseAI.java | 83 ++++++++++--------- .../mindustry/ui/dialogs/PlanetDialog.java | 11 --- .../world/blocks/units/UnitFactory.java | 7 +- 3 files changed, 49 insertions(+), 52 deletions(-) diff --git a/core/src/mindustry/ai/BaseAI.java b/core/src/mindustry/ai/BaseAI.java index 6ca2a5a751..26c8b7d1f9 100644 --- a/core/src/mindustry/ai/BaseAI.java +++ b/core/src/mindustry/ai/BaseAI.java @@ -52,6 +52,7 @@ public class BaseAI{ } public void update(){ + if(data.team.rules().aiCoreSpawn && timer.get(timerSpawn, 60 * 2.5f) && data.hasCore()){ CoreBlock block = (CoreBlock)data.core().block; int coreUnits = Groups.unit.count(u -> u.team == data.team && u.type == block.unitType); @@ -90,49 +91,51 @@ public class BaseAI{ }else{ var field = pathfinder.getField(state.rules.waveTeam, Pathfinder.costGround, Pathfinder.fieldCore); - int[][] weights = field.weights; - for(int i = 0; i < pathStep; i++){ - int minCost = Integer.MAX_VALUE; - int cx = calcTile.x, cy = calcTile.y; - boolean foundAny = false; - for(Point2 p : Geometry.d4){ - int nx = cx + p.x, ny = cy + p.y; + if(field.weights != null){ + int[][] weights = field.weights; + for(int i = 0; i < pathStep; i++){ + int minCost = Integer.MAX_VALUE; + int cx = calcTile.x, cy = calcTile.y; + boolean foundAny = false; + for(Point2 p : Geometry.d4){ + int nx = cx + p.x, ny = cy + p.y; - Tile other = world.tile(nx, ny); - if(other != null && weights[nx][ny] < minCost && weights[nx][ny] != -1){ - minCost = weights[nx][ny]; - calcTile = other; - foundAny = true; + Tile other = world.tile(nx, ny); + if(other != null && weights[nx][ny] < minCost && weights[nx][ny] != -1){ + minCost = weights[nx][ny]; + calcTile = other; + foundAny = true; + } } + + //didn't find anything, break out of loop, this will trigger a clear later + if(!foundAny){ + calcCount = Integer.MAX_VALUE; + break; + } + + calcPath.add(calcTile.pos()); + for(Point2 p : Geometry.d8){ + calcPath.add(Point2.pack(p.x + calcTile.x, p.y + calcTile.y)); + } + + //found the end. + if(calcTile.build instanceof CoreBuild b && b.team == state.rules.defaultTeam){ + //clean up calculations and flush results + calculating = false; + calcCount = 0; + path.clear(); + path.addAll(calcPath); + calcPath.clear(); + calcTile = null; + totalCalcs ++; + foundPath = true; + + break; + } + + calcCount ++; } - - //didn't find anything, break out of loop, this will trigger a clear later - if(!foundAny){ - calcCount = Integer.MAX_VALUE; - break; - } - - calcPath.add(calcTile.pos()); - for(Point2 p : Geometry.d8){ - calcPath.add(Point2.pack(p.x + calcTile.x, p.y + calcTile.y)); - } - - //found the end. - if(calcTile.build instanceof CoreBuild b && b.team == state.rules.defaultTeam){ - //clean up calculations and flush results - calculating = false; - calcCount = 0; - path.clear(); - path.addAll(calcPath); - calcPath.clear(); - calcTile = null; - totalCalcs ++; - foundPath = true; - - break; - } - - calcCount ++; } } } diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 8aa4862da2..e948e8dcdf 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -26,7 +26,6 @@ import mindustry.gen.*; import mindustry.graphics.*; import mindustry.graphics.g3d.*; import mindustry.input.*; -import mindustry.io.legacy.*; import mindustry.maps.*; import mindustry.type.*; import mindustry.ui.*; @@ -165,16 +164,6 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ return this; } - //load legacy research - if(Core.settings.has("unlocks") && !Core.settings.has("junction-unlocked")){ - Core.app.post(() -> { - ui.showCustomConfirm("@research", "@research.legacy", "@research.load", "@research.discard", () -> { - LegacyIO.readResearch(); - Core.settings.remove("unlocks"); - }, () -> Core.settings.remove("unlocks")); - }); - } - rebuildButtons(); mode = look; selected = hovered = launchSector = null; diff --git a/core/src/mindustry/world/blocks/units/UnitFactory.java b/core/src/mindustry/world/blocks/units/UnitFactory.java index c614ad9e4c..ab7fa7024b 100644 --- a/core/src/mindustry/world/blocks/units/UnitFactory.java +++ b/core/src/mindustry/world/blocks/units/UnitFactory.java @@ -143,10 +143,15 @@ public class UnitFactory extends UnitBlock{ @Override public Object senseObject(LAccess sensor){ if(sensor == LAccess.config) return currentPlan == -1 ? null : plans.get(currentPlan).unit; - if(sensor == LAccess.progress) return Mathf.clamp(fraction()); return super.senseObject(sensor); } + @Override + public double sense(LAccess sensor){ + if(sensor == LAccess.progress) return Mathf.clamp(fraction()); + return super.sense(sensor); + } + @Override public void buildConfiguration(Table table){ Seq units = Seq.with(plans).map(u -> u.unit).filter(u -> u.unlockedNow() && !u.isBanned()); From 031b1abe0aabdb06ce9384b9d73e8e2313970984 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 13 Aug 2021 14:14:58 -0400 Subject: [PATCH 05/45] Allow animations without top regions --- core/src/mindustry/core/Control.java | 2 ++ core/src/mindustry/world/draw/DrawAnimation.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index e4f84b8d38..c8ec84674f 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -383,6 +383,8 @@ public class Control implements ApplicationListener, Loadable{ Groups.fire.clear(); Groups.puddle.clear(); + //reset to 0, so replaced cores don't count + state.rules.defaultTeam.data().unitCap = 0; Schematics.placeLaunchLoadout(spawn.x, spawn.y); //set up camera/player locations diff --git a/core/src/mindustry/world/draw/DrawAnimation.java b/core/src/mindustry/world/draw/DrawAnimation.java index f0699634a4..14b2b8d6b7 100644 --- a/core/src/mindustry/world/draw/DrawAnimation.java +++ b/core/src/mindustry/world/draw/DrawAnimation.java @@ -45,6 +45,6 @@ public class DrawAnimation extends DrawBlock{ @Override public TextureRegion[] icons(Block block){ - return new TextureRegion[]{block.region, top}; + return top.found() ? new TextureRegion[]{block.region, top} : new TextureRegion[]{block.region}; } } From 74468855c2e4a66898f1463643badf3d02acb410 Mon Sep 17 00:00:00 2001 From: buthed010203 Date: Fri, 13 Aug 2021 17:45:12 -0400 Subject: [PATCH 06/45] Offset formations by 22.5 degrees when full (#5754) This stops the annoying "unit bumping" problem on servers (at least with full formations), removed the other 2 lines as they didnt actually do anything. Before: https://mee6.is-terrible.com/56YkB59o8.webm After: I really cant be bothered --- .../mindustry/ai/formations/patterns/CircleFormation.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/core/src/mindustry/ai/formations/patterns/CircleFormation.java b/core/src/mindustry/ai/formations/patterns/CircleFormation.java index 9636d97036..7cda7a4bb4 100644 --- a/core/src/mindustry/ai/formations/patterns/CircleFormation.java +++ b/core/src/mindustry/ai/formations/patterns/CircleFormation.java @@ -5,21 +5,17 @@ import arc.math.geom.*; import mindustry.ai.formations.*; public class CircleFormation extends FormationPattern{ - /** Angle offset. */ - public float angleOffset = 0; @Override public Vec3 calculateSlotLocation(Vec3 outLocation, int slotNumber){ if(slots > 1){ - float angle = (360f * slotNumber) / slots; + float angle = (360f * slotNumber) / slots + slots == 8 ? 22.5f : 0; float radius = spacing / (float)Math.sin(180f / slots * Mathf.degRad); outLocation.set(Angles.trnsx(angle, radius), Angles.trnsy(angle, radius), angle); }else{ outLocation.set(0, spacing * 1.1f, 360f * slotNumber); } - outLocation.z += angleOffset; - return outLocation; } From 94b12704dc401d9e6656bb6688627ba1e6924392 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 13 Aug 2021 19:07:14 -0400 Subject: [PATCH 07/45] Mobile text input fixes --- core/src/mindustry/core/UI.java | 1 + core/src/mindustry/editor/MapInfoDialog.java | 6 +++--- core/src/mindustry/editor/MapResizeDialog.java | 2 +- core/src/mindustry/logic/LStatement.java | 2 +- core/src/mindustry/ui/dialogs/CustomRulesDialog.java | 6 +++--- core/src/mindustry/ui/dialogs/JoinDialog.java | 4 ++-- core/src/mindustry/ui/dialogs/PlanetDialog.java | 2 +- core/src/mindustry/ui/dialogs/SchematicsDialog.java | 6 +++--- gradle.properties | 2 +- 9 files changed, 16 insertions(+), 15 deletions(-) diff --git a/core/src/mindustry/core/UI.java b/core/src/mindustry/core/UI.java index 4024b8f72f..b0180958a1 100644 --- a/core/src/mindustry/core/UI.java +++ b/core/src/mindustry/core/UI.java @@ -261,6 +261,7 @@ public class UI implements ApplicationListener, Loadable{ this.numeric = inumeric; this.maxLength = textLength; this.accepted = confirmed; + this.allowEmpty = false; }}); }else{ new Dialog(titleText){{ diff --git a/core/src/mindustry/editor/MapInfoDialog.java b/core/src/mindustry/editor/MapInfoDialog.java index 63b9a053da..379b292f08 100644 --- a/core/src/mindustry/editor/MapInfoDialog.java +++ b/core/src/mindustry/editor/MapInfoDialog.java @@ -38,7 +38,7 @@ public class MapInfoDialog extends BaseDialog{ TextField name = t.field(tags.get("name", ""), text -> { tags.put("name", text); - }).size(400, 55f).addInputDialog(50).get(); + }).size(400, 55f).maxTextLength(50).get(); name.setMessageText("@unknown"); t.row(); @@ -46,7 +46,7 @@ public class MapInfoDialog extends BaseDialog{ TextArea description = t.area(tags.get("description", ""), Styles.areaField, text -> { tags.put("description", text); - }).size(400f, 140f).addInputDialog(1000).get(); + }).size(400f, 140f).maxTextLength(1000).get(); t.row(); t.add("@editor.author").padRight(8).left(); @@ -54,7 +54,7 @@ public class MapInfoDialog extends BaseDialog{ TextField author = t.field(tags.get("author", Core.settings.getString("mapAuthor", "")), text -> { tags.put("author", text); Core.settings.put("mapAuthor", text); - }).size(400, 55f).addInputDialog(50).get(); + }).size(400, 55f).maxTextLength(50).get(); author.setMessageText("@unknown"); t.row(); diff --git a/core/src/mindustry/editor/MapResizeDialog.java b/core/src/mindustry/editor/MapResizeDialog.java index f95edff43f..fe3e6eda06 100644 --- a/core/src/mindustry/editor/MapResizeDialog.java +++ b/core/src/mindustry/editor/MapResizeDialog.java @@ -29,7 +29,7 @@ public class MapResizeDialog extends BaseDialog{ table.field((w ? width : height) + "", TextFieldFilter.digitsOnly, value -> { int val = Integer.parseInt(value); if(w) width = val; else height = val; - }).valid(value -> Strings.canParsePositiveInt(value) && Integer.parseInt(value) <= maxSize && Integer.parseInt(value) >= minSize).addInputDialog(3); + }).valid(value -> Strings.canParsePositiveInt(value) && Integer.parseInt(value) <= maxSize && Integer.parseInt(value) >= minSize).maxTextLength(3); table.row(); } diff --git a/core/src/mindustry/logic/LStatement.java b/core/src/mindustry/logic/LStatement.java index 29c9c14677..e418b3a814 100644 --- a/core/src/mindustry/logic/LStatement.java +++ b/core/src/mindustry/logic/LStatement.java @@ -86,7 +86,7 @@ public abstract class LStatement{ protected Cell field(Table table, String value, Cons setter){ return table.field(value, Styles.nodeField, s -> setter.get(sanitize(s))) - .size(144f, 40f).pad(2f).color(table.color).maxTextLength(LAssembler.maxTokenLength).addInputDialog(); + .size(144f, 40f).pad(2f).color(table.color).maxTextLength(LAssembler.maxTokenLength); } protected Cell fields(Table table, String desc, String value, Cons setter){ diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index 3a7086e727..8ba462668c 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -273,7 +273,7 @@ public class CustomRulesDialog extends BaseDialog{ t.add(text).left().padRight(5); t.field((prov.get()) + "", s -> cons.get(Strings.parseInt(s))) .padRight(100f) - .valid(f -> Strings.parseInt(f) >= min && Strings.parseInt(f) <= max).width(120f).left().addInputDialog(); + .valid(f -> Strings.parseInt(f) >= min && Strings.parseInt(f) <= max).width(120f).left(); }).padTop(0).row(); } @@ -285,7 +285,7 @@ public class CustomRulesDialog extends BaseDialog{ t.field((integer ? (int)prov.get() : prov.get()) + "", s -> cons.get(Strings.parseFloat(s))) .padRight(100f) .update(a -> a.setDisabled(!condition.get())) - .valid(f -> Strings.canParsePositiveFloat(f) && Strings.parseFloat(f) >= min && Strings.parseFloat(f) <= max).width(120f).left().addInputDialog(); + .valid(f -> Strings.canParsePositiveFloat(f) && Strings.parseFloat(f) >= min && Strings.parseFloat(f) <= max).width(120f).left(); }).padTop(0); main.row(); } @@ -309,7 +309,7 @@ public class CustomRulesDialog extends BaseDialog{ Cell field(Table table, float value, Floatc setter){ return table.field(Strings.autoFixed(value, 2), v -> setter.get(Strings.parseFloat(v))) .valid(Strings::canParsePositiveFloat) - .size(90f, 40f).pad(2f).addInputDialog(); + .size(90f, 40f).pad(2f); } void weatherDialog(){ diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index 89ac9464a6..1633255a26 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -67,7 +67,7 @@ public class JoinDialog extends BaseDialog{ TextField field = add.cont.field(Core.settings.getString("ip"), text -> { Core.settings.put("ip", text); - }).size(320f, 54f).maxTextLength(100).addInputDialog().get(); + }).size(320f, 54f).maxTextLength(100).get(); add.cont.row(); add.buttons.defaults().size(140f, 60f).pad(4f); @@ -287,7 +287,7 @@ public class JoinDialog extends BaseDialog{ t.field(Core.settings.getString("name"), text -> { player.name(text); Core.settings.put("name", text); - }).grow().pad(8).addInputDialog(maxNameLength); + }).grow().pad(8).maxTextLength(maxNameLength); ImageButton button = t.button(Tex.whiteui, Styles.clearFulli, 40, () -> { new PaletteDialog().show(color -> { diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index e948e8dcdf..cc71280e44 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -572,7 +572,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ s.field(searchText, t -> { searchText = t; readd[0].run(); - }).growX().height(50f).addInputDialog(); + }).growX().height(50f); }).growX().row(); Table con = p.table().growX().get(); diff --git a/core/src/mindustry/ui/dialogs/SchematicsDialog.java b/core/src/mindustry/ui/dialogs/SchematicsDialog.java index e054772b62..b61bd2fc1e 100644 --- a/core/src/mindustry/ui/dialogs/SchematicsDialog.java +++ b/core/src/mindustry/ui/dialogs/SchematicsDialog.java @@ -69,7 +69,7 @@ public class SchematicsDialog extends BaseDialog{ searchField = s.field(search, res -> { search = res; rebuildPane.run(); - }).growX().addInputDialog().get(); + }).growX().get(); }).fillX().padBottom(4); cont.row(); @@ -164,12 +164,12 @@ public class SchematicsDialog extends BaseDialog{ cont.table(tags -> buildTags(s, tags, false)).maxWidth(400f).fillX().left().row(); cont.margin(30).add("@name").padRight(6f); - TextField nameField = cont.field(s.name(), null).size(400f, 55f).addInputDialog().left().get(); + TextField nameField = cont.field(s.name(), null).size(400f, 55f).left().get(); cont.row(); cont.margin(30).add("@editor.description").padRight(6f); - TextField descField = cont.area(s.description(), Styles.areaField, t -> {}).size(400f, 140f).left().addInputDialog().get(); + TextField descField = cont.area(s.description(), Styles.areaField, t -> {}).size(400f, 140f).left().get(); Runnable accept = () -> { s.tags.put("name", nameField.getText()); diff --git a/gradle.properties b/gradle.properties index cec569e049..a8a10d7568 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=fbbdf8776142ba1980855c954dcfbf00e96cbeb7 +archash=5a334f46162cdc6a29212a0eb9e34d1e666bf535 From 681fc6de3ddbeb80bbaf7adba3870ed5a607792c Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 13 Aug 2021 19:41:14 -0400 Subject: [PATCH 08/45] Misc bugfixes --- core/src/mindustry/ui/dialogs/PlanetDialog.java | 4 ++-- core/src/mindustry/ui/fragments/HintsFragment.java | 6 +++--- gradle.properties | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index cc71280e44..c0cf02795d 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -531,7 +531,8 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ }), new Table(c -> { - if(!(graphics.isPortrait() && mobile) && planets.planet.sectors.contains(Sector::hasBase)){ + c.visible(() -> !(graphics.isPortrait() && mobile)); + if(planets.planet.sectors.contains(Sector::hasBase)){ int attacked = planets.planet.sectors.count(Sector::isAttacked); //sector notifications & search @@ -557,7 +558,6 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ })).grow(); } - //TODO void rebuildList(){ notifs.clear(); diff --git a/core/src/mindustry/ui/fragments/HintsFragment.java b/core/src/mindustry/ui/fragments/HintsFragment.java index 059af19994..45230f2d3a 100644 --- a/core/src/mindustry/ui/fragments/HintsFragment.java +++ b/core/src/mindustry/ui/fragments/HintsFragment.java @@ -48,12 +48,12 @@ public class HintsFragment extends Fragment{ }else if(!current.show()){ //current became hidden hide(); } - }else if(hints.size > 0 && !renderer.isCutscene()){ + }else if(hints.size > 0){ //check one hint each frame to see if it should be shown. Hint hint = hints.find(Hint::show); if(hint != null && hint.complete()){ hints.remove(hint); - }else if(hint != null){ + }else if(hint != null && !renderer.isCutscene() && state.isGame() && control.saves.getTotalPlaytime() > 8000){ display(hint); }else{ //moused over a derelict structure @@ -92,7 +92,7 @@ public class HintsFragment extends Fragment{ hints.sort(Hint::order); Hint first = hints.find(Hint::show); - if(first != null){ + if(first != null && !renderer.isCutscene() && state.isGame()){ hints.remove(first); display(first); } diff --git a/gradle.properties b/gradle.properties index a8a10d7568..9bb15d466d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=5a334f46162cdc6a29212a0eb9e34d1e666bf535 +archash=4c1533ad063b0e91b9536e9aa6ff0c998e2489e2 From c2fcffb0d8c9fde61f3c492628b11301c24b619d Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 13 Aug 2021 23:49:47 -0400 Subject: [PATCH 09/45] Planet frustum culling --- core/src/mindustry/graphics/g3d/PlanetRenderer.java | 10 +++++++--- core/src/mindustry/type/Planet.java | 5 ++++- gradle.properties | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index 64b3dd7c39..c7938cd11e 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -136,8 +136,12 @@ public class PlanetRenderer implements Disposable{ public void renderPlanet(Planet planet){ if(!planet.visible()) return; - //render planet at offsetted position in the world - planet.draw(cam.combined, planet.getTransform(mat)); + cam.update(); + + if(cam.frustum.containsSphere(planet.position, planet.clipRadius)){ + //render planet at offsetted position in the world + planet.draw(cam.combined, planet.getTransform(mat)); + } renderOrbit(planet); @@ -153,7 +157,7 @@ public class PlanetRenderer implements Disposable{ renderSectors(planet); } - if(planet.parent != null && planet.hasAtmosphere && Core.settings.getBool("atmosphere")){ + if(cam.frustum.containsSphere(planet.position, planet.clipRadius) && planet.parent != null && planet.hasAtmosphere && Core.settings.getBool("atmosphere")){ Gl.depthMask(false); Blending.additive.apply(); diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 06499d9ca0..73cb0f58c0 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -35,6 +35,8 @@ public class Planet extends UnlockableContent{ public float radius; /** Atmosphere radius adjustment parameters. */ public float atmosphereRadIn = 0, atmosphereRadOut = 0.3f; + /** Frustrum sphere clip radius. */ + public float clipRadius = -1f; /** Orbital radius around the sun. Do not change unless you know exactly what you are doing.*/ public float orbitRadius; /** Total radius of this planet and all its children. */ @@ -47,7 +49,7 @@ public class Planet extends UnlockableContent{ public float sectorApproxRadius; /** Whether this planet is tidally locked relative to its parent - see https://en.wikipedia.org/wiki/Tidal_locking */ public boolean tidalLock = false; - /** Whether or not this planet is listed in the planet access UI. **/ + /** Whether this planet is listed in the planet access UI. **/ public boolean accessible = true; /** The default starting sector displayed to the map dialog. */ public int startSector = 0; @@ -237,6 +239,7 @@ public class Planet extends UnlockableContent{ updateBaseCoverage(); } + clipRadius = Math.max(clipRadius, radius + atmosphereRadOut + 0.5f); } @Override diff --git a/gradle.properties b/gradle.properties index 9bb15d466d..fab70b4810 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=4c1533ad063b0e91b9536e9aa6ff0c998e2489e2 +archash=d85d38b6ad854623af961178e6fc951caeff0598 From 16fb70b0ef39b3ebdcf89f4e4df0f279ba94bb77 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 14 Aug 2021 09:21:02 -0400 Subject: [PATCH 10/45] Fixed #5762 / Fixed #5763 --- core/src/mindustry/input/InputHandler.java | 2 +- core/src/mindustry/ui/dialogs/PlanetDialog.java | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 0b5f2bef99..fdaa0e335e 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -462,7 +462,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ player.unit().updateBuilding(isBuilding); } - if(player.shooting && !wasShooting && player.unit().hasWeapons() && state.rules.unitAmmo && player.unit().ammo <= 0){ + if(player.shooting && !wasShooting && player.unit().hasWeapons() && state.rules.unitAmmo && !player.team().rules().infiniteAmmo && player.unit().ammo <= 0){ player.unit().type.weapons.first().noAmmoSound.at(player.unit()); } diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index c0cf02795d..d53c607598 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -63,7 +63,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ public boolean showed = false, sectorsShown; public String searchText = ""; - public Table sectorTop = new Table(), notifs; + public Table sectorTop = new Table(), notifs = new Table(); public Label hoverLabel = new Label(""); public PlanetDialog(){ @@ -559,6 +559,8 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ } void rebuildList(){ + if(notifs == null) return; + notifs.clear(); var all = planets.planet.sectors.select(Sector::hasBase); From 334b62b0a28cd45b72e0d34950470c76ef2c8d20 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 14 Aug 2021 09:49:25 -0400 Subject: [PATCH 11/45] Misc scripting visibility changes --- build.gradle | 2 +- core/src/mindustry/mod/Scripts.java | 6 +++--- gradle.properties | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index cfab64d455..08aed65042 100644 --- a/build.gradle +++ b/build.gradle @@ -57,7 +57,7 @@ allprojects{ if(!project.hasProperty("versionType")) versionType = 'official' appName = 'Mindustry' steamworksVersion = '0b86023401880bb5e586bc404bedbaae9b1f1c94' - rhinoVersion = '9f792d202471fb3789eab7bb261fec13d67287e2' + rhinoVersion = '3c6bbadf73a904eefcc28b6fd8aa742ac575e878' loadVersionProps = { return new Properties().with{p -> p.load(file('../core/assets/version.properties').newReader()); return p } diff --git a/core/src/mindustry/mod/Scripts.java b/core/src/mindustry/mod/Scripts.java index 8dd10759bc..4b206567a7 100644 --- a/core/src/mindustry/mod/Scripts.java +++ b/core/src/mindustry/mod/Scripts.java @@ -21,10 +21,10 @@ import java.net.*; import java.util.regex.*; public class Scripts implements Disposable{ - private final Context context; - private final Scriptable scope; - private boolean errored; + public final Context context; + public final Scriptable scope; + private boolean errored; LoadedMod currentMod = null; public Scripts(){ diff --git a/gradle.properties b/gradle.properties index fab70b4810..d77c1607cd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=d85d38b6ad854623af961178e6fc951caeff0598 +archash=9d169d544c0c0f29eb8aca6c49246f968e8d614c From 24d3afca1806b5a141de56a8e19e93f3631b3539 Mon Sep 17 00:00:00 2001 From: Matthew Peng <54301439+MEEPofFaith@users.noreply.github.com> Date: Sat, 14 Aug 2021 15:48:52 -0700 Subject: [PATCH 12/45] If a block doesn't rotate, then don't check if the payload conveyor is trying to input into the output side (#5766) * If a block doesn't rotate, then don't check if the payload conveyor is trying to input into the output side * b l o c k * h * Revert "h" This reverts commit 2860818e3f1d01a13ae35704897ac4b50e71b40f. --- .../mindustry/world/blocks/distribution/PayloadConveyor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java b/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java index 38f1558233..f9c42a4cfc 100644 --- a/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java +++ b/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java @@ -113,7 +113,7 @@ public class PayloadConveyor extends Block{ int ntrns = 1 + size/2; Tile next = tile.nearby(Geometry.d4(rotation).x * ntrns, Geometry.d4(rotation).y * ntrns); - blocked = (next != null && next.solid() && !next.block().outputsPayload) || (this.next != null && (this.next.rotation + 2)%4 == rotation); + blocked = (next != null && next.solid() && !next.block().outputsPayload) || (this.next != null && this.next.block.rotate && (this.next.rotation + 2) % 4 == rotation); } @Override From 79939db1702a179c40f6700cf6d25c55ff7506ae Mon Sep 17 00:00:00 2001 From: Matthew Peng <54301439+MEEPofFaith@users.noreply.github.com> Date: Sat, 14 Aug 2021 17:35:29 -0700 Subject: [PATCH 13/45] If it accepts payloads, then it shouldn't be blocked. (#5767) --- .../mindustry/world/blocks/distribution/PayloadConveyor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java b/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java index f9c42a4cfc..1579589898 100644 --- a/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java +++ b/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java @@ -113,7 +113,7 @@ public class PayloadConveyor extends Block{ int ntrns = 1 + size/2; Tile next = tile.nearby(Geometry.d4(rotation).x * ntrns, Geometry.d4(rotation).y * ntrns); - blocked = (next != null && next.solid() && !next.block().outputsPayload) || (this.next != null && this.next.block.rotate && (this.next.rotation + 2) % 4 == rotation); + blocked = (next != null && next.solid() && !(next.block().outputsPayload || next.block().acceptsPayload)) || (this.next != null && this.next.block.rotate && (this.next.rotation + 2) % 4 == rotation); } @Override From 935549691597eff97a86a6a439348b684fa53510 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 14 Aug 2021 23:19:29 -0400 Subject: [PATCH 14/45] Correct SolidPump bar --- core/src/mindustry/world/blocks/production/SolidPump.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/world/blocks/production/SolidPump.java b/core/src/mindustry/world/blocks/production/SolidPump.java index d9168c82b1..2459b44b64 100644 --- a/core/src/mindustry/world/blocks/production/SolidPump.java +++ b/core/src/mindustry/world/blocks/production/SolidPump.java @@ -48,7 +48,7 @@ public class SolidPump extends Pump{ bars.add("efficiency", (SolidPumpBuild entity) -> new Bar(() -> Core.bundle.formatFloat("bar.pumpspeed", entity.lastPump / Time.delta * 60, 1), () -> Pal.ammo, - () -> entity.warmup)); + () -> entity.warmup * entity.efficiency())); } @Override @@ -114,7 +114,7 @@ public class SolidPump extends Pump{ lastPump = 0f; } - pumpTime += warmup * delta(); + pumpTime += warmup * edelta(); dumpLiquid(result); } From b2f35220e34e91bf3c54fd787e30ce1984e573b4 Mon Sep 17 00:00:00 2001 From: RebornTrack970 <62565267+RebornTrack970@users.noreply.github.com> Date: Sun, 15 Aug 2021 16:30:34 +0300 Subject: [PATCH 15/45] OmegaHub Server Update (#5769) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 01fef15fc5..d2eaf98704 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -13,7 +13,7 @@ }, { "name": "Omega", - "address": ["185.86.230.61:25571", "185.86.230.61:25570", "185.86.230.62:25572","yeet.mindustry.me:6567"] + "address": ["mindustry.me:7175", "185.86.230.61:25570", "185.86.230.61:25572","yeet.mindustry.me:6567"] }, { "name": "MeowLand", From cd0c48985dc31fa32a1c2a03b5fa91d48548ef30 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 15 Aug 2021 09:34:23 -0400 Subject: [PATCH 16/45] Unconditional unit draw state reset --- core/src/mindustry/type/UnitType.java | 4 ++-- gradle.properties | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index bff3ae1f76..af06cc2087 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -570,9 +570,9 @@ public class UnitType extends UnlockableContent{ Draw.reset(); a.draw(unit); } - - Draw.reset(); } + + Draw.reset(); } public void drawPayload(T unit){ diff --git a/gradle.properties b/gradle.properties index d77c1607cd..fe39d88e46 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=9d169d544c0c0f29eb8aca6c49246f968e8d614c +archash=f31d58eac8bf5f1f674b0d6219c1e34ba54de2cc From c35dde5569db62c336e24b253376e79234bf0cb0 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 15 Aug 2021 21:17:16 -0400 Subject: [PATCH 17/45] Fixed #5772 --- core/src/mindustry/world/Block.java | 10 ++++++++-- .../src/mindustry/world/blocks/campaign/LaunchPad.java | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index a68376aac8..d6e7605f76 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -36,8 +36,11 @@ import java.util.*; import static mindustry.Vars.*; public class Block extends UnlockableContent{ + /** If true, buildings have an ItemModule. */ public boolean hasItems; + /** If true, buildings have a LiquidModule. */ public boolean hasLiquids; + /** If true, buildings have a PowerModule. */ public boolean hasPower; public boolean outputsLiquid = false; @@ -45,8 +48,6 @@ public class Block extends UnlockableContent{ public boolean outputsPower = false; public boolean outputsPayload = false; public boolean acceptsPayload = false; - public boolean outputFacing = true; - public boolean noSideBlend = false; public boolean acceptsItems = false; public int itemCapacity = 10; @@ -56,6 +57,11 @@ public class Block extends UnlockableContent{ public final BlockBars bars = new BlockBars(); public final Consumers consumes = new Consumers(); + /** If true, this block outputs to its facing direction, when applicable. + * Used for blending calculations. */ + public boolean outputFacing = true; + /** if true, this block does not accept input from the sides (used for armored conveyors) */ + public boolean noSideBlend = false; /** whether to display flow rate */ public boolean displayFlow = true; /** whether this block is visible in the editor */ diff --git a/core/src/mindustry/world/blocks/campaign/LaunchPad.java b/core/src/mindustry/world/blocks/campaign/LaunchPad.java index 12bcb762b3..0c09a21a9e 100644 --- a/core/src/mindustry/world/blocks/campaign/LaunchPad.java +++ b/core/src/mindustry/world/blocks/campaign/LaunchPad.java @@ -122,7 +122,7 @@ public class LaunchPad extends Block{ if(!state.isCampaign()) return; //increment launchCounter then launch when full and base conditions are met - if((launchCounter += edelta()) >= launchTime && items.total() >= itemCapacity){ + if((launchCounter += edelta()) >= launchTime && edelta() >= 0.001f && items.total() >= itemCapacity){ launchSound.at(x, y); LaunchPayload entity = LaunchPayload.create(); items.each((item, amount) -> entity.stacks.add(new ItemStack(item, amount))); From 3f988cec721e68353fa794214942dc1751de4d54 Mon Sep 17 00:00:00 2001 From: RebornTrack970 <62565267+RebornTrack970@users.noreply.github.com> Date: Mon, 16 Aug 2021 04:23:18 +0300 Subject: [PATCH 18/45] TR Translate (#5770) --- core/assets/bundles/bundle_tr.properties | 52 +++++++++++++----------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index 9f32da7999..a56a2a0326 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -493,7 +493,7 @@ filter.option.amount = Miktar filter.option.block = Blok filter.option.floor = Zemin filter.option.flooronto = Hedef Zemin -filter.option.target = Target +filter.option.target = Hedef filter.option.replacement = Değiştirme filter.option.wall = Duvar filter.option.ore = Maden @@ -539,12 +539,13 @@ configure = Ekipmanı Yapılandır loadout = Yükleme resources = Kaynaklar bannedblocks = Yasaklı Bloklar +bannedunits = Yasaklı Elemanlar addall = Hepsini Ekle launch.from = [accent]{0} dan fırlatılıyor. launch.destination = Varış Yeri: {0} configure.invalid = Miktar 0 ve {0} arasında bir sayı olmalı. add = Ekle... -guardian = Gardian +guardian = Gardiyan connectfail = [crimson]Bağlantı hatası:\n\n[accent]{0} error.unreachable = Sunucuya ulaşılamıyor.\nAdresin doğru yazıldığına emin misiniz? @@ -563,13 +564,15 @@ weather.sandstorm.name = Kum Fırtınası weather.sporestorm.name = Spor Yağmuru weather.fog.name = Sis +sectorlist = Sektörler +sectorlist.attacked = {0} saldırı altında sectors.unexplored = [lightgray]Keşfedilmemiş sectors.resources = Kaynaklar: sectors.production = Üretim: sectors.export = İhracat: sectors.import = İthalat: sectors.time = Zaman: -sectors.threat = Tehlike: +sectors.threat = Zorluk: sectors.wave = Dalga: sectors.stored = Depolanan: sectors.resume = Devam Et @@ -609,8 +612,8 @@ sector.frozenForest.name = Donmuş Orman sector.ruinousShores.name = Harap Kıyılar sector.stainedMountains.name = Lekeli Dağlar sector.desolateRift.name = Issız Kanyon -sector.nuclearComplex.name = Nüleer Santral Kompleksi -sector.overgrowth.name = Aşırı Büyüme +sector.nuclearComplex.name = Nükleer Santral Kompleksi +sector.overgrowth.name = Sarmaşık Sporlar sector.tarFields.name = Katran Çölü sector.saltFlats.name = Tuz Düzlükleri sector.fungalPass.name = Mantar Geçidi @@ -642,7 +645,7 @@ status.wet.name = Islak status.muddy.name = Çamurlu status.melting.name = Eriyor status.sapped.name = Emilmiş -status.electrified.name = Elektirklenmiş +status.electrified.name = Elektriklenmiş status.spore-slowed.name = Sporlanmış status.tarred.name = Ziftlenmiş status.overclock.name = Hızlandırlımış @@ -876,6 +879,7 @@ setting.seconds = {0} Saniye setting.milliseconds = {0} milisaniye setting.fullscreen.name = Tam Ekran setting.borderlesswindow.name = Kenarsız Pencere +setting.borderlesswindow.name.windows = Kenrasız TamEkran setting.borderlesswindow.description = Oyunu baştan açman gerekebilir. setting.fps.name = FPS Göster setting.smoothcamera.name = Yumuşak Geçişli Kamera @@ -999,6 +1003,7 @@ rules.wavetimer = Dalga Zamanlayıcısı rules.waves = Dalgalar rules.attack = Saldırı Modu rules.buildai = Yapay Zeka İnşası +rules.aitier = Yapay Zeka Seviyesi rules.cleanupdeadteams = Kaybeden Takımın Bloklarını Temizle (PvP) rules.corecapture = Yıkımca Çekirdeği Elegeçir rules.polygoncoreprotection = Çokgenli Çekirdek Koruması @@ -1018,12 +1023,15 @@ rules.deconstructrefundmultiplier = Yıkım İade Çarpanı rules.waitForWaveToEnd = Dalgalar Düşmanı Bekler rules.dropzoneradius = İniş Noktası Yarıçapı: [lightgray](kare) rules.unitammo = Birlikler Mermi Gerektiriyor +rules.enemyteam = Düşman Takım +rules.playerteam = Oyuncu Takımı rules.title.waves = Dalgalar rules.title.resourcesbuilding = Kaynaklar & İnşa rules.title.enemy = Düşmanlar rules.title.unit = Birlikler rules.title.experimental = Deneysel rules.title.environment = Çevre +rules.title.teams = Takımlar rules.lighting = Işıklandırma rules.enemyLights = Enemy Lights rules.fire = Ateş @@ -1102,7 +1110,6 @@ unit.reign.name = Reign unit.vela.name = Vela unit.corvus.name = Corvus -block.resupply-point.name = İkmal Noktası block.parallax.name = Parallax block.cliff.name = Uçurum block.sand-boulder.name = Kumlu Kaya Parçaları @@ -1293,7 +1300,7 @@ block.spectre.name = Spectre block.meltdown.name = Meltdown block.foreshadow.name = Foreshadow block.container.name = Konteyner -block.launch-pad.name = Kalkış Pisti +block.launch-pad.name = Fıralatış Rampası block.segment.name = Segment block.command-center.name = Komuta Merkezi block.ground-factory.name = Yer Birimi Fabrikası @@ -1406,7 +1413,6 @@ liquid.oil.description = İleri seviye malzeme üretiminde kullanılan bir sıv liquid.cryofluid.description = Su ve titanyumdan oluşturulan inaktif bir sıvı. Son derece yüksek ısı kapasitesine sahiptir. Soğutucu olarak yaygın olarak kullanılır. block.derelict = [lightgray] Sahipsiz -block.resupply-point.description = Yakındaki birimlere mermi verir. Elektikle çalışmaz. block.armored-conveyor.description = Materyalleri titanyum konveyörlerle aynı hızda taşır ama daha fazla zırha sahiptir. Diğer konveyörler dışında yan taraflardan materyal kabul etmez. block.illuminator.description = Küçük, kompakt, yapılandırılabilir bir ışık kaynağı. Çalışması için enerji gerekir. block.message.description = Bir mesajı saklar. Müttefikler arasındaki haberleşmede kullanılır. @@ -1594,7 +1600,7 @@ unit.navanax.description = Devasa patlayıcı EMP gülleleri fırlatır, düşma lst.read = Bağlı hafıza kutusundaki numarayı okur. lst.write = Bağlı hafıza kutuaundaki numaraya yazar. -lst.print = Text yazar. +lst.print = Yazı yazar. lst.draw = Ekrana Çizer. lst.drawflush = Ekrana Çizimi Aktarır. lst.printflush = Mesaj bloğuna texti aktarır, @@ -1622,7 +1628,7 @@ lenum.config = Bina configurasyonu, örnek: Ayıklayıcı Türü lenum.enabled = Blok aktif mi? laccess.color = Aydınlatıcı Rengi. -laccess.controller = Nirim Kontrol edici. Eğer işlemci kontrol ediyorsa işlemci döner. +laccess.controller = Birim Kontrol edici. Eğer işlemci kontrol ediyorsa işlemci döner. \nFormasyon durumundaysa, lider döner.\nDiğer şekilde, birimi kendi döner. laccess.dead = Bir bina veya birim hala var mı? laccess.controlled = Bir birim ne tarafından kontrol ediliyor? laccess.commanded = [red]Bu komut sonradan silicek! Controlled kullan! @@ -1689,16 +1695,16 @@ lenum.damaged = Hasarlı Aynı Takımdan bir Blok. lenum.spawn = Düşman Oluşum Noktası lenum.building = Bir guruptan bir blok. -lenum.core = Herhangi bir Çekirdek. -lenum.storage = Depolama Bloğu, -lenum.generator = Enerji Üreten bir Blok. -lenum.factory = Fabrika Bloğu, -lenum.repair = Tamir Bloğu. -lenum.rally = Komut Bloğu. -lenum.battery = Pil. -lenum.resupply = Mermi Aktarım Bloğu. -lenum.reactor = Patlama/Thorium Reaktör. -lenum.turret = Herhangi bir taret. +lenum.core = Herhangi bir Çekirdek +lenum.storage = Depolama Bloğu +lenum.generator = Enerji Üreten bir Blok +lenum.factory = Fabrika Bloğu +lenum.repair = Tamir Bloğu +lenum.rally = Komut Bloğu +lenum.battery = Pil +lenum.resupply = Mermi Aktarım Bloğu +lenum.reactor = Patlama/Toryum Reaktör +lenum.turret = Herhangi bir taret sensor.in = Algılanan Blok/Birim. @@ -1731,13 +1737,13 @@ lenum.stop = Dur! lenum.move = Tam konuma git. lenum.approach = Bir Konuma yaklaş. lenum.pathfind = Düşman Doğuş noktasına git. -lenum.target = Bir alana ateş et, +lenum.target = Bir alana ateş et. lenum.targetp = Bir cisme ateş et. lenum.itemdrop = Bir itemi bırak. lenum.itemtake = Bir binadan item al. lenum.paydrop = Kargoyu bırak. lenum.paytake = Kargo al. -lenum.flag = Numara ile işaretle, +lenum.flag = Numara ile işaretle. lenum.mine = Kaz. lenum.build = Bina inşa et. lenum.getblock = Bir bloğun verilerini al. From 09486946fcda1813d401cc4b3fba45ea07df0428 Mon Sep 17 00:00:00 2001 From: JrTRinny <85090668+JrTRinny@users.noreply.github.com> Date: Mon, 16 Aug 2021 08:23:56 +0700 Subject: [PATCH 19/45] Update bundle_th.properties (#5694) * Update bundle_th.properties * banned unit * better environment block name * craters fix + color * name consistensies * add new updates --- core/assets/bundles/bundle_th.properties | 86 +++++++++++++----------- 1 file changed, 46 insertions(+), 40 deletions(-) diff --git a/core/assets/bundles/bundle_th.properties b/core/assets/bundles/bundle_th.properties index 4dca059487..d02eb3976f 100644 --- a/core/assets/bundles/bundle_th.properties +++ b/core/assets/bundles/bundle_th.properties @@ -63,7 +63,7 @@ schematic.copy.import = นำเข้าจากคลิปบอร์ด schematic.shareworkshop = แชร์บนเวิร์กช็อป schematic.flip = [accent][[{0}][]/[accent][[{1}][]: กลับแผนผัง schematic.saved = บันทึกแผนผังแล้ว -schematic.delete.confirm = แผนผังนี้จะถูกกำจัดให้หมดสิ้นโดยสิ้นเชิง +schematic.delete.confirm = แผนผังนี้จะถูกกำจัดให้หมดสิ้นไม่เหลือซาก schematic.rename = เปลี่ยนชื่อแผนผัง schematic.info = {0}x{1}, {2} บล็อก schematic.disabled = [scarlet]การใช้แผนผังถูกปิดไว้[]\nคุณไม่สามารถใช้แผนผังได้ใน[accent]แมพ[]หรือ[accent]เซิร์ฟเวอร์นี้ @@ -71,9 +71,9 @@ schematic.tags = แท็ก: schematic.edittags = แก้ไขแท็ก schematic.addtag = เพิ่มแท็ก schematic.texttag = แท็กข้อความ -schematic.icontag = ไอคอนแท็ก +schematic.icontag = แท็กไอคอน schematic.renametag = เปลี่ยนชื่อแท็ก -schematic.tagdelconfirm = จะลบแท็กนี้ทั้งหมดใช่ไหม? +schematic.tagdelconfirm = จะลบแท็กนี้ทั่วทั้งหมดเลยใช่ไหม? schematic.tagexists = แท็กนี้มีอยู่แล้ว stats = สถิติ @@ -114,7 +114,7 @@ continue = ต่อ maps.none = [lightgray]ไม่มีแมพ! invalid = ไม่ถูกต้อง pickcolor = เลือกสี -preparingconfig = กำลังเตรียม Config +preparingconfig = กำลังเตรียมค่าปรับแต่ง preparingcontent = กำลังเตรียมเนื้อหา uploadingcontent = กำลังอัปโหลดเนื้อหา uploadingpreviewfile = กำลังอัปโหลดไฟล์พรีวิว @@ -186,11 +186,11 @@ server.closing = [accent]กำลังปิดเซิร์ฟเวอร server.kicked.kick = คุณถูกเตะออกจากเซิร์ฟเวอร์! server.kicked.whitelist = คุณไม่ได้ถูกรับเชิญ\nคนที่ถูกรับเชิญเท่านั้นที่จะเข้าได้ server.kicked.serverClose = เซิร์ฟเวอร์ถูกปิด -server.kicked.vote = คุณถูกโหวตเตะออก บัยบาย +server.kicked.vote = คุณถูกโหวตให้เตะออก บัยบาย server.kicked.clientOutdated = ไคลเอนต์เก่า! กรุณาอัปเดตเกมของคุณ! -server.kicked.serverOutdated = เซิร์ฟเวอร์เก่า! โปรดถามเจ้าของเซิร์ฟเวอร์เพื่ออัปเดต! +server.kicked.serverOutdated = เซิร์ฟเวอร์เก่า! โปรดถามโฮสต์เพื่อให้อัปเดต! server.kicked.banned = คุณถูกแบนในเซิร์ฟเวอร์นี้ -server.kicked.typeMismatch = เซิร์ฟเวอร์นี้ไม่เข้ากับประเภทบิลด์ของคุณ +server.kicked.typeMismatch = เซิร์ฟเวอร์นี้ไม่เข้ากับประเภทเวอร์ชั่นของคุณ server.kicked.playerLimit = เซิร์ฟเวอร์เต็ม กรุณารอให้เซิร์ฟเวอร์ว่างก่อน server.kicked.recentKick = คุณเพิ่งถูกเตะออกจากเซิร์ฟเวอร์นี้\nกรุณารอสักครู่เพื่อเข้าร่วมอีกครั้ง server.kicked.nameInUse = มีคนที่ใช้ชื่อนี้\nอยู่ในเซิร์ฟเวอร์แล้ว @@ -229,7 +229,7 @@ trace.playername = ชื่อผู้เล่น: [accent]{0} trace.ip = IP: [accent]{0} trace.id = ID: [accent]{0} trace.mobile = ไคลเอนต์โมบาย: [accent]{0} -trace.modclient = ไคลเอนต์แบบกำหนดเอง: [accent]{0} +trace.modclient = ไคลเอนต์ปรับแต่ง: [accent]{0} trace.times.joined = เวลาเข้า: [accent]{0} trace.times.kicked = เวลาโดนเตะ: [accent]{0} invalidid = client ID ไม่ถูกต้อง! กรุณารายงานบัคนี้ @@ -289,7 +289,7 @@ on = เปิด off = ปิด save.autosave = เซฟอัตโนมัติ: {0} save.map = แมพ: {0} -save.wave = Wave {0} +save.wave = คลื่นที่ {0} save.mode = เกมโหมด: {0} save.date = เซฟล่าสุด: {0} save.playtime = เวลาที่เล่นไป: {0} @@ -317,7 +317,7 @@ data.invalid = นี่ไม่ใช่ข้อมูลเกมที่ data.import.confirm = การนำเข้าข้อมูลจากภายนอกจะเขียนทับข้อมูลเก่า[scarlet]ทั้งหมด[]\n[accent]และไม่สามารถย้อนกลับได้![]\n\nหลังจากที่นำเข้าข้อมูลแล้วเกมจะปิดลงโดยทันที quit.confirm = คุณแน่ใจหรือว่าจะออก? loading = [accent]กำลังโหลด... -reloading = [accent]กำลังรีโหลดม็อด... +downloading = [accent]กำลังดาวน์โหลด... saving = [accent]กำลังเซฟ... respawn = กด [accent][[{0}][] เพื่อเกิดใหม่ที่แกนกลาง cancelbuilding = กด [accent][[{0}][] เพื่อเคลียร์แผน @@ -345,13 +345,13 @@ custom = กำหนดเอง builtin = ติดตัว map.delete.confirm = คุณแน่ใจหรือว่าจะลบแมพนี้? การกระทำครั้งนี้ไม่สามารถย้อนกลับได้! map.random = [accent]สุ่มแมพ -map.nospawn = แมพนี้ไม่มีแกนกลางให้ผู้เล่นเกิด! กรุณาใส่แกนกลาง[accent]สีเหลือง[] ในตัวแก้ไข -map.nospawn.pvp = แมพนี้ไม่มีแกนกลางของศัตรูสำหรับให้ผู้เล่นเกิด! กรุณาใส่แกนกลาง[scarlet]ที่ไม่ใช่สีส้ม[] ในตัวแก้ไข -map.nospawn.attack = แมพนี้ไม่มีแกนกลางของศัตรูสำหรับให้ผู้เล่นโจมตี! กรุณาใส่แกนกลาง[scarlet]สีแดง[] ในตัวแก้ไข +map.nospawn = แมพนี้ไม่มีแกนกลางให้ผู้เล่นเกิด! กรุณาใส่แกนกลาง[#{0}]{1}[] ลงในตัวแก้ไข +map.nospawn.pvp = แมพนี้ไม่มีแกนกลางของศัตรูสำหรับให้ผู้เล่นเกิด! กรุณาใส่แกนกลาง[scarlet]ที่ไม่ใช่สีส้ม[] ลงในตัวแก้ไข +map.nospawn.attack = แมพนี้ไม่มีแกนกลางของศัตรูสำหรับให้ผู้เล่นโจมตี! กรุณาใส่แกนกลาง[#{0}]{1}[] ลงในตัวแก้ไข map.invalid = โหลดแมพผิดพลาด: ไฟล์แมพเสียหายหรือไม่ถูกต้อง workshop.update = อัปเดตไอเท็ม workshop.error = ผิดพลาดในการนำเวิร์กช็อปมา รายละเอียดดังนี้: {0} -map.publish.confirm = คุณแน่ใจหรือว่าจะเผยแพร่แมพนี้?\n\n[lightgray]คุณต้องแน่ใจก่อนว่าคุณเห็นด้วยกับ Workshop EULA, มิฉนั้นแมพจะไม่ปรากฏ! +map.publish.confirm = คุณแน่ใจหรือว่าจะเผยแพร่แมพนี้?\n\n[lightgray]คุณต้องแน่ใจก่อนว่าคุณเห็นด้วยกับ Workshop EULA มิฉนั้นแมพจะไม่ปรากฏ! workshop.menu = เลือกว่าจะทำอะไรกับไอเท็มนี้ workshop.info = ข้อมูลไอเท็ม changelog = สิ่งที่เปลี่ยนไป (ไม่จำเป็น): @@ -482,9 +482,9 @@ filter.terrain = พื้นผิว filter.option.scale = มาตราส่วน filter.option.chance = โอกาส -filter.option.mag = แม็คนิจูต +filter.option.mag = แมกนิจูด filter.option.threshold = เกณฑ์ -filter.option.circle-scale = สเกลวงกลม +filter.option.circle-scale = อัตราวงกลม filter.option.octaves = เลอะเลือน filter.option.falloff = หลุดร่วง filter.option.angle = มุม @@ -522,7 +522,7 @@ editor = ตัวแก้ไขแมพ mapeditor = แก้ไขแมพ abandon = ละทิ้ง -abandon.text = โซนนี้และทรัพยากรทั้งหมดจะถูกยืดไปเป็นของศัตรู +abandon.text = โซนนี้และทรัพยากรทั้งหมดจะถูกยึดไปเป็นของศัตรู locked = ล็อก complete = [lightgray]ต้องมี: requirement.wave = ถึงคลื่นที่ {0} ใน {1} @@ -539,6 +539,7 @@ configure = ตั้งค่าทรัพยากร loadout = ทรัพยากรเริ่มต้น resources = ทรัพยากร bannedblocks = บล็อกต้องห้าม +bannedunits = ยูนิตต้องห้าม addall = เพิ่มทั้งหมด launch.from = ลงจอดจากเซ็กเตอร์: [accent]{0} launch.destination = จุดหมายปลายทาง: {0} @@ -550,7 +551,7 @@ connectfail = [crimson]การเชื่อมต่อผิดพลาด error.unreachable = เซิร์ฟเวอร์ไม่สามารถเข้าถึงได้\nแน่ใจหรือว่าที่อยู่เขียนถูกต้อง? error.invalidaddress = ที่อยู่ไม่ถูกต้อง error.timedout = Timed out!\nเช็คให้แน่ใจว่า port forwarding ของโฮสต์เปิดอยู่และที่อยู่นั้นถูกต้อง! -error.mismatch = Packet error:\nอาจเกิดจากเวอร์ชั่นของ ไคลเอนต์/เซิร์ฟเวอร์ ไม่ตรงกัน\nเช็คให้แน่ใจว่าเซิร์ฟเวอร์ใช้ Mindustry เวอร์ชั่นล่าสุด! +error.mismatch = Packet error:\nอาจเกิดจากเวอร์ชั่นของ ไคลเอนต์/เซิร์ฟเวอร์ ไม่ตรงกัน\nเช็คให้แน่ใจว่าคุณและโฮสต์ใช้ Mindustry เวอร์ชั่นล่าสุด! error.alreadyconnected = เชื่อมต่ออยู่แล้ว error.mapnotfound = ไม่พบไฟล์แมพ error.io = Network I/O error @@ -563,6 +564,8 @@ weather.sandstorm.name = พายุทราย weather.sporestorm.name = พายุสปอร์ weather.fog.name = หมอก +sectorlist = เซ็กเตอร์ +sectorlist.attacked = {0} ถูกโจมตึ sectors.unexplored = [lightgray]ยังไม่ได้สำรวจ sectors.resources = ทรัพยากร: sectors.production = การผลิต: @@ -620,14 +623,14 @@ sector.extractionOutpost.name = ด่านส่งทรัพยากร sector.planetaryTerminal.name = ท่าปล่อยจรวดอวกาศยาน sector.groundZero.description = ที่ที่ดีที่สุดในการเริ่มต้นอีกครั้ง ศัตรูน้อย ทรัพยากรน้อย\nเก็บ[accent]ตะกั่ว[]และ[accent]ทองแดง[]ให้ได้มากที่สุด\nแล้วลุยต่อ -sector.frozenForest.description = แม้แต่ที่นี่ ที่ที่อยู่ใกล้ภูเขา [accent]สปอร์[]ก็ยังแพร่มาถึงที่นี่ อากาศที่เย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป\n\nเริ่มต้นการใช้ไฟฟ้า สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้ เรียนรู้ที่จะใช้เครื่องซ่อมแซม +sector.frozenForest.description = แม้แต่ที่นี่ ที่ที่อยู่ใกล้ภูเขา [accent]สปอร์[]ก็ยังแพร่มาถึงที่นี่\nอากาศอันเย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป\n\nเริ่มต้นการใช้ไฟฟ้า สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้\nเรียนรู้ที่จะใช้เครื่องซ่อมแซม sector.saltFlats.description = ณ ขอบของทะเลทราย เป็นที่ตั้งของที่ราบเกลือ สามารถพบทรัพยากรบางอย่างได้ที่นี่\n\nศัตรูได้ตั้งฐานเก็บทรัพยากรไว้ที่นี่ ทำลายแกนกลางของพวกมัน อย่าให้มีอะไรเหลือ -sector.craters.description = น้ำขังอยู่ในหลุมอุกกาบาศแห่งนี้ อนุสรณ์สถานของสงครามเก่าแก่ ยึดพื้นที่นี่มา เก็บทราย เผา[accent]กระจกเมต้า[] ปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและเครื่องขุดเจาะ -sector.ruinousShores.description = ถัดจากทะเลทราย เป็นที่ตั้งของชายฝั่ง ที่ครั้งก่อน เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง ซึ่งทุกทำลายไปซะส่วนใหญ่แล้ว มีเหลือแค่ระบบการป้องกันพื้นฐาน ทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก\n\nทำการขยายการสำรวจต่อไป ค้นพบกับเทคโนโลยีอีกครั้ง +sector.craters.description = น้ำขังอยู่ในหลุมอุกกาบาศแห่งนี้ อนุสรณ์สถานของสงครามเก่าแก่\nยึดพื้นที่นี่มา เก็บทราย เผา[accent]กระจกเมต้า[]\nปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและเครื่องขุดเจาะ +sector.ruinousShores.description = ถัดมาจากทะเลทราย เป็นที่ตั้งของชายฝั่ง ที่ครั้งก่อน เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง\nซึ่งทุกทำลายไปซะส่วนใหญ่แล้ว มีเหลือแค่ระบบการป้องกันพื้นฐาน\nทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก\n\nทำการขยายการสำรวจต่อไป ค้นพบกับเทคโนโลยีอีกครั้ง sector.stainedMountains.description = เข้าลึกไปในพื้นที่ จะพบกับภูเขา ซึ่งยังไม่ถูกสปอร์แตะต้อง\nขุด[accent]ไทเทเนี่ยม[]ที่อุดมสมบูรณ์ในพื้นที่นี้ เรียนรู้ที่จะใช้มัน\n\nมีศัตรูปรากฏตัวมากขึ้นในบริเวณนี้ อย่าปล่อยให้พวกมันส่งยูนิตที่แข็งแกร่งที่สุดออกมา sector.overgrowth.description = พื้นที่นี้ถูกปกคลุมไปด้วยพืช เข้าใกล้กับแหล่งกำเนิดของสปอร์\nศัตรูได้ตั้งฐานเฝ้าระวังไว้ที่นี่ สร้างยูนิตเมส ทำลายฐานทิ้งซะ\nวิจัย[accent]เครื่องพัฒนารุ่นยกกำลัง[]เพื่อผลิตยูนิตขนาดที่ใหญ่ขึ้น -sector.tarFields.description = ขอบของพื้นที่ผลิตน้ำมัน อยู่ระหว่างภูเขาและทะเลทราย หนึ่งในพื้นที่ที่มีแหล่งน้ำมันดิบที่ใช้งานได้\nแม้ว่าจะถูกทิ้งร้าง พื้นที่นี้ยังคงมีฐานทัพของศัตรูอยู่ใกล้ๆ อย่าประมาทกับพวกมัน\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้ -sector.desolateRift.description = เป็นพื้นที่ที่อันตรายมาก ทรัพยากรมากมาย แต่พื้นที่แคบ ความเสี่ยงการโดนทำลายล้างสูง ออกไปจากที่นี่ให้เร็วที่สุด อย่าถูกหลอกโดยระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ +sector.tarFields.description = ขอบของพื้นที่ผลิตน้ำมัน อยู่ระหว่างภูเขาและทะเลทราย หนึ่งในพื้นที่ที่มีแหล่งน้ำมันดินที่ใช้งานได้\nแม้ว่าจะถูกทิ้งร้าง พื้นที่นี้ยังคงมีฐานทัพของศัตรูอยู่ใกล้ๆ อย่าประมาทกับพวกมัน\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้ +sector.desolateRift.description = เป็นพื้นที่ที่อันตรายมาก ทรัพยากรมากมาย แต่พื้นที่คับแคบ\nความเสี่ยงการโดนทำลายล้างสูง ออกไปจากที่นี่ให้เร็วที่สุด\nอย่าถูกหลอกโดยระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ sector.nuclearComplex.description = สถานที่ผลิตและแปรรูปทอเรี่ยมเก่า ถูกทำลายไม่เหลือสิ้น\nวิจัยทอเรี่ยมและวิธีการใช้มัน\n\nศัตรูในบริเวณนี้มีจำนวนมาก คอยตรวจตราหาผู้บุกรุกอยู่ตลอดเวลา sector.fungalPass.description = ทางผ่านระหว่างพื้นที่สูงและต่ำของภูเขา พื้นที่นี้เต็มไปด้วยสปอร์ ฐานลาดตระเวนขนาดเล็กของศัตรูตั้งอยู่ที่นี่\nทำลายมันซะ\nผลิตยูนิตแด็กเกอร์และครอว์เลอร์ ทำลายแกนกลางทั้งสองไม่ให้เหลือซาก sector.biomassFacility.description = แหล่งต้นกำเนิดของสปอร์ ที่นี่คือฐานวิจัยและผลิตสปอร์เริ่มแรก\nวิจัยเทคโนโลยีที่อยู่ภายในนั้น เพาะชำ[accent]สปอร์[]เพื่อเป็นเชื้อเพลิงและใช้ในการผลิตพลาสติก\n\n[gray]เมื่อสถานที่นี้ถูกทิ้งร้าง สปอร์ก็ถูกปล่อยออกมา ไม่มีสิ่งใดในระบบนิเวศท้องถิ่นที่สามารถแข่งขันกับสิ่งมีชีวิตที่\nแพร่กระจายเช่นนี้ได้ @@ -824,8 +827,8 @@ unit.percent = % unit.shieldhealth = พลังชีวิตโล่ unit.items = ไอเท็ม unit.thousands = k -unit.millions = [] []ล้าน -unit.billions = [] []พันล้าน +unit.millions = [lightgray] []ล้าน +unit.billions = [lightgray] []พันล้าน unit.pershot = [] []ไอเท็ม/การยิง category.purpose = วัตถุประสงค์ category.general = ทั่วไป @@ -863,10 +866,10 @@ setting.difficulty.training = ฝึกซ้อม setting.difficulty.easy = ง่าย setting.difficulty.normal = ปานกลาง setting.difficulty.hard = ยาก -setting.difficulty.insane = ยากมาก +setting.difficulty.insane = โหดเหี้ยม setting.difficulty.name = ระดับความยาก: setting.screenshake.name = การสั่นของจอ -setting.effects.name = แสดงเอฟเฟ็กต์ +setting.effects.name = แสดงเอฟเฟกต์ setting.destroyedblocks.name = แสดงบล็อกที่ถูกทำลาย setting.blockstatus.name = แสดงสถานะของบล็อก setting.conveyorpathfinding.name = ตรวจสอบเส้นทางการวางอัจฉริยะ @@ -876,6 +879,7 @@ setting.seconds = {0} วินาที setting.milliseconds = {0} มิลลิวินาที setting.fullscreen.name = เต็มจอ setting.borderlesswindow.name = หน้าต่างแบบไร้ขอบ +setting.borderlesswindow.name.windows = จอเต็มแบบไร้ขอบ setting.borderlesswindow.description = อาจจะต้องรีสตาร์ทเพื่อใส่การเปลี่ยนแปลง setting.fps.name = แสดง FPS และ Ping setting.smoothcamera.name = กล้องแบบลื่นไหล @@ -922,8 +926,8 @@ keybind.clear_building.name = เคลียร์สิ่งก่อสร keybind.press = กดปุ่มใดก็ได้... keybind.press.axis = กดแกนหรือปุ่มใดก็ได้... keybind.screenshot.name = ถ่ายรูปแมพ -keybind.toggle_power_lines.name = เปิดปิดเลเซอร์พลังงาน -keybind.toggle_block_status.name = เปิดปิดสถานะของบล็อก +keybind.toggle_power_lines.name = เปิด/ปิด เลเซอร์พลังงาน +keybind.toggle_block_status.name = เปิด/ปิด สถานะของบล็อก keybind.move_x.name = เคลื่อนที่ในแกน x keybind.move_y.name = เคลี่อนที่ในแกน y keybind.mouse_move.name = ตามเม้าส์ @@ -999,6 +1003,7 @@ rules.wavetimer = นับถอยหลังการปล่อยคล rules.waves = คลื่น rules.attack = โหมดการโจมตี rules.buildai = AI ก่อสร้าง +rules.aitier = ระดับของ AI rules.cleanupdeadteams = ลบล้างสิ่งก่อสร้างศัตรูที่พ่ายแพ้ (PvP) rules.corecapture = ยืดแกนกลางเมื่อทำลาย rules.polygoncoreprotection = รัศมีปกป้องแกนกลางแบบหลายเหลี่ยม @@ -1018,12 +1023,15 @@ rules.deconstructrefundmultiplier = พหุคูณการคืนทร rules.waitForWaveToEnd = คลื่นรอศัตรู rules.dropzoneradius = รัศมีจุดเกิดของศัตรู:[lightgray] (ช่อง) rules.unitammo = ยูนิตต้องใช้กระสุน +rules.enemyteam = ทีมศัตรู +rules.playerteam = ทีมผู้เล่น rules.title.waves = คลื่น rules.title.resourcesbuilding = ทรัพยากรและสิ่งก่อสร้าง rules.title.enemy = ศัตรู rules.title.unit = ยูนิต rules.title.experimental = ทดลอง rules.title.environment = สิ่งแวดล้อม +rules.title.teams = ทีม rules.lighting = แสง rules.enemyLights = ไฟศัตรู rules.fire = ไฟ @@ -1102,13 +1110,12 @@ unit.reign.name = เรน unit.vela.name = เวล่า unit.corvus.name = คอร์วัส -block.resupply-point.name = จุดเติมของ block.parallax.name = พาราแล็คซ์ block.cliff.name = หน้าผา block.sand-boulder.name = ก้อนหินทราย block.basalt-boulder.name = ก้อนบะซอลต์ block.grass.name = หญ้า -block.molten-slag.name = แร่หลอม +block.molten-slag.name = แร่หลอมละลาย block.space.name = อวกาศ block.salt.name = เกลือ block.salt-wall.name = กำแพงเกลือ @@ -1140,10 +1147,10 @@ block.core-shard.name = แกนกลาง: ชาร์ด block.core-foundation.name = แกนกลาง: ฟาวน์เดชั่น block.core-nucleus.name = แกนกลาง: นิวเคลียส block.deep-water.name = น้ำลึก -block.shallow-water.name = น้ำ +block.shallow-water.name = น้ำตื้น block.tainted-water.name = น้ำเสีย block.darksand-tainted-water.name = น้ำเสียบนทรายดำ -block.tar.name = น้ำมันดิบ +block.tar.name = น้ำมันดิน block.stone.name = หิน block.sand.name = ทราย block.darksand.name = ทรายดำ @@ -1199,7 +1206,7 @@ block.door.name = ประตู block.door-large.name = ประตูขนาดใหญ่ block.duo.name = ดูโอ้ block.scorch.name = สคอร์ช -block.scatter.name = สแกตเตอร์ +block.scatter.name = สแก็ตเตอร์ block.hail.name = ลูกเห็บ block.lancer.name = แลนเซอร์ block.conveyor.name = สายพาน @@ -1289,7 +1296,7 @@ block.overdrive-projector.name = เครื่องเร่งประส block.force-projector.name = เครื่องฉายสนามพลัง block.arc.name = อาร์ค block.rtg-generator.name = เครื่องกำเนิดไฟฟ้า RTG -block.spectre.name = สเปคเตอร์ +block.spectre.name = สเป็คเตอร์ block.meltdown.name = เมลท์ดาวน์ block.foreshadow.name = ฟอร์ชาโดว์ block.container.name = ตู้เก็บของ @@ -1354,8 +1361,8 @@ hint.breaking = [accent]คลิ๊กขวา[] แล้วลากเพ hint.breaking.mobile = เปิดใช้ \ue817 [accent]ค้อน[] ตรงล่างขวาแล้วเลือกเพื่อทำลายบล็อก\n\nเอานิ้วจิ้มลงไปสักแป๊บนึงแล้วลากเพื่อเลือกหลายๆ อัน hint.blockInfo = ดูข้อมูลของบล็อกโดยการเลือกจาก[accent]เมนูการสร้าง[] แล้วกดที่รูป [accent][[?][] ตรงด้านขวา hint.derelict = สิ่งก่อสร้างที่ถูก[accent]ทิ้งร้าง[]คือเศษซากพังทลายของฐานเก่าแก่ที่ไม่สามารถใช้งานได้แล้ว\n\nสิ่งก่อสร้างพวกนี้สามารถ[accent]ทุบทิ้ง[]เพื่อเก็บเกี่ยวทรัพยากรที่อยู่ในนั้นได้ -hint.research = ใช้ปุ่ม \ue875 [accent]วิจัย[] เพื่อวิจัยเทคโนโลยีใหม่ๆ -hint.research.mobile = ใช้ปุ่ม \ue875 [accent]วิจัย[] ใน \ue88c [accent]เมนู[] เพื่อวิจัยเทคโนโลยีใหม่ๆ +hint.research = กดปุ่ม \ue875 [accent]วิจัย[] เพื่อวิจัยเทคโนโลยีใหม่ๆ +hint.research.mobile = กดปุ่ม \ue875 [accent]วิจัย[] ใน \ue88c [accent]เมนู[] เพื่อวิจัยเทคโนโลยีใหม่ๆ hint.unitControl = กด [accent][[L-Ctrl][] ค้างไว้แล้วกด[accent]คลิ๊ก[]เพื่อควบคุมยานพวกพ้องหรือป้อมปืน hint.unitControl.mobile = [accent][[กดสองครั้ง][]เพื่อควบคุมยานพวกพ้องหรือป้อมปืน hint.launch = เมื่อเก็บทรัพยากรเยอะพอ คุณสามารถ[accent]ส่งแกนกลาง[]โดยการเลือกเซ็กเตอร์จาก \ue827 [accent]แผนที่[] ตรงขวาล่าง @@ -1416,9 +1423,8 @@ liquid.oil.details = ของเหลวเฉื่อยพบได้ไ liquid.cryofluid.description = ใช้ในการหล่อเย็นเตาปฏิกร สิ่งก่อสร้างหรือโรงงานต่างๆ liquid.cryofluid.details = ของเหลวเฉื่อยและไม่กัดกร่อน ผลิตจากน้ำและไทเทเนี่ยม มีคุณสมบัติการถ่ายเทความร้อนสูง -block.derelict = [lightgray] ถูกทิ้งร้าง -block.resupply-point.description = เติมกระสุนยูนิตรอบข้างด้วยกระสุนทองแดง ใช้กับยูนิตที่ใช้พลังงานเป็นกระสุนไม่ได้ -block.armored-conveyor.description = เลื่อนไอเท็มไปข้างหน้า เร็วเท่าสายพานไทเทเนี่ยม แต่มีเกราะที่แข็งแรงกว่า ไม่รับไอเท็มจากด้านข้างยกเว้นเป็นสายพานชนิดเดียวกัน +block.derelict =  [lightgray]ถูกทิ้งร้าง +block.armored-conveyor.description = เลื่อนไอเท็มไปข้างหน้า เร็วเท่าสายพานไทเทเนี่ยม แต่มีเกราะที่แข็งแรงกว่า ไม่รับไอเท็มจากด้านข้างยกเว้นเป็นสายพานด้วยกันเอง block.illuminator.description = ตัวเปล่งแสงขนาดกะทัดรัด ส่องสว่างในที่มืดได้ดี\nแถมยังกำหนดสีของแสงได้ด้วย... เจ๋งใช่มั้ยล่ะ block.message.description = เก็บข้อความ ใช้สื่อสารกับพันธมิตร block.graphite-press.description = อัดก้อนถ่านหินให้เป็นแผ่นกราไฟต์บริสุทธิ์ From 8d811550e22a3cf26c7ec1d56d76ded7e081abc9 Mon Sep 17 00:00:00 2001 From: Sharlotte <60801210+Sharlottes@users.noreply.github.com> Date: Mon, 16 Aug 2021 10:24:07 +0900 Subject: [PATCH 20/45] Update bundle_ko.properties (#5680) * Update bundle_ko.properties * Update bundle_ko.properties * Update bundle_ko.properties * Update bundle_ko.properties * Update bundle_ko.properties * They don't like unofficial properties h * Update bundle_ko.properties * translated https://github.com/Anuken/Mindustry/commit/b80129e17b9a8345f6a678658f62165393cdda96#diff-5e346bcec4e8e1d545e035b1e438472bc51937398ac3e8e81308605ec82aea2c, https://github.com/Anuken/Mindustry/commit/7e047ef7262be2ffa0ef257d88cc4557521f1134#diff-5e346bcec4e8e1d545e035b1e438472bc51937398ac3e8e81308605ec82aea2c, https://github.com/Anuken/Mindustry/commit/1cf2bd48923a778b18532d0992e6e50ce2b18dd0#diff-5e346bcec4e8e1d545e035b1e438472bc51937398ac3e8e81308605ec82aea2c, https://github.com/Anuken/Mindustry/commit/a5fe8970c6b36fca6f7e80ef551d82f4531d066d#diff-5e346bcec4e8e1d545e035b1e438472bc51937398ac3e8e81308605ec82aea2c, https://github.com/Anuken/Mindustry/commit/1b0de739f935787daf41bb814d35979fbec650e8#diff-5e346bcec4e8e1d545e035b1e438472bc51937398ac3e8e81308605ec82aea2c * marged from https://github.com/Anuken/Mindustry/pull/5731 --- core/assets/bundles/bundle_ko.properties | 135 ++++++++++++----------- 1 file changed, 72 insertions(+), 63 deletions(-) diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index 89dbb2eaa5..e8fec4caff 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -37,15 +37,15 @@ load.scripts = 스크립트 be.update = 새로운 Bleeding Edge 버전 사용 가능: be.update.confirm = 지금 내려받고 다시 시작하시겠습니까? be.updating = 업데이트 중…. -be.ignore = 무시 +be.ignore = 무시하기 be.noupdates = 업데이트가 없습니다. -be.check = 업데이트 확인 +be.check = 업데이트 확인하기 mods.browser = 모드 탐색기 mods.browser.selected = 선택된 모드 mods.browser.add = 설치 mods.browser.reinstall = 재설치 -mods.github.open = 레포지토리 보기 +mods.github.open = 저장소 보기 mods.browser.sortdate = 최근 업데이트 mods.browser.sortstars = 추천(스타) 수 @@ -92,7 +92,7 @@ level.highscore = 최고 점수: [accent]{0} level.select = 맵 선택 level.mode = 게임 모드: coreattack = < 코어가 공격을 받고 있습니다! > -nearpoint = [[ [scarlet]즉시 적 소환구역에서 떠나십시오[] ]\n단계가 시작하는 순간 인근 건물들과 유닛들이 소멸합니다! +nearpoint = [[ [scarlet]즉시 적 소환구역에서 떠나십시오[] ]\n단계가 시작하는 순간 인근 건물들과 유닛들이 파괴됩니다! database = 코어 데이터베이스 savegame = 게임 저장 loadgame = 게임 불러오기 @@ -122,6 +122,7 @@ committingchanges = 바뀐 점 적용 done = 완료 feature.unsupported = 기기가 이 기능을 지원하지 않습니다. +mods.initfailed = [red]⚠[]이전 민더스트리 실행과정에서 모드를 초기화하지 못했습니다. 잘못된 모드로 인해 발생한 것일 수 있습니다.\n\n 게임 충돌 무한반복을 막기 위해, [red]모든 모드가 비활성화되었습니다.[]\n\n이 시스템을 비활성화하려면, [accent]설정->게임->로딩 중 충돌 시 모드 비활성화[]설정을 끄세요. mods = 모드 mods.none = [lightgray]모드를 찾을 수 없습니다! mods.guide = 모드 제작 가이드 @@ -139,7 +140,7 @@ mod.disable = 비활성화 mod.content = 콘텐츠: mod.delete.error = 모드를 삭제할 수 없습니다. 파일이 사용 중일 수 있습니다. mod.requiresversion = [scarlet]필요한 최소 게임 버전: [accent]{0} -mod.outdated = [scarlet]V6 버전과 호환되지 않음 (minGameVersion: 105 이상이 아님) +mod.outdated = [scarlet]6.0 버전과 호환되지 않음 (minGameVersion: 105 이상이 아님) mod.missingdependencies = [scarlet]누락된 필요 모드: {0} mod.erroredcontent = [scarlet]콘텐츠 오류 mod.errors = 콘텐츠를 불러오는 중에 오류가 발생함. @@ -214,6 +215,7 @@ hosts.none = [lightgray]LAN 게임을 찾을 수 없습니다! host.invalid = [scarlet]서버에 연결할 수 없습니다! servers.local = 로컬 서버 +servers.local.steam = 공개 서버 & 로컬 서버 servers.remote = 원격 서버 servers.global = 커뮤니티 서버 @@ -315,7 +317,7 @@ data.invalid = 유효한 게임 데이터가 아닙니다. data.import.confirm = 외부 데이터를 가져오면 현재 게임 데이터를 [scarlet]모두[] 덮어쓰게 됩니다.\n[accent]이 작업은 취소할 수 없습니다![]\n\n데이터를 가져오면 게임이 즉시 종료됩니다. quit.confirm = 정말로 종료하시겠습니까? loading = [accent]불러오는중... -reloading = [accent]모드 새로고침하는중... +downloading = [accent]다운로드중... saving = [accent]저장중... respawn = [accent][[{0}][] 키를 눌러 코어에서 부활 cancelbuilding = [accent][[{0}][] 키를 눌러 건설 계획을 초기화 @@ -343,9 +345,9 @@ custom = 사용자 정의 builtin = 내장 map.delete.confirm = 정말로 이 맵을 삭제하시겠습니까? 이 명령은 취소할 수 없습니다! map.random = [accent]무작위 맵 -map.nospawn = 이 맵에 플레이어가 생성될 코어가 없습니다! 편집기에서 [accent]주황색[] 코어를 맵에 추가하세요. +map.nospawn = 이 맵에 플레이어가 생성될 코어가 없습니다! 편집기에서 [#{0}]{1}[] 코어를 맵에 추가하세요. map.nospawn.pvp = 이 맵에는 적 플레이어가 생성될 코어가 없습니다! 편집기에서 [royal]주황색 팀이 아닌[] 코어를 추가하세요. -map.nospawn.attack = 이 맵에는 플레이어가 공격할 수 있는 적 코어가 없습니다! 편집기에서 [royal]빨간색[] 코어들을 맵에 추가하세요. +map.nospawn.attack = 이 맵에는 플레이어가 공격할 수 있는 적 코어가 없습니다! 편집기에서 [#{0}]{1}[] 코어들을 맵에 추가하세요. map.invalid = 맵 로드 오류: 맵 파일이 손상되었거나 잘못된 파일입니다. workshop.update = 아이템 업데이트 workshop.error = 창작마당 세부 사항을 가져오는 중 오류가 발생했습니다: {0} @@ -522,7 +524,7 @@ mapeditor = 맵 편집기 abandon = 포기하기 abandon.text = 이 지역과 모든 자원이 적에게 넘어갑니다. locked = 잠김 -complete = [lightgray]해금 조건 : +complete = [lightgray]해금 조건: requirement.wave = {1} 지역에서 {0}단계 달성 requirement.core = {0} 지역에서 적 코어를 파괴 requirement.research = {0} 연구 @@ -537,14 +539,15 @@ configure = 초기자원 설정 loadout = 출격 resources = 자원 bannedblocks = 금지된 블록들 +bannedunits = 금지된 유닛들 addall = 모두 추가 -launch.from = 출격 출발지 : [accent]{0} +launch.from = 출격 출발지: [accent]{0}[] launch.destination = 목적지: {0} configure.invalid = 해당 값은 0에서 {0} 사이의 숫자여야 합니다. add = 추가... guardian = 수호자 -connectfail = [scarlet]연결 오류:\n\n[accent]{0} +connectfail = [scarlet]연결 오류:[]\n\n[][accent]{0}[] error.unreachable = 서버에 연결하지 못했습니다.\n서버 주소가 정확히 입력되었나요? error.invalidaddress = 잘못된 주소입니다. error.timedout = 시간 초과!\n서버에 포트 포워딩이 설정되어 있고 주소가 올바른지 확인하세요. @@ -561,7 +564,9 @@ weather.sandstorm.name = 모래 폭풍 weather.sporestorm.name = 포자 폭풍 weather.fog.name = 안개 -sectors.unexplored = [lightgray]미개척지 +sectorlist = 지역 목록 +sectorlist.attacked = {0} 공격받는 중 +sectors.unexplored = [lightgray]미개척지[] sectors.resources = 자원: sectors.production = 생산량: sectors.export = 수출량: @@ -573,20 +578,20 @@ sectors.stored = 저장량: sectors.resume = 재개 sectors.launch = 출격 sectors.select = 선택 -sectors.nonelaunch = [lightgray]없음 (sun) -sectors.rename = 지역 이름 변경 -sectors.enemybase = [scarlet]적 기지 -sectors.vulnerable = [scarlet]취약함 -sectors.underattack = [scarlet]공격받고 있습니다! [accent]{0}% 손상됨. -sectors.survives = [accent]{0} 단계 이상 버티세요. +sectors.nonelaunch = [lightgray]없음 (sun)[] +sectors.rename = 지역 이름 변경하기 +sectors.enemybase = [scarlet]적 기지[] +sectors.vulnerable = [scarlet]취약함[] +sectors.underattack = [scarlet]공격받고 있습니다! [accent]{0}% 손상됨[][] +sectors.survives = [accent]{0} 단계 이상 버티세요.[] sectors.go =진입 sector.curcapture = 지역 점령됨 sector.curlost = 지역 잃음 -sector.missingresources = [scarlet]자원 부족 -sector.attacked = [accent]{0}[white] 지역이 공격받고 있습니다! -sector.lost = [accent]{0}[white] 지역을 잃었습니다! +sector.missingresources = [scarlet]자원 부족[] +sector.attacked = [accent]{0}[white] 지역이 공격받고 있습니다![] +sector.lost = [accent]{0}[white] 지역을 잃었습니다![] #note: the missing space in the line below is intentional -sector.captured = [accent]{0}[white] 지역을 점령했습니다! +sector.captured = [accent]{0}[white] 지역을 점령했습니다![] sector.changeicon = 아이콘 바꾸기 threat.low = 낮음 @@ -659,25 +664,25 @@ settings.sound = 소리 settings.graphics = 그래픽 settings.cleardata = 게임 데이터 초기화 settings.clear.confirm = 정말로 이 데이터를 지우시겠습니까?\n되돌릴 수 없습니다! -settings.clearall.confirm = [scarlet]경고![]\n이 작업은 저장된 맵, 맵파일, 잠금 해제된 목록과 조작키 설정, 그리고 모든 데이터를 삭제합니다.\n확인 버튼을 다시 눌러 모든 데이터를 삭제하고 게임에서 나갑니다. +settings.clearall.confirm = [scarlet]경고![]\n이 작업은 저장된 맵, 맵파일, 잠금 해제된 목록과 조작키 설정, 그리고 모든 데이터를 삭제합니다.\n확인 버튼을 다시 눌러 모든 데이터를 삭제하고 게임에서 나갑니다.[] settings.clearsaves.confirm = 정말로 모든 저장된 파일들을 삭제하시겠습니까? settings.clearsaves = 저장 초기화 settings.clearresearch = 연구 초기화 settings.clearresearch.confirm = 정말로 모든 연구를 삭제하시겠습니까? settings.clearcampaignsaves = 캠페인 맵 초기화 settings.clearcampaignsaves.confirm = 정말로 캠페인을 초기화하시겠습니까? -paused = [accent]< 일시정지 > +paused = [accent]< 일시정지 >[] clear = 초기화 banned = [scarlet]금지됨 -unsupported.environment = [scarlet]지원되지 않는 환경 +unsupported.environment = [scarlet]지원되지 않는 환경[] yes = O no = X info.title = 정보 -error.title = [scarlet]오류가 발생했습니다 +error.title = [scarlet]오류가 발생했습니다[] error.crashtitle = 오류가 발생했습니다 -unit.nobuild = [scarlet]건설 불가 -lastaccessed = [lightgray]마지막 접근: {0} -block.unknown = [lightgray]??? +unit.nobuild = [scarlet]건설 불가[] +lastaccessed = [lightgray]마지막 접근: {0}[] +block.unknown = [lightgray]???[] stat.showinmap = <맵을 먼저 불러와야 합니다> stat.description = 특성 @@ -786,23 +791,23 @@ bar.power = 전력 bar.progress = 건설 진행도 bar.input = 입력 bar.output = 출력 -bar.strength = [stat]{0}[lightgray]x 치료 속도 +bar.strength = [stat]{0}[lightgray]x 치료 속도[][] -units.processorcontrol = [lightgray]프로세서 제어됨 +units.processorcontrol = [lightgray]프로세서 제어됨[] -bullet.damage = [stat]{0}[lightgray] 피해량 -bullet.splashdamage = [stat]{0}[lightgray] 범위 피해량 ~ [stat]{1}[lightgray] 타일 -bullet.incendiary = [stat]방화 -bullet.homing = [stat]유도 -bullet.frags = [stat]{0}[lightgray]개 파편 탄환: -bullet.lightning = [stat]{0}[lightgray]x 전격 ~ [stat]{1}[lightgray] 피해량 -bullet.buildingdamage = [stat]{0}%[lightgray] 건물 피해량 -bullet.knockback = [stat]{0}[lightgray] 넉백 -bullet.pierce = [stat]{0}[lightgray]번 관통 -bullet.infinitepierce = [stat]관통 -bullet.healpercent = [stat]{0}[lightgray]% 회복 -bullet.multiplier = [stat]{0}[lightgray]배 탄약 배수 -bullet.reload = [stat]{0}[lightgray]배 발사 속도 +bullet.damage = [stat]{0}[lightgray] 피해량[][] +bullet.splashdamage = [stat]{0}[lightgray] 범위 피해량 ~ [stat]{1}[lightgray] 타일[][][][] +bullet.incendiary = [stat]방화[] +bullet.homing = [stat]유도[] +bullet.frags = [stat]{0}[lightgray]개 파편 탄환:[][] +bullet.lightning = [stat]{0}[lightgray]x 전격 ~ [stat]{1}[lightgray] 피해량[][][][] +bullet.buildingdamage = [stat]{0}%[lightgray] 건물 피해량[][] +bullet.knockback = [stat]{0}[lightgray] 넉백[][] +bullet.pierce = [stat]{0}[lightgray]번 관통[][] +bullet.infinitepierce = [stat]관통[] +bullet.healpercent = [stat]{0}[lightgray]% 회복[][] +bullet.multiplier = [stat]{0}[lightgray]배 탄약 배수[][] +bullet.reload = [stat]{0}[lightgray]배 발사 속도[][] unit.blocks = 블록 unit.blockssquared = 블록² @@ -833,13 +838,13 @@ category.items = 자원 category.crafting = 입력/출력 category.function = 기능 category.optional = 선택적 향상 +setting.skipcoreanimation.name = 코어 발사/착륙 애니메이션 건너뛰기 setting.landscape.name = 가로화면 잠금 setting.shadows.name = 그림자 setting.blockreplace.name = 자동 블록 제안 setting.linear.name = 선형 필터링 setting.hints.name = 힌트 표시 setting.logichints.name = 로직 힌트 표시 -setting.flow.name = 자원 흐름량 표시 setting.backgroundpause.name = 백그라운드에서 일시정지 setting.buildautopause.name = 건설 자동 일시정지 setting.doubletapmine.name = 연속 터치로 채광 @@ -858,9 +863,9 @@ setting.uiscale.name = UI 스케일링 setting.uiscale.description = 적용하려면 재시작이 필요합니다. setting.swapdiagonal.name = 항상 대각선 배치 setting.difficulty.training = 훈련 -setting.difficulty.easy = 무난 +setting.difficulty.easy = 쉬움 setting.difficulty.normal = 보통 -setting.difficulty.hard = 혼돈 +setting.difficulty.hard = 어려움 setting.difficulty.insane = 박멸 setting.difficulty.name = 난이도: setting.screenshake.name = 화면 흔들림 @@ -874,6 +879,7 @@ setting.seconds = {0} 초 setting.milliseconds = {0} 밀리초 setting.fullscreen.name = 전체 화면 setting.borderlesswindow.name = 테두리 없는 창 모드 +setting.borderlesswindow.name.windows = 테두리 없는 전체화면 setting.borderlesswindow.description = 적용하려면 재시작이 필요할 수도 있습니다. setting.fps.name = FPS와 핑 표시 setting.smoothcamera.name = 부드러운 시점 @@ -997,6 +1003,7 @@ rules.wavetimer = 시간 제한이 있는 단계 rules.waves = 단계 rules.attack = 공격 모드 rules.buildai = AI 건설 +rules.aitier = AI 등급 rules.cleanupdeadteams = 패배한 팀 건물 정리하기 (PvP) rules.corecapture = 코어 파괴 시 점령 rules.polygoncoreprotection = 다각형 코어 건설 금지구역 @@ -1016,12 +1023,15 @@ rules.deconstructrefundmultiplier = 철거 환불 배수 rules.waitForWaveToEnd = 한 단계가 끝날때까지 대기 rules.dropzoneradius = 스폰 구역 범위: [lightgray] (타일) rules.unitammo = 유닛 탄약 필요 +rules.enemyteam = 상대 팀 +rules.playerteam = 플레이어 팀 rules.title.waves = 단계 rules.title.resourcesbuilding = 자원 & 건축 rules.title.enemy = 적 rules.title.unit = 유닛 rules.title.experimental = 실험적인 기능 rules.title.environment = 환경 +rules.title.teams = 팀 rules.lighting = 조명 표시 rules.enemyLights = 상대에게 조명 표시 rules.fire = 방화 허용 @@ -1100,7 +1110,6 @@ unit.reign.name = 레인 unit.vela.name = 벨라 unit.corvus.name = 코르버스 -block.resupply-point.name = 보급 지점 block.parallax.name = 패럴랙스 block.cliff.name = 언덕 block.sand-boulder.name = 사암 바위 @@ -1351,7 +1360,7 @@ hint.placeTurret = 적에게서 기지를 막아내려면 \uf861 [accent]포탑[ hint.breaking = 블록을 부수려면 [accent]우클릭[]이나 드래그를 하십시오. hint.breaking.mobile = 블록을 부수려면 오른쪽 아래의 \ue817 [accent]망치[]를 눌러 해체 모드를 활성화하십시오.\n\n손가락으로 누른 채로 끌어서 해체 범위를 지정하십시오. hint.blockInfo = [accent]건설 메뉴[]에서 블록을 선택해서 정보를 보십시오, 그다음 오른쪽의 [accent][[?][] 버튼을 선택하십시오. -hint.derelict = [accent]버려진[] 구조물들은 더 이상 작동하지 않는 오래된 기지의 부서진 잔해입니다.\n\n이 구조물들은 자원으로 다시 [accent]철거[]될 수 있습니다. +hint.derelict = [accent]잔해[] 구조물들은 더 이상 작동하지 않는 오래된 기지의 부서진 잔해입니다.\n\n이 구조물들은 자원으로 다시 [accent]철거[]될 수 있습니다. hint.research = 새 기술을 연구하려면 \ue875 [accent]연구[]버튼을 누르십시오. hint.research.mobile = 새 기술을 연구하려면 \ue88c [accent]메뉴[] 아래의 \ue875 [accent]연구[]버튼을 누르십시오. hint.unitControl = 아군 유닛과 포탑을 조종하려면 [accent][[왼쪽 ctrl][]을 누른 채로 [accent]클릭[] 하십시오. @@ -1368,7 +1377,7 @@ hint.payloadPickup = 작은 블록이나 유닛을 집으려면 [accent][[[]를 hint.payloadPickup.mobile = 작은 블록이나 유닛을 집으려면 [accent]잠깐 누르십시오[]. hint.payloadDrop = 다시 내려놓으려면 [accent]][]를 누르십시오. hint.payloadDrop.mobile = 다시 내려놓으려면 빈 공간에서 [accent]화면을 잠깐 누르십시오[]. -hint.waveFire = [accent]Wave[]포탑에 탄약으로 물을 넣으면 주변의 불을 자동으로 꺼줍니다. +hint.waveFire = [accent]파도[] 포탑에 탄약으로 물을 넣으면 주변의 불을 자동으로 꺼줍니다. hint.generator = \uf879 [accent]화력 발전기[]는 석탄을 태워서 주변 블록에 전력을 전달합니다.\n\n \uf87f 더 넓은 범위의 블록에 전력을 전달하려면 [accent]Power Nodes[]를 사용하십시오. hint.guardian = [accent]수호자[] 유닛들은 방어력을 가집니다. [accent]구리[]와 [accent]납[] 같은 약한 탄약으로는 [scarlet]아무런 효과도 없습니다[].\n\n그런 수호자를 없애려면 높은 단계의 포탑 또는 \uf835 [accent]흑연[]을 탄약으로 넣은 \uf861듀오/\uf859살보를 사용하십시오. hint.coreUpgrade = 코어는 [accent]상위 코어를 위에 설치함[]으로써 업그레이드할 수 있습니다.\n\n [accent]기반[] 코어를 [accent]조각[] 코어 위에 설치하십시오. 주변에 장애물이 없는지도 확인하십시오. @@ -1403,8 +1412,7 @@ liquid.slag.description = 다양한 종류의 금속들이 함께 섞여 녹아 liquid.oil.description = 고급 재료 생산에 사용되는 액체. 석탄으로 전환하거나 무기로 뿌려서 불을 지를 수 있습니다. liquid.cryofluid.description = 물과 티타늄으로 만든 비부식성 액체. 열용량이 매우 높으며 냉각수로 광범위하게 사용됩니다. -block.derelict = [lightgray] 버려짐[] -block.resupply-point.description = 주변 유닛들에 구리 탄약을 보급합니다. 배터리 전력이 필요한 유닛들은 호환되지 않습니다. +block.derelict =  [lightgray]잔해 block.armored-conveyor.description = 앞으로 자원들을 운반합니다. 측면에서 자원들을 받아들이지 않습니다. block.illuminator.description = 발광합니다. block.message.description = 아군 간의 소통을 위한 메시지를 저장합니다. @@ -1741,7 +1749,8 @@ lenum.build = 구조물 건설 lenum.getblock = 특정 좌표의 빌딩과 블록을 반환합니다.\n위치는 유닛의 인지 범위 내여야 합니다.\n자연 지형은 [accent]@solid[]의 타입을 가집니다. lenum.within = 좌표 주변 유닛 발견 여부 lenum.boost = 이륙 시작/중단 -#1730 line matching / 줄 매칭 + +#1745 line matching / 줄 매칭 #-------------비공식 번역------------- #팁, 패치 기록, 약간의 관련 드립을 넣는 곳입니다. 이미 쓰여진 줄이 있다면 \n\n를 입력한 다음 작성하고 끝에 깃허브 작성자 닉네임(또는 디스코드)을 적어주세요. @@ -1753,7 +1762,7 @@ lenum.boost = 이륙 시작/중단 #관련 문의는 공식 디스코드에서 절 불러주세요. Sharlotte#0018 #아이템 -item.metaglass.details = [lightgray][비공식][]쓰임세가 가장 적은 아이템 +item.metaglass.details = [lightgray][비공식][]쓰임새가 가장 적은 아이템 item.graphite.details = item.sand.details = item.titanium.details = @@ -1769,7 +1778,7 @@ item.pyratite.details = liquid.water.details = liquid.slag.details = liquid.oil.details = -liquid.cryofluid.details = [lightgray][비공식][]티타늄을 갈아서 물에 희석했다는 소문이 있다. +liquid.cryofluid.details = [lightgray][비공식][]티타늄을 갈아서 물에 희석했다. #블록 block.resupply-point.details = @@ -1844,8 +1853,8 @@ block.power-node.details = block.power-node-large.details = block.surge-tower.details = block.diode.details = -block.battery.details = -block.battery-large.details = +block.battery.details = [lightgray][비공식][]아크와 랜서같은 전기먹는하마 옆에 많이 설치해두자. +block.battery-large.details = [lightgray][비공식][]일반 베터리 9개보다 5000만큼의 전력을 더 저장할 수 있다. block.combustion-generator.details = block.thermal-generator.details = block.steam-generator.details = @@ -1859,7 +1868,7 @@ block.mechanical-drill.details = block.pneumatic-drill.details = block.laser-drill.details = block.blast-drill.details = -block.water-extractor.details = +block.water-extractor.details = [lightgray][비공식][]맨 땅에서 물을 뽑아낸다. 이것이 바로 창조경제 block.oil-extractor.details = block.vault.details = block.container.details = @@ -1904,9 +1913,9 @@ block.multiplicative-reconstructor.details = block.exponential-reconstructor.details = block.tetrative-reconstructor.details = block.switch.details = -block.micro-processor.details = -block.logic-processor.details = -block.hyper-processor.details = +block.micro-processor.details = [lightgray][비공식][]Hello, World! +block.logic-processor.details = [lightgray][비공식][]99병의 맥주가 벽장에 있네, 99병의 맥주라네 +block.hyper-processor.details = [lightgray][비공식][]그것을 내려서 넘겼네, 더 이상 벽장에 맥주가 없네 block.memory-cell.details = block.memory-bank.details = block.logic-display.details = @@ -1934,7 +1943,7 @@ unit.horizon.details = unit.zenith.details = unit.antumbra.details = unit.eclipse.details = -unit.mono.details = +unit.mono.details = [lightgray][비공식][]민더스트리 최고 귀요미. unit.poly.details = unit.mega.details = unit.quad.details = @@ -1943,7 +1952,7 @@ unit.risso.details = [lightgray][비공식][]뭉치면 연사력이 무시무시 unit.minke.details = unit.bryde.details = unit.sei.details = [lightgray][비공식][]세이 sei! -unit.omura.details = +unit.omura.details = [lightgray][비공식][]오무라이스? unit.retusa.details = [lightgray][비공식][]바다를 지뢰로 뒤덮어보죠. unit.oxynoe.details = unit.cyerce.details = [lightgray][비공식][]폭죽놀이다! From 0b99d71bd4b4578bf6974dbbbec47212441cf9e0 Mon Sep 17 00:00:00 2001 From: Thomas Widyantoko <40286070+DaGamerFiles@users.noreply.github.com> Date: Mon, 16 Aug 2021 08:24:13 +0700 Subject: [PATCH 21/45] [ID] v7 prealpha translation (#5669) * Indonesian bundle update lenum.controller description and Tar Fields map * translation bundle sync * Indonesian translation standardization * healing status effect * Indonesian translation for V7 bit confused on line 1611 * [ID] WIP polygonal core protection * [ID] Updates Indonesian V7 translation Logic wait & content look up instructions * [ID] v7 prealpha translation draft 1 * [ID] v7 prealpha translation part 2 Fixed a line and made changes to untranslated lines. --- core/assets/bundles/bundle_in_ID.properties | 68 +++++++++++++-------- 1 file changed, 41 insertions(+), 27 deletions(-) diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index 9252a94e7f..5c9e031a14 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -101,6 +101,7 @@ customgame = Permainan Modifikasi newgame = Permainan Baru none = none.found = [lightgray] +none.inmap = [lightgray] minimap = Peta Kecil position = Posisi close = Tutup @@ -192,15 +193,15 @@ server.kicked.banned = Anda telah dilarang untuk memasuki server ini. server.kicked.typeMismatch = Server ini tidak cocok dengan versi build Anda. server.kicked.playerLimit = Server ini penuh. Tunggu slot kosong. server.kicked.recentKick = Anda baru saja dikeluarkan dari server ini.\nTunggu sesaat sebelum masuk lagi. -server.kicked.nameInUse = Sudah ada pemain dengan nama tersebut \ndi server ini. +server.kicked.nameInUse = Sudah ada pemain dengan nama tersebut\ndi server ini. server.kicked.nameEmpty = Nama yang dipilih tidak valid. server.kicked.idInUse = Anda telah berada di server ini! Memasuki dengan dua akun tidak diizinkan. server.kicked.customClient = Server ini tidak mendukung versi modifikasi. Unduh versi resmi. server.kicked.gameover = Permainan telah berakhir! server.kicked.serverRestarting = Server sedang mengulang kembali. server.versions = Versi Anda:[accent] {0}[]\nVersi server:[accent] {1}[] -host.info = Tombol [accent]host[] akan membuat server sementara di port [scarlet]6567[]. \nSemua orang yang memiliki [lightgray]Wi-Fi atau jaringan lokal[] akan bisa melihat server anda di daftar server mereka.\n\nJika Anda ingin pemain dari mana saja memasuki servermu dengan IP, dibutuhkan untuk melakukan [accent]port forwarding[].\n\n[lightgray]Diingat: Jika seseorang mengalami masalah memasuki permainan lokalmu, pastikan Anda telah mengizinkan Mindustry akses ke jaringan lokalmu di pengaturan firewall. -join.info = Disini, Anda bisa memasuki [accent]server IP[], atau menemukan [accent]server lokal[] untuk bermain bersama.\nLAN dan WAN mendukung permainan bersama.\n\n[lightgray]Ingat: Tidak ada daftar server global; jika anda ingin bergabung dengan seseorang memakai IP, Anda perlu menanyakan host tentang IP mereka. +host.info = Tombol [accent]host[] akan membuat server sementara di port [scarlet]6567[]. \nSemua orang yang memiliki [lightgray]Wi-Fi atau jaringan lokal[] akan bisa melihat server Anda di daftar server mereka.\n\nJika Anda ingin pemain dari mana saja memasuki server Anda dengan IP, [accent]port forwarding[] sangat diperlukan.\n\n[lightgray]Catatan: Jika seseorang mengalami masalah memasuki permainan lokal Anda, pastikan Anda telah mengizinkan Mindustry akses ke jaringan lokalmu di pengaturan firewall. Perlu diingat bahwa jaringan publik terkadang tidak mengizinkan pencarian server. +join.info = Disini, Anda bisa memasuki [accent]server IP[], atau menemukan [accent]server lokal[] untuk bermain bersama.\nLAN dan WAN mendukung permainan bersama.\n\n[lightgray]Jika Anda ingin bergabung dengan seseorang dengan IP, Anda perlu menanyakan host tentang IP mereka, yang dapat dicari dengan meng-google "my ip" melalui perangkat mereka. hostserver = Host Permainan invitefriends = Undang Teman hostserver.mobile = Host\nPermainan @@ -214,6 +215,7 @@ hosts.none = [lightgray]Tidak ditemukan game lokal! host.invalid = [scarlet]Tidak bisa menyambung dengan pemilik. servers.local = Server Lokal +servers.local.steam = Permainan Publik & Server Lokal servers.remote = Server Jarak Jauh (Simpanan) servers.global = Server Komunitas @@ -222,10 +224,10 @@ servers.showhidden = Tampilkan Server Tersembunyi server.shown = Ditampilkan server.hidden = Disembunyikan -trace = Melacak Pemain +trace = Lacak Pemain trace.playername = Nama pemain: [accent]{0} trace.ip = IP: [accent]{0} -trace.id = ID Unik: [accent]{0} +trace.id = ID: [accent]{0} trace.mobile = Client Mobile: [accent]{0} trace.modclient = Client Modifikasi: [accent]{0} trace.times.joined = Total Bergabung: [accent]{0} @@ -238,9 +240,9 @@ server.admins.none = Tidak ada admin! server.add = Tambahkan Server server.delete = Anda yakin ingin menghapus server ini? server.edit = Sunting Server -server.outdated = [crimson]Server Kadaluarsa![] -server.outdated.client = [crimson]Client Kadaluarsa![] -server.version = [lightgray]Versi: {0} {1} +server.outdated = [scarlet]Server Kadaluarsa![] +server.outdated.client = [scarlet]Client Kadaluarsa![] +server.version = [gray]v{0} {1} server.custombuild = [accent]Bentuk Modifikasi confirmban = Anda yakin ingin melarang pemain ini untuk masuk lagi? confirmkick = Anda yakin ingin mengeluarkan pemain ini? @@ -353,12 +355,12 @@ map.publish.confirm = Apakah Anda yakin untuk menerbitkan peta ini?\n\n[lightgra workshop.menu = Pilih apa yang Anda ingin lakukan dengan item ini. workshop.info = Informasi item changelog = Catatan Pembaruan (opsional): -eula = Steam EULA +eula = EULA Steam missing = Item ini telah dihapus atau dipindah.\n[lightgray]Daftar Workshop sekarang telah tidak terhubung secara otomatis. publishing = [accent]Menerbitkan... -publish.confirm = Apakah Anda yakin untuk menerbitkan item ini?\n\n[lightgray]Pastikan Anda setuju dengan Workshop EULA terlebih dahulu, atau item Anda tidak akan muncul! +publish.confirm = Apakah Anda yakin untuk menerbitkan item ini?\n\n[lightgray]Pastikan Anda setuju dengan EULA Workshop terlebih dahulu, atau item Anda tidak akan muncul! publish.error = Terjadi kesalahan saat menerbitkan item: {0} -steam.error = Gagal untuk menginisialisasi layanan Steam.\nError: {0} +steam.error = Gagal untuk menjalankan layanan Steam.\nKesalahan: {0} editor.brush = Kuas editor.openin = Buka di Penyunting @@ -464,7 +466,7 @@ filters.empty = [lightgray]Tidak ada filter! Tambahkan dengan tombol dibawah. filter.distort = Kerusakkan filter.noise = Kebisingan filter.enemyspawn = Pilih Munculnya Musuh -filter.spawnpath = Path To Spawn +filter.spawnpath = Jalur ke Titik Muncul filter.corespawn = Pilih Inti filter.median = Median filter.oremedian = Median Bijih @@ -522,8 +524,8 @@ mapeditor = Penyunting Peta abandon = Tinggalkan abandon.text = Zona ini dan semua sumber daya didalamnya akan berada di tangan musuh. locked = Terkunci -complete = [lightgray]Mencapai: -requirement.wave = Capai gelombang {0} dalam {1} +complete = [lightgray]Selesaikan: +requirement.wave = Raih gelombang {0} dalam {1} requirement.core = Hancurkan inti musuh dalam {0} requirement.research = Kembangkan {0} requirement.produce = Produksi {0} @@ -541,7 +543,7 @@ addall = Tambah Semua launch.from = Meluncurkan Dari: [accent]{0} launch.destination = Destinasi: {0} configure.invalid = Jumlah harus berupa angka diantara 0 dan {0}. -add = Menambahkan... +add = Tambahkan... guardian = Penjaga connectfail = [scarlet]Gagal menyambung ke server:\n\n[accent]{0} @@ -553,7 +555,7 @@ error.alreadyconnected = Sudah tersambung. error.mapnotfound = File peta tidak ditemaukan! error.io = Terjadi kesalahan jaringan I/O. error.any = Terjadi kesalahan Jaringan tidak diketahui. -error.bloom = Gagal untuk menginisialisasi bloom.\nPerangkat Anda mungkin tidak mendukung fitur ini. +error.bloom = Gagal untuk menjalankan bloom.\nPerangkat Anda mungkin tidak mendukung fitur ini. weather.rain.name = Hujan weather.snow.name = Salju @@ -565,6 +567,7 @@ sectors.unexplored = [lightgray]Belum Ditelusuri sectors.resources = Sumber Daya: sectors.production = Produksi: sectors.export = Ekspor: +sectors.import = Impor: sectors.time = Waktu: sectors.threat = Tingkat: sectors.wave = Gelombang: @@ -672,7 +675,7 @@ unsupported.environment = [scarlet]Ruang Lingkup Tidak Cocok yes = Ya no = Tidak info.title = Info -error.title = [crimson]Sebuah kesalahan telah terjadi +error.title = [scarlet]Sebuah kesalahan telah terjadi error.crashtitle = Sebuah kesalahan telah terjadi unit.nobuild = [scarlet]Unit tidak dapat membangun lastaccessed = [lightgray]Terakhir Diakses: {0} @@ -806,6 +809,7 @@ bullet.reload = [stat]{0}[lightgray]x laju tembakan unit.blocks = blok unit.blockssquared = blok² unit.powersecond = unit tenaga/detik +unit.tilessecond = petak/detik unit.liquidsecond = unit zat cair/detik unit.itemssecond = bahan/detik unit.liquidunits = unit zat cair @@ -831,29 +835,29 @@ category.items = Barang category.crafting = Pemasukan/Pengeluaran category.function = Fungsi category.optional = Peningkatan Opsional +setting.skipcoreanimation.name = Lewati Animasi Peluncuran/Pendaratan Inti setting.landscape.name = Kunci Pemandangan setting.shadows.name = Bayangan setting.blockreplace.name = Usulan Blok Otomatis setting.linear.name = Filter Bergaris setting.hints.name = Petunjuk setting.logichints.name = Petunjuk Logika -setting.flow.name = Tampilan Laju Aliran Sumber Daya setting.backgroundpause.name = Jeda di Latar setting.buildautopause.name = Jeda Otomatis saat Membangun setting.doubletapmine.name = Dua-kali Sentuh untuk Menambang setting.modcrashdisable.name = Matikan Mod Ketika Ada Masalah Saat Memulai Permainan setting.animatedwater.name = Animasi Perairan setting.animatedshields.name = Animasi Perisai -setting.antialias.name = Antialiasi[lightgray] (membutuhkan restart)[] setting.playerindicators.name = Indikasi Pemain setting.indicators.name = Indikasi Musuh/Teman Lain setting.autotarget.name = Target Secara Otomatis setting.keyboard.name = Kontrol Mouse+Papan Ketik setting.touchscreen.name = Kontrol Layar Sentuh -setting.fpscap.name = Pembatasan FPS +setting.fpscap.name = Batas FPS setting.fpscap.none = Tidak Ada setting.fpscap.text = {0} FPS -setting.uiscale.name = Skala UI[lightgray] (butuh untuk mengulang game)[] +setting.uiscale.name = Skala UI +setting.uiscale.description = Mulai ulang diperlukan untuk menerapkan perubahan. setting.swapdiagonal.name = Selalu Penaruhan Diagonal setting.difficulty.training = Latihan setting.difficulty.easy = Mudah @@ -871,7 +875,8 @@ setting.saveinterval.name = Jarak Menyimpan setting.seconds = {0} detik setting.milliseconds = {0} milidetik setting.fullscreen.name = Layar Penuh -setting.borderlesswindow.name = Jendela tak Berbatas[lightgray] (mungkin memerlukan mengulang kembali) +setting.borderlesswindow.name = Jendela tak Berbatas[lightgray] +setting.borderlesswindow.description = Mulai ulang mungkin diperlukan untuk menerapkan perubahan. setting.fps.name = Tunjukkan FPS setting.smoothcamera.name = Kamera Halus setting.vsync.name = VSync @@ -901,7 +906,7 @@ uiscale.reset = Skala UI telah diubah.\nTekan "OK" untuk mengonfirmasi.\n[scarle uiscale.cancel = Batal & Keluar setting.bloom.name = Bloom keybind.title = Ganti Tombol -keybinds.mobile = [scarlet]Mayoritas tombol tidak didukung oleh perangkat ponsel Hanya gerakan dasar yang didukung. +keybinds.mobile = [scarlet]Mayoritas tombol tidak didukung oleh perangkat ponsel. Hanya gerakan dasar yang didukung. category.general.name = Umum category.view.name = Melihat category.multiplayer.name = Bermain Bersama @@ -994,6 +999,7 @@ rules.wavetimer = Pengaturan Waktu Gelombang rules.waves = Gelombang rules.attack = Mode Penyerangan rules.buildai = Bangunan A.I. +rules.cleanupdeadteams = Bersihkan Bangunan Tim yang Kalah (PvP) rules.corecapture = Tangkap Inti Saat Kehancuran rules.polygoncoreprotection = Poligon Pelindung Inti rules.enemyCheat = Sumber Daya A.I. Musuh (Tim Merah) Tak Terbatas @@ -1009,7 +1015,7 @@ rules.wavespacing = Jarak Gelombang:[lightgray] (detik) rules.buildcostmultiplier = Penggandaan Harga Bangunan rules.buildspeedmultiplier = Penggandaan Waktu Pembuatan Bangunan rules.deconstructrefundmultiplier = Penggandaan Kembalinya Bahan Bangunan yang Dihancurkan -rules.waitForWaveToEnd = Gelombang menunggu musuh +rules.waitForWaveToEnd = Gelombang Menunggu Musuh rules.dropzoneradius = Radius Titik Muncul:[lightgray] (Blok) rules.unitammo = Unit Membutuhkan Amunisi rules.title.waves = Gelombang @@ -1288,7 +1294,6 @@ block.meltdown.name = Meltdown block.foreshadow.name = Foreshadow block.container.name = Kontainer block.launch-pad.name = Alas Peluncur -block.launch-pad-large.name = Alas Peluncur Besar block.segment.name = Segment block.command-center.name = Pusat Perintah block.ground-factory.name = Pabrik Unit Darat @@ -1309,11 +1314,11 @@ block.payload-source.name = Sumber Muatan block.disassembler.name = Pembongkar block.silicon-crucible.name = Pelebur Raksasa block.overdrive-dome.name = Kubah Projektor Pemercepat +block.interplanetary-accelerator.name = Akselerator Antarplanet #experimental, may be removed block.block-forge.name = Pemadu Blok block.block-loader.name = Pemuat Blok block.block-unloader.name = Pembongkar Blok -block.interplanetary-accelerator.name = Akselerator Antarplanet block.switch.name = Saklar block.micro-processor.name = Prosesor Mikro @@ -1348,6 +1353,7 @@ hint.placeTurret = Taruh \uf861 [accent]Menara[] untuk mempertahankan basismu da hint.breaking = [accent]Klik kanan[] dan tarik untuk menghancurkan blok. hint.breaking.mobile = Aktifkan \ue817 [accent]palu[] di kanan bawah dan tekan untuk menghancurkan blok.\n\nTahan jari kamu sebentar dan seret untuk menghancurkannya. hint.blockInfo = Lihat informasi dari sebuah blok dengan memilihnya di [accent]menu bangun[], lalu pilih tombol [accent][[?][] di sebelah kanan. +hint.derelict = Bangunan berwarna [accent]abu-abu[] adalah sisa-sisa dari markas lama yang hancur dan tidak dapat berfungsi kembali.\n\nBangunan tersebut dapat [accent]didekonstruksi[] menjadi sumber daya. hint.research = Gunakan tombol \ue875 [accent]Riset[] untuk mempelajari teknologi baru. hint.research.mobile = Gunakan tombol \ue875 [accent]Riset[] di \ue88c [accent]Menu[] untuk mempelajari teknologi baru. hint.unitControl = Tahan [accent][[L-ctrl][] dan [accent]klik[] untuk mengendalikan unit atau turret teman. @@ -1399,6 +1405,7 @@ liquid.slag.description = Dapat dipadatkan menjadi logam tertentu, atau disempro liquid.oil.description = Digunakan di produksi material lanjutan dan sebagai amunisi yang mudah terbakar. liquid.cryofluid.description = Digunakan sebagai pendingin di reaktor, menara, dan pabrik. +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.illuminator.description = Memancarkan cahaya. @@ -1543,6 +1550,8 @@ block.memory-bank.description = Menyimpan informasi untuk prosesor. Berkapasitas block.logic-display.description = Menampilkan grafik sembarang dari prosesor. block.large-logic-display.description = Menampilkan grafik sembarang dari prosesor. Lebih besar. block.interplanetary-accelerator.description = Sebuah menara railgun elektromagnetik raksasa. Meluncurkan Inti dengan kecepatan tinggi untuk peluncuran antarplanet. +block.repair-turret.description = Memperbaiki unit terdekat yang sekarat dalam jangkauan secara terus-menerus. Dapat menerima pendingin. +block.payload-propulsion-tower.description = Bangunan transportasi muatan jarak jauh. Menembakkan muatan pada menara penggerak muatan lainnya yang terhubung. unit.dagger.description = Menembak musuh terdekat dengan amunisi standar. unit.mace.description = Menyerang musuh terdekat dengan cara membakarnya. @@ -1552,7 +1561,7 @@ unit.reign.description = Menembak semua musuh terdekat dengan gugusan peluru taj unit.nova.description = Menembak baut laser yang dapat merusak musuh dan memperbaiki bangunan teman. Dapat terbang. unit.pulsar.description = Menembak petir yang dapat merusak musuh dan memperbaiki bangunan teman. Dapat terbang. unit.quasar.description = Menembak sinar laser yang dapat menembus bangunan yang dapat merusak musuh dan memperbaiki bangunan teman. Dapat terbang. Memiliki perisai. -unit.vela.description = Menembak sinar laser besar dan kontinu yang dapat merusak musuh, membakarnya dan memperbaiki bangunan musuh. Dapat terbang. +unit.vela.description = Menembak sinar laser besar dan kontinu yang dapat merusak musuh, membakarnya dan memperbaiki bangunan teman. Dapat terbang. unit.corvus.description = Menembak sinar laser besar yang dapat merusak musuh dan memperbaiki bangunan teman. Dapat berjalan diatas hampir semua medan. unit.crawler.description = Berlari menuju musuh dan menghancurkan dirinya, yang dapat menghasilkan ledakan besar. unit.atrax.description = Menembak musuh dengan cairan lava kepada target darat. Dapat berjalan diatas hampir semua medan. @@ -1577,6 +1586,11 @@ unit.omura.description = Menembak railgun jarak jauh kepada musuh. Dapat memprod unit.alpha.description = Melindungi Inti Bagian dari musuh. Dapat membangun. unit.beta.description = Melindungi Inti Fondasi dari musuh. Dapat membangun. unit.gamma.description = Melindungi Inti Nukleus dari musuh. Dapat membangun. +unit.retusa.description = Menempatkan ranjau berjarak. Memperbaiki unit teman. +unit.oxynoe.description = Menembak aliran api pada musuh terdekat. Menargetkan proyektil musuh terdekat dengan titik menara pertahanan. +unit.cyerce.description = Menembak misil yang membidik otomatis secara beruntun pada musuh. Memperbaiki unit teman. +unit.aegires.description = Mengkejutkan semua bangunan dan unit musuh yang ada di dalam medan energi. Memperbaiki seluruh unit teman. +unit.navanax.description = Menembak proyektil elektromagnetik yang meledak, memberikan kerusakan yang signifikan pada jaringan tenaga musuh dan memperbaiki bangunan teman. Melelehkan musuh terdekat dengan 4 menara laser secara otomatis. lst.read = Membaca angka dari memori sel yang dihubungkan. lst.write = Menulis angka ke memori sel yang dihubungkan. From 487bc1866adfc8d778c39770a5d5e0cc2ed445b9 Mon Sep 17 00:00:00 2001 From: YellOw139 <70975516+YellOw139@users.noreply.github.com> Date: Mon, 16 Aug 2021 04:24:27 +0300 Subject: [PATCH 22/45] [Bundle][RO] Update (#5668) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Bundle][RO] Update Changelog: - New strings/changes up to commit 5ca5025fb1076789813333bb84451d1767362362 - Typo fixes & various other improvements * Update bundle_ro.properties * Update bundle_ro.properties * progress * derelict * typo * Update bundle_ro.properties * Update bundle_ro.properties * teamwork * [] * AI * Агрессоры * sector info * Update bundle_ro.properties * Update bundle_ro.properties * Update bundle_ro.properties * Update bundle_ro.properties --- core/assets/bundles/bundle_ro.properties | 45 +++++++++++-------- .../metadata/android/ro/full_description.txt | 4 +- 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/core/assets/bundles/bundle_ro.properties b/core/assets/bundles/bundle_ro.properties index 529254eb2e..267348a400 100644 --- a/core/assets/bundles/bundle_ro.properties +++ b/core/assets/bundles/bundle_ro.properties @@ -215,6 +215,7 @@ hosts.none = [lightgray]Nu s-au găsit jocuri locale! host.invalid = [scarlet]Nu s-a putut face conectarea la gazdă! servers.local = Servere Locale +servers.local.steam = Jocuri Deschise & Servere Locale servers.remote = Servere de la Distanță servers.global = Servere ale Comunității @@ -266,7 +267,7 @@ server.invalidport = Număr de port invalid! server.error = [scarlet]Eroare la găzduirea serverului. save.new = Nouă Salvare save.overwrite = Sigur vrei să scrii peste \nacest slot de salvare? -overwrite = Scrie Peste +overwrite = Scrie peste save.none = Nu s-au găsit salvări! savefail = Salvarea jocului a eșuat! save.delete.confirm = Sigur vrei să ștergi această salvare? @@ -316,7 +317,7 @@ data.invalid = Aceste date de joc nu sunt valide. data.import.confirm = Importul de date externe va suprascrie[scarlet] toate[] datele tale de joc curente.\n[accent]Acest proces este ireversibil![]\n\nOdată ce datele sunt importate, jocul tău se va opri imediat. quit.confirm = Sigur vrei să abandonezi? loading = [accent]Se încarcă... -reloading = [accent]Se Reîncarcă Modurile... +downloading = [accent]Se descarcă... saving = [accent]Se salvează... respawn = [accent][[{0}][] ca să te refaci în nucleu cancelbuilding = [accent][[{0}][] pt a curăța planul @@ -344,9 +345,9 @@ custom = Personalizată builtin = Prestabilită map.delete.confirm = Ești sigur că vrei să ștergi această hartă? Acțiunea este ireversibilă! map.random = [accent]Hartă Aleatorie -map.nospawn = Harta asta nu are niciun nucleu în care vor apărea jucătorii! Adaugă un nucleu[accent] portocaliu[] acestei hărți în editor. +map.nospawn = Harta asta nu are niciun nucleu în care vor apărea jucătorii! Adaugă un nucleu [#{0}]{1}[] acestei hărți în editor. map.nospawn.pvp = Această hartă nu are niciun nucleu inamic în care să apară jucătorii! Adaugă nuclee[scarlet] care nu sunt portocalii[] acestei hărți în editor. -map.nospawn.attack = Această hartă nu are niciun nucleu inamic pe care să îl atace jucătorii! Adaugă un nucleu[scarlet] roșu[] acestei hărți în editor. +map.nospawn.attack = Această hartă nu are niciun nucleu inamic pe care să îl atace jucătorii! Adaugă nuclee [#{0}]{1}[] acestei hărți în editor. map.invalid = Eroare la încărcarea hărții: fișier corupt sau invalid. workshop.update = Fă Update la Item workshop.error = Eroare la preluarea detaliilor din Workshop: {0} @@ -538,6 +539,7 @@ configure = Configurează Încărcarea loadout = Încărcare resources = Resurse bannedblocks = Blocuri Interzise +bannedunits = Unități Interzise addall = Adaugă-le pe toate launch.from = Lansează Din: [accent]{0} launch.destination = Destinație: {0} @@ -562,6 +564,8 @@ weather.sandstorm.name = Furtună de nisip weather.sporestorm.name = Furtună de spori weather.fog.name = Ceață +sectorlist = Sectoare +sectorlist.attacked = {0} sunt atacate sectors.unexplored = [lightgray]Neexplorat sectors.resources = Resurse: sectors.production = Producție: @@ -834,13 +838,13 @@ category.items = Materiale category.crafting = Necesită/Produce category.function = Funcționare category.optional = Îmbunătățiri opționale +setting.skipcoreanimation.name = Sari peste Animația de Lansare/Aterizare a Nucleului setting.landscape.name = Blochează Mod Peisaj setting.shadows.name = Umbre setting.blockreplace.name = Sugestii Plasare Automats setting.linear.name = Filtrare Liniară setting.hints.name = Indicii setting.logichints.name = Indicii Procesoare Logice -setting.flow.name = Afișează Rata de Curgere a lichidelor setting.buildautopause.name = Autopauză de la Construit setting.backgroundpause.name = Pune Pauză în Fundal setting.doubletapmine.name = Dublu-Click pt a Mina @@ -875,6 +879,7 @@ setting.seconds = {0} secunde setting.milliseconds = {0} millisecunde setting.fullscreen.name = Ecran Complet setting.borderlesswindow.name = Fereastră Fără Margine +setting.borderlesswindow.name.windows = Ecran Complet Fără Margine setting.borderlesswindow.description = Repornirea poate fi necesară pt a aplica schimbările. setting.fps.name = Vezi FPS & Ping setting.smoothcamera.name = Cameră Graduală @@ -961,7 +966,7 @@ keybind.shoot.name = Trage keybind.zoom.name = Zoom keybind.menu.name = Meniu keybind.pause.name = Pauză -keybind.pause_building.name = Pauză/Reia Construit +keybind.pause_building.name = Pauză/Reia Construcție keybind.minimap.name = Minihartă keybind.planet_map.name = Harta Planetei keybind.research.name = Cercetare @@ -987,7 +992,7 @@ mode.editor.name = Editor mode.pvp.name = PvP mode.pvp.description = Luptă împotriva altor jucători local.\n[gray]E nevoie de 2 nuclee colorate diferit pe hartă pt a juca. mode.attack.name = Atac -mode.attack.description = Distruge baza inamicului. \n[gray]E nevoie de un nucleu roșu pe hartă pt a juca. +mode.attack.description = Distruge baza inamicului. \n[gray]E nevoie de un nucleu Agresor (roșu) pe hartă pt a juca. mode.custom = Reguli Personalizate rules.infiniteresources = Resurse Infinite @@ -998,6 +1003,7 @@ rules.wavetimer = Valuri pe Timp rules.waves = Valuri rules.attack = Modul Atac rules.buildai = AI-ul Construiește +rules.aitier = Nivel AI rules.cleanupdeadteams = Îndepărtează Clădirile Echipelor Învinse (PvP) rules.corecapture = Capturează Nucleele Distruse rules.enemyCheat = Resurse infinite pt AI (echipa roșie) @@ -1017,12 +1023,15 @@ rules.deconstructrefundmultiplier = Multiplicatorul Recompensei la Deconstrucți rules.waitForWaveToEnd = Valurile Așteaptă Inamicii rules.dropzoneradius = Raza Zonei de Lansare:[lightgray] (pătrate) rules.unitammo = Unitățile Necesită Muniție +rules.enemyteam = Echipa Inamică +rules.playerteam = Echipa Jucătorului rules.title.waves = Valuri -rules.title.resourcesbuilding = Resurse și Construit +rules.title.resourcesbuilding = Resurse și Construcție rules.title.enemy = Inamici rules.title.unit = Unități rules.title.experimental = Experimental rules.title.environment = Mediu +rules.title.teams = Echipe rules.lighting = Luminozitate Ambientală rules.enemyLights = Inamicii Luminează rules.fire = Foc @@ -1101,7 +1110,6 @@ unit.reign.name = Reign unit.vela.name = Vela unit.corvus.name = Corvus -block.resupply-point.name = Punct de Realimentare block.parallax.name = Parallax block.cliff.name = Deal block.sand-boulder.name = Bolovan de Nisip @@ -1134,7 +1142,7 @@ block.kiln.name = Cuptor block.graphite-press.name = Presă de Grafit block.multi-press.name = Multi-Presă block.constructing = {0} [lightgray](În Construcție) -block.spawn.name = Punctul de Lansare Inamic +block.spawn.name = Punct Inamic de Lansare block.core-shard.name = Nucleu: Shard block.core-foundation.name = Nucleu: Foundation block.core-nucleus.name = Nucleu: Core @@ -1328,12 +1336,12 @@ block.large-logic-display.name = Monitor Logic Mare block.memory-cell.name = Celulă de Memorie block.memory-bank.name = Bancă de Memorie -team.blue.name = albastră -team.crux.name = roșie -team.sharded.name = portocalie -team.derelict.name = abandonată -team.green.name = verde -team.purple.name = mov +team.blue.name = Albastru +team.crux.name = Agresor +team.sharded.name = Portocaliu +team.derelict.name = Abandonat +team.green.name = Verde +team.purple.name = Mov hint.skip = Treci peste hint.desktopMove = Folosește [accent][[WASD][] ca să te miști. @@ -1400,12 +1408,11 @@ item.blast-compound.description = Folosit în bombe și muniție explozibilă. item.pyratite.description = Folosită în armele incendiare și generatoarele pe bază de procese de combustie. liquid.water.description = Folosită pt răcirea mașinăriilor și procesarea deșeurilor. -liquid.slag.description = Rafinată în separatoare înapoi în materialele constituente, sau pulverizată înspre unitățile inamice ca armă. +liquid.slag.description = Rafinată înapoi în materialele constituente cu ajutorul separatoarelor sau pulverizată înspre unitățile inamice ca armă. liquid.oil.description = Folosit în producerea avansată de materiale și ca muniție incendiară. liquid.cryofluid.description = Folosit ca răcitor în reactoare, arme și fabrici. -block.derelict = [lightgray] Structuri Abandonate -block.resupply-point.description = Realimentează unitățile din apropiere cu muniție de cupru. Nu este compatibil cu unitățile care se încarcă din baterii. +block.derelict =  [lightgray]Structură Abandonată block.armored-conveyor.description = Transportă materialele înainte. Nu acceptă materiale de pe lateral decât de la alte benzi. block.illuminator.description = Emite lumină. block.message.description = Păstrează un mesaj. Folosit pt comunicarea dintre aliați. diff --git a/fastlane/metadata/android/ro/full_description.txt b/fastlane/metadata/android/ro/full_description.txt index fc13016784..8bf81489ef 100644 --- a/fastlane/metadata/android/ro/full_description.txt +++ b/fastlane/metadata/android/ro/full_description.txt @@ -3,7 +3,7 @@

Funcțiile Jocului

- Construiește clădiri pt a fabrica o mare varietate de materiale avansate -- Apara-ți baza de inamici +- Apără-ți baza de inamici - Joacă cu prietenii pe multiplayer în co-op sau provoacă-i la un meci PvP - Distribuie lichide și luptă împotriva amenințărilor constante, cum ar fi incendiile devastatoare sau raidurile inamice - Eficientizează-ți producția folosind lichid de răcire și lubrifiante @@ -49,4 +49,4 @@ - Configurează atât generarea aleatorie a minereurilor cât și poziția râurilor și a zonelor cu resurse - Configurează structura valurilor inamice - Personalizează regulile de bază ale hărții -- Folosește peste 80 de blocuri de teren diferite \ No newline at end of file +- Folosește peste 80 de blocuri de teren diferite From bfdcb971fcf817744f07b65c0506c2a39d6932fe Mon Sep 17 00:00:00 2001 From: "MrTnT 2.0" <86497546+MrTnT002@users.noreply.github.com> Date: Sun, 15 Aug 2021 20:26:19 -0500 Subject: [PATCH 23/45] Update servers_v6.json (#5748) * Update servers_v6.json * Update servers_v6.json --- servers_v6.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/servers_v6.json b/servers_v6.json index ab13f5176e..657db9b36f 100644 --- a/servers_v6.json +++ b/servers_v6.json @@ -102,5 +102,9 @@ { "name": "CxZx", "address": ["usfr2.forcehost.net:25578"] + }, + { + "name": "Español", + "address": ["168.119.36.188:41445"] } ] From b3ef412368325e7779bbd4a2c94453f3936f527b Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 15 Aug 2021 21:59:57 -0400 Subject: [PATCH 24/45] Extra debug logging for mod pack --- core/src/mindustry/content/UnitTypes.java | 6 +++--- core/src/mindustry/mod/Mods.java | 4 +++- gradle.properties | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index bec005710a..c95ec8a367 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -1789,7 +1789,7 @@ public class UnitTypes implements ContentList{ shootY = 6f; beamWidth = 0.8f; mirror = false; - repairSpeed = 0.7f; + repairSpeed = 0.75f; bullet = new BulletType(){{ maxRange = 120f; @@ -1835,8 +1835,8 @@ public class UnitTypes implements ContentList{ speed = 0f; - splashDamage = 50f; - splashDamageRadius = 40f; + splashDamage = 55f; + splashDamageRadius = 45f; }}; }}); }}; diff --git a/core/src/mindustry/mod/Mods.java b/core/src/mindustry/mod/Mods.java index 43845886d7..e53de0a4ad 100644 --- a/core/src/mindustry/mod/Mods.java +++ b/core/src/mindustry/mod/Mods.java @@ -267,6 +267,7 @@ public class Mods implements Loadable{ TextureFilter filter = Core.settings.getBool("linear") ? TextureFilter.linear : TextureFilter.nearest; + Time.mark(); //generate new icons for(Seq arr : content.getContentMap()){ arr.each(c -> { @@ -277,6 +278,7 @@ public class Mods implements Loadable{ } }); } + Log.debug("Time to generate icons: @", Time.elapsed()); //dispose old atlas data Core.atlas = packer.flush(filter, new TextureAtlas()); @@ -287,7 +289,7 @@ public class Mods implements Loadable{ packer.dispose(); packer = null; - Log.debug("Time to update textures: @", Time.elapsed()); + Log.debug("Total time to generate & flush textures synchronously: @", Time.elapsed()); } private PageType getPage(AtlasRegion region){ diff --git a/gradle.properties b/gradle.properties index fe39d88e46..52e61753e2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=f31d58eac8bf5f1f674b0d6219c1e34ba54de2cc +archash=4582339cd9052be86141fbacf2f2180b09eb585c From 747c6186d4ccaa444b89e2b4e7fe2e20cf60a474 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 15 Aug 2021 22:17:17 -0400 Subject: [PATCH 25/45] DesktopLauncher -debug argument --- desktop/src/mindustry/desktop/DesktopLauncher.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/desktop/src/mindustry/desktop/DesktopLauncher.java b/desktop/src/mindustry/desktop/DesktopLauncher.java index 1de468f504..1e74170914 100644 --- a/desktop/src/mindustry/desktop/DesktopLauncher.java +++ b/desktop/src/mindustry/desktop/DesktopLauncher.java @@ -11,6 +11,7 @@ import arc.func.*; import arc.math.*; import arc.struct.*; import arc.util.*; +import arc.util.Log.*; import arc.util.serialization.*; import com.codedisaster.steamworks.*; import mindustry.*; @@ -44,6 +45,9 @@ public class DesktopLauncher extends ClientLauncher{ if(Structs.contains(arg, "-gl3")){ gl30 = true; } + if(Structs.contains(arg, "-debug")){ + Log.level = LogLevel.debug; + } setWindowIcon(FileType.internal, "icons/icon_64.png"); }}); }catch(Throwable e){ From d83f48891adec460c5160fb68ccf93770c3dcefe Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 15 Aug 2021 22:23:31 -0400 Subject: [PATCH 26/45] Fixed #5774 --- core/src/mindustry/mod/ContentParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index 5c4d48cecd..68f829bac7 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -99,7 +99,7 @@ public class ContentParser{ put(AmmoType.class, (type, data) -> { //string -> item //if liquid ammo support is added, this should scan for liquids as well - if(data.isString()) return find(ContentType.item, data.asString()); + if(data.isString()) return new ItemAmmoType(find(ContentType.item, data.asString())); //number -> power if(data.isNumber()) return new PowerAmmoType(data.asFloat()); From 1a125100814b33679863d895cabe24a34b187d7c Mon Sep 17 00:00:00 2001 From: buthed010203 Date: Mon, 16 Aug 2021 08:15:20 -0400 Subject: [PATCH 27/45] Closes #5777 (#5779) I did a dumb --- core/src/mindustry/ai/formations/patterns/CircleFormation.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/ai/formations/patterns/CircleFormation.java b/core/src/mindustry/ai/formations/patterns/CircleFormation.java index 7cda7a4bb4..d905f40ea3 100644 --- a/core/src/mindustry/ai/formations/patterns/CircleFormation.java +++ b/core/src/mindustry/ai/formations/patterns/CircleFormation.java @@ -9,7 +9,7 @@ public class CircleFormation extends FormationPattern{ @Override public Vec3 calculateSlotLocation(Vec3 outLocation, int slotNumber){ if(slots > 1){ - float angle = (360f * slotNumber) / slots + slots == 8 ? 22.5f : 0; + float angle = (360f * slotNumber) / slots + (slots == 8 ? 22.5f : 0); float radius = spacing / (float)Math.sin(180f / slots * Mathf.degRad); outLocation.set(Angles.trnsx(angle, radius), Angles.trnsy(angle, radius), angle); }else{ From 59456b67a127eb526bf4c91d470e19abc7510656 Mon Sep 17 00:00:00 2001 From: JrTRinny <85090668+JrTRinny@users.noreply.github.com> Date: Mon, 16 Aug 2021 19:22:03 +0700 Subject: [PATCH 28/45] payload source and void descriptions (#5778) --- core/assets/bundles/bundle.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 06c77ad450..5bc7c38ed0 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1438,6 +1438,8 @@ block.item-source.description = Infinitely outputs items. Sandbox only. block.item-void.description = Destroys any items. Sandbox only. block.liquid-source.description = Infinitely outputs liquids. Sandbox only. block.liquid-void.description = Removes any liquids. Sandbox only. +block.payload-source.description = Infinitely outputs payloads. Sandbox only. +block.payload-void.description = Destroys any payloads. Sandbox only. block.copper-wall.description = Protects structures from enemy projectiles. block.copper-wall-large.description = Protects structures from enemy projectiles. block.titanium-wall.description = Protects structures from enemy projectiles. From 1a55f19ab2d1915d2588029efbe551344a373b37 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 16 Aug 2021 10:34:48 -0400 Subject: [PATCH 29/45] Fixed #5774 --- core/src/mindustry/entities/comp/PlayerComp.java | 7 +++++++ core/src/mindustry/input/InputHandler.java | 12 +++--------- core/src/mindustry/mod/ContentParser.java | 7 ++++--- server/src/mindustry/server/ServerControl.java | 1 - 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/core/src/mindustry/entities/comp/PlayerComp.java b/core/src/mindustry/entities/comp/PlayerComp.java index 057687ada8..07a80b1e30 100644 --- a/core/src/mindustry/entities/comp/PlayerComp.java +++ b/core/src/mindustry/entities/comp/PlayerComp.java @@ -45,6 +45,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra transient String lastText = ""; transient float textFadeTime; transient private Unit lastReadUnit = Nulls.unit; + transient private int wrongReadUnits; transient @Nullable Unit justSwitchFrom, justSwitchTo; public boolean isBuilder(){ @@ -104,9 +105,15 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra //reason: we know the server is lying here, essentially skip the unit snapshot because we know the client's information is more recent if(isLocal() && unit == justSwitchFrom && justSwitchFrom != null && justSwitchTo != null){ unit = justSwitchTo; + //if several snapshots have passed and this unit is still incorrect, something's wrong + if(++wrongReadUnits >= 2){ + justSwitchFrom = null; + wrongReadUnits = 0; + } }else{ justSwitchFrom = null; justSwitchTo = null; + wrongReadUnits = 0; } //simulate a unit change after sync diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index fdaa0e335e..4e3c58e5c0 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -379,15 +379,6 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ throw new ValidateException(player, "Player cannot control a unit."); } - //TODO problem: - //1. server send snapshot - //2. client requests to control unit, becomes unit locally - //3. snapshot arrives, client now thinks they're in the old unit (!!!) - //4. server gets packet that player is in the right unit - //5. server sends snapshot - //6. client gets snapshot, realizes that they are actually in the unit they selected - //7. client gets switched to new unit -> rubberbanding (!!!) - //clear player unit when they possess a core if(unit == null){ //just clear the unit (is this used?) player.clearUnit(); @@ -404,6 +395,9 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ if(!player.dead()){ Fx.unitSpirit.at(player.x, player.y, 0f, unit); } + }else if(net.server()){ + //reject forwarding the packet if the unit was dead, AI or team + throw new ValidateException(player, "Player attempted to control invalid unit."); } Events.fire(new UnitControlEvent(player, unit)); diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index 68f829bac7..3644b3ad5b 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -77,9 +77,10 @@ public class ContentParser{ } }); put(StatusEffect.class, (type, data) -> { - Object result = fieldOpt(StatusEffects.class, data); - if(result != null){ - return result; + if(data.isString()){ + StatusEffect result = locate(ContentType.status, data.asString()); + if(result != null) return result; + throw new IllegalArgumentException("Unknown status effect: '" + data.asString() + "'"); } StatusEffect effect = new StatusEffect(currentMod.name + "-" + data.getString("name")); readFields(effect, data); diff --git a/server/src/mindustry/server/ServerControl.java b/server/src/mindustry/server/ServerControl.java index 3d378f4d25..3af40c0c78 100644 --- a/server/src/mindustry/server/ServerControl.java +++ b/server/src/mindustry/server/ServerControl.java @@ -287,7 +287,6 @@ public class ServerControl implements ApplicationListener{ Core.app.exit(); }); - handler.register("stop", "Stop hosting the server.", arg -> { net.closeServer(); if(lastTask != null) lastTask.cancel(); From 0c5f781702a5327c0ed640d6c2354d30c5ea9c9e Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 16 Aug 2021 11:42:59 -0400 Subject: [PATCH 30/45] Sector wave spawning fixes --- core/src/mindustry/ai/WaveSpawner.java | 13 ++++++++++++ core/src/mindustry/game/Schematics.java | 5 +++++ core/src/mindustry/game/Waves.java | 14 +++++++++++-- .../maps/planet/SerpuloPlanetGenerator.java | 3 ++- core/src/mindustry/net/ArcNetProvider.java | 21 +++---------------- core/src/mindustry/net/Net.java | 1 + core/src/mindustry/ui/Bar.java | 4 ++++ .../ui/fragments/LoadingFragment.java | 5 +++++ gradle.properties | 2 +- 9 files changed, 46 insertions(+), 22 deletions(-) diff --git a/core/src/mindustry/ai/WaveSpawner.java b/core/src/mindustry/ai/WaveSpawner.java index a895af863f..40be2defad 100644 --- a/core/src/mindustry/ai/WaveSpawner.java +++ b/core/src/mindustry/ai/WaveSpawner.java @@ -21,6 +21,7 @@ import static mindustry.Vars.*; public class WaveSpawner{ private static final float margin = 40f, coreMargin = tilesize * 2f, maxSteps = 30; + private int tmpCount; private Seq spawns = new Seq<>(); private boolean spawning = false; private boolean any = false; @@ -162,6 +163,18 @@ public class WaveSpawner{ } } + public int countGroundSpawns(){ + tmpCount = 0; + eachGroundSpawn((x, y) -> tmpCount ++); + return tmpCount; + } + + public int countFlyerSpawns(){ + tmpCount = 0; + eachFlyerSpawn((x, y) -> tmpCount ++); + return tmpCount; + } + public boolean isSpawning(){ return spawning && !net.client(); } diff --git a/core/src/mindustry/game/Schematics.java b/core/src/mindustry/game/Schematics.java index 0a91c9d1b3..011d289f05 100644 --- a/core/src/mindustry/game/Schematics.java +++ b/core/src/mindustry/game/Schematics.java @@ -33,6 +33,7 @@ import mindustry.world.blocks.power.*; import mindustry.world.blocks.production.*; import mindustry.world.blocks.sandbox.*; import mindustry.world.blocks.storage.*; +import mindustry.world.blocks.storage.CoreBlock.*; import mindustry.world.meta.*; import java.io.*; @@ -450,6 +451,10 @@ public class Schematics implements Loadable{ if(st.block instanceof Drill){ tile.getLinkedTiles(t -> t.setOverlay(resource)); } + + if(tile.build instanceof CoreBuild cb){ + state.teams.registerCore(cb); + } }); } diff --git a/core/src/mindustry/game/Waves.java b/core/src/mindustry/game/Waves.java index bdd95abedf..415ccea8fc 100644 --- a/core/src/mindustry/game/Waves.java +++ b/core/src/mindustry/game/Waves.java @@ -261,6 +261,10 @@ public class Waves{ } public static Seq generate(float difficulty, Rand rand, boolean attack){ + return generate(difficulty, rand, attack, false); + } + + public static Seq generate(float difficulty, Rand rand, boolean attack, boolean airOnly){ UnitType[][] species = { {dagger, mace, fortress, scepter, reign}, {nova, pulsar, quasar, vela, corvus}, @@ -268,6 +272,12 @@ public class Waves{ {flare, horizon, zenith, rand.chance(0.5) ? quad : antumbra, rand.chance(0.1) ? quad : eclipse} }; + if(airOnly){ + species = Structs.filter(UnitType[].class, species, v -> v[0].flying); + } + + UnitType[][] fspec = species; + //required progression: //- extra periodic patterns @@ -281,7 +291,7 @@ public class Waves{ Intc createProgression = start -> { //main sequence - UnitType[] curSpecies = Structs.random(species); + UnitType[] curSpecies = Structs.random(fspec); int curTier = 0; for(int i = start; i < cap;){ @@ -326,7 +336,7 @@ public class Waves{ //small chance to switch species if(rand.chance(0.3)){ - curSpecies = Structs.random(species); + curSpecies = Structs.random(fspec); } } }; diff --git a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java index 0effbc80f2..112838d405 100644 --- a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java @@ -490,7 +490,8 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ state.rules.waves = sector.info.waves = true; state.rules.enemyCoreBuildRadius = 600f; - state.rules.spawns = Waves.generate(difficulty, new Rand(), state.rules.attackMode); + //spawn air only when spawn is blocked + state.rules.spawns = Waves.generate(difficulty, new Rand(sector.id), state.rules.attackMode, state.rules.attackMode && spawner.countGroundSpawns() == 0); } @Override diff --git a/core/src/mindustry/net/ArcNetProvider.java b/core/src/mindustry/net/ArcNetProvider.java index ba8ff4cfa0..4cc05ecccb 100644 --- a/core/src/mindustry/net/ArcNetProvider.java +++ b/core/src/mindustry/net/ArcNetProvider.java @@ -342,24 +342,9 @@ public class ArcNetProvider implements NetProvider{ //for debugging total read/write speeds private static final boolean debug = false; - ThreadLocal decompressBuffer = new ThreadLocal<>(){ - @Override - protected ByteBuffer initialValue(){ - return ByteBuffer.allocate(32768); - } - }; - ThreadLocal reads = new ThreadLocal<>(){ - @Override - protected Reads initialValue(){ - return new Reads(new ByteBufferInput(decompressBuffer.get())); - } - }; - ThreadLocal writes = new ThreadLocal<>(){ - @Override - protected Writes initialValue(){ - return new Writes(new ByteBufferOutput(decompressBuffer.get())); - } - }; + ThreadLocal decompressBuffer = Threads.local(() -> ByteBuffer.allocate(32768)); + ThreadLocal reads = Threads.local(() -> new Reads(new ByteBufferInput(decompressBuffer.get()))); + ThreadLocal writes = Threads.local(() -> new Writes(new ByteBufferOutput(decompressBuffer.get()))); //for debugging network write counts static WindowedMean upload = new WindowedMean(5), download = new WindowedMean(5); diff --git a/core/src/mindustry/net/Net.java b/core/src/mindustry/net/Net.java index 9081b194f4..2463c8fed9 100644 --- a/core/src/mindustry/net/Net.java +++ b/core/src/mindustry/net/Net.java @@ -274,6 +274,7 @@ public class Net{ builder.add(c.data); ui.loadfrag.setProgress(builder.progress()); + ui.loadfrag.snapProgress(); netClient.resetTimeout(); if(builder.isDone()){ diff --git a/core/src/mindustry/ui/Bar.java b/core/src/mindustry/ui/Bar.java index d8e2b4b6da..eb4fcf9a54 100644 --- a/core/src/mindustry/ui/Bar.java +++ b/core/src/mindustry/ui/Bar.java @@ -62,6 +62,10 @@ public class Bar extends Element{ update(() -> this.name = name.get()); } + public void snap(){ + lastValue = value = fraction.get(); + } + public Bar outline(Color color, float stroke){ outlineColor.set(color); outlineRadius = Scl.scl(stroke); diff --git a/core/src/mindustry/ui/fragments/LoadingFragment.java b/core/src/mindustry/ui/fragments/LoadingFragment.java index fcd18dfcbe..4f977fa644 100644 --- a/core/src/mindustry/ui/fragments/LoadingFragment.java +++ b/core/src/mindustry/ui/fragments/LoadingFragment.java @@ -56,11 +56,16 @@ public class LoadingFragment extends Fragment{ bar.set(() -> ((int)(progress.get() * 100) + "%"), progress, Pal.accent); } + public void snapProgress(){ + bar.snap(); + } + public void setProgress(float progress){ progValue = progress; if(!bar.visible){ setProgress(() -> progValue); } + } public void setButton(Runnable listener){ diff --git a/gradle.properties b/gradle.properties index 52e61753e2..5eb904834f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=4582339cd9052be86141fbacf2f2180b09eb585c +archash=0d9a003fc8f70b58f739bfacc3817b4c2522a8af From 7b4d488b1105232112de3d6b59733c8e5bc35610 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 16 Aug 2021 20:06:50 -0400 Subject: [PATCH 31/45] UI cleanup --- .../mindustry/editor/MapGenerateDialog.java | 4 +- core/src/mindustry/editor/WaveGraph.java | 2 +- core/src/mindustry/editor/WaveInfoDialog.java | 2 +- core/src/mindustry/logic/LStatement.java | 2 +- core/src/mindustry/ui/ItemsDisplay.java | 2 +- core/src/mindustry/ui/SearchBar.java | 55 +----- .../ui/dialogs/CustomRulesDialog.java | 2 +- .../ui/dialogs/LaunchLoadoutDialog.java | 2 +- core/src/mindustry/ui/dialogs/ModsDialog.java | 167 ++++++++++-------- .../mindustry/ui/dialogs/PlanetDialog.java | 2 +- .../ui/dialogs/SchematicsDialog.java | 6 +- .../ui/fragments/PlayerListFragment.java | 2 +- gradle.properties | 2 +- 13 files changed, 110 insertions(+), 140 deletions(-) diff --git a/core/src/mindustry/editor/MapGenerateDialog.java b/core/src/mindustry/editor/MapGenerateDialog.java index e0dd326e6c..c1a25b4e6d 100644 --- a/core/src/mindustry/editor/MapGenerateDialog.java +++ b/core/src/mindustry/editor/MapGenerateDialog.java @@ -232,7 +232,7 @@ public class MapGenerateDialog extends BaseDialog{ }else{ Core.scene.setScrollFocus(null); } - }).grow().uniformX().get().setScrollingDisabled(true, false); + }).grow().uniformX().scrollX(false); }).grow(); buffer1 = create(); @@ -350,7 +350,7 @@ public class MapGenerateDialog extends BaseDialog{ update(); selection.hide(); }).with(Table::left).get().getLabelCell().growX().left().padLeft(5).labelAlign(Align.left); - }).get().setScrollingDisabled(true, false); + }).scrollX(false); selection.addCloseButton(); selection.show(); diff --git a/core/src/mindustry/editor/WaveGraph.java b/core/src/mindustry/editor/WaveGraph.java index 4f9562836d..13c6021d93 100644 --- a/core/src/mindustry/editor/WaveGraph.java +++ b/core/src/mindustry/editor/WaveGraph.java @@ -189,7 +189,7 @@ public class WaveGraph extends Table{ for(UnitType o : hidden) used.remove(o); }).update(b -> b.setChecked(hidden.contains(type))); } - }).get().setScrollingDisabled(false, true); + }).scrollY(false); for(UnitType type : hidden){ used.remove(type); diff --git a/core/src/mindustry/editor/WaveInfoDialog.java b/core/src/mindustry/editor/WaveInfoDialog.java index d83fa11f3e..3d1307b9d0 100644 --- a/core/src/mindustry/editor/WaveInfoDialog.java +++ b/core/src/mindustry/editor/WaveInfoDialog.java @@ -129,7 +129,7 @@ public class WaveInfoDialog extends BaseDialog{ cont.clear(); cont.stack(new Table(Tex.clear, main -> { - main.pane(t -> table = t).growX().growY().padRight(8f).get().setScrollingDisabled(true, false); + main.pane(t -> table = t).growX().growY().padRight(8f).scrollX(false); main.row(); main.button("@add", () -> { if(groups == null) groups = new Seq<>(); diff --git a/core/src/mindustry/logic/LStatement.java b/core/src/mindustry/logic/LStatement.java index e418b3a814..9368a9a8b1 100644 --- a/core/src/mindustry/logic/LStatement.java +++ b/core/src/mindustry/logic/LStatement.java @@ -175,7 +175,7 @@ public abstract class LStatement{ t.top().pane(inner -> { inner.top(); hideCons.get(inner, hide); - }).pad(0f).top().get().setScrollingDisabled(true, false); + }).pad(0f).top().scrollX(false); t.pack(); } diff --git a/core/src/mindustry/ui/ItemsDisplay.java b/core/src/mindustry/ui/ItemsDisplay.java index 375aaffe57..ce3e05a30c 100644 --- a/core/src/mindustry/ui/ItemsDisplay.java +++ b/core/src/mindustry/ui/ItemsDisplay.java @@ -50,7 +50,7 @@ public class ItemsDisplay extends Table{ label.actions(Actions.color(Color.white, 0.75f, Interp.fade)); } } - }).get().setScrollingDisabled(true, false), false).setDuration(0.3f); + }).scrollX(false), false).setDuration(0.3f); c.button("@globalitems", Icon.downOpen, Styles.clearTogglet, col::toggle).update(t -> { t.setChecked(col.isCollapsed()); diff --git a/core/src/mindustry/ui/SearchBar.java b/core/src/mindustry/ui/SearchBar.java index 8929f45266..8185fe746c 100644 --- a/core/src/mindustry/ui/SearchBar.java +++ b/core/src/mindustry/ui/SearchBar.java @@ -1,59 +1,6 @@ package mindustry.ui; -import arc.func.*; -import arc.graphics.*; -import arc.scene.ui.layout.*; -import arc.struct.*; -import mindustry.gen.*; - +//TODO remove, unlikely to be used anywhere else. public class SearchBar{ - public static Table add(Table parent, Seq list, Func queryf, - Func namef, Cons2 itemc, boolean show){ - Table[] pane = {null}; - - Cons rebuild = str -> { - String query = queryf.get(str); - - pane[0].clear(); - boolean any = false; - for(T item : list){ - if(query.isEmpty() || matches(query, namef.get(item))){ - any = true; - itemc.get(pane[0], item); - } - } - - if(!any){ - pane[0].add("@none.found").color(Color.lightGray).pad(4); - } - }; - - if(show){ - parent.table(search -> { - search.image(Icon.zoom).padRight(8f); - search.field("", rebuild).growX(); - }).fillX().padBottom(4); - } - - parent.row(); - parent.pane(table -> { - pane[0] = table; - rebuild.get(""); - }).get().setScrollingDisabled(true, false); - return pane[0]; - } - - public static Table add(Table parent, Seq list, Func queryf, Func namef, Cons2 itemc){ - return add(parent, list, queryf, namef, itemc, true); - } - - public static Table add(Table parent, Seq list, Func namef, Cons2 itemc, boolean show){ - return add(parent, list, String::toLowerCase, namef, itemc, show); - } - - /** Match a list item with the search query, case insensitive */ - public static boolean matches(String query, String name){ - return name != null && !name.isEmpty() && name.toLowerCase().contains(query); - } } diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index 8ba462668c..b43fb01483 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -126,7 +126,7 @@ public class CustomRulesDialog extends BaseDialog{ void setup(){ cont.clear(); - cont.pane(m -> main = m).get().setScrollingDisabled(true, false); + cont.pane(m -> main = m).scrollX(false); main.margin(10f); main.button("@settings.reset", () -> { rules = resetter.get(); diff --git a/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java b/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java index d91ae8530a..30175e874c 100644 --- a/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java +++ b/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java @@ -131,7 +131,7 @@ public class LaunchLoadoutDialog extends BaseDialog{ } - }).growX().get().setScrollingDisabled(true, false); + }).growX().scrollX(false); cont.row(); cont.pane(items); diff --git a/core/src/mindustry/ui/dialogs/ModsDialog.java b/core/src/mindustry/ui/dialogs/ModsDialog.java index 578652fa7b..e83f45add2 100644 --- a/core/src/mindustry/ui/dialogs/ModsDialog.java +++ b/core/src/mindustry/ui/dialogs/ModsDialog.java @@ -69,7 +69,7 @@ public class ModsDialog extends BaseDialog{ browser.cont.pane(tablebrow -> { tablebrow.margin(10f).top(); browserTable = tablebrow; - }).get().setScrollingDisabled(true, false); + }).scrollX(false); browser.addCloseButton(); browser.onResize(this::rebuildBrowser); @@ -208,90 +208,113 @@ public class ModsDialog extends BaseDialog{ if(!mods.list().isEmpty()){ boolean[] anyDisabled = {false}; - SearchBar.add(cont, mods.list(), - mod -> mod.meta.displayName(), - (table, mod) -> { - if(!mod.enabled() && !anyDisabled[0] && mods.list().size > 0){ - anyDisabled[0] = true; - table.row(); - table.image().growX().height(4f).pad(6f).color(Pal.gray); - table.row(); - } + Table[] pane = {null}; - table.button(t -> { - t.top().left(); - t.margin(12f); + Cons rebuild = query -> { + pane[0].clear(); + boolean any = false; + for(LoadedMod item : mods.list()){ + if(Strings.matches(query, item.meta.displayName())){ + any = true; + if(!item.enabled() && !anyDisabled[0] && mods.list().size > 0){ + anyDisabled[0] = true; + pane[0].row(); + pane[0].image().growX().height(4f).pad(6f).color(Pal.gray).row(); + } - t.defaults().left().top(); - t.table(title -> { - title.left(); + pane[0].button(t -> { + t.top().left(); + t.margin(12f); - title.add(new BorderImage(){{ - if(mod.iconTexture != null){ - setDrawable(new TextureRegion(mod.iconTexture)); - }else{ - setDrawable(Tex.nomap); - } - border(Pal.accent); - }}).size(h - 8f).padTop(-8f).padLeft(-8f).padRight(8f); + t.defaults().left().top(); + t.table(title1 -> { + title1.left(); - title.table(text -> { - boolean hideDisabled = !mod.isSupported() || mod.hasUnmetDependencies() || mod.hasContentErrors(); + title1.add(new BorderImage(){{ + if(item.iconTexture != null){ + setDrawable(new TextureRegion(item.iconTexture)); + }else{ + setDrawable(Tex.nomap); + } + border(Pal.accent); + }}).size(h - 8f).padTop(-8f).padLeft(-8f).padRight(8f); - text.add("[accent]" + Strings.stripColors(mod.meta.displayName()) + "\n[lightgray]v" + Strings.stripColors(trimText(mod.meta.version)) + (mod.enabled() || hideDisabled ? "" : "\n" + Core.bundle.get("mod.disabled") + "")) + title1.table(text -> { + boolean hideDisabled = !item.isSupported() || item.hasUnmetDependencies() || item.hasContentErrors(); + + text.add("[accent]" + Strings.stripColors(item.meta.displayName()) + "\n[lightgray]v" + Strings.stripColors(trimText(item.meta.version)) + (item.enabled() || hideDisabled ? "" : "\n" + Core.bundle.get("mod.disabled") + "")) .wrap().top().width(300f).growX().left(); - text.row(); - - if(mod.isOutdated()){ - text.labelWrap("@mod.outdated").growX(); text.row(); - }else if(!mod.isSupported()){ - text.labelWrap(Core.bundle.format("mod.requiresversion", mod.meta.minGameVersion)).growX(); - text.row(); - }else if(mod.hasUnmetDependencies()){ - text.labelWrap(Core.bundle.format("mod.missingdependencies", mod.missingDependencies.toString(", "))).growX(); - t.row(); - }else if(mod.hasContentErrors()){ - text.labelWrap("@mod.erroredcontent").growX(); - text.row(); - }else if(mod.meta.hidden){ - text.labelWrap("@mod.multiplayer.compatible").growX(); - text.row(); - } - }).top().growX(); - title.add().growX(); - }).growX().growY().left(); + if(item.isOutdated()){ + text.labelWrap("@mod.outdated").growX(); + text.row(); + }else if(!item.isSupported()){ + text.labelWrap(Core.bundle.format("mod.requiresversion", item.meta.minGameVersion)).growX(); + text.row(); + }else if(item.hasUnmetDependencies()){ + text.labelWrap(Core.bundle.format("mod.missingdependencies", item.missingDependencies.toString(", "))).growX(); + t.row(); + }else if(item.hasContentErrors()){ + text.labelWrap("@mod.erroredcontent").growX(); + text.row(); + }else if(item.meta.hidden){ + text.labelWrap("@mod.multiplayer.compatible").growX(); + text.row(); + } + }).top().growX(); - t.table(right -> { - right.right(); - right.button(mod.enabled() ? Icon.downOpen : Icon.upOpen, Styles.clearPartiali, () -> { - mods.setEnabled(mod, !mod.enabled()); - setup(); - }).size(50f).disabled(!mod.isSupported()); + title1.add().growX(); + }).growX().growY().left(); - right.button(mod.hasSteamID() ? Icon.link : Icon.trash, Styles.clearPartiali, () -> { - if(!mod.hasSteamID()){ - ui.showConfirm("@confirm", "@mod.remove.confirm", () -> { - mods.removeMod(mod); - setup(); - }); - }else{ - platform.viewListing(mod); - } - }).size(50f); + t.table(right -> { + right.right(); + right.button(item.enabled() ? Icon.downOpen : Icon.upOpen, Styles.clearPartiali, () -> { + mods.setEnabled(item, !item.enabled()); + setup(); + }).size(50f).disabled(!item.isSupported()); - if(steam && !mod.hasSteamID()){ - right.row(); - right.button(Icon.export, Styles.clearPartiali, () -> { - platform.publish(mod); + right.button(item.hasSteamID() ? Icon.link : Icon.trash, Styles.clearPartiali, () -> { + if(!item.hasSteamID()){ + ui.showConfirm("@confirm", "@mod.remove.confirm", () -> { + mods.removeMod(item); + setup(); + }); + }else{ + platform.viewListing(item); + } }).size(50f); - } - }).growX().right().padRight(-8f).padTop(-8f); - }, Styles.clearPartialt, () -> showMod(mod)).size(w, h).growX().pad(4f); - table.row(); - }, !mobile || Core.graphics.isPortrait()).margin(10f).top(); + + if(steam && !item.hasSteamID()){ + right.row(); + right.button(Icon.export, Styles.clearPartiali, () -> { + platform.publish(item); + }).size(50f); + } + }).growX().right().padRight(-8f).padTop(-8f); + }, Styles.clearPartialt, () -> showMod(item)).size(w, h).growX().pad(4f); + pane[0].row(); + } + } + + if(!any){ + pane[0].add("@none.found").color(Color.lightGray).pad(4); + } + }; + + if(!mobile || Core.graphics.isPortrait()){ + cont.table(search -> { + search.image(Icon.zoom).padRight(8f); + search.field("", rebuild).growX(); + }).fillX().padBottom(4); + } + + cont.row(); + cont.pane(table1 -> { + pane[0] = table1.margin(10f).top(); + rebuild.get(""); + }).scrollX(false); }else{ cont.table(Styles.black6, t -> t.add("@mods.none")).height(80f); } diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index d53c607598..91a1dcf9da 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -620,7 +620,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ }; readd[0].run(); - }).grow().get().setScrollingDisabled(true, false); + }).grow().scrollX(false); } @Override diff --git a/core/src/mindustry/ui/dialogs/SchematicsDialog.java b/core/src/mindustry/ui/dialogs/SchematicsDialog.java index b61bd2fc1e..6662aaae41 100644 --- a/core/src/mindustry/ui/dialogs/SchematicsDialog.java +++ b/core/src/mindustry/ui/dialogs/SchematicsDialog.java @@ -97,7 +97,7 @@ public class SchematicsDialog extends BaseDialog{ } }; rebuildTags.run(); - }).fillX().height(tagh).get().setScrollingDisabled(false, true); + }).fillX().height(tagh).scrollY(false); in.button(Icon.pencilSmall, () -> { showAllTags(); @@ -246,7 +246,7 @@ public class SchematicsDialog extends BaseDialog{ }; rebuildPane.run(); - }).grow().get().setScrollingDisabled(true, false); + }).grow().scrollX(false); } public void showInfo(Schematic schematic){ @@ -573,7 +573,7 @@ public class SchematicsDialog extends BaseDialog{ }); } - }).fillX().left().height(tagh).get().setScrollingDisabled(false, true); + }).fillX().left().height(tagh).scrollY(false); t.button(Icon.addSmall, () -> { var dialog = new BaseDialog("@schematic.addtag"); diff --git a/core/src/mindustry/ui/fragments/PlayerListFragment.java b/core/src/mindustry/ui/fragments/PlayerListFragment.java index 32115c7cea..1139aad0ed 100644 --- a/core/src/mindustry/ui/fragments/PlayerListFragment.java +++ b/core/src/mindustry/ui/fragments/PlayerListFragment.java @@ -52,7 +52,7 @@ public class PlayerListFragment extends Fragment{ search.setMessageText(Core.bundle.get("players.search")); pane.row(); - pane.pane(content).grow().get().setScrollingDisabled(true, false); + pane.pane(content).grow().scrollX(false); pane.row(); pane.table(menu -> { diff --git a/gradle.properties b/gradle.properties index 5eb904834f..bdc683c767 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=0d9a003fc8f70b58f739bfacc3817b4c2522a8af +archash=6b77c7f375e42e3049ab60b47bd0654becb5eab4 From 362c7d38a61d447913938587412207b74e40fab7 Mon Sep 17 00:00:00 2001 From: RebornTrack970 <62565267+RebornTrack970@users.noreply.github.com> Date: Tue, 17 Aug 2021 03:22:13 +0300 Subject: [PATCH 32/45] Omega Hub Server Update 2 (#5782) Every Server (exept Rush and expansion) is fixed --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index d2eaf98704..0f33a7c392 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -13,7 +13,7 @@ }, { "name": "Omega", - "address": ["mindustry.me:7175", "185.86.230.61:25570", "185.86.230.61:25572","yeet.mindustry.me:6567"] + "address": ["yeet.mindustry.me:2345", "yeet.mindustry.me:2076", "yeet.mindustry.me:2222","yeet.mindustry.me:6567", "yeet.mindustry.me:2054", "yeet.mindustry.me:3512"] }, { "name": "MeowLand", From a4a6eb6ceef5a8d026014226fb5024a7e7067e51 Mon Sep 17 00:00:00 2001 From: Michael McMahon Date: Tue, 17 Aug 2021 08:27:36 -0400 Subject: [PATCH 33/45] Command-line-tools link (#5789) Link specifically to the `Command line tools only` section instead of the complete Android Studio package. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 575f421530..100027a0d6 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ Server builds are bundled with each released build (in Releases). If you'd rathe ### Android -1. Install the Android SDK [here.](https://developer.android.com/studio#downloads) Make sure you're downloading the "Command line tools only", as Android Studio is not required. +1. Install the Android SDK [here.](https://developer.android.com/studio#command-tools) Make sure you're downloading the "Command line tools only", as Android Studio is not required. 2. Set the `ANDROID_HOME` environment variable to point to your unzipped Android SDK directory. 3. Run `gradlew android:assembleDebug` (or `./gradlew` if on linux/mac). This will create an unsigned APK in `android/build/outputs/apk`. From f0c0900770e3f90b65a491231cf9c965dd47ebd4 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 17 Aug 2021 11:38:57 -0400 Subject: [PATCH 34/45] Lambda memory allocation optimizations --- core/src/mindustry/core/World.java | 21 ++--- .../mindustry/entities/EntityCollisions.java | 47 ++++++----- .../mindustry/entities/comp/BulletComp.java | 80 ++++++++++++------- .../mindustry/entities/comp/PuddleComp.java | 15 ++-- core/src/mindustry/game/Teams.java | 4 +- core/src/mindustry/world/Build.java | 2 +- gradle.properties | 2 +- 7 files changed, 97 insertions(+), 74 deletions(-) diff --git a/core/src/mindustry/core/World.java b/core/src/mindustry/core/World.java index e4c580eff2..839b453867 100644 --- a/core/src/mindustry/core/World.java +++ b/core/src/mindustry/core/World.java @@ -356,30 +356,23 @@ public class World{ } public void raycastEach(int x0f, int y0f, int x1, int y1, Raycaster cons){ - int x0 = x0f; - int y0 = y0f; - int dx = Math.abs(x1 - x0); - int dy = Math.abs(y1 - y0); + int x0 = x0f, dx = Math.abs(x1 - x0), sx = x0 < x1 ? 1 : -1; + int y0 = y0f, dy = Math.abs(y1 - y0), sy = y0 < y1 ? 1 : -1; + int e2, err = dx - dy; - int sx = x0 < x1 ? 1 : -1; - int sy = y0 < y1 ? 1 : -1; - - int err = dx - dy; - int e2; while(true){ - if(cons.accept(x0, y0)) break; if(x0 == x1 && y0 == y1) break; e2 = 2 * err; if(e2 > -dy){ - err = err - dy; - x0 = x0 + sx; + err -= dy; + x0 += sx; } if(e2 < dx){ - err = err + dx; - y0 = y0 + sy; + err += dx; + y0 += sy; } } } diff --git a/core/src/mindustry/entities/EntityCollisions.java b/core/src/mindustry/entities/EntityCollisions.java index ce492bc95d..e6651a420f 100644 --- a/core/src/mindustry/entities/EntityCollisions.java +++ b/core/src/mindustry/entities/EntityCollisions.java @@ -1,5 +1,6 @@ package mindustry.entities; +import arc.func.*; import arc.math.*; import arc.math.geom.*; import arc.struct.*; @@ -23,7 +24,9 @@ public class EntityCollisions{ private Rect r2 = new Rect(); //entity collisions - private Seq arrOut = new Seq<>(); + private Seq arrOut = new Seq<>(Hitboxc.class); + private Cons hitCons = this::updateCollision; + private Cons treeCons = tree -> tree.intersect(r2, arrOut); public void moveCheck(Hitboxc entity, float deltax, float deltay, SolidPred solidCheck){ if(!solidCheck.solid(entity.tileX(), entity.tileY())){ @@ -36,7 +39,7 @@ public class EntityCollisions{ } public void move(Hitboxc entity, float deltax, float deltay, SolidPred solidCheck){ - if(Math.abs(deltax) < 0.0001f & Math.abs(deltay) < 0.0001f) return; + if(Math.abs(deltax) < 0.0001f & Math.abs(deltay) < 0.0001f) return; boolean movedx = false; @@ -213,28 +216,34 @@ public class EntityCollisions{ @SuppressWarnings("unchecked") public void collide(EntityGroup groupa){ - groupa.each(solid -> { - solid.hitbox(r1); - r1.x += (solid.lastX() - solid.getX()); - r1.y += (solid.lastY() - solid.getY()); + groupa.each((Cons)hitCons); + } - solid.hitbox(r2); - r2.merge(r1); + private void updateCollision(Hitboxc solid){ + solid.hitbox(r1); + r1.x += (solid.lastX() - solid.getX()); + r1.y += (solid.lastY() - solid.getY()); - arrOut.clear(); + solid.hitbox(r2); + r2.merge(r1); - //get all targets based on what entity wants to collide with - solid.getCollisions(tree -> tree.intersect(r2, arrOut)); + arrOut.clear(); - for(Hitboxc sc : arrOut){ - sc.hitbox(r1); - if(r2.overlaps(r1)){ - checkCollide(solid, sc); - //break out of loop when this object hits something - if(!solid.isAdded()) return; - } + //get all targets based on what entity wants to collide with + solid.getCollisions(treeCons); + + var items = arrOut.items; + int size = arrOut.size; + + for(int i = 0; i < size; i++){ + Hitboxc sc = items[i]; + sc.hitbox(r1); + if(r2.overlaps(r1)){ + checkCollide(solid, sc); + //break out of loop when this object hits something + if(!solid.isAdded()) return; } - }); + } } public interface SolidPred{ diff --git a/core/src/mindustry/entities/comp/BulletComp.java b/core/src/mindustry/entities/comp/BulletComp.java index 3d4f209734..27a92be992 100644 --- a/core/src/mindustry/entities/comp/BulletComp.java +++ b/core/src/mindustry/entities/comp/BulletComp.java @@ -118,36 +118,7 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw type.update(self()); if(type.collidesTiles && type.collides && type.collidesGround){ - world.raycastEach(World.toTile(lastX()), World.toTile(lastY()), tileX(), tileY(), (x, y) -> { - - Building build = world.build(x, y); - if(build == null || !isAdded()) return false; - - if(build.collide(self()) && type.testCollision(self(), build) && !build.dead() && (type.collidesTeam || build.team != team) && !(type.pierceBuilding && hasCollided(build.id))){ - boolean remove = false; - - float health = build.health; - - if(build.team != team){ - remove = build.collision(self()); - } - - if(remove || type.collidesTeam){ - if(!type.pierceBuilding){ - hit = true; - remove(); - }else{ - collided.add(build.id); - } - } - - type.hitTile(self(), build, health, true); - - return !type.pierceBuilding; - } - - return false; - }); + tileRaycast(World.toTile(lastX()), World.toTile(lastY()), tileX(), tileY()); } if(type.pierceCap != -1 && collided.size >= type.pierceCap){ @@ -156,6 +127,55 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw } } + //copy-paste of World#raycastEach, inlined for lambda capture performance. + @Override + public void tileRaycast(int x0f, int y0f, int x1, int y1){ + int x = x0f, dx = Math.abs(x1 - x), sx = x < x1 ? 1 : -1; + int y = y0f, dy = Math.abs(y1 - y), sy = y < y1 ? 1 : -1; + int e2, err = dx - dy; + + while(true){ + Building build = world.build(x, y); + if(build != null && isAdded() && build.collide(self()) && type.testCollision(self(), build) + && !build.dead() && (type.collidesTeam || build.team != team) && !(type.pierceBuilding && hasCollided(build.id))){ + + boolean remove = false; + float health = build.health; + + if(build.team != team){ + remove = build.collision(self()); + } + + if(remove || type.collidesTeam){ + if(!type.pierceBuilding){ + hit = true; + remove(); + }else{ + collided.add(build.id); + } + } + + type.hitTile(self(), build, health, true); + + //stop raycasting when building is hit + if(type.pierceBuilding) return; + } + + if(x == x1 && y == y1) break; + + e2 = 2 * err; + if(e2 > -dy){ + err -= dy; + x += sx; + } + + if(e2 < dx){ + err += dx; + y += sy; + } + } + } + @Override public void draw(){ Draw.z(type.layer); diff --git a/core/src/mindustry/entities/comp/PuddleComp.java b/core/src/mindustry/entities/comp/PuddleComp.java index 38df428c41..c14c49a826 100644 --- a/core/src/mindustry/entities/comp/PuddleComp.java +++ b/core/src/mindustry/entities/comp/PuddleComp.java @@ -40,8 +40,8 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{ @Import int id; @Import float x, y; + @Import boolean added; - transient private boolean mismatch = false; transient float accepting, updateTime, lastRipple = Time.time + Mathf.random(40f); float amount; Tile tile; @@ -79,9 +79,12 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{ return; } - if(Puddles.get(tile) != self()){ - mismatch = true; - remove(); + if(Puddles.get(tile) != self() && added){ + //force removal without pool free + Groups.all.remove(self()); + Groups.draw.remove(self()); + Groups.puddle.remove(self()); + added = false; return; } @@ -134,9 +137,7 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{ @Override public void remove(){ - if(!mismatch){ - Puddles.remove(tile); - } + Puddles.remove(tile); } @Override diff --git a/core/src/mindustry/game/Teams.java b/core/src/mindustry/game/Teams.java index 97638ed1e2..f6f284ab35 100644 --- a/core/src/mindustry/game/Teams.java +++ b/core/src/mindustry/game/Teams.java @@ -48,11 +48,11 @@ public class Teams{ return Geometry.findClosest(x, y, get(team).cores); } - public boolean eachEnemyCore(Team team, Boolf ret){ + public boolean anyEnemyCoresWithin(Team team, float x, float y, float radius){ for(TeamData data : active){ if(team != data.team){ for(CoreBuild tile : data.cores){ - if(ret.get(tile)){ + if(tile.within(x, y, radius)){ return true; } } diff --git a/core/src/mindustry/world/Build.java b/core/src/mindustry/world/Build.java index d5bb888f7a..0f6c13d9be 100644 --- a/core/src/mindustry/world/Build.java +++ b/core/src/mindustry/world/Build.java @@ -151,7 +151,7 @@ public class Build{ if(closest != null && closest.team != team){ return false; } - }else if(state.teams.eachEnemyCore(team, core -> Mathf.dst(x * tilesize + type.offset, y * tilesize + type.offset, core.x, core.y) < state.rules.enemyCoreBuildRadius + type.size * tilesize / 2f)){ + }else if(state.teams.anyEnemyCoresWithin(team, x * tilesize + type.offset, y * tilesize + type.offset, state.rules.enemyCoreBuildRadius + tilesize)){ return false; } } diff --git a/gradle.properties b/gradle.properties index bdc683c767..2689175f1f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=6b77c7f375e42e3049ab60b47bd0654becb5eab4 +archash=f4e8a35c46e28dc68bb2cab17e42ef6db15ae72f From e4742133caf36eec3f4bc86fdd355071ca20f1bb Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 17 Aug 2021 17:23:02 -0400 Subject: [PATCH 35/45] Made various fields/methods public --- core/src/mindustry/Vars.java | 2 +- core/src/mindustry/ai/types/BuilderAI.java | 2 +- core/src/mindustry/ai/types/DefenderAI.java | 4 +- core/src/mindustry/ai/types/FlyingAI.java | 4 +- core/src/mindustry/ai/types/LogicAI.java | 14 +++--- core/src/mindustry/ai/types/MinerAI.java | 2 +- core/src/mindustry/ai/types/RepairAI.java | 4 +- core/src/mindustry/ai/types/SuicideAI.java | 2 +- core/src/mindustry/content/Fx.java | 10 ++-- core/src/mindustry/entities/Effect.java | 3 +- .../entities/units/AIController.java | 46 +++++++++---------- .../blocks/defense/turrets/LaserTurret.java | 4 +- 12 files changed, 47 insertions(+), 50 deletions(-) diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index dbd8e9cc42..4d5042ad68 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -87,7 +87,7 @@ public class Vars implements Loadable{ public static final int maxNameLength = 40; /** displayed item size when ingame. */ public static final float itemSize = 5f; - /** units outside of this bound will die instantly */ + /** units outside this bound will die instantly */ public static final float finalWorldBounds = 250; /** range for building */ public static final float buildingRange = 220f; diff --git a/core/src/mindustry/ai/types/BuilderAI.java b/core/src/mindustry/ai/types/BuilderAI.java index 3f171df120..1152361a38 100644 --- a/core/src/mindustry/ai/types/BuilderAI.java +++ b/core/src/mindustry/ai/types/BuilderAI.java @@ -16,9 +16,9 @@ public class BuilderAI extends AIController{ public static float buildRadius = 1500, retreatDst = 110f, fleeRange = 370f, retreatDelay = Time.toSeconds * 2f; boolean found = false; + float retreatTimer; @Nullable Unit following; @Nullable Teamc enemy; - float retreatTimer; @Nullable BlockPlan lastPlan; @Override diff --git a/core/src/mindustry/ai/types/DefenderAI.java b/core/src/mindustry/ai/types/DefenderAI.java index 3f7915e68e..528f2baec2 100644 --- a/core/src/mindustry/ai/types/DefenderAI.java +++ b/core/src/mindustry/ai/types/DefenderAI.java @@ -21,12 +21,12 @@ public class DefenderAI extends AIController{ } @Override - protected void updateTargeting(){ + public void updateTargeting(){ if(retarget()) target = findTarget(unit.x, unit.y, unit.range(), true, true); } @Override - protected Teamc findTarget(float x, float y, float range, boolean air, boolean ground){ + public Teamc findTarget(float x, float y, float range, boolean air, boolean ground){ //find unit to follow if not in rally mode if(command() != UnitCommand.rally){ diff --git a/core/src/mindustry/ai/types/FlyingAI.java b/core/src/mindustry/ai/types/FlyingAI.java index db5ae84dab..225ace963d 100644 --- a/core/src/mindustry/ai/types/FlyingAI.java +++ b/core/src/mindustry/ai/types/FlyingAI.java @@ -32,7 +32,7 @@ public class FlyingAI extends AIController{ } @Override - protected Teamc findTarget(float x, float y, float range, boolean air, boolean ground){ + public Teamc findTarget(float x, float y, float range, boolean air, boolean ground){ var result = findMainTarget(x, y, range, air, ground); //if the main target is in range, use it, otherwise target whatever is closest @@ -40,7 +40,7 @@ public class FlyingAI extends AIController{ } @Override - protected Teamc findMainTarget(float x, float y, float range, boolean air, boolean ground){ + public Teamc findMainTarget(float x, float y, float range, boolean air, boolean ground){ var core = targetFlag(x, y, BlockFlag.core, true); if(core != null && Mathf.within(x, y, core.getX(), core.getY(), range)){ diff --git a/core/src/mindustry/ai/types/LogicAI.java b/core/src/mindustry/ai/types/LogicAI.java index d33d5ad372..25809d7a3a 100644 --- a/core/src/mindustry/ai/types/LogicAI.java +++ b/core/src/mindustry/ai/types/LogicAI.java @@ -44,7 +44,7 @@ public class LogicAI extends AIController{ private ObjectSet radars = new ObjectSet<>(); @Override - protected void updateMovement(){ + public void updateMovement(){ if(itemTimer >= 0) itemTimer -= Time.delta; if(payTimer >= 0) payTimer -= Time.delta; @@ -114,7 +114,7 @@ public class LogicAI extends AIController{ } @Override - protected void moveTo(Position target, float circleLength, float smooth){ + public void moveTo(Position target, float circleLength, float smooth){ if(target == null) return; vec.set(target).sub(unit); @@ -141,29 +141,29 @@ public class LogicAI extends AIController{ } @Override - protected boolean checkTarget(Teamc target, float x, float y, float range){ + public boolean checkTarget(Teamc target, float x, float y, float range){ return false; } //always retarget @Override - protected boolean retarget(){ + public boolean retarget(){ return true; } @Override - protected boolean invalid(Teamc target){ + public boolean invalid(Teamc target){ return false; } @Override - protected boolean shouldShoot(){ + public boolean shouldShoot(){ return shoot && !(unit.type.canBoost && boost); } //always aim for the main target @Override - protected Teamc target(float x, float y, float range, boolean air, boolean ground){ + public Teamc target(float x, float y, float range, boolean air, boolean ground){ return switch(aimControl){ case target -> posTarget; case targetp -> mainTarget; diff --git a/core/src/mindustry/ai/types/MinerAI.java b/core/src/mindustry/ai/types/MinerAI.java index 64bddbd5f0..1c1a564c38 100644 --- a/core/src/mindustry/ai/types/MinerAI.java +++ b/core/src/mindustry/ai/types/MinerAI.java @@ -14,7 +14,7 @@ public class MinerAI extends AIController{ Tile ore; @Override - protected void updateMovement(){ + public void updateMovement(){ Building core = unit.closestCore(); if(!(unit.canMine()) || core == null) return; diff --git a/core/src/mindustry/ai/types/RepairAI.java b/core/src/mindustry/ai/types/RepairAI.java index 23feb2a0eb..4879f673c8 100644 --- a/core/src/mindustry/ai/types/RepairAI.java +++ b/core/src/mindustry/ai/types/RepairAI.java @@ -13,7 +13,7 @@ public class RepairAI extends AIController{ float retreatTimer; @Override - protected void updateMovement(){ + public void updateMovement(){ if(target instanceof Building){ boolean shoot = false; @@ -56,7 +56,7 @@ public class RepairAI extends AIController{ } @Override - protected void updateTargeting(){ + public void updateTargeting(){ Building target = Units.findDamagedTile(unit.team, unit.x, unit.y); if(target instanceof ConstructBuild) target = null; diff --git a/core/src/mindustry/ai/types/SuicideAI.java b/core/src/mindustry/ai/types/SuicideAI.java index 8f2a04c2dc..1db94b95b0 100644 --- a/core/src/mindustry/ai/types/SuicideAI.java +++ b/core/src/mindustry/ai/types/SuicideAI.java @@ -111,7 +111,7 @@ public class SuicideAI extends GroundAI{ } @Override - protected Teamc target(float x, float y, float range, boolean air, boolean ground){ + public Teamc target(float x, float y, float range, boolean air, boolean ground){ return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground && !(t.block instanceof Conveyor || t.block instanceof Conduit)); //do not target conveyors/conduits } diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index 10c64ac923..03ce1e64e4 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -393,12 +393,6 @@ public class Fx{ Lines.circle(e.x, e.y, 2f + e.finpow() * 7f); }), - healDenamic = new Effect(11, e -> { - color(Pal.heal); - stroke(e.fout() * 2f); - Lines.circle(e.x, e.y, 2f + e.finpow() * e.rotation); - }), - shieldWave = new Effect(22, e -> { color(e.color, 0.7f); stroke(e.fout() * 2f); @@ -1000,7 +994,9 @@ public class Fx{ float length = 20f * e.finpow(); float size = 7f * e.fout(); - rect(((Item)e.data).fullIcon, e.x + trnsx(e.rotation, length), e.y + trnsy(e.rotation, length), size, size); + if(!(e.data instanceof Item item)) return; + + rect(item.fullIcon, e.x + trnsx(e.rotation, length), e.y + trnsy(e.rotation, length), size, size); }), shockwave = new Effect(10f, 80f, e -> { diff --git a/core/src/mindustry/entities/Effect.java b/core/src/mindustry/entities/Effect.java index 492ab9af0f..f2bc5e95d5 100644 --- a/core/src/mindustry/entities/Effect.java +++ b/core/src/mindustry/entities/Effect.java @@ -19,7 +19,8 @@ import static mindustry.Vars.*; public class Effect{ private static final float shakeFalloff = 10000f; private static final EffectContainer container = new EffectContainer(); - private static final Seq all = new Seq<>(); + + public static final Seq all = new Seq<>(); private boolean initialized; diff --git a/core/src/mindustry/entities/units/AIController.java b/core/src/mindustry/entities/units/AIController.java index 0af7565424..583691adaa 100644 --- a/core/src/mindustry/entities/units/AIController.java +++ b/core/src/mindustry/entities/units/AIController.java @@ -46,19 +46,19 @@ public class AIController implements UnitController{ } @Nullable - protected AIController fallback(){ + public AIController fallback(){ return null; } - protected boolean useFallback(){ + public boolean useFallback(){ return false; } - protected UnitCommand command(){ + public UnitCommand command(){ return unit.team.data().command; } - protected void updateVisuals(){ + public void updateVisuals(){ if(unit.isFlying()){ unit.wobble(); @@ -66,21 +66,21 @@ public class AIController implements UnitController{ } } - protected void updateMovement(){ + public void updateMovement(){ } - protected void updateTargeting(){ + public void updateTargeting(){ if(unit.hasWeapons()){ updateWeapons(); } } - protected boolean invalid(Teamc target){ + public boolean invalid(Teamc target){ return Units.invalidateTarget(target, unit.team, unit.x, unit.y); } - protected void pathfind(int pathTarget){ + public void pathfind(int pathTarget){ int costType = unit.pathType(); Tile tile = unit.tileOn(); @@ -92,7 +92,7 @@ public class AIController implements UnitController{ unit.moveAt(vec.trns(unit.angleTo(targetTile.worldx(), targetTile.worldy()), unit.speed())); } - protected void updateWeapons(){ + public void updateWeapons(){ float rotation = unit.rotation - 90; boolean ret = retarget(); @@ -146,45 +146,45 @@ public class AIController implements UnitController{ } } - protected boolean checkTarget(Teamc target, float x, float y, float range){ + public boolean checkTarget(Teamc target, float x, float y, float range){ return Units.invalidateTarget(target, unit.team, x, y, range); } - protected boolean shouldShoot(){ + public boolean shouldShoot(){ return true; } - protected Teamc targetFlag(float x, float y, BlockFlag flag, boolean enemy){ + public Teamc targetFlag(float x, float y, BlockFlag flag, boolean enemy){ if(unit.team == Team.derelict) return null; Tile target = Geometry.findClosest(x, y, enemy ? indexer.getEnemy(unit.team, flag) : indexer.getAllied(unit.team, flag)); return target == null ? null : target.build; } - protected Teamc target(float x, float y, float range, boolean air, boolean ground){ + public Teamc target(float x, float y, float range, boolean air, boolean ground){ return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground); } - protected boolean retarget(){ + public boolean retarget(){ return timer.get(timerTarget, target == null ? 40 : 90); } - protected Teamc findMainTarget(float x, float y, float range, boolean air, boolean ground){ + public Teamc findMainTarget(float x, float y, float range, boolean air, boolean ground){ return findTarget(x, y, range, air, ground); } - protected Teamc findTarget(float x, float y, float range, boolean air, boolean ground){ + public Teamc findTarget(float x, float y, float range, boolean air, boolean ground){ return target(x, y, range, air, ground); } - protected void init(){ + public void init(){ } - protected @Nullable Tile getClosestSpawner(){ + public @Nullable Tile getClosestSpawner(){ return Geometry.findClosest(unit.x, unit.y, Vars.spawner.getSpawns()); } - protected void unloadPayloads(){ + public void unloadPayloads(){ if(unit instanceof Payloadc pay && pay.hasPayload() && target instanceof Building && pay.payloads().peek() instanceof UnitPayload){ if(target.within(unit, Math.max(unit.type().range + 1f, 75f))){ pay.dropLastPayload(); @@ -192,11 +192,11 @@ public class AIController implements UnitController{ } } - protected void circle(Position target, float circleLength){ + public void circle(Position target, float circleLength){ circle(target, circleLength, unit.speed()); } - protected void circle(Position target, float circleLength, float speed){ + public void circle(Position target, float circleLength, float speed){ if(target == null) return; vec.set(target).sub(unit); @@ -210,11 +210,11 @@ public class AIController implements UnitController{ unit.moveAt(vec); } - protected void moveTo(Position target, float circleLength){ + public void moveTo(Position target, float circleLength){ moveTo(target, circleLength, 100f); } - protected void moveTo(Position target, float circleLength, float smooth){ + public void moveTo(Position target, float circleLength, float smooth){ if(target == null) return; vec.set(target).sub(unit); diff --git a/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java b/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java index 704cb6f5d5..299b457388 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java @@ -38,8 +38,8 @@ public class LaserTurret extends PowerTurret{ } public class LaserTurretBuild extends PowerTurretBuild{ - Bullet bullet; - float bulletLife; + public Bullet bullet; + public float bulletLife; @Override protected void updateCooling(){ From 7118c972a82083e51c916279d58f4f69596eccab Mon Sep 17 00:00:00 2001 From: Alexander397172YT <76264974+Alexander397172YT@users.noreply.github.com> Date: Wed, 18 Aug 2021 01:54:29 +0400 Subject: [PATCH 36/45] Update servers_v6.json (#5790) --- servers_v6.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/servers_v6.json b/servers_v6.json index 657db9b36f..ce54fff56c 100644 --- a/servers_v6.json +++ b/servers_v6.json @@ -106,5 +106,9 @@ { "name": "Español", "address": ["168.119.36.188:41445"] + }, + { + "name": "CreateDustry", + "address": ["144.76.120.74:18645"] } ] From 24e6f5b841bf350f24ef67c81f506af2ea4ef909 Mon Sep 17 00:00:00 2001 From: buthed010203 Date: Tue, 17 Aug 2021 17:59:15 -0400 Subject: [PATCH 37/45] remove stray newline (#5788) its ugly --- core/src/mindustry/ui/fragments/LoadingFragment.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/mindustry/ui/fragments/LoadingFragment.java b/core/src/mindustry/ui/fragments/LoadingFragment.java index 4f977fa644..a8ba631420 100644 --- a/core/src/mindustry/ui/fragments/LoadingFragment.java +++ b/core/src/mindustry/ui/fragments/LoadingFragment.java @@ -65,7 +65,6 @@ public class LoadingFragment extends Fragment{ if(!bar.visible){ setProgress(() -> progValue); } - } public void setButton(Runnable listener){ From d1271f3e4b41b7851a94b76184c8f16d8c02836a Mon Sep 17 00:00:00 2001 From: Sunny Kim <58885089+sk7725@users.noreply.github.com> Date: Wed, 18 Aug 2021 07:00:00 +0900 Subject: [PATCH 38/45] Boss (Guardian) Status Sprite (#5773) * boss status * almost forgot * Update bundle_ko.properties --- core/assets-raw/sprites/statuses/status-boss.png | Bin 0 -> 418 bytes core/assets/bundles/bundle.properties | 1 + core/assets/bundles/bundle_ko.properties | 5 +++-- 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 core/assets-raw/sprites/statuses/status-boss.png diff --git a/core/assets-raw/sprites/statuses/status-boss.png b/core/assets-raw/sprites/statuses/status-boss.png new file mode 100644 index 0000000000000000000000000000000000000000..4497e73f1730a3eb9d786410f6134fe5fa368ac5 GIT binary patch literal 418 zcmeAS@N?(olHy`uVBq!ia0y~yU{C{L4mJh`h84Ci*D)|KW_r3fhD30_oqloMAp;)g z_v?QAkC&5Jd7?$7bXS9#WBj%)eYIi|Lbvz5uTPKppWecBnSaf%lQl<=d=R^7e)8I< z2fNgcG1Tx2M0*#=Cd6&HyZNigJBnZA{+5Z%!4 z5PHyRK??uZ#Z!1cZkeoFxiVq$nt#cnImL_i+PZ(+r1~{ALBg{CuJM;|aUL1XU$4zi zxpm%Ed`@c>(?(Y_!)tP_+K!45tj%R??7iDh1sJSsa6DhIB0ZavYni0PY@-IQ<9`GB zvn`Zan+>vhn%XSCyGC8>*>}8D_~n9ZD8iH<2m%*LfX5{>2PX^X^gT$#PkIhE|?ltxUS}5UCcFucf(fpWf^<+ z2}$teOjv8FVx2s*@UFT;106MN>Od>vGfWH@wpDx8A7T Y(PHfKKSXgG0|Nttr>mdKI;Vst04RR6c>n+a literal 0 HcmV?d00001 diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 5bc7c38ed0..53e361382b 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -652,6 +652,7 @@ status.overclock.name = Overclock status.shocked.name = Shocked status.blasted.name = Blasted status.unmoving.name = Unmoving +status.boss.name = Guardian settings.language = Language settings.data = Game Data diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index e8fec4caff..bd9c7bd3a8 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -639,7 +639,7 @@ sector.extractionOutpost.description = 적이 다른 지역에 자원을 보내 sector.impact0078.description = 이곳에는 시스템에 처음 진입한 우주 수송선의 잔해가 있습니다.\n\n우주선이 파괴된 잔해에서 최대한 많은 자원을 회수하고, 손상되지 않은 그들의 기술을 획득하세요. sector.planetaryTerminal.description = 이 행성에서의 마지막 전투를 준비하세요.\n\n적이 필사의 각오로 지키고 있는 이 해안 기지엔 우주에 코어를 발사할 수 있는 시설이 있습니다.\n\n해군을 생산하여 적을 신속하게 제거하고, 그들의 코어 발사 기술을 약탈하십시오.\n\n[royal] 건투를 빕니다.[] -status.burning.name = 불탐 +status.burning.name = 발화 status.freezing.name = 빙결 status.wet.name = 젖음 status.muddy.name = 질척해짐 @@ -650,8 +650,9 @@ status.spore-slowed.name = 포자감속 status.tarred.name = 침유됨 status.overclock.name = 가속화 status.shocked.name = 감전 -status.blasted.name = 파열 +status.blasted.name = 파손 status.unmoving.name = 멈춤 +status.boss.name = 수호자 settings.language = 언어 settings.data = 게임 데이터 From 8e179552eced009269f0b78bbcdd586646831833 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 17 Aug 2021 21:45:13 -0400 Subject: [PATCH 39/45] pointless casts begone --- core/src/mindustry/content/StatusEffects.java | 3 ++- core/src/mindustry/core/Renderer.java | 4 ++-- core/src/mindustry/graphics/Shaders.java | 6 +++--- core/src/mindustry/maps/Maps.java | 2 +- core/src/mindustry/ui/Fonts.java | 6 +++--- core/src/mindustry/ui/dialogs/SchematicsDialog.java | 2 +- gradle.properties | 2 +- 7 files changed, 13 insertions(+), 12 deletions(-) diff --git a/core/src/mindustry/content/StatusEffects.java b/core/src/mindustry/content/StatusEffects.java index 8a43965754..710995d4a1 100644 --- a/core/src/mindustry/content/StatusEffects.java +++ b/core/src/mindustry/content/StatusEffects.java @@ -4,6 +4,7 @@ import arc.*; import arc.graphics.*; import arc.math.*; import mindustry.ctype.*; +import mindustry.game.*; import mindustry.game.EventType.*; import mindustry.type.*; import mindustry.graphics.*; @@ -163,7 +164,7 @@ public class StatusEffects implements ContentList{ }}; boss = new StatusEffect("boss"){{ - color = Pal.health; + color = Team.sharded.color; permanent = true; damageMultiplier = 1.3f; healthMultiplier = 1.5f; diff --git a/core/src/mindustry/core/Renderer.java b/core/src/mindustry/core/Renderer.java index e7fe48677e..c348bc2fda 100644 --- a/core/src/mindustry/core/Renderer.java +++ b/core/src/mindustry/core/Renderer.java @@ -105,8 +105,8 @@ public class Renderer implements ApplicationListener{ for(int i = 0; i < splashes.length; i++) splashes[i] = atlas.find("splash-" + i); assets.load("sprites/clouds.png", Texture.class).loaded = t -> { - ((Texture)t).setWrap(TextureWrap.repeat); - ((Texture)t).setFilter(TextureFilter.linear); + t.setWrap(TextureWrap.repeat); + t.setFilter(TextureFilter.linear); }; } diff --git a/core/src/mindustry/graphics/Shaders.java b/core/src/mindustry/graphics/Shaders.java index 089e2e5ddb..7ea78a2549 100644 --- a/core/src/mindustry/graphics/Shaders.java +++ b/core/src/mindustry/graphics/Shaders.java @@ -234,7 +234,7 @@ public class Shaders{ super(frag); Core.assets.load("sprites/space.png", Texture.class).loaded = t -> { - texture = (Texture)t; + texture = t; texture.setFilter(TextureFilter.linear); texture.setWrap(TextureWrap.mirroredRepeat); }; @@ -273,8 +273,8 @@ public class Shaders{ public void loadNoise(){ Core.assets.load("sprites/" + textureName() + ".png", Texture.class).loaded = t -> { - ((Texture)t).setFilter(TextureFilter.linear); - ((Texture)t).setWrap(TextureWrap.repeat); + t.setFilter(TextureFilter.linear); + t.setWrap(TextureWrap.repeat); }; } diff --git a/core/src/mindustry/maps/Maps.java b/core/src/mindustry/maps/Maps.java index b6a2f1fc1e..0e0fd5aa01 100644 --- a/core/src/mindustry/maps/Maps.java +++ b/core/src/mindustry/maps/Maps.java @@ -381,7 +381,7 @@ public class Maps{ //try to load preview if(map.previewFile().exists()){ //this may fail, but calls queueNewPreview - Core.assets.load(new AssetDescriptor<>(map.previewFile().path() + "." + mapExtension, Texture.class, new MapPreviewParameter(map))).loaded = t -> map.texture = (Texture)t; + Core.assets.load(new AssetDescriptor<>(map.previewFile().path() + "." + mapExtension, Texture.class, new MapPreviewParameter(map))).loaded = t -> map.texture = t; try{ readCache(map); diff --git a/core/src/mindustry/ui/Fonts.java b/core/src/mindustry/ui/Fonts.java index 9785619cba..2d5b3c4a4d 100644 --- a/core/src/mindustry/ui/Fonts.java +++ b/core/src/mindustry/ui/Fonts.java @@ -74,19 +74,19 @@ public class Fonts{ largeIcons.clear(); FreeTypeFontParameter param = fontParameter(); - Core.assets.load("default", Font.class, new FreeTypeFontLoaderParameter(mainFont, param)).loaded = f -> Fonts.def = (Font)f; + Core.assets.load("default", Font.class, new FreeTypeFontLoaderParameter(mainFont, param)).loaded = f -> Fonts.def = f; Core.assets.load("icon", Font.class, new FreeTypeFontLoaderParameter("fonts/icon.ttf", new FreeTypeFontParameter(){{ size = 30; incremental = true; characters = "\0"; - }})).loaded = f -> Fonts.icon = (Font)f; + }})).loaded = f -> Fonts.icon = f; Core.assets.load("iconLarge", Font.class, new FreeTypeFontLoaderParameter("fonts/icon.ttf", new FreeTypeFontParameter(){{ size = 48; incremental = false; characters = "\0" + Iconc.all; borderWidth = 5f; borderColor = Color.darkGray; - }})).loaded = f -> Fonts.iconLarge = (Font)f; + }})).loaded = f -> Fonts.iconLarge = f; } public static TextureRegion getLargeIcon(String name){ diff --git a/core/src/mindustry/ui/dialogs/SchematicsDialog.java b/core/src/mindustry/ui/dialogs/SchematicsDialog.java index 6662aaae41..3dce3ebf0a 100644 --- a/core/src/mindustry/ui/dialogs/SchematicsDialog.java +++ b/core/src/mindustry/ui/dialogs/SchematicsDialog.java @@ -41,7 +41,7 @@ public class SchematicsDialog extends BaseDialog{ public SchematicsDialog(){ super("@schematics"); - Core.assets.load("sprites/schematic-background.png", Texture.class).loaded = t -> ((Texture)t).setWrap(TextureWrap.repeat); + Core.assets.load("sprites/schematic-background.png", Texture.class).loaded = t -> t.setWrap(TextureWrap.repeat); tags = Core.settings.getJson("schematic-tags", Seq.class, String.class, Seq::new); diff --git a/gradle.properties b/gradle.properties index 2689175f1f..1b5e22e670 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=f4e8a35c46e28dc68bb2cab17e42ef6db15ae72f +archash=f50ceb463ce4cc7e0b09a7817b12d98c43f00068 From 63795d9df891b460203f513982c17eb25c96b50b Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 17 Aug 2021 22:06:29 -0400 Subject: [PATCH 40/45] public AI fields --- core/src/mindustry/ai/types/BuilderAI.java | 7 ++++--- core/src/mindustry/ai/types/MinerAI.java | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/ai/types/BuilderAI.java b/core/src/mindustry/ai/types/BuilderAI.java index 1152361a38..6d6a0fa5c9 100644 --- a/core/src/mindustry/ai/types/BuilderAI.java +++ b/core/src/mindustry/ai/types/BuilderAI.java @@ -15,11 +15,12 @@ import static mindustry.Vars.*; public class BuilderAI extends AIController{ public static float buildRadius = 1500, retreatDst = 110f, fleeRange = 370f, retreatDelay = Time.toSeconds * 2f; + public @Nullable Unit following; + public @Nullable Teamc enemy; + public @Nullable BlockPlan lastPlan; + boolean found = false; float retreatTimer; - @Nullable Unit following; - @Nullable Teamc enemy; - @Nullable BlockPlan lastPlan; @Override public void updateMovement(){ diff --git a/core/src/mindustry/ai/types/MinerAI.java b/core/src/mindustry/ai/types/MinerAI.java index 1c1a564c38..f4a408800f 100644 --- a/core/src/mindustry/ai/types/MinerAI.java +++ b/core/src/mindustry/ai/types/MinerAI.java @@ -9,9 +9,9 @@ import mindustry.world.*; import static mindustry.Vars.*; public class MinerAI extends AIController{ - boolean mining = true; - Item targetItem; - Tile ore; + public boolean mining = true; + public Item targetItem; + public Tile ore; @Override public void updateMovement(){ From d5e1b47b522031f7eccdfee40b627e8cad7dd2fa Mon Sep 17 00:00:00 2001 From: Xasmedy <75242213+Xasmedy@users.noreply.github.com> Date: Wed, 18 Aug 2021 16:25:46 +0200 Subject: [PATCH 41/45] Adding M.D.N. Hub (#5795) --- servers_v6.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v6.json b/servers_v6.json index ce54fff56c..e481eaf248 100644 --- a/servers_v6.json +++ b/servers_v6.json @@ -37,7 +37,7 @@ }, { "name": "mindustry.ddns.net", - "address": ["mindustry.ddns.net:1000", "mindustry.ddns.net:2000", "mindustry.ddns.net:3000", "mindustry.ddns.net:4000"] + "address": ["mindustry.ddns.net", "mindustry.ddns.net:1000", "mindustry.ddns.net:2000", "mindustry.ddns.net:3000", "mindustry.ddns.net:4000"] }, { "name": "Surrealment", From 5b61a183cd93c99311b35d3382e3b0fe28be954b Mon Sep 17 00:00:00 2001 From: kituta <85106525+kituta@users.noreply.github.com> Date: Wed, 18 Aug 2021 23:45:39 +0900 Subject: [PATCH 42/45] Update bundle_ja.properties (#5376) * Update bundle_ja.properties * Update bundle_ja.properties Minor corrections and additions * Update bundle_ja.properties * Update bundle_ja.properties Add 2 lines * Update bundle_ja.properties * Update bundle_ja.properties * Update bundle_ja.properties * Update bundle_ja.properties * Update bundle_ja.properties * Update bundle_ja.properties * Update bundle_ja.properties * Update bundle_ja.properties * Update bundle_ja.properties * Update bundle_ja.properties * Update bundle_ja.properties * Update bundle_ja.properties * Update bundle_ja.properties * Update core/assets/bundles/bundle_ja.properties Co-authored-by: Take <18237819+Takeno-hito@users.noreply.github.com> * Update core/assets/bundles/bundle_ja.properties Co-authored-by: Take <18237819+Takeno-hito@users.noreply.github.com> * Update core/assets/bundles/bundle_ja.properties Co-authored-by: Take <18237819+Takeno-hito@users.noreply.github.com> * Update bundle_ja.properties * Update core/assets/bundles/bundle_ja.properties Co-authored-by: Take <18237819+Takeno-hito@users.noreply.github.com> * Update core/assets/bundles/bundle_ja.properties Co-authored-by: Take <18237819+Takeno-hito@users.noreply.github.com> Co-authored-by: Take <18237819+Takeno-hito@users.noreply.github.com> --- core/assets/bundles/bundle_ja.properties | 379 ++++++++++++++--------- 1 file changed, 240 insertions(+), 139 deletions(-) diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index c6b5b42c56..e827f89aeb 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -1,6 +1,6 @@ credits.text = 制作者 [royal]Anuken[] - [sky]anukendev@gmail.com[] credits = クレジット -contributors = 翻訳や開発に協力してくださった方々 +contributors = 翻訳や開発に協力してくださった皆様 discord = MindustryのDiscordに参加! link.discord.description = Mindustryの公式Discordグループ link.reddit.description = Mindustryのsubreddit @@ -41,10 +41,13 @@ be.ignore = 無視する be.noupdates = 更新が見つかりません。 be.check = 更新を確認します。 -mod.featured.dialog.title = Mod ブラウザー (作業中) -mods.browser.selected = 選択されたmod +mods.browser = Modブラウザ +mods.browser.selected = 選択されたMod mods.browser.add = インストール +mods.browser.reinstall = 再インストール mods.github.open = 見る +mods.browser.sortdate = 新しいものから並べる +mods.browser.sortstars = お気に入り数で並べる schematic = 設計図 schematic.add = 設計図を保存 @@ -64,6 +67,14 @@ schematic.delete.confirm = この設計図は完全に削除されます。よ schematic.rename = 設計図の名前を変更する。 schematic.info = {1}x{0}, {2} ブロック schematic.disabled = [scarlet]設計図使用不可[]\nこの[accent]マップ[]、[accent]サーバー[]では設計図の使用は許可されていません。 +schematic.tags = タグ: +schematic.edittags = タグ編集 +schematic.addtag = タグを追加 +schematic.texttag = テキストタグ +schematic.icontag = アイコンタグ +schematic.renametag = タグの名前変更 +schematic.tagdelconfirm = このタグをすべて削除しますか? +schematic.tagexists = このタグはすでに存在します。 stats = Stats stat.wave = 防衛したウェーブ:[accent] {0} @@ -90,6 +101,7 @@ customgame = カスタムプレイ newgame = 新しく始める none = <なし> none.found = [lightgray]<見つかりません> +none.inmap = [lightgray]<マップ内にありません> minimap = ミニマップ position = 位置 close = 閉じる @@ -110,20 +122,23 @@ committingchanges = 変更を適応中 done = 完了 feature.unsupported = あなたのデバイスはこの機能をサポートしていません。 -mods.alphainfo = Mod機能は実験的なものです。[scarlet] エラーが含まれている可能性があります[]。\n 問題を発見した場合は Mindustry GitHubに報告してください。 +mods.initfailed = [red]⚠[] 以前のMindustryの初期化に失敗しました。おそらくModの誤作動が原因です。\n\nクラッシュループを防ぐために、[red]全てのModが無効になっています。[]\n\nこの機能を無効にするのは、[accent]設定->ゲーム->起動時にクラッシュした場合にModを無効にする[]をオフにします。 mods = Mods mods.none = [lightgray]Modが見つかりませんでした! mods.guide = Mod作成ガイド mods.report = バグを報告する -mods.openfolder = MODのフォルダを開く +mods.openfolder = Modのフォルダを開く +mods.viewcontent = コンテンツを見る mods.reload = 再読み込み mods.reloadexit = Modを読み込む為にゲームを再起動します。 +mod.installed = [[インストール済み] mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]有効 mod.disabled = [scarlet]無効 +mod.multiplayer.compatible = [gray]マルチプレイに対応 mod.disable = 無効化 mod.content = コンテンツ: -mod.delete.error = MODを削除することができませんでした。 +mod.delete.error = Modを削除することができませんでした。 mod.requiresversion = [scarlet]Modが要求する最低バージョン: [accent]{0} mod.outdated = [scarlet]V6 との互換性がありません (minGameVersion が 105 未満) mod.missingdependencies = [scarlet]依存関係がありません。: {0} @@ -168,7 +183,7 @@ players.single = {0} 人がオンライン players.search = 検索 players.notfound = [gray]プレイヤーが存在しません server.closing = [accent]サーバーを閉じています... -server.kicked.kick = あなたはサーバからキックされました! +server.kicked.kick = あなたはサーバーからキックされました! server.kicked.whitelist = あなたはホワイトリストに追加されていません。 server.kicked.serverClose = サーバーが閉じられました。 server.kicked.vote = あなたはプレイヤーの投票によりサーバーからキックされました。 @@ -200,6 +215,7 @@ hosts.none = [lightgray]ローカル上のサーバーが見つかりません host.invalid = [scarlet]ホストに接続できません。 servers.local = ローカルサーバー +servers.local.steam = オープンゲーム & ローカルサーバー servers.remote = リモートサーバー servers.global = コミュニティサーバー @@ -211,9 +227,11 @@ server.hidden = 非表示 trace = プレイヤーの記録 trace.playername = プレイヤー名: [accent]{0} trace.ip = IP: [accent]{0} -trace.id = ユニークID: [accent]{0} +trace.id = ID: [accent]{0} trace.mobile = モバイルクライアント: [accent]{0} trace.modclient = カスタムクライアント: [accent]{0} +trace.times.joined = 参加回数: [accent]{0} +trace.times.kicked = キックされた回数: [accent]{0} invalidid = 無効なクライアントIDです! バグ報告してください。 server.bans = Ban server.bans.none = Banされたプレイヤーは見つかりませんでした! @@ -287,6 +305,7 @@ cancel = キャンセル openlink = リンクを開く copylink = リンクをコピー back = 戻る +max = Max crash.export = クラッシュログを出力 crash.none = クラッシュログが見つかりません。 crash.exported = クラッシュログを出力しました。 @@ -299,9 +318,9 @@ data.import.confirm = ゲームデータをインポートすると、現在の quit.confirm = 終了してもよろしいですか? quit.confirm.tutorial = チュートリアルを終了しますか?\nチュートリアルは [accent]設定->ゲーム->チュートリアル[] から再度受けることができます。 loading = [accent]読み込み中... -reloading = [accent]再読み込み中... +downloading = [accent]ダウンロード中... saving = [accent]保存中... -respawn = [accent][[{0}][] to respawn in core +respawn = [accent][[{0}][] コアからリスポーンする cancelbuilding = [accent][[{0}][] 選択を解除する selectschematic = [accent][[{0}][] 選択し、コピーする pausebuilding = [accent][[{0}][] 建築を一時的に中断する @@ -326,9 +345,9 @@ custom = カスタム builtin = 組み込み map.delete.confirm = マップを削除してもよろしいですか? これは元に戻すことができません! map.random = [accent]ランダムマップ -map.nospawn = このマップにはプレイヤーが出現するためのコアがありません! エディターで[accent]オレンジ色[]のコアをマップに追加してください。 +map.nospawn = このマップにはプレイヤーが出現するためのコアがありません! エディターで[#{0}]{1}[]のコアをマップに追加してください。 map.nospawn.pvp = このマップには敵のプレイヤーが出現するためのコアがありません! エディターで[scarlet]オレンジ色ではない[]コアをマップに追加してください。 -map.nospawn.attack = このマップには攻撃するための敵のコアがありません! エディターで[scarlet]赤色[]のコアをマップに追加してください。 +map.nospawn.attack = このマップには攻撃するための敵のコアがありません! エディターで[#{0}]{1}[]のコアをマップに追加してください。 map.invalid = マップの読み込みエラー: ファイルが無効、または破損しています。 workshop.update = 更新 workshop.error = ワークショップの詳細を取得中にエラーが発生しました: {0} @@ -357,11 +376,10 @@ editor.generation = 生成: editor.ingame = ゲーム内で編集する editor.publish.workshop = ワークショップで公開 editor.newmap = 新しいマップ -editor.center = Center +editor.center = 中心 workshop = ワークショップ waves.title = ウェーブ waves.remove = 削除 -waves.never = <永久> waves.every = ウェーブ waves.waves = ごとに出現 waves.perspawn = 体出現 @@ -444,39 +462,43 @@ toolmode.drawteams = チームを描く toolmode.drawteams.description = ブロックの代わりにチームを描きます。 filters.empty = [lightgray]フィルターが設定されていません! 下のボタンからフィルターを追加してください。 + filter.distort = ゆがみ filter.noise = ノイズ filter.enemyspawn = 敵スポーンセレクト filter.spawnpath = Path To Spawn filter.corespawn = コアセレクト -filter.median = メディアン -filter.oremedian = メディアン (鉱石) +filter.median = 中央値 +filter.oremedian = 中央値 (鉱石) filter.blend = ブレンド filter.defaultores = デフォルトの鉱石 filter.ore = 鉱石 -filter.rivernoise = リバーノイズ +filter.rivernoise = 川の生成 filter.mirror = 反転 filter.clear = クリアー filter.option.ignore = 無視 filter.scatter = 分散 filter.terrain = 地形 + filter.option.scale = スケール filter.option.chance = 確率 filter.option.mag = マグニチュード -filter.option.threshold = スレッシュホールド +filter.option.threshold = 閾値 filter.option.circle-scale = サークルスケール filter.option.octaves = オクターブ -filter.option.falloff = フォールオフ +filter.option.falloff = 減衰 filter.option.angle = 角度 filter.option.amount = 量 +filter.option.rotate = 回転 filter.option.block = ブロック filter.option.floor = 地面 filter.option.flooronto = 対象の地面 filter.option.target = ターゲット +filter.option.replacement = 置換 filter.option.wall = 壁 filter.option.ore = 鉱石 filter.option.floor2 = 2番目の地面 -filter.option.threshold2 = 2番目のスレッシュホールド +filter.option.threshold2 = 2番目の閾値 filter.option.radius = 半径 filter.option.percentile = パーセンタイル @@ -489,6 +511,7 @@ load = 読み込む save = 保存 fps = FPS: {0} ping = Ping: {0}ms +tps = TPS: {0} memory = Mem: {0}mb memory2 = Mem:\n {0}mb +\n {1}mb language.restart = ゲームを再起動後、言語設定が有効になります。 @@ -516,12 +539,14 @@ configure = 積み荷の設定 loadout = ロードアウト resources = 資源 bannedblocks = 禁止ブロック +bannedunits = 禁止ユニット addall = すべて追加 launch.from = [accent]{0}[] からの発射 -launch.destination = Destination: {0} +launch.destination = 目的地: {0} configure.invalid = 値は 0 から {0} の間でなければなりません。 add = 追加... boss.health = ボスのHP +guardian = ガーディアン connectfail = [crimson]サーバーへ接続できませんでした:\n\n[accent]{0} error.unreachable = サーバーに到達できません。\nアドレスは正しいですか? @@ -540,6 +565,8 @@ weather.sandstorm.name = 砂嵐 weather.sporestorm.name = 胞子嵐 weather.fog.name = 霧 +sectorlist = セクター +sectorlist.attacked = {0}が攻撃を受けています sectors.unexplored = [lightgray]未踏査 sectors.resources = 資源: sectors.production = 生産: @@ -565,6 +592,7 @@ sector.attacked = セクター [accent]{0}[white] が攻撃を受けています sector.lost = セクター [accent]{0}[white] 喪失! #note: the missing space in the line below is intentional sector.captured = セクター [accent]{0}[white]制圧! +sector.changeicon = アイコンを変更 threat.low = 低 threat.medium = 中 @@ -589,27 +617,41 @@ sector.overgrowth.name = オーバーグロウス sector.tarFields.name = ター · フィールズ sector.saltFlats.name = ソルト · フラッツ sector.fungalPass.name = ファングル · パス -sector.biomassFacility.name = バイオマス シンテシス ファシリティ -sector.windsweptIslands.name = ウインドスイープト アイランズ -sector.extractionOutpost.name = エクストラクション アウトポスト -sector.planetaryTerminal.name = プラネタリー ローンチ ターミナル +sector.biomassFacility.name = バイオマス · シンテシス · ファシリティ +sector.windsweptIslands.name = ウインドスイープト · アイランズ +sector.extractionOutpost.name = エクストラクション · アウトポスト +sector.planetaryTerminal.name = プラネタリー · ローンチ · ターミナル -sector.groundZero.description = 奪回を始めるには最適な場所です。敵脅威が低いが、資源が少ない。\nできるだけ多くの動と鉛を集めます。\n始めましょう。 -sector.frozenForest.description = ここでさえ、山に近づくほど胞子が広がっています。極寒の気温もそれらを永遠に封じ込めることはできません。\n\n電気に挑みましょう。火力発電機を建設し、修復機の使い方を学びましょう。 -sector.saltFlats.description = 砂漠のはずれにあるソルト · フラッツです。ここには資源がほとんどありません。\n\n敵はここに資源貯蔵施設を建設しました。彼らのコアを絶ち、掃滅してください。 -sector.craters.description = 過去の戦争の名残であるクレーターに水が溜まっています。エリアを取り戻し、砂を集め、メタガラスを精錬します。タレットとドリルを冷却するために水をポンプで送ります。 -sector.ruinousShores.description = 荒れ地を過ぎると海岸線です。ここにはかつて沿岸防衛隊が配備されていましたが、ほぼ残存していません。最も基本的な防衛施設のみが無傷のまま残っており、それ以外は全て破壊されています。\n外部拡張を続け、テクノロジーを再取得しましょう。 -sector.stainedMountains.description = 更に内陸には、胞子に汚染されていない山があります。\nこの地域にはチタンが豊富にあります。抽出して使い方を学びましょう。\n\nより多くの敵が襲来します。最強のユニットを送る時間を与えないでください。 -sector.overgrowth.description = このエリアは、胞子の発生源に近く生い茂っています。\n敵はここに前哨基地を配備しました。タイタンユニットを生産し、破壊しましょう。失ったものを取り戻すのです。 -sector.tarFields.description = 山と砂漠に挟まれた、石油産出地帯のはずれです。使用可能なタール埋蔵量がある数少ないエリアの1つです。\n放棄されたエリアですが、近くに脅威となる敵がいます。\n\n[lightgray]可能であれば石油抽出機を研究しましょう。 -sector.desolateRift.description = 非常に危険な地帯です。資源は豊富ですが、空間が狭いです。破壊されるリスクが高いため、一刻も早く立ち去りましょう。敵の攻撃間隔が長いですが、気を抜かないでください。 +sector.groundZero.description = 奪回を始めるには最適な場所です。敵脅威は低いですが、資源が乏しいです。\nできるだけ多くの銅と鉛を集めます。\n始めましょう。 +sector.frozenForest.description = ここでさえ、山に近づくほど胞子が広がっています。\n極寒の気温もそれらを永遠に封じ込めることはできませんでした。\n\n電気に挑みましょう。\n火力発電機を建設し、修復機の使い方を学びましょう。 +sector.saltFlats.description = 砂漠のはずれにあるソルト · フラッツです。\nここには資源がほとんどありません。\n\n敵はここに資源貯蔵施設を建設しました。\n彼らのコアを絶ち、掃滅してください。 +sector.craters.description = 過去の戦争の名残であるクレーターに水が溜まっています。\nエリアを取り戻し、砂を集め、メタガラスを精錬しましょう。\nタレットとドリルを冷却するためには水をポンプで送る必要があります。 +sector.ruinousShores.description = 荒れ地を過ぎると海岸線です。\nここにはかつて沿岸防衛隊が配備されていましたが、ほぼ残存していません。\n最も基本的な防衛施設のみが無傷のまま残っており、それ以外は全て破壊されています。\n外部拡張を続け、テクノロジーを再取得してください。 +sector.stainedMountains.description = 更に内陸には、胞子に汚染されていない山があります。\nこの地域にはチタンが豊富にあります。抽出して使い方を学びましょう。\n\nここにはより多くの敵が襲来します。強力なユニットを送る時間を与えないでください。 +sector.overgrowth.description = このエリアは、胞子の発生源に近く生い茂っています。\n敵はここに前哨基地を配備しました。タイタンユニットを生産し、破壊してください。\n失ったものを取り戻すのです。 +sector.tarFields.description = 山と砂漠に挟まれた、石油産出地帯のはずれです。\n使用可能なタール埋蔵量がある数少ないエリアの1つです。\n放棄されたエリアですが、近くに脅威となる敵がいます。\n\n[lightgray]可能であれば石油抽出機を研究しましょう。 +sector.desolateRift.description = 非常に危険な地帯です。資源は豊富ですが、領域が十分にありません。破壊されるリスクが高いため、一刻も早く立ち去りましょう。\n敵の攻撃間隔が長いですが、気を抜かないでください。 sector.nuclearComplex.description = 崩壊したトリウム製造・加工施設です。\n[lightgray]トリウムとその多くの用途を研究してください。\n\n多くの敵がここに存在し、常に攻撃を偵察しています。 -sector.fungalPass.description = 高山と、胞子の多い低地との間の遷移地域です。ここには敵の小さな偵察基地があります。\n破壊しましょう。\nダガーとクローラーユニットを使い、2つの敵コアの排除しましょう、 -sector.biomassFacility.description = 胞子の発生源です。これらは、胞子の研究により、最初に建設された施設です。\n内部に残された技術を研究しましょう。燃料とプラスタニウムの生産のために胞子を培養します。\n\n[lightgray]この施設が活動停止したために、胞子が放出されました。地域の生態系には、そのような侵略的生物と競合するものはありません。 -sector.windsweptIslands.description = 海岸をさらに進むと、辺鄙な列島があります。記録によると、ここにはかつて[accent]プラスタニウム[]-を生産するシステムがありました。\n\n敵の海軍ユニットを撃沈しましょう。島々に基地を建造し、これらの工場を調査しましょう。 -sector.extractionOutpost.description = 他のセクターへ資源を輸送するために建設された敵の遠隔地の前哨基地です。\n\nさらなる征伐のためには、セクター感を通ずる輸送技術が不可欠です。基地を破壊しましょう。彼らの発射台を研究してください。 -sector.impact0078.description = ここには、最初にこの星系に入った星間輸送船の残骸があります。\n\n残骸を可能な限り回収し、完全な技術を研究しましょう。 -sector.planetaryTerminal.description = 最終目標です。\n\nこの沿岸基地には、コアを他の惑星に打ち上げることが出来る建造物があります。極めて堅固に守られています。\n\n海軍ユニットを生産し、できるだけ速やかに敵を排除しましょう。発射建造物を研究しましょう。 +sector.fungalPass.description = 高山と、胞子の多い低地との間の遷移地域です。\nここには敵の小さな偵察基地があります。\n破壊してください。\nダガーとクローラーユニットを使い、2つの敵コアの排除しましょう、 +sector.biomassFacility.description = 胞子の発生源です。\nこれらは胞子の研究のために、最初に建設された施設です。\n内部に残された技術を研究しましょう。燃料とプラスタニウムの生産のために胞子を培養します。\n\n[lightgray]この施設が活動停止したために、胞子が放出されました。地域の生態系には、そのような侵略的生物と競合するものはありません。 +sector.windsweptIslands.description = 海岸をさらに進むと、辺鄙な列島があります。記録によると、ここにはかつて[accent]プラスタニウム[]を生産するシステムがありました。\n\n敵の海軍ユニットを撃沈してください。島々に基地を建造し、これらの工場を調査しましょう。 +sector.extractionOutpost.description = 他のセクターへ資源を輸送するために建設された敵の遠隔地の前哨基地です。\n\nさらなる征伐のためには、セクター間を通ずる輸送技術が不可欠です。基地を破壊してください。彼らの発射台を研究しましょう。 +sector.impact0078.description = ここには、最初にこの星系に入った星間輸送船の残骸があります。\n\n残骸を可能な限り回収し、解析可能な技術を研究しましょう。 +sector.planetaryTerminal.description = 最終目標です。\n\nこの沿岸基地には、コアを他の惑星に打ち上げることが出来る建造物があります。しかし、極めて堅固に守られています。\n\n海軍ユニットを生産し、可及的速やかに敵を排除してください。\nそして、発射建造物を研究しましょう。 + +status.burning.name = 燃焼 +status.freezing.name = 凍結 +status.wet.name = 湿潤 +status.muddy.name = Muddy +status.melting.name = 溶解 +status.sapped.name = 吸収 +status.electrified.name = 帯電 +status.spore-slowed.name = 鈍化胞子 +status.tarred.name = 石油塗れ +status.overclock.name = オーバークロック +status.shocked.name = 電撃 +status.blasted.name = 爆破 +status.unmoving.name = 移動阻止 settings.language = 言語 settings.data = ゲームデータ @@ -632,6 +674,7 @@ settings.clearcampaignsaves.confirm = キャンペーンのセーブデータを paused = [accent]< ポーズ > clear = 消去 banned = [scarlet]使用禁止 +unsupported.environment = [scarlet]サポートされていない環境 yes = はい no = いいえ info.title = 情報 @@ -641,12 +684,14 @@ unit.nobuild = [scarlet]構築不可 lastaccessed = [lightgray]最終アクセス {0} block.unknown = [lightgray]??? +stat.showinmap = <表示のマップを読み込む> stat.description = 説明 stat.input = 搬入 stat.output = 搬出 stat.booster = ブースト stat.tiles = 必要なタイル stat.affinities = 親和性 +stat.opposites = 排他性 stat.powercapacity = 電力容量 stat.powershot = 電力/ショット stat.damage = ダメージ @@ -669,6 +714,7 @@ stat.memorycapacity = メモリー容量 stat.basepowergeneration = 基本発電量 stat.productiontime = 製造速度 stat.repairtime = ブロックの完全修復速度 +stat.repairspeed = 修復速度 stat.weapons = 武器 stat.bullet = 弾丸 stat.speedincrease = 速度向上 @@ -678,6 +724,7 @@ stat.drillspeed = 基本採掘速度 stat.boosteffect = ブースト効果 stat.maxunits = 最大ユニット数 stat.health = 耐久値 +stat.armor = アーマー stat.buildtime = 建設時間 stat.maxconsecutive = 最大連鎖 stat.buildcost = 建設費用 @@ -693,6 +740,7 @@ stat.lightningchance = 電撃確率 stat.lightningdamage = 電撃ダメージ stat.flammability = 可燃性 stat.radioactivity = 放射能 +stat.charge = 帯電性 stat.heatcapacity = 熱容量 stat.viscosity = 粘度 stat.temperature = 温度 @@ -706,13 +754,21 @@ stat.abilities = 能力 stat.canboost = ブースト可能 stat.flying = 飛行 stat.ammouse = 使用弾薬 +stat.damagemultiplier = ダメージ倍率 +stat.healthmultiplier = 体力倍率 +stat.speedmultiplier = スピード倍率 +stat.reloadmultiplier = リロード倍率 +stat.buildspeedmultiplier = 建築速度倍率 +stat.reactive = 反応 +stat.healing = 治癒 ability.forcefield = フォースフィールド ability.repairfield = リペアフィールド -ability.statusfield = ステータスフィールド +ability.statusfield = {0} ステータスフィールド ability.unitspawn = {0} 生産 ability.shieldregenfield = シールドリペアフィールド ability.movelightning = ムーブメントライトニング +ability.energyfield = エネルギー範囲: [accent]{0}[] ダメージ ~ [accent]{1}[] ブロック / [accent]{2}[] ターゲット bar.drilltierreq = より高性能なドリルを使用してください bar.noresources = 不足している資源 @@ -720,6 +776,7 @@ bar.corereq = コアベースが必要 bar.drillspeed = 採掘速度: {0}/秒 bar.pumpspeed = ポンプの速度: {0}/s bar.efficiency = 効率: {0}% +bar.boost = ブースト: {0}% bar.powerbalance = 電力均衡: {0}/秒 bar.powerstored = 総蓄電量: {0}/{1} bar.poweramount = 蓄電量: {0} @@ -734,6 +791,7 @@ bar.power = 電力 bar.progress = 建設状況 bar.input = 入力 bar.output = 出力 +bar.strength = [stat]{0}[lightgray]x 強化 units.processorcontrol = [lightgray]プロセッサーの制御下 @@ -744,6 +802,7 @@ bullet.sapping = [stat]吸収弾 bullet.homing = [stat]追尾弾 bullet.shock = [stat]電撃 bullet.frag = [stat]爆発弾 +bullet.lightning = [stat]{0}[lightgray]x ライトニング ~ [stat]{1}[lightgray] ダメージ bullet.buildingdamage = [stat]{0}%[lightgray] 対物ダメージ bullet.knockback = [stat]{0}[lightgray] ノックバック bullet.pierce = [stat]{0}[lightgray]x レーザー弾 @@ -757,6 +816,7 @@ bullet.reload = [stat]リロード速度 {0}[lightgray]倍 unit.blocks = ブロック unit.blockssquared = ブロック² unit.powersecond = 電力/秒 +unit.tilessecond = タイル/秒 unit.liquidsecond = 液体/秒 unit.itemssecond = アイテム/秒 unit.liquidunits = 液体 @@ -782,17 +842,19 @@ category.items = アイテム category.crafting = 搬入/搬出 category.function = 役割 category.optional = 強化オプション +setting.skipcoreanimation.name = コアの打ち上げ/着陸アニメーションをスキップ setting.landscape.name = 横画面で固定 setting.shadows.name = 影 setting.blockreplace.name = 自動ブロック提案 setting.linear.name = リニアフィルター setting.hints.name = ヒント -setting.flow.name = 資源流通量の表示 -setting.backgroundpause.name = バックグラウンドで一時停止中 -setting.buildautopause.name = オートポーズビルディング +setting.logichints.name = ロジックのヒント +setting.backgroundpause.name = バックグラウンド中は一時停止する +setting.buildautopause.name = 常に建築一時中断状態にする +setting.doubletapmine.name = ダブルタップで採掘する +setting.modcrashdisable.name = 起動時にクラッシュした場合にModを無効にする setting.animatedwater.name = 流体のアニメーション setting.animatedshields.name = シールドのアニメーション -setting.antialias.name = アンチエイリアス[lightgray] (再起動が必要)[] setting.playerindicators.name = プレイヤーの方角表示 setting.indicators.name = 敵の方角表示 setting.autotarget.name = オートターゲット @@ -801,7 +863,8 @@ setting.touchscreen.name = タッチスクリーン操作 setting.fpscap.name = 最大FPS setting.fpscap.none = なし setting.fpscap.text = {0} FPS -setting.uiscale.name = UIサイズ[lightgray] (再起動が必要)[] +setting.uiscale.name = UIサイズ +setting.uiscale.description = 再起動が必要です。 setting.swapdiagonal.name = 常に斜め設置 setting.difficulty.training = トレーニング setting.difficulty.easy = イージー @@ -819,7 +882,9 @@ setting.saveinterval.name = 自動保存間隔 setting.seconds = {0} 秒 setting.milliseconds = {0} ミリ秒 setting.fullscreen.name = フルスクリーン -setting.borderlesswindow.name = 境界の無いウィンドウ[lightgray] (再起動が必要になる場合があります) +setting.borderlesswindow.name = ボーダーレスウィンドウ +setting.borderlesswindow.name.windows = ボーダーレスフルスクリーン +setting.borderlesswindow.description = 再起動が必要になる場合があります。 setting.fps.name = FPSを表示 setting.smoothcamera.name = スムーズなカメラ setting.vsync.name = 垂直同期 @@ -865,12 +930,12 @@ keybind.clear_building.name = 建築の取り消し keybind.press = キーを押してください... keybind.press.axis = 軸またはキーを押してください... keybind.screenshot.name = スクリーンショット -keybind.toggle_power_lines.name = パワーレーザーの切り替え +keybind.toggle_power_lines.name = 電線の表示の切り替え keybind.toggle_block_status.name = ブロックの状態表示の切り替え keybind.move_x.name = 左右移動 keybind.move_y.name = 上下移動 keybind.mouse_move.name = マウスを追う -keybind.pan.name = パン +keybind.pan.name = 視点移動 keybind.boost.name = ブースト keybind.schematic_select.name = 地域の選択 keybind.schematic_menu.name = 設計図メニュー @@ -905,10 +970,11 @@ keybind.shoot.name = ショット keybind.zoom.name = ズーム keybind.menu.name = メニュー keybind.pause.name = ポーズ -keybind.pause_building.name = 建築のポーズ/レジューム +keybind.pause_building.name = 建築の一時中断/再開 keybind.minimap.name = ミニマップ keybind.planet_map.name = 惑星地図 keybind.research.name = 研究 +keybind.block_info.name = ブロック情報 keybind.chat.name = チャット keybind.player_list.name = プレイヤーリスト keybind.console.name = コンソール @@ -935,17 +1001,24 @@ mode.custom = カスタムルール rules.infiniteresources = 資源の無限化 rules.reactorexplosions = リアクターの爆発 +rules.coreincinerates = 余剰アイテムの焼却 rules.schematic = 設計図を許可 rules.wavetimer = ウェーブの自動進行 rules.waves = ウェーブ rules.attack = アタックモード rules.buildai = AI 建築 +rules.aitier = AI 階級 +rules.cleanupdeadteams = 敗北したチームの建設物を片付ける (PvP) +rules.corecapture = 破壊時にコアを奪取 +rules.polygoncoreprotection = 多角形の建設禁止区域の設定 rules.enemyCheat = 敵(赤チーム)の資源の無限化 rules.blockhealthmultiplier = ブロックの体力倍率 rules.blockdamagemultiplier = ブロックのダメージ倍率 rules.unitbuildspeedmultiplier = ユニットの製造速度倍率 rules.unithealthmultiplier = ユニットの体力倍率 rules.unitdamagemultiplier = ユニットのダメージ倍率 +rules.unitcapvariable = コア数によってユニット上限を変動 +rules.unitcap = ベースのユニット上限数 rules.enemycorebuildradius = 敵コア周辺の建設禁止区域の半径:[lightgray] (タイル) rules.wavespacing = ウェーブ間の待機時間:[lightgray] (秒) rules.buildcostmultiplier = 建設コストの倍率 @@ -954,26 +1027,30 @@ rules.deconstructrefundmultiplier = ブロック破壊時の還元倍率 rules.waitForWaveToEnd = 敵が倒されるまでウェーブの進行を中断 rules.dropzoneradius = 出現範囲の半径:[lightgray] (タイル) rules.unitammo = ユニットは弾丸が必要 +rules.enemyteam = 敵チーム +rules.playerteam = プレイヤーチーム rules.title.waves = ウェーブ rules.title.resourcesbuilding = 資源 & 建設 rules.title.enemy = 敵 rules.title.unit = ユニット rules.title.experimental = 実験的なゲームプレイ rules.title.environment = 環境 +rules.title.teams = チーム rules.lighting = 霧 -rules.enemyLights = Enemy Lights -rules.fire = Fire +rules.enemyLights = 敵を発光させる +rules.fire = 火災 rules.explosions = 爆発ダメージ rules.ambientlight = 霧の色 rules.weather = 気象 rules.weather.frequency = 頻度: -rules.weather.always = Always +rules.weather.always = 常時 rules.weather.duration = 継続時間: content.item.name = アイテム content.liquid.name = 液体 content.unit.name = ユニット content.block.name = ブロック +content.status.name = ステータス効果 content.sector.name = セクター item.copper.name = 銅 @@ -992,6 +1069,7 @@ item.blast-compound.name = 爆発性化合物 item.pyratite.name = ピラタイト item.metaglass.name = メタガラス item.scrap.name = スクラップ + liquid.water.name = 水 liquid.slag.name = スラグ liquid.oil.name = 石油 @@ -1023,6 +1101,11 @@ unit.minke.name = ミンク unit.bryde.name = ブライド unit.sei.name = セイ unit.omura.name = オムラ +unit.retusa.name = レトゥーザ +unit.oxynoe.name = オキシノ +unit.cyerce.name = サイラス +unit.aegires.name = エイガース +unit.navanax.name = ナバナックス unit.alpha.name = アルファ unit.beta.name = ベータ unit.gamma.name = ガンマ @@ -1031,7 +1114,6 @@ unit.reign.name = レイン unit.vela.name = ヴェラ unit.corvus.name = コーバス -block.resupply-point.name = 補給ポイント block.parallax.name = パララックス block.cliff.name = 崖 block.sand-boulder.name = 巨大な礫 @@ -1083,6 +1165,7 @@ block.sand-water.name = 濁った水 block.darksand-water.name = 黒い砂で濁った水 block.char.name = 焦げ跡 block.dacite.name = デイサイト +block.rhyolite.name = 流紋岩 block.dacite-wall.name = デイサイトの壁 block.dacite-boulder.name = デイサイトの礫 block.ice-snow.name = 雪氷 @@ -1094,12 +1177,13 @@ block.pine.name = 松の木 block.dirt.name = 泥 block.dirt-wall.name = 泥の壁 block.mud.name = 汚泥 -block.white-tree-dead.name = 白い枯れた樹木 +block.white-tree-dead.name = 枯れた白い樹木 block.white-tree.name = 白い樹木 block.spore-cluster.name = 胞子の房 block.metal-floor.name = 金属製の地面 1 block.metal-floor-2.name = 金属製の地面 2 block.metal-floor-3.name = 金属製の地面 3 +block.metal-floor-4.name = 金属製の地面 4 block.metal-floor-5.name = 金属製の地面 5 block.metal-floor-damaged.name = 破壊された金属製の地面 block.dark-panel-1.name = ダークパネル 1 @@ -1190,6 +1274,7 @@ block.solar-panel.name = ソーラーパネル block.solar-panel-large.name = 大型ソーラーパネル block.oil-extractor.name = 石油抽出機 block.repair-point.name = 修復ポイント +block.repair-turret.name = 修復ターレット block.pulse-conduit.name = パルスパイプ block.plated-conduit.name = メッキパイプ block.phase-conduit.name = フェーズパイプ @@ -1220,7 +1305,6 @@ block.meltdown.name = メルトダウン block.foreshadow.name = フォーシャドウ block.container.name = コンテナー block.launch-pad.name = 発射台 -block.launch-pad-large.name = 大型発射台 block.segment.name = セグメント block.command-center.name = 司令塔 block.ground-factory.name = 陸軍工場 @@ -1232,14 +1316,20 @@ block.exponential-reconstructor.name = 指数式再構成工場 block.tetrative-reconstructor.name = 超冪式再構成工場 block.payload-conveyor.name = マスコンベアー block.payload-router.name = ペイロードルーター +block.duct.name = ダクト +block.duct-router.name = ダクトルーター +block.duct-bridge.name = ダクトブリッジ +block.payload-propulsion-tower.name = ペイロード推進タワー +block.payload-void.name = ペイロードボイド +block.payload-source.name = ペイロードソース block.disassembler.name = ディスアセンブラー block.silicon-crucible.name = シリコンクルーシブル block.overdrive-dome.name = 加速ドーム +block.interplanetary-accelerator.name = 惑星間加速器 #experimental, may be removed block.block-forge.name = ブロックフォージ block.block-loader.name = ブロック積載機 block.block-unloader.name = ブロック搬出機 -block.interplanetary-accelerator.name = 惑星間加速器 block.switch.name = スイッチ block.micro-processor.name = マイクロプロセッサー @@ -1259,73 +1349,75 @@ team.green.name = グリーン team.purple.name = パープル hint.skip = スキップ -hint.desktopMove = [accent][[WASD][] を使い移動します。 -hint.zoom = [accent]マウスホイール[] でズームイン、ズームアウトをします。 -hint.mine = \uf8c4 銅の近くに移動し、 [accent]タップ[] して手動で採掘します。 -hint.desktopShoot = [accent][[左クリック][] で射撃します。 +hint.desktopMove = [accent][[WASD][]を使い移動します。 +hint.zoom = [accent]マウスホイール[]でズームイン、ズームアウトをします。 +hint.mine = \uf8c4 銅の近くに移動し、[accent]タップ[]して手動で採掘します。 +hint.desktopShoot = [accent][[左クリック][]で射撃します。 hint.depositItems = アイテムを移すには、シップからコアへドラッグします。 -hint.respawn = シップとしてリスポーンするには、 [accent][[V][]を押します。 -hint.respawn.mobile = ユニット/建造物のコントロールを得ました。シップとしてリスポーンするには、 [accent]左上のアイコンをタップします。[] -hint.desktopPause = [accent][[スペース][] を押して、ゲームを一時停止と一時停止の解除ができます。 -hint.placeDrill = 右下のメニューの \ue85e [accent]ドリル[] タブを選択し、 \uf870 [accent]ドリル[] を選択し、銅地域をクリックして配置します。 -hint.placeDrill.mobile = 右下のメニューの \ue85e [accent]ドリル[] タブを選択し、 \uf870 [accent]ドリル[] を選択し、銅地域をタップして配置します。\n\n右下の \ue800 [accent]チェックマーク[] をタップして確認します。 -hint.placeConveyor = コンベアーを使い、アイテムをドリルから他のブロックへ移動します。 \ue814 [accent]運搬[] タブから、 \uf896 [accent]コンベアー[] を選択します。\n\n複数のコンベアーを配置するには、クリックしてドラッグします。\n[accent]マウスホイール[] により回転します。 -hint.placeConveyor.mobile = コンベアーを使い、アイテムをドリルから他のブロックへ移動します。 \ue814 [accent]運搬[] タブから、 \uf896 [accent]コンベアー[] を選択します。\n\n指を1秒間押したままドラッグすると、複数のコンベアーを配置します。 -hint.placeTurret = \uf861 [accent]ターレット[] を配置して、敵から基地を守ります。\n\nターレットには弾薬が必要です。この場合は \uf838銅です。\nコンベアーとドリルを使用して補給します。 -hint.breaking = [accent]右クリック[] と右クリックドラッグによりブロックを壊します。 -hint.breaking.mobile = 右下にある \ue817 [accent]ハンマー[] をアクティブにして、タップしてブロックを壊します。\n\n指を1秒間押したままドラッグすると、範囲選択が出来ます。 -hint.research = \ue875 [accent]研究[] ボタンを押して、新しいテクノロジーを研究します。 -hint.research.mobile = \ue88c [accent]メニュー[] の \ue875 [accent]研究[] ボタンを押して、新しいテクノロジーを研究します。 -hint.unitControl = [accent][[左ctrl][] を押しながら [accent]クリック[] するとターレットや味方ユニットを操作できます。 -hint.unitControl.mobile = [accent][ダブルタップ[] すると味方ユニットやターレットを操作できます。 -hint.launch = 十分な資源を確保できたら、右下の \ue827 [accent]マップ[] から、近くのセクターを選択して [accent]発射[] できます。 -hint.launch.mobile = 十分な資源を確保できたら、 \ue88c [accent]メニュー[] の \ue827 [accent]マップ[] から、近くのセクターを選択して [accent]発射[] できます。 -hint.schematicSelect = [accent][[F][] を押しながらドラッグして、コピー&ペーストするブロックを選択します。\n\n[accent][[ミドルクリック][] により、1つのブロックタイプをコピーします。 -hint.conveyorPathfind = [accent][[左-Ctrl][] を押しながらコンベアーをドラッグすると、経路が自動生成されます。 -hint.conveyorPathfind.mobile = \ue844 [accent]対角線モード[] を有効にし、コンベアーをドラッグすると経路が自動生成します。 -hint.boost = [accent][[左シフト][] を押したままにすると、操作中のユニットは障害物を飛び越えます。\n\n少数の地上ユニットのみがこのブースターを搭載しています。 -hint.command = [accent][[G][] を押して、近くの [accent]同様のタイプ[] のユニットと編隊を組みます。\n\n地上ユニットを指揮するには、まず別個の地上ユニットをコントロールする必要があります。 -hint.command.mobile = [accent][[ダブルタップ][] すると、操作中のユニットは近くのユニットと編隊を組みます。 -hint.payloadPickup = [accent][[[] を押して、小さなブロックまたはユニットを格納します。 -hint.payloadPickup.mobile = [accent]タップ&ホールド[] により、小さなブロックまたはユニットを格納します。 -hint.payloadDrop = [accent]][] を押すと、積載物を降ろします。 -hint.payloadDrop.mobile = 空いている場所を [accent]タップ&ホールド[] して、積載物を降ろします。 -hint.waveFire = [accent]ウェーブ[] ターレットは水を搬入すると、近くの火を自動的に消火します。 -hint.generator = \uf879 [accent]火力発電機[] 石炭を燃やし、隣接するブロックに電力を供給します。\n\n電力供給範囲は \uf87f [accent]電源ノード[]で拡張できます。 -hint.guardian = [accent]ガーディアン[] ユニットは装甲を搭載しています。[accent]銅[] や [accent]鉛[] などの弱い弾薬は [scarlet]効果がありません[]。\n\n強力なターレット、または \uf861デュオ/\uf859サルボー の弾薬に \uf835 [accent]黒鉛[]を使用してガーディアンを撃破してください。 -hint.coreUpgrade = コアは [accent]上位のコアを配置することでアップグレードできます[]。\n\n  [accent]シャード[] コアの上に、  [accent]ファンデーション[] コアを置きます。近くに障害物がないことを確認してください。 -hint.presetLaunch = [accent]フローズン · フォレスト[] などの灰色の [accent]着陸ゾーンセクター[] には、どこからでも発射できます。近くの領土を確保する必要はありません。\n\nこのような [accent]数字のセクター[] は、 [accent]違います[]。 -hint.coreIncinerate = コアのアイテム収納数の上限に達したアイテムは搬入されず [accent]破棄[]されます。 -hint.coopCampaign = [accent]co-op キャンペーン[]をプレイすると、現在のマップで生産されたアイテムは [accent]あなたのセクター[] に移送されます。\n\nホストが行った新しい研究も引き継がれます。 +hint.respawn = シップとしてリスポーンするには、[accent][[V][]を押します。 +hint.respawn.mobile = ユニット/建造物のコントロールを得ました。シップとしてリスポーンするには、[accent]左上のアイコンをタップします。[] +hint.desktopPause = [accent][[スペース][]を押して、ゲームを一時停止と一時停止の解除ができます。 +hint.placeDrill = 右下のメニューの\ue85e [accent]ドリル[]タブを選択し、\uf870 [accent]ドリル[]を選択し、銅地域をクリックして配置します。 +hint.placeDrill.mobile = 右下のメニューの\ue85e [accent]ドリル[]タブを選択し、\uf870 [accent]ドリル[]を選択し、銅地域をタップして配置します。\n\n右下の\ue800 [accent]チェックマーク[]をタップして確認します。 +hint.placeConveyor = コンベアーを使い、アイテムをドリルから他のブロックへ移動します。\ue814 [accent]運搬[]タブから、\uf896 [accent]コンベアー[]を選択します。\n\n複数のコンベアーを配置するには、クリックしてドラッグします。\n[accent]マウスホイール[]により回転します。 +hint.placeConveyor.mobile = コンベアーを使い、アイテムをドリルから他のブロックへ移動します。\ue814 [accent]運搬[]タブから、\uf896 [accent]コンベアー[]を選択します。\n\n指を1秒間押したままドラッグすると、複数のコンベアーを配置します。 +hint.placeTurret = \uf861 [accent]ターレット[]を配置して、敵から基地を守ります。\n\nターレットには弾薬が必要です。この場合は\uf838銅です。\nコンベアーとドリルを使用して補給します。 +hint.breaking = [accent]右クリック[]と右クリックドラッグによりブロックを壊します。 +hint.breaking.mobile = 右下にある\ue817 [accent]ハンマー[]をアクティブにして、タップしてブロックを壊します。\n\n指を1秒間押したままドラッグすると、範囲選択が出来ます。 +hint.blockInfo = [accent]建築メニュー[]でブロックを選択し、右側の[accent][[?][]ボタンを押すと、ブロックの情報が表示されます。 +hint.derelict = [accent]放棄[]され、すでに機能を失った古い基地建造物の残骸です。\n\nこれらは[accent]解体[]することにより、資源になります。 +hint.research = \ue875 [accent]研究[]ボタンを押して、新しいテクノロジーを研究します。 +hint.research.mobile = \ue88c [accent]メニュー[]の\ue875 [accent]研究[]ボタンを押して、新しいテクノロジーを研究します。 +hint.unitControl = [accent][[左ctrl][]を押しながら[accent]クリック[]するとターレットや味方ユニットを操作できます。 +hint.unitControl.mobile = [accent][ダブルタップ[]すると味方ユニットやターレットを操作できます。 +hint.launch = 十分な資源を確保できたら、右下の\ue827 [accent]マップ[]から、近くのセクターを選択して[accent]発射[]できます。 +hint.launch.mobile = 十分な資源を確保できたら、\ue88c [accent]メニュー[]の\ue827 [accent]マップ[]から、近くのセクターを選択して[accent]発射[]できます。 +hint.schematicSelect = [accent][[F][]を押しながらドラッグして、コピー&ペーストするブロックを選択します。\n\n[accent][[ミドルクリック][]により、1つのブロックタイプをコピーします。 +hint.conveyorPathfind = [accent][[左-Ctrl][]を押しながらコンベアーをドラッグすると、経路が自動生成されます。 +hint.conveyorPathfind.mobile = \ue844 [accent]対角線モード[]を有効にし、コンベアーをドラッグすると経路が自動生成します。 +hint.boost = [accent][[左シフト][]を押したままにすると、操作中のユニットは障害物を飛び越えます。\n\n少数の地上ユニットのみがこのブースターを搭載しています。 +hint.command = [accent][[G][]を押して、近くの [accent]同様のタイプ[]のユニットと編隊を組みます。\n\n地上ユニットを指揮するには、まず別個の地上ユニットをコントロールする必要があります。 +hint.command.mobile = [accent][[ダブルタップ][]すると、操作中のユニットは近くのユニットと編隊を組みます。 +hint.payloadPickup = [accent][[[]を押して、小さなブロックまたはユニットを格納します。 +hint.payloadPickup.mobile = [accent]タップ&ホールド[]により、小さなブロックまたはユニットを格納します。 +hint.payloadDrop = [accent]][]を押すと、積載物を降ろします。 +hint.payloadDrop.mobile = 空いている場所を[accent]タップ&ホールド[]して、積載物を降ろします。 +hint.waveFire = [accent]ウェーブ[]ターレットは水を搬入すると、近くの火を自動的に消火します。 +hint.generator = \uf879 [accent]火力発電機[]石炭を燃やし、隣接するブロックに電力を供給します。\n\n電力供給範囲は\uf87f [accent]電源ノード[]で拡張できます。 +hint.guardian = [accent]ガーディアン[]ユニットは装甲を搭載しています。[accent]銅[]や[accent]鉛[]などの弱い弾薬は[scarlet]効果がありません[]。\n\n強力なターレット、または\uf861デュオ/\uf859サルボーの弾薬に\uf835 [accent]黒鉛[]を使用してガーディアンを撃破してください。 +hint.coreUpgrade = コアは [accent]上位のコアを配置することでアップグレードできます[]。\n\n  [accent]シャード[]コアの上に、  [accent]ファンデーション[]コアを置きます。近くに障害物がないことを確認してください。 +hint.presetLaunch = [accent]フローズン · フォレスト[]などの灰色の[accent]着陸ゾーンセクター[]には、どこからでも発射できるため近くの領土を確保する必要はありません。\n\nしかし、このような[accent]数字のセクター[]では[accent]この限りではありません[]。 +hint.coreIncinerate = コアのアイテム収納数の上限に達したアイテムは搬入されず[accent]破棄[]されます。 +hint.coopCampaign = [accent]co-op キャンペーン[]をプレイすると、現在のマップで生産されたアイテムは[accent]あなたのセクター[]に移送されます。\n\nホストが行った新しい研究も引き継がれます。 -item.copper.description = 便利な鉱石です。様々なブロックの材料として幅広く使われています。 -item.copper.details = セルプロに豊富な金属。補強しない限り構造的に弱い。 -item.lead.description = 一般的で手軽な鉱石です。機械や液体輸送ブロックなどに使われます。 -item.lead.details = 高密度。不活性。バッテリーによく利用される。\nノート: 生物学的に生命に有毒である可能性があります。このあたりには生命が多く残っていません。 -item.metaglass.description = とても頑丈な強化ガラスです。液体の輸送やタンクとして幅広く使われています。 +item.copper.description = 便利な鉱石です。\n多様なブロックの材料として幅広く使われています。 +item.copper.details = セルプロに豊富な金属です。\n補強しない限り構造的に弱いです。 +item.lead.description = 一般的で手軽な鉱石です。\n機械や液体輸送ブロックなどに使われます。 +item.lead.details = 高密度で不活性です。バッテリーによく利用されます。\nノート: 生物学的に有毒である可能性があります。このあたりには生命があまり見られません。 +item.metaglass.description = とても頑丈な強化ガラスです。\n液体の輸送やタンク、工場などに幅広く使われています。 item.graphite.description = 弾薬や絶縁体として利用されています。 item.sand.description = 合金や融剤など広く使用されている一般的な材料です。 item.coal.description = 一般的で有用な燃料です。 -item.coal.details = 化石化して植物のようで、利用方法が確立されるはるか前に形成されました。 -item.titanium.description = 希少で非常に軽量な金属です。液体輸送やドリル、航空機などで使われます。 -item.thorium.description = 放射性を持つ高密度な金属です。建造物の支えや核燃料として使われます。 -item.scrap.description = 昔の建造物やユニットの残骸です。様々な種類の金属が微量に含まれています。 +item.coal.details = 化石化した植物のようで\n利用方法が確立されるはるか前に形成されました。 +item.titanium.description = 希少で非常に軽量な金属です。\n液体輸送やドリル、航空機などで使われます。 +item.thorium.description = 放射性を持つ高密度な金属です。\n建造物の支えや核燃料として使われます。 +item.scrap.description = 昔の建造物やユニットの残骸です。\n多種多様の金属が微量に含まれています。 item.scrap.details = 古い建造物やユニットの残骸です。 item.silicon.description = 非常に有用な半導体でソーラーパネルや多くの複雑な機械に応用できます。 -item.plastanium.description = 軽量で伸縮性のある材料です。高度な航空機や分散型の弾薬として使用されます。 -item.phase-fabric.description = 極めて軽量な素材です。高度な機械や自己修復技術に使用されます。 +item.plastanium.description = 軽量で伸縮性のある材料です。\n高度な航空機や分散型の弾薬として使用されます。 +item.phase-fabric.description = 極めて軽量な素材です。\n高度な機械や自己修復技術に使用されます。 item.surge-alloy.description = 電気的特性を持った高度な合金です。 item.spore-pod.description = 石油や爆薬、燃料への転換として使用されます。 -item.spore-pod.details = 合成生命体と思われる胞子です。他の生物に有毒なガスを放出し、非常に侵略的です。特定の条件下で非常に高い可燃性を持ちます。 -item.blast-compound.description = 爆弾や爆発物に使われる不安定な化合物です。胞子と揮発性物質から合成されます。燃料として燃やすこともできますが、お勧めしません。 +item.spore-pod.details = 人工生命体と思われる胞子です。\n他の生物に有毒なガスを放出し、非常に侵略的です。特定の条件下で非常に高い可燃性を持ちます。 +item.blast-compound.description = 爆弾や爆発物に使われる不安定な化合物です。\n胞子と揮発性物質から合成されます。燃料として燃やすこともできますが、お勧めしません。 item.pyratite.description = 焼夷兵器などに使われる非常に燃えやすい物質です。 liquid.water.description = 機械の冷却や廃棄物の処理など幅広く使われている液体です。 -liquid.slag.description = 様々な種類の鉱石が混ざり合っています。それぞれの鉱石に分類するか、噴射する武器として使用されます。 +liquid.slag.description = 多種多様の鉱石が混ざり合っています。それぞれの鉱石に分類するか、噴射する武器として使用されます。 liquid.oil.description = 高度な材料生産で使用される液体です。 燃料として石炭に変換したり、武器として噴霧して発火させることができます。 liquid.cryofluid.description = 水とチタニウムから作られる不活性で非腐食性の液体です。 非常に高い熱容量を持っているため、冷却に使用されます。 -block.resupply-point.description = 近くのユニットに銅の弾薬を補給します。エネルギーを必要とするユニットとは互換性がありません。 +block.derelict =  [lightgray]放棄 block.armored-conveyor.description = チタンコンベアーと同じ速度でアイテムを輸送することができ、耐久性に優れています。\nまた、コンベアー以外による側面への入力を受け入れません。 block.illuminator.description = 電力が必要な光源です。 block.message.description = メッセージを保存し、仲間間の通信に使用します。 @@ -1339,8 +1431,8 @@ block.alloy-smelter.description = チタンや鉛、シリコン、銅からサ block.cryofluid-mixer.description = 水とチタンから冷却に効率的な冷却水を製造します。 block.blast-mixer.description = 可燃性のピラタイトを石油を使用してさらに爆発性化合物にします。 block.pyratite-mixer.description = 石炭、鉛、砂から燃えやすいピラタイトを製造します。 -block.melter.description = 石を熱で溶かして溶岩を生成します。 -block.separator.description = 石を水圧で砕き、石に含まれる様々な鉱石を回収します。 +block.melter.description = 石を熱で溶かしてスラグを生成します。 +block.separator.description = スラグを分離して、多様な鉱石を回収します。 block.spore-press.description = 胞子ポッドを石油に圧縮します。 block.pulverizer.description = 石を砕いて砂にします。自然の砂がない場合に有用です。 block.coal-centrifuge.description = 石油を石炭へ加工します。 @@ -1351,14 +1443,16 @@ block.item-source.description = アイテムを無限に搬出します。サン block.item-void.description = 電力を必要とせずにアイテムを廃棄します。サンドボックスモードのみ使用できます。 block.liquid-source.description = 液体を無限に搬出します。サンドボックスモードのみ使用できます。 block.liquid-void.description = 液体を破棄できます。サンドボックスモードのみ使用できます。 +block.payload-source.description = ペイロードを無限に搬出します。サンドボックスモードのみ使用できます。 +block.payload-void.description = ペイロードを破棄できます。サンドボックスモードのみ使用できます。 block.copper-wall.description = 安価な防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに有用です。 block.copper-wall-large.description = 安価な大型防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに有用です。 block.titanium-wall.description = 適度に強力な防壁ブロックです。\n中程度の攻撃から保護します。 block.titanium-wall-large.description = 適度に強力な大型防壁ブロックです。\n中程度の攻撃から保護します。 block.plastanium-wall.description = 電気アークを吸収し、電源ノードの自動接続をブロックする特別な壁です。 block.plastanium-wall-large.description = 電気アークを吸収し、電源ノードの自動接続をブロックする特別で大型な壁です。 -block.thorium-wall.description = 強化された防壁ブロックです。\n敵からの保護により強固です。 -block.thorium-wall-large.description = 強化された大型防壁ブロックです。\n敵からの保護により強固です。 +block.thorium-wall.description = より強固に強化された防壁ブロックです。 +block.thorium-wall-large.description = より強固に強化された大型防壁ブロックです。 block.phase-wall.description = トリウムの壁ほど強固ではないが、強力な弾でなければ弾き返すことができます。 block.phase-wall-large.description = トリウムの壁ほど強固ではないが、強力な弾でなければ弾き返すことができます。 block.surge-wall.description = 最も硬い防壁ブロックです。\nたまに攻撃されると敵に電撃を与えます。 @@ -1376,21 +1470,21 @@ block.plastanium-conveyor.description = アイテムをまとめて輸送する block.junction.description = 十字に交差したコンベアーをそれぞれ前方に搬出します。コンベアーで複雑な構造を組み立てるときに便利です。 block.bridge-conveyor.description = 高度な輸送ブロックです。地形や建物を超えて、3ブロック離れた場所にアイテムを輸送することができます。 block.phase-conveyor.description = 改良されたアイテム転送ブロックです。電力を使用して、離れた場所にあるフェーズコンベアーにアイテムを転送することができます。 -block.sorter.description = アイテムを分別して搬出します。設定したアイテムは通過させます。他のアイテムが搬入されると側面にアイテムを搬出します。 -block.inverted-sorter.description = アイテムを分別して搬出します。設定したアイテムは側面に搬出されます。他のアイテムが搬入されるとアイテムを通過させます。通常のルーターと反対の動作をします。 -block.router.description = 搬入したアイテムをほかの3方向に均等に搬出します。一つの資源から複数に分ける際などに使われます。 -block.router.details = 最悪の設置は、搬入のために生産施設に隣接させることです。搬出によって詰まる可能性があるためおすすめできません。 -block.distributor.description = 高度なルーターです。搬入したアイテムをほかの7方向に均等に分けて搬出します。 -block.overflow-gate.description = 搬出先にアイテムを搬入する空きがない場合に左右にアイテムを搬出します。 +block.sorter.description = アイテムを分別して搬出します。設定したアイテムは前面へ搬出します。他のアイテムが搬入されると側面に搬出します。 +block.inverted-sorter.description = アイテムを分別して搬出します。設定したアイテムは側面に搬出します。他のアイテムが搬入されると前面へ搬出します。 +block.router.description = 搬入したアイテムをほかの3方向へ均等に搬出します。一つの資源から複数に分ける際などに使われます。 +block.router.details = 最悪の設置は、搬入のために生産施設に隣接させることです。搬出アイテムにより詰まる可能性があるためおすすめできません。 +block.distributor.description = 高度なルーターです。搬入したアイテムをほかの7方向へ均等に分けて搬出します。 +block.overflow-gate.description = 搬出先にアイテムを搬入する空きがない場合は左右にアイテムを搬出します。 block.underflow-gate.description = オーバーフローゲートの反対の機能を持ちます。 左右に出力できない場合、前面に出力します。 block.mass-driver.description = 長距離の輸送が可能な上位アイテム輸送ブロックです。離れた別のマスドライバーにアイテムを発射します。 block.mechanical-pump.description = 安価なポンプです。搬出速度は遅いですが、電力を使わず使用できます。 -block.rotary-pump.description = 高度なポンプです。電力を使用して2倍速く搬出することができます。 +block.rotary-pump.description = 高度なポンプです。電力が必要ですが、より多く搬出することができます。 block.thermal-pump.description = 最高性能のポンプです。 block.conduit.description = 一般的な液体輸送ブロックです。液体版のコンベアーです。ポンプや他のパイプに使うことができます。 block.pulse-conduit.description = 高度な液体輸送ブロックです。通常のパイプより速くたくさんの液体を輸送することができます。 block.plated-conduit.description = パルスパイプと同じ速度で液体を輸送することができ、耐久性に優れています。\nまた、パイプ以外による側面への入力を受け入れません。 -block.liquid-router.description = 搬入したアイテムをほかの3方向に均等に搬出します。液体の漏れを防ぐことができます。一つの資源から複数に分ける際などに使われます。 +block.liquid-router.description = 搬入したアイテムをほかの3方向へ均等に搬出します。液体の漏れを防ぐことができます。一つの資源から複数に分ける際などに使われます。 block.liquid-tank.description = 大量の液体を保管しておくことができます。需要が不安定な製造設備や重要な施設の冷却水の予備などとして使用されます。 block.liquid-junction.description = パイプを他のパイプと交差できるようにします。それぞれ搬入した液体を前方に搬出します。パイプで複雑な構造を組み立てるときなどに使われます。 block.bridge-conduit.description = 高度な液体輸送ブロックです。地形や建物を超えて、3ブロック離れた場所に液体を輸送することができます。 @@ -1429,7 +1523,7 @@ block.container.description = 各種類のアイテムを少量ずつ保管し block.unloader.description = コンテナやボールト、コアからアイテムをコンベアーか隣接するブロックに搬出します。搬出機をタップして搬出するアイテムを変更することができます。 block.launch-pad.description = 離脱することなく、アイテムを回収することができます。 block.duo.description = 小さく安価なターレットです。 -block.scatter.description = 中規模の対空型ターレットです。敵に鉛やスクラップの塊、メタガラスを分散するように発射します。。 +block.scatter.description = 中規模の対空型ターレットです。敵に鉛やスクラップの塊、メタガラスを分散するように発射します。 block.scorch.description = 近くの地上の敵を燃やします。近距離だと非常に効果的です。 block.hail.description = 小型の砲撃型ターレットです。 block.wave.description = バブルの連射攻撃をする中型のターレットです。 @@ -1442,7 +1536,7 @@ block.ripple.description = 同時に複数ショットを発射する大型タ block.cyclone.description = 大型の連射型ターレットです。 block.spectre.description = 一度に2発の強力な弾を放つ大型のターレットです。 block.meltdown.description = 強力な長距離攻撃が可能な大型のターレットです。 -block.foreshadow.description = 一つのターゲットを狙う高火力、長射程のタレットです。 +block.foreshadow.description = 一つのターゲットを狙う高火力、長射程のタレットです。最大体力が高い敵を優先します。 block.repair-point.description = 近くの負傷したユニットを修復します。 block.segment.description = 射程内に入ってきた弾丸を破壊します。レーザー弾は破壊できません。 block.parallax.description = 航空ユニットを引き込むビームを発射し、その過程でターゲットにダメージを与えます。 @@ -1469,22 +1563,24 @@ block.memory-bank.description = より多くの情報を格納します。 block.logic-display.description = プロセッサからの任意のグラフィックを表示します。 block.large-logic-display.description = プロセッサからの任意のグラフィックを表示します。 block.interplanetary-accelerator.description = 巨大な電磁レールガンタワーです。別惑星への展開のためにコアを重力圏脱出可能速度まで加速します。 +block.repair-turret.description = 範囲内の損傷したブロックを近い順に継続的に修復します。オプションで冷却液を活用できます。 +block.payload-propulsion-tower.description = 長距離ペイロード輸送構造です。他の接続されたペイロード推進タワーにペイロードを発射します。 unit.dagger.description = 近くの敵に標準的な弾丸を発射します。 unit.mace.description = 近くの敵に火炎放射を発射します。 unit.fortress.description = 地上目標に長距離砲を発射します。 unit.scepter.description = 近くの敵に電撃弾を発射します。 unit.reign.description = 近くの敵に大口径の貫通弾を発射します。 -unit.nova.description = 敵にダメージを与え、味方の建造物を修復する光線を発射します。飛行可能。 -unit.pulsar.description = 敵にダメージを与え、味方の建造物を修復する電撃攻撃を行います。飛行可能。 -unit.quasar.description = 敵にダメージを与え、味方の建造物を修復するレーザー弾を発射します。飛行可能。シールド形成。 -unit.vela.description = 敵にダメージを与え、火災を引き起こし、味方の建造物を修復するレーザー焼夷弾を発射します。飛行可能。 -unit.corvus.description = 敵にダメージを与え、味方の建造物を修復する大火力のレーザー弾を発射します。ほとんどの地形を無視できます。 +unit.nova.description = 敵にダメージを与え、味方の建造物を修復する光線を発射します。\n飛行可能。 +unit.pulsar.description = 敵にダメージを与え、味方の建造物を修復する電撃攻撃を行います。\n飛行可能。 +unit.quasar.description = 敵にダメージを与え、味方の建造物を修復するレーザー弾を発射します。\n飛行可能。シールド形成。 +unit.vela.description = 敵にダメージを与え、火災を引き起こし、味方の建造物を修復するレーザー焼夷弾を発射します。\n飛行可能。 +unit.corvus.description = 敵にダメージを与え、味方の建造物を修復する大火力のレーザー弾を発射します。\nほとんどの地形を無視できます。 unit.crawler.description = 敵に向かって走り自爆し、大爆発を起こす。 -unit.atrax.description = 地上目標を消耗させるスラグ弾を発射します。ほとんどの地形を無視できます。 -unit.spiroct.description = 敵に吸収レーザービームを発射し、与えたダメージを自らの体力として吸収します。ほとんどの地形を無視できます。 -unit.arkyid.description = 敵に大口径の吸収レーザービームを発射し、与えたダメージを自らの体力として吸収します。ほとんどの地形を無視できます。 -unit.toxopid.description = 敵に大口径の電撃クラスターシェルと貫通レーザーを発射します。ほとんどの地形を無視できます。 +unit.atrax.description = 地上目標を消耗させるスラグ弾を発射します。\nほとんどの地形を無視できます。 +unit.spiroct.description = 敵に吸収レーザービームを発射し、与えたダメージを自らの体力として吸収します。\nほとんどの地形を無視できます。 +unit.arkyid.description = 敵に大口径の吸収レーザービームを発射し、与えたダメージを自らの体力として吸収します。\nほとんどの地形を無視できます。 +unit.toxopid.description = 敵に大口径の電撃クラスターシェルと貫通レーザーを発射します。\nほとんどの地形を無視できます。 unit.flare.description = 近くの地上目標に標準的な弾丸を発射します。 unit.horizon.description = 地上目標にクラスター爆弾を投下します。 unit.zenith.description = 近くの敵にミサイルを一斉発射します。 @@ -1492,14 +1588,19 @@ unit.antumbra.description = 近くの敵に弾幕のように弾丸を連射し unit.eclipse.description = 近くの敵に2門の貫通レーザーと高射砲の弾幕を発射します。 unit.mono.description = 銅と鉛を自動的に採掘し、コアに移送します。 unit.poly.description = 破壊された建造物を自動的に再構築し、さらに建設の支援を行います。 -unit.mega.description = 損傷した建造物を自動的に修復します。小型のブロックと地上ユニットを運搬できます。 -unit.quad.description = 地上目標に大型爆弾を投下し、味方の建造物は修復し、敵にはダメージを与えます。中型の地上ユニットを運搬できます。 -unit.oct.description = シールド形成と修復を行い、付近の味方を守ります。ほとんどの地上ユニットを運搬できます。 +unit.mega.description = 損傷した建造物を自動的に修復します。\n小型のブロックと地上ユニットを運搬できます。 +unit.quad.description = 地上目標に大型爆弾を投下し、味方の建造物は修復し、敵にはダメージを与えます。\n中型の地上ユニットを運搬できます。 +unit.oct.description = シールド形成と修復を行い、付近の味方を守ります。\nほとんどの地上ユニットを運搬できます。 unit.risso.description = 近くの敵にミサイルと弾丸の弾幕を発射します。 unit.minke.description = 近くの地上目標に砲弾と標準的な弾丸を発射します。 unit.bryde.description = 敵に長距離砲弾とミサイルを発射します。 unit.sei.description = 敵にミサイルと徹甲弾の弾幕を発射します。 -unit.omura.description = 敵に長距離かつ貫通性能を持つレールガンボルトを発射します。フレアユニットを生産します。 -unit.alpha.description = シャードコアを敵から守ります。建造物を建築します。 -unit.beta.description = ファンデーションコアを敵から守ります。建造物を建築します。 -unit.gamma.description = ニュークリアスコアを敵から守ります。建造物を建築します。 +unit.omura.description = 敵に長距離かつ貫通性能を持つレールガンボルトを発射します。\nフレアユニットを生産します。 +unit.alpha.description = シャードコアを敵から守ります。\n建造物を建築します。 +unit.beta.description = ファンデーションコアを敵から守ります。\n建造物を建築します。 +unit.gamma.description = ニュークリアスコアを敵から守ります。\n建造物を建築します。 +unit.retusa.description = 近接地雷を配置します。\n味方ユニットを修復します。 +unit.oxynoe.description = 建造物修復火炎放射を発射します。敵にはダメージを与えます。\n地点防空タレットによって敵の弾丸を撃ち落とします。 +unit.cyerce.description = 敵に追尾クラスターミサイルを発射します。\n味方ユニットを修復します。 +unit.aegires.description = エネルギーフィールド内の全ての敵ユニットと建造物には電撃を放ち、全ての味方ユニットには修復効果を与えます。 +unit.navanax.description = 爆発性のEMP弾を発射し、敵の電力系統には重大な損傷を与え、味方の建造物は修復します。\n4門の自律型レーザータレットで近くの敵を溶かします。 From 356c2cfa8026b01b5fba99d49edf4ca7f9844b05 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 18 Aug 2021 11:41:38 -0400 Subject: [PATCH 43/45] Fixed #5797 --- .../mindustry/entities/abilities/EnergyFieldAbility.java | 9 +++++++-- core/src/mindustry/game/Gamemode.java | 4 +--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/core/src/mindustry/entities/abilities/EnergyFieldAbility.java b/core/src/mindustry/entities/abilities/EnergyFieldAbility.java index 3844fc3915..86439d478a 100644 --- a/core/src/mindustry/entities/abilities/EnergyFieldAbility.java +++ b/core/src/mindustry/entities/abilities/EnergyFieldAbility.java @@ -10,6 +10,7 @@ import arc.util.*; import mindustry.*; import mindustry.content.*; import mindustry.entities.*; +import mindustry.game.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; @@ -105,11 +106,15 @@ public class EnergyFieldAbility extends Ability{ }); if(hitBuildings){ - Units.nearbyBuildings(rx, ry, range, all::add); + Units.nearbyBuildings(rx, ry, range, b -> { + if(b.team != Team.derelict || state.rules.coreCapture){ + all.add(b); + } + }); } all.sort(h -> h.dst2(rx, ry)); - int len = Math.min(all.size, maxTargets); + int len = Math.min(all.size, maxTargets);// for(int i = 0; i < len; i++){ Healthc other = all.get(i); diff --git a/core/src/mindustry/game/Gamemode.java b/core/src/mindustry/game/Gamemode.java index 6e9dffc06e..950859c7e5 100644 --- a/core/src/mindustry/game/Gamemode.java +++ b/core/src/mindustry/game/Gamemode.java @@ -5,8 +5,6 @@ import arc.func.*; import arc.util.*; import mindustry.maps.*; -import static mindustry.Vars.*; - /** Defines preset rule sets. */ public enum Gamemode{ survival(rules -> { @@ -25,7 +23,7 @@ public enum Gamemode{ rules.waveSpacing = 2f * Time.toMinutes; rules.teams.get(rules.waveTeam).infiniteResources = true; - }, map -> map.teams.contains(state.rules.waveTeam.id)), + }, map -> map.teams.size > 1), pvp(rules -> { rules.pvp = true; rules.enemyCoreBuildRadius = 600f; From 179f44cd374c7c15361efff1e82f998c9047217f Mon Sep 17 00:00:00 2001 From: buthed010203 Date: Wed, 18 Aug 2021 12:52:12 -0400 Subject: [PATCH 44/45] // (#5798) --- core/src/mindustry/entities/abilities/EnergyFieldAbility.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/entities/abilities/EnergyFieldAbility.java b/core/src/mindustry/entities/abilities/EnergyFieldAbility.java index 86439d478a..576354e7c9 100644 --- a/core/src/mindustry/entities/abilities/EnergyFieldAbility.java +++ b/core/src/mindustry/entities/abilities/EnergyFieldAbility.java @@ -114,7 +114,7 @@ public class EnergyFieldAbility extends Ability{ } all.sort(h -> h.dst2(rx, ry)); - int len = Math.min(all.size, maxTargets);// + int len = Math.min(all.size, maxTargets); for(int i = 0; i < len; i++){ Healthc other = all.get(i); From 103ee371bd9704c12bc4d1c7a17b335af9332c55 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 18 Aug 2021 13:49:59 -0400 Subject: [PATCH 45/45] Fixed #5800 --- core/src/mindustry/world/blocks/power/PowerNode.java | 11 ++++++++--- gradle.properties | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/core/src/mindustry/world/blocks/power/PowerNode.java b/core/src/mindustry/world/blocks/power/PowerNode.java index df49366a8f..7ced9f8052 100644 --- a/core/src/mindustry/world/blocks/power/PowerNode.java +++ b/core/src/mindustry/world/blocks/power/PowerNode.java @@ -23,11 +23,9 @@ import mindustry.world.modules.*; import static mindustry.Vars.*; public class PowerNode extends PowerBlock{ - protected static boolean returnValue = false; protected static BuildPlan otherReq; - - protected final static ObjectSet graphs = new ObjectSet<>(); protected static int returnInt = 0; + protected final static ObjectSet graphs = new ObjectSet<>(); public @Load("laser") TextureRegion laser; public @Load("laser-end") TextureRegion laserEnd; @@ -133,6 +131,13 @@ public class PowerNode extends PowerBlock{ stats.add(Stat.powerConnections, maxNodes, StatUnit.none); } + @Override + public void init(){ + super.init(); + + clipSize = Math.max(clipSize, laserRange * tilesize); + } + @Override public void drawPlace(int x, int y, int rotation, boolean valid){ Tile tile = world.tile(x, y); diff --git a/gradle.properties b/gradle.properties index 1b5e22e670..fa7fb4b746 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=f50ceb463ce4cc7e0b09a7817b12d98c43f00068 +archash=d9eb4aa5b85f51c87f2e5e78cea4043e65bd29f0