From 2ad5e373028340c0dec2b4de9808cc97ff606a01 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 28 Nov 2023 15:00:39 -0500 Subject: [PATCH 01/20] Fixed #9325 --- core/src/mindustry/logic/LStatements.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/logic/LStatements.java b/core/src/mindustry/logic/LStatements.java index 2c0c8159c4..fe3308212a 100644 --- a/core/src/mindustry/logic/LStatements.java +++ b/core/src/mindustry/logic/LStatements.java @@ -164,7 +164,7 @@ public class LStatements{ } if(type == GraphicsType.print){ - p2 = "bottomLeft"; + p1 = "bottomLeft"; } rebuild(table); From 45aee7d5820be54d552e3bbbfb39a338efce6e1c Mon Sep 17 00:00:00 2001 From: OSP <76648940+osp54@users.noreply.github.com> Date: Wed, 29 Nov 2023 01:35:49 +0300 Subject: [PATCH 02/20] Darkdustry reborn (#9324) --- servers_v7.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/servers_v7.json b/servers_v7.json index 0cd81ae316..397a24135f 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -83,6 +83,10 @@ "name": "XCore", "address": ["128.140.88.66", "128.140.88.66:6568", "128.140.88.66:6569", "128.140.88.66:6570", "128.140.88.66:6571", "128.140.88.66:6572", "128.140.88.66:6573", "128.140.88.66:6574", "128.140.88.66:6575"] }, + { + "name": "MinDurka", + "address": ["143.47.246.70", "143.47.246.70:3001", "143.47.246.70:3002", "143.47.246.70:3003", "143.47.246.70:3004", "143.47.246.70:3005", "143.47.246.70:3006", "143.47.246.70:3007", "143.47.246.70:3008", "143.47.246.70:3009", "143.47.246.70:3010"] + }, { "name": "Chaotic Neutral", "address": ["c-n.ddns.net:7012", "c-n.ddns.net:7013", "c-n.ddns.net:7014", "c-n.ddns.net:7015", "c-n.ddns.net:7016", "c-n.ddns.net:7017", "c-n.ddns.net:7003", "37.187.73.180:7021"] From ada2ee128ba1e537df94c73937e54bde042d2e17 Mon Sep 17 00:00:00 2001 From: router Date: Wed, 29 Nov 2023 10:10:52 +0300 Subject: [PATCH 03/20] fix typo in russian bundle (#9326) --- core/assets/bundles/bundle_ru.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index 35858bc73c..ab749a1a86 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -1982,7 +1982,7 @@ block.door-large.description = Стена, которую можно откры block.mender.description = Периодически ремонтирует блоки в непосредственной близости.\nОпционально использует кремний для увеличения дальности и эффективности. block.mend-projector.description = Периодически ремонтирует блоки в непосредственной близости.\nОпционально использует фазовую ткань для увеличения дальности и эффективности. block.overdrive-projector.description = Увеличивает скорость близлежащих зданий.\nОпционально использует фазовую ткань для увеличения дальности и эффективности. -block.force-projector.description = Создает вокруг себя шестиугольное силовое поле, защищая здания и боевые единицы внутри от повреждений.\nПерегревается, если нанесено слишком большое количество повреждений. Опционально использует охлаждающую жидкость для предотвращения перегрева. Фазовая ткань увеличивает размера щита. +block.force-projector.description = Создает вокруг себя шестиугольное силовое поле, защищая здания и боевые единицы внутри от повреждений.\nПерегревается, если нанесено слишком большое количество повреждений. Опционально использует охлаждающую жидкость для предотвращения перегрева. Фазовая ткань увеличивает размер щита. block.shock-mine.description = Высвобождает электрический разряд при контакте с вражеской единицей. block.conveyor.description = Перемещает предметы вперёд. block.titanium-conveyor.description = Перемещает предметы вперёд. Быстрее, чем стандартный конвейер. From 08758ec29c36b3ac71ae8a14b105781680e9b9db Mon Sep 17 00:00:00 2001 From: router Date: Wed, 29 Nov 2023 23:01:41 +0300 Subject: [PATCH 04/20] Clean up 0.baseduser.eu.org (servers_v7.json) (#9328) --- servers_v7.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/servers_v7.json b/servers_v7.json index 397a24135f..f4cb6be8c1 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -49,7 +49,7 @@ }, { "name": "Mindustry.pl", - "address": ["78.46.100.178", "0.baseduser.eu.org:6966", "0.baseduser.eu.org:6666", "0.baseduser.eu.org:6000", "1.baseduser.eu.org:6966", "1.baseduser.eu.org:6666", "1.baseduser.eu.org:6000"] + "address": ["1.baseduser.eu.org:6966", "1.baseduser.eu.org:6666", "1.baseduser.eu.org:6000"] }, { "name": "SynapseOS", @@ -59,10 +59,6 @@ "name": "Untitled Mindustry Servers", "address": ["45.144.66.250:6567", "45.144.66.250:6601", "45.144.66.250:6611"] }, - { - "name": "C.A.M.S.", - "address": ["0.baseduser.eu.org:42001", "0.baseduser.eu.org:42002"] - }, { "name": "thedimas", "address": ["167.86.69.235", "167.86.69.235:6503","167.86.69.235:6505", "167.86.69.235:6506", "167.86.69.235:6507", "167.86.69.235:6508", "167.86.69.235:6509", "167.86.69.235:6510", "167.86.69.235:6511", "167.86.69.235:6512", "167.86.69.235:6513"] From 871209d88050428e4917dad7c73b9f61ef7c2100 Mon Sep 17 00:00:00 2001 From: abcxyzDustry <138785336+abcxyzDustry@users.noreply.github.com> Date: Thu, 30 Nov 2023 07:29:52 +0700 Subject: [PATCH 05/20] Update servers_v7.json (#9329) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index f4cb6be8c1..1a0f7180dc 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -226,7 +226,7 @@ }, { "name": "ABCXYZ Community", - "address": ["23.88.73.88:23591", "23.88.73.88:23539", "144.76.57.59:14996", "144.76.57.59:16881", "144.76.57.59:13885", "23.88.73.88:32113", "144.76.57.59:9269"] + "address": ["23.88.73.88:23591", "23.88.73.88:23539", "144.76.57.59:14996", "144.76.57.59:16881", "144.76.57.59:13885", "23.88.73.88:32113", "144.76.57.59:9269", "144.76.57.59:24235", "144.76.57.59:24133"] }, { "name": "CroCraft Network", From 9bd494504e7b4480f5469d0974d241c1a59e75f4 Mon Sep 17 00:00:00 2001 From: MEEPofFaith <54301439+MEEPofFaith@users.noreply.github.com> Date: Thu, 30 Nov 2023 04:18:40 -0800 Subject: [PATCH 06/20] angleOffset is added twice in Weapon shoot (#9332) --- core/src/mindustry/type/Weapon.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/type/Weapon.java b/core/src/mindustry/type/Weapon.java index 6397a899e1..51136e5a6b 100644 --- a/core/src/mindustry/type/Weapon.java +++ b/core/src/mindustry/type/Weapon.java @@ -468,7 +468,7 @@ public class Weapon implements Cloneable{ bulletY = mountY + Angles.trnsy(weaponRotation, this.shootX + xOffset + xSpread, this.shootY + yOffset), shootAngle = bulletRotation(unit, mount, bulletX, bulletY) + angleOffset, lifeScl = bullet.scaleLife ? Mathf.clamp(Mathf.dst(bulletX, bulletY, mount.aimX, mount.aimY) / bullet.range) : 1f, - angle = angleOffset + shootAngle + Mathf.range(inaccuracy + bullet.inaccuracy); + angle = shootAngle + Mathf.range(inaccuracy + bullet.inaccuracy); Entityc shooter = unit.controller() instanceof MissileAI ai ? ai.shooter : unit; //Pass the missile's shooter down to its bullets mount.bullet = bullet.create(unit, shooter, unit.team, bulletX, bulletY, angle, -1f, (1f - velocityRnd) + Mathf.random(velocityRnd), lifeScl, null, mover, mount.aimX, mount.aimY); From 0271089211e98dfa4c7017ac7f892c042fa50bc8 Mon Sep 17 00:00:00 2001 From: alex <67626131+alexpvpmindustry@users.noreply.github.com> Date: Thu, 30 Nov 2023 20:18:59 +0800 Subject: [PATCH 07/20] Update servers_v7.json for alex mindustry (#9330) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 1a0f7180dc..08481a93c2 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -238,7 +238,7 @@ }, { "name": "Alex Multiverse", - "address": ["alexmindustryv7.servegame.com:25588", "173.255.208.38:41962", "alexmindustrypvp.ddns.net:6767", "172.104.188.197:6768", "172.234.80.96:6768", "139.162.41.78:6767"] + "address": ["alexmindustryv7.servegame.com:25588", "172.234.80.96:6768", "139.162.41.78:6767", "172.245.187.143:6868", "172.245.187.143:6869" ] }, { "name": "Open PVP", From 0afed49b7c31f014b051e25822771df8e1f35ff2 Mon Sep 17 00:00:00 2001 From: NazrinNya <137837419+NazrinNya@users.noreply.github.com> Date: Thu, 30 Nov 2023 18:17:09 +0300 Subject: [PATCH 08/20] IP change of cyandustry (#9312) * Update servers_v7.json * Update servers_v7.json * Update servers_v7.json * Update servers_v7.json --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 08481a93c2..d284a7312d 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -206,7 +206,7 @@ }, { "name": "Cyandustry", - "address": ["88.99.95.188:7000","88.99.95.188:7001", "88.99.95.188:7002", "88.99.95.188:7003", "88.99.95.188:7004", "88.99.95.188:7005", "88.99.95.188:7006"] + "address": ["81.30.157.68:7000","81.30.157.68:7001", "81.30.157.68:7002", "81.30.157.68:7003", "81.30.157.68:7004", "81.30.157.68:7005", "81.30.157.68:7006"] }, { "name": "Four Family", From 5fe28254e787afd020178555dc82d2ae91fcd691 Mon Sep 17 00:00:00 2001 From: Mythril382 <77225817+Mythril382@users.noreply.github.com> Date: Fri, 1 Dec 2023 03:16:44 +0800 Subject: [PATCH 09/20] Custom Launch Music for Each Planet (#8901) * plant * what * literal ctrl+c ctrl+v * more music * issue * feedback * commit return --- core/src/mindustry/audio/SoundControl.java | 2 +- core/src/mindustry/mod/ContentParser.java | 16 ++++++++++++++++ core/src/mindustry/type/Planet.java | 4 ++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/audio/SoundControl.java b/core/src/mindustry/audio/SoundControl.java index 93f8fda115..f035306b2c 100644 --- a/core/src/mindustry/audio/SoundControl.java +++ b/core/src/mindustry/audio/SoundControl.java @@ -146,7 +146,7 @@ public class SoundControl{ if(state.isMenu()){ silenced = false; if(ui.planet.isShown()){ - play(Musics.launch); + play(ui.planet.state.planet.launchMusic); }else if(ui.editor.isShown()){ play(Musics.editor); }else{ diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index 519b47ff71..2d3f2a7487 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -2,6 +2,7 @@ package mindustry.mod; import arc.*; import arc.assets.*; +import arc.assets.loaders.MusicLoader.*; import arc.assets.loaders.SoundLoader.*; import arc.audio.*; import arc.files.*; @@ -61,6 +62,7 @@ public class ContentParser{ ObjectMap, ContentType> contentTypes = new ObjectMap<>(); ObjectSet> implicitNullable = ObjectSet.with(TextureRegion.class, TextureRegion[].class, TextureRegion[][].class, TextureRegion[][][].class); ObjectMap> sounds = new ObjectMap<>(); + ObjectMap> musics = new ObjectMap<>(); Seq listeners = new Seq<>(); ObjectMap, FieldParser> classParsers = new ObjectMap<>(){{ @@ -284,6 +286,20 @@ public class ContentParser{ sounds.put(path, desc); return sound; }); + put(Music.class, (type, data) -> { + if(fieldOpt(Musics.class, data) != null) return fieldOpt(Musics.class, data); + if(Vars.headless) return new Music(); + + String name = "music/" + data.asString(); + String path = Vars.tree.get(name + ".ogg").exists() ? name + ".ogg" : name + ".mp3"; + + if(musics.containsKey(path)) return ((MusicParameter)musics.get(path).params).music; + var music = new Music(); + AssetDescriptor desc = Core.assets.load(path, Music.class, new MusicParameter(music)); + desc.errored = Throwable::printStackTrace; + musics.put(path, desc); + return music; + }); put(Objectives.Objective.class, (type, data) -> { if(data.isString()){ var cont = locateAny(data.asString()); diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 68c07a239b..1aa63264e2 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -1,6 +1,7 @@ package mindustry.type; import arc.*; +import arc.audio.*; import arc.func.*; import arc.graphics.*; import arc.graphics.g3d.*; @@ -15,6 +16,7 @@ import mindustry.content.TechTree.*; import mindustry.ctype.*; import mindustry.game.*; import mindustry.game.EventType.ContentInitEvent; +import mindustry.gen.*; import mindustry.graphics.*; import mindustry.graphics.g3d.*; import mindustry.graphics.g3d.PlanetGrid.*; @@ -128,6 +130,8 @@ public class Planet extends UnlockableContent{ public boolean allowLaunchToNumbered = true; /** Icon as displayed in the planet selection dialog. This is a string, as drawables are null at load time. */ public String icon = "planet"; + /** Plays in the planet dialog when this planet is selected. */ + public Music launchMusic = Musics.launch; /** Default core block for launching. */ public Block defaultCore = Blocks.coreShard; /** Sets up rules on game load for any sector on this planet. */ From ed96b2eec8d52f5d3851cd8561df11ea013542c0 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 30 Nov 2023 14:19:30 -0500 Subject: [PATCH 10/20] Simplified JSON music/sound loading --- core/assets/icons/icons.properties | 1 + core/assets/logicids.dat | Bin 4666 -> 4680 bytes core/src/mindustry/mod/ContentParser.java | 31 ++++------------------ gradle.properties | 2 +- 4 files changed, 7 insertions(+), 27 deletions(-) diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index d72941dee9..64963dd203 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -587,3 +587,4 @@ 63095=ranai|ranai 63094=cat|cat 63093=world-switch|block-world-switch-ui +63092=dynamic|status-dynamic-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index c5ed10a04e9b53918436d645b2a2b4d90940ddb2..1a821f841ab622df099a5fbfb7d540afb380f134 100644 GIT binary patch delta 30 lcmdm`azcfP;r~V^XMSFu^8BKl6y4(T%#!4c%`W`km;j@v3eNxl delta 16 XcmX@1vP*@D;on9kXa3E>{9l;>Gz, ContentType> contentTypes = new ObjectMap<>(); ObjectSet> implicitNullable = ObjectSet.with(TextureRegion.class, TextureRegion[].class, TextureRegion[][].class, TextureRegion[][][].class); - ObjectMap> sounds = new ObjectMap<>(); - ObjectMap> musics = new ObjectMap<>(); Seq listeners = new Seq<>(); ObjectMap, FieldParser> classParsers = new ObjectMap<>(){{ @@ -273,32 +271,14 @@ public class ContentParser{ return new Vec3(data.getFloat("x", 0f), data.getFloat("y", 0f), data.getFloat("z", 0f)); }); put(Sound.class, (type, data) -> { - if(fieldOpt(Sounds.class, data) != null) return fieldOpt(Sounds.class, data); - if(Vars.headless) return new Sound(); + var field = fieldOpt(Sounds.class, data); - String name = "sounds/" + data.asString(); - String path = Vars.tree.get(name + ".ogg").exists() ? name + ".ogg" : name + ".mp3"; - - if(sounds.containsKey(path)) return ((SoundParameter)sounds.get(path).params).sound; - var sound = new Sound(); - AssetDescriptor desc = Core.assets.load(path, Sound.class, new SoundParameter(sound)); - desc.errored = Throwable::printStackTrace; - sounds.put(path, desc); - return sound; + return field != null ? field : Vars.tree.loadSound(data.asString()); }); put(Music.class, (type, data) -> { - if(fieldOpt(Musics.class, data) != null) return fieldOpt(Musics.class, data); - if(Vars.headless) return new Music(); - - String name = "music/" + data.asString(); - String path = Vars.tree.get(name + ".ogg").exists() ? name + ".ogg" : name + ".mp3"; - - if(musics.containsKey(path)) return ((MusicParameter)musics.get(path).params).music; - var music = new Music(); - AssetDescriptor desc = Core.assets.load(path, Music.class, new MusicParameter(music)); - desc.errored = Throwable::printStackTrace; - musics.put(path, desc); - return music; + var field = fieldOpt(Musics.class, data); + + return field != null ? field : Vars.tree.loadMusic(data.asString()); }); put(Objectives.Objective.class, (type, data) -> { if(data.isString()){ @@ -1011,7 +991,6 @@ public class ContentParser{ throw new RuntimeException(e); } } - Object fieldOpt(Class type, JsonValue value){ try{ return type.getField(value.asString()).get(null); diff --git a/gradle.properties b/gradle.properties index 5965736f20..63ba2cb1ef 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,4 +25,4 @@ org.gradle.caching=true #used for slow jitpack builds; TODO see if this actually works org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.connectionTimeout=100000 -archash=34775c79250cab391499fac8f4747365984c6923 +archash=f1e4bdee85 From af36f5fd6de35849d107750859ff00b64bd19363 Mon Sep 17 00:00:00 2001 From: Redstonneur1256 <29004178+Redstonneur1256@users.noreply.github.com> Date: Thu, 30 Nov 2023 21:56:57 +0100 Subject: [PATCH 11/20] Update servers_v7.json (#9333) --- servers_v7.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/servers_v7.json b/servers_v7.json index d284a7312d..dccae5b7e7 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -255,5 +255,9 @@ { "name": "Atomic", "address": ["atomic-de.ddns.net:35199", "atomic-de.ddns.net:35176", "atomic-de.ddns.net:35845"] + }, + { + "name": "SkyPlex", + "address": ["mc-skyplex.net"] } ] From 88b10f4cf81dacfa2216c58aa5a5860b6da642c0 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 1 Dec 2023 13:34:17 -0500 Subject: [PATCH 12/20] Fixed #9336 --- core/src/mindustry/input/InputHandler.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 90ac947c52..9472028766 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -654,7 +654,13 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ } if(player.team() == build.team && build.canControlSelect(player.unit())){ + var before = player.unit(); + build.onControlSelect(player.unit()); + + if(!before.dead && before.spawnedByCore && !before.isPlayer()){ + Call.unitDespawn(before); + } } } @@ -699,6 +705,10 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ //direct dock transfer??? unit.dockedType = before.dockedType; } + + if(before.spawnedByCore && !before.isPlayer()){ + Call.unitDespawn(before); + } } Time.run(Fx.unitSpirit.lifetime, () -> Fx.unitControl.at(unit.x, unit.y, 0f, unit)); From 2d6e1cdf655be8b11fd95dfb55ab3b7891e97ef1 Mon Sep 17 00:00:00 2001 From: MEEPofFaith <54301439+MEEPofFaith@users.noreply.github.com> Date: Fri, 1 Dec 2023 17:50:32 -0800 Subject: [PATCH 13/20] PointLaserBulletType support for Weapons (#9331) * PointLaserBulletType support for Weapons I hate adding more fields to Weapon, but oh well. It's the price to pay when the behavior of what should be spread across multiple classes is compacted into a single class. * Fix several problems --- .../mindustry/entities/units/WeaponMount.java | 2 ++ core/src/mindustry/type/Weapon.java | 27 ++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/entities/units/WeaponMount.java b/core/src/mindustry/entities/units/WeaponMount.java index 752b3fd071..5cc1567533 100644 --- a/core/src/mindustry/entities/units/WeaponMount.java +++ b/core/src/mindustry/entities/units/WeaponMount.java @@ -40,6 +40,8 @@ public class WeaponMount{ public int totalShots; /** counter for which barrel bullets have been fired from; used for alternating patterns */ public int barrelCounter; + /** Last aim length of weapon. Only used for point lasers. */ + public float lastLength; /** current bullet for continuous weapons */ public @Nullable Bullet bullet; /** sound loop for continuous weapons */ diff --git a/core/src/mindustry/type/Weapon.java b/core/src/mindustry/type/Weapon.java index 51136e5a6b..0864d670eb 100644 --- a/core/src/mindustry/type/Weapon.java +++ b/core/src/mindustry/type/Weapon.java @@ -54,6 +54,8 @@ public class Weapon implements Cloneable{ public boolean continuous; /** whether this weapon uses continuous fire without reloading; implies continuous = true */ public boolean alwaysContinuous; + /** Speed at which the turret can change its bullet "aim" distance. This is only used for point laser bullets. */ + public float aimChangeSpeed = Float.POSITIVE_INFINITY; /** whether this weapon can be aimed manually by players */ public boolean controllable = true; /** whether this weapon can be automatically aimed by the unit */ @@ -370,6 +372,18 @@ public class Weapon implements Cloneable{ mount.sound.update(bulletX, bulletY, true); } + //target length of laser + float shootLength = Math.min(Mathf.dst(bulletX, bulletY, mount.aimX, mount.aimY), range()); + //current length of laser + float curLength = Mathf.dst(bulletX, bulletY, mount.bullet.aimX, mount.bullet.aimY); + //resulting length of the bullet (smoothed) + float resultLength = Mathf.approachDelta(curLength, shootLength, aimChangeSpeed); + //actual aim end point based on length + Tmp.v1.trns(shootAngle, mount.lastLength = resultLength).add(bulletX, bulletY); + + mount.bullet.aimX = Tmp.v1.x; + mount.bullet.aimY = Tmp.v1.y; + if(alwaysContinuous && mount.shoot){ mount.bullet.time = mount.bullet.lifetime * mount.bullet.type.optimalLifeFract * mount.warmup; mount.bullet.keepAlive = true; @@ -493,7 +507,18 @@ public class Weapon implements Cloneable{ //override to do special things to a bullet after spawning protected void handleBullet(Unit unit, WeaponMount mount, Bullet bullet){ - + if(continuous){ + float + weaponRotation = unit.rotation - 90 + (rotate ? mount.rotation : baseRotation), + mountX = unit.x + Angles.trnsx(unit.rotation - 90, x, y), + mountY = unit.y + Angles.trnsy(unit.rotation - 90, x, y), + bulletX = mountX + Angles.trnsx(weaponRotation, this.shootX, this.shootY), + bulletY = mountY + Angles.trnsy(weaponRotation, this.shootX, this.shootY); + //make sure the length updates to the last set value + Tmp.v1.trns(bulletRotation(unit, mount, bulletX, bulletY), shootY + mount.lastLength).add(bulletX, bulletY); + bullet.aimX = Tmp.v1.x; + bullet.aimY = Tmp.v1.y; + } } public void flip(){ From 862d3153d94f620e1793177b7e6d4752a999dd24 Mon Sep 17 00:00:00 2001 From: ApsZoldat <128713348+ApsZoldat@users.noreply.github.com> Date: Sat, 2 Dec 2023 05:14:10 +0300 Subject: [PATCH 14/20] Map-specific locale bundles system (#9199) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix text setting in marker control * Fix marker and bridge calculation game crashes, minor marker instruction code fixes * Add privileged desynced client constant global variables * Remove broken attempt to not initialize client vars on server * Make @clientLocale variable non-constant, make @server and @client privileged * WIP Implementation of map-specific locale bundles * Progress on map locale bundles: add locale data to saves, make objectives use map locales if possible * Add print formatting and map locale printing to world processors * 🗿 * Minor map locales dialog ui changes * Make map locale bundles load when joining multiplayer server * Remove static declaration of current locale in MapLocales to fix tests failing * Unify name of localeprint instruction, minor instruction description change, fix map locales incorrectly loading from clipboard * Fix locale bundles not saving in game state, add global var, make objective markers use map locale bundles and .mobile properties on mobile devices * Even more map locales dialog improvements * Fix english locale picking (when property isn't presented in current locale but english version has it) not working * Add icon pasting to map locales dialog, minor ui changes * Fix inconsistent game crash with null text in objectives, define player.locale on game loading (for clientLocale var) * Change format instruction placeholders to backslash, fix map locales system incorrectly handling default locale * understood --- core/assets/bundles/bundle.properties | 23 + core/src/mindustry/core/Control.java | 7 + core/src/mindustry/core/GameState.java | 2 + .../src/mindustry/editor/MapEditorDialog.java | 1 + core/src/mindustry/editor/MapInfoDialog.java | 15 + .../mindustry/editor/MapLocalesDialog.java | 758 ++++++++++++++++++ core/src/mindustry/game/MapObjectives.java | 39 +- core/src/mindustry/io/SaveVersion.java | 3 + core/src/mindustry/logic/GlobalVars.java | 16 +- core/src/mindustry/logic/LExecutor.java | 69 ++ core/src/mindustry/logic/LStatements.java | 46 ++ core/src/mindustry/net/NetworkIO.java | 3 + core/src/mindustry/type/MapLocales.java | 97 +++ .../ui/dialogs/CustomRulesDialog.java | 2 +- .../mindustry/ui/dialogs/LanguageDialog.java | 1 + 15 files changed, 1070 insertions(+), 12 deletions(-) create mode 100644 core/src/mindustry/editor/MapLocalesDialog.java create mode 100644 core/src/mindustry/type/MapLocales.java diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index bf88e0992b..708d3bd0e1 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -444,6 +444,7 @@ editor.waves = Waves editor.rules = Rules editor.generation = Generation editor.objectives = Objectives +editor.locales = Locale Bundles editor.ingame = Edit In-Game editor.playtest = Playtest editor.publish.workshop = Publish On Workshop @@ -511,6 +512,7 @@ editor.errorlegacy = This map is too old, and uses a legacy map format that is n editor.errornot = This is not a map file. editor.errorheader = This map file is either not valid or corrupt. editor.errorname = Map has no name defined. Are you trying to load a save file? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Update editor.randomize = Randomize editor.moveup = Move Up @@ -522,6 +524,7 @@ editor.sectorgenerate = Sector Generate editor.resize = Resize editor.loadmap = Load Map editor.savemap = Save Map +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Saved! editor.save.noname = Your map does not have a name! Set one in the 'map info' menu. editor.save.overwrite = Your map overwrites a built-in map! Pick a different name in the 'map info' menu. @@ -610,6 +613,24 @@ filter.option.threshold2 = Secondary Threshold filter.option.radius = Radius filter.option.percentile = Percentile +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon + width = Width: height = Height: menu = Menu @@ -2267,6 +2288,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Read a number from a linked memory cell. lst.write = Write a number to a linked memory cell. lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. lst.drawflush = Flush queued [accent]Draw[] operations to a display. lst.printflush = Flush queued [accent]Print[] operations to a message block. @@ -2304,6 +2326,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nLimited to 20 times a second per variable. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Unit building logic is not allowed here. diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index 9d6a699bde..7e5ab7fde0 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -332,6 +332,13 @@ public class Control implements ApplicationListener, Loadable{ void createPlayer(){ player = Player.create(); player.name = Core.settings.getString("name"); + + String locale = Core.settings.getString("locale"); + if(locale.equals("default")){ + locale = Locale.getDefault().toString(); + } + player.locale = locale; + player.color.set(Core.settings.getInt("color-0")); if(mobile){ diff --git a/core/src/mindustry/core/GameState.java b/core/src/mindustry/core/GameState.java index abad7d3899..5d9ee3515e 100644 --- a/core/src/mindustry/core/GameState.java +++ b/core/src/mindustry/core/GameState.java @@ -36,6 +36,8 @@ public class GameState{ public GameStats stats = new GameStats(); /** Markers not linked to objectives. Controlled by world processors. */ public IntMap markers = new IntMap<>(); + /** Locale-specific string bundles of current map */ + public MapLocales mapLocales = new MapLocales(); /** Global attributes of the environment, calculated by weather. */ public Attributes envAttrs = new Attributes(); /** Team data. Gets reset every new game. */ diff --git a/core/src/mindustry/editor/MapEditorDialog.java b/core/src/mindustry/editor/MapEditorDialog.java index 0010346f9a..56ce52d8e1 100644 --- a/core/src/mindustry/editor/MapEditorDialog.java +++ b/core/src/mindustry/editor/MapEditorDialog.java @@ -24,6 +24,7 @@ import mindustry.gen.*; import mindustry.graphics.*; import mindustry.io.*; import mindustry.maps.*; +import mindustry.type.*; import mindustry.ui.*; import mindustry.ui.dialogs.*; import mindustry.world.*; diff --git a/core/src/mindustry/editor/MapInfoDialog.java b/core/src/mindustry/editor/MapInfoDialog.java index 2c7e4e46ab..86a217e82e 100644 --- a/core/src/mindustry/editor/MapInfoDialog.java +++ b/core/src/mindustry/editor/MapInfoDialog.java @@ -7,6 +7,7 @@ import mindustry.game.*; import mindustry.gen.*; import mindustry.io.*; import mindustry.maps.filters.*; +import mindustry.type.*; import mindustry.ui.*; import mindustry.ui.dialogs.*; @@ -17,6 +18,7 @@ public class MapInfoDialog extends BaseDialog{ private final MapGenerateDialog generate; private final CustomRulesDialog ruleInfo = new CustomRulesDialog(); private final MapObjectivesDialog objectives = new MapObjectivesDialog(); + private final MapLocalesDialog locales = new MapLocalesDialog(); public MapInfoDialog(){ super("@editor.mapinfo"); @@ -94,6 +96,19 @@ public class MapInfoDialog extends BaseDialog{ }); hide(); }).marginLeft(10f); + + r.row(); + + r.button("@editor.locales", Icon.fileText, style, () -> { + try{ + MapLocales res = JsonIO.read(MapLocales.class, editor.tags.get("locales", "{}")); + locales.show(res); + }catch(Throwable e){ + locales.show(new MapLocales()); + ui.showException(e); + } + hide(); + }).marginLeft(10f).width(0f).colspan(2).center().growX(); }).colspan(2).center(); name.change(); diff --git a/core/src/mindustry/editor/MapLocalesDialog.java b/core/src/mindustry/editor/MapLocalesDialog.java new file mode 100644 index 0000000000..0a8098fb29 --- /dev/null +++ b/core/src/mindustry/editor/MapLocalesDialog.java @@ -0,0 +1,758 @@ +package mindustry.editor; + +import arc.Core; +import arc.func.*; +import arc.graphics.*; +import arc.scene.style.*; +import arc.scene.ui.*; +import arc.scene.ui.layout.*; +import arc.scene.utils.*; +import arc.struct.*; +import mindustry.*; +import mindustry.ctype.*; +import mindustry.game.*; +import mindustry.gen.*; +import mindustry.graphics.*; +import mindustry.io.*; +import mindustry.type.*; +import mindustry.ui.*; +import mindustry.ui.dialogs.*; + +import static mindustry.Vars.*; + +public class MapLocalesDialog extends BaseDialog{ + /** Width of UI property card. */ + private static final float cardWidth = 400f; + /** Icons for use in map locales dialog. */ + private static final ContentType[] contentIcons = {ContentType.item, ContentType.block, ContentType.liquid, ContentType.status, ContentType.unit}; + + private MapLocales locales; + private MapLocales lastSaved; + private boolean saved = true; + private Table langs; + private Table main; + private Table propView; + private String selectedLocale; + + private boolean applytoall = true; + private boolean collapsed = false; + private String searchString = ""; + private boolean searchByValue = false; + private boolean showCorrect = true; + private boolean showMissing = true; + private boolean showSame = true; + + public MapLocalesDialog(){ + super("@editor.locales"); + + selectedLocale = MapLocales.currentLocale(); + + langs = new Table(Tex.button); + main = new Table(); + propView = new Table(); + + buttons.add("").uniform(); + + buttons.table(t -> { + t.defaults().pad(3).center(); + + t.button("@back", Icon.left, () -> { + if(!saved) ui.showConfirm("@editor.locales", "@editor.savechanges", () -> { + editor.tags.put("locales", JsonIO.write(locales)); + state.mapLocales = locales; + }); + hide(); + }).size(210f, 64f); + closeOnBack(() -> { + if(!saved) ui.showConfirm("@editor.locales", "@editor.savechanges", () -> { + editor.tags.put("locales", JsonIO.write(locales)); + state.mapLocales = locales; + }); + }); + + t.button("@editor.apply", Icon.ok, () -> { + editor.tags.put("locales", JsonIO.write(locales)); + state.mapLocales = locales; + lastSaved = locales.copy(); + saved = true; + }).size(210f, 64f).disabled(b -> saved); + + t.button("@edit", Icon.edit, this::editDialog).size(210f, 64f); + }).growX(); + + buttons.button("?", () -> ui.showInfo("@locales.info")).size(60f, 64f).uniform(); + + shown(this::setup); + } + + public void show(MapLocales locales){ + this.locales = locales; + lastSaved = locales.copy(); + saved = true; + show(); + } + + private void setup(){ + cont.clear(); + + buildTables(); + + cont.add(langs).left(); + + cont.table(t -> { + // search/collapse all/filter + t.table(a -> { + a.button(Icon.downOpen, Styles.emptyTogglei, () -> { + collapsed = !collapsed; + buildMain(); + }).update(b -> { + b.replaceImage(new Image(collapsed ? Icon.upOpen : Icon.downOpen)); + b.setChecked(collapsed); + }).size(35f); + + a.button(Icon.filter, Styles.emptyi, () -> filterDialog(this::buildMain)).padLeft(10f).size(35f); + + var field = a.field("", v -> { + searchString = v; + buildMain(); + }).update(f -> f.setText(searchString)).maxTextLength(64).padLeft(10f).width(250f).update(f -> f.setMessageText(searchByValue ? "@locales.searchvalue": "@locales.searchname")).get(); + + a.button(Icon.cancel, Styles.emptyi, () -> { + searchString = ""; + field.setText(""); + buildMain(); + }).padLeft(10f).size(35f); + }).row(); + + t.check("@locales.applytoall", applytoall, b -> applytoall = b).pad(10f).row(); + + t.add(main).center().grow().row(); + }).pad(10f).grow(); + + // property addition + cont.table(Tex.button, t -> { + TextField name = t.field("name", s -> {}).maxTextLength(64).fillX().padTop(10f).get(); + t.row(); + TextField value = t.area("text", s -> {}).maxTextLength(1000).fillX().height(140f).get(); + t.row(); + + t.button("@add", Icon.add, () -> { + if(applytoall){ + for(var locale : locales.values()){ + locale.put(name.getText(), value.getText()); + } + }else{ + locales.get(selectedLocale).put(name.getText(), value.getText()); + } + + saved = false; + buildMain(); + }).padTop(10f).size(400f, 50f).fillX().row(); + }).right(); + } + + private void buildTables(){ + if(!locales.containsKey(selectedLocale)){ + locales.put(selectedLocale, new StringMap()); + } + + buildLocalesTable(); + buildMain(); + } + + private void buildLocalesTable(){ + langs.clear(); + + langs.pane(p -> { + for(var loc : Vars.locales){ + String name = loc.toString(); + + if(locales.containsKey(name)){ + p.button(loc.getDisplayName(), Styles.flatTogglet, () -> { + if(name.equals(selectedLocale)) return; + + selectedLocale = name; + buildTables(); + }).update(b -> b.setChecked(selectedLocale.equals(name))).size(300f, 50f); + p.button(Icon.edit, Styles.flati, () -> localeEditDialog(name)).size(50f); + p.button(Icon.trash, Styles.flati, () -> ui.showConfirm("@confirm", "@locales.deletelocale", () -> { + locales.remove(name); + + selectedLocale = (locales.size != 0 ? locales.keys().next() : Core.settings.getString("locale")); + saved = false; + buildTables(); + })).size(50f).row(); + } + } + }).row(); + langs.button("@add", Icon.add, this::addLocaleDialog).padTop(10f).width(400f); + } + + private void buildMain(){ + main.clear(); + + StringMap props = locales.get(selectedLocale); + + main.image().color(Pal.gray).height(3f).growX().expandY().top().row(); + main.pane(p -> { + int cols = (Core.graphics.getWidth() - 380) / ((int)cardWidth + 10); + if(props.size == 0 || cols == 0){ + main.add("@empty").center().row(); + return; + } + p.defaults().top(); + + Table[] colTables = new Table[cols]; + for(var i = 0; i < cols; i++){ + colTables[i] = new Table(); + } + int i = 0; + + // To sort properties in alphabetic order + Seq keys = props.keys().toSeq().sort(); + + for(var key : keys){ + var comparsionString = (searchByValue ? props.get(key).toLowerCase() : key.toLowerCase()); + if(!searchString.isEmpty() && !comparsionString.contains(searchString.toLowerCase())) continue; + + PropertyStatus status = getPropertyStatus(key, props.get(key), selectedLocale, false); + if(status == PropertyStatus.correct && !showCorrect) continue; + if(status == PropertyStatus.missing && !showMissing) continue; + if(status == PropertyStatus.same && !showSame) continue; + + colTables[i].table(Tex.whitePane, t -> { + boolean[] shown = {!collapsed}; + String[] propKey = {key}; + String[] propValue = {props.get(key)}; + + // collapse button + t.button(Icon.downOpen, Styles.emptyTogglei, () -> shown[0] = !shown[0]).update(b -> { + b.replaceImage(new Image(shown[0] ? Icon.upOpen : Icon.downOpen)); + b.setChecked(shown[0]); + }).size(35f); + + // property name field + t.field(propKey[0], (f, c) -> c != '=' && c != ':', v -> { + if(props.containsKey(v)){ + t.setColor(Color.valueOf("f25555")); + return; + } + + if(applytoall){ + for(var bundle : locales.values()){ + if(!bundle.containsKey(v)){ + String value = bundle.get(propKey[0]); + if(value == null) continue; + + bundle.remove(propKey[0]); + bundle.put(v, value); + } + } + }else{ + if(!props.containsKey(v)){ + props.remove(propKey[0]); + props.put(v, propValue[0]); + } + } + + propKey[0] = v; + updateCard(t, v, propValue[0]); + saved = false; + }).maxTextLength(64).width(cardWidth - 125f); + + // remove button + t.button(Icon.trash, Styles.emptyi, () -> { + if(applytoall){ + for(var bundle : locales.values()){ + bundle.remove(propKey[0]); + } + }else{ + props.remove(propKey[0]); + } + saved = false; + buildMain(); + }).size(35f); + + // more actions + t.button(Icon.edit, Styles.emptyi, () -> propEditDialog(t, propKey[0], propValue[0])).size(35f).row(); + + // property value area + t.collapser(c -> c.area(propValue[0], v -> { + props.put(propKey[0], v); + updateCard(t, propKey[0], v); + saved = false; + }).maxTextLength(1000).height(140f).update(a -> { + propValue[0] = props.get(propKey[0]); + a.setText(props.get(propKey[0])); + }).growX(), () -> shown[0]).colspan(4).growX(); + + updateCard(t, propKey[0], propValue[0]); + }).top().width(cardWidth).pad(5f).row(); + + i = ++i % cols; + } + + if(!colTables[0].hasChildren()){ + main.add("@empty").center().row(); + }else{ + p.add(colTables); + } + }).growX().row(); + main.image().color(Pal.gray).height(3f).growX().expandY().bottom().row(); + } + + private void updateCard(Table table, String propKey, String propValue){ + updateCard(table, propKey, propValue, selectedLocale, false); + } + + private void updateCard(Table table, String propKey, String propValue, String locale, boolean viewCard){ + switch(getPropertyStatus(propKey, propValue, locale, viewCard)){ + case missing -> table.setColor(Pal.accent); + case same -> table.setColor(Pal.techBlue); + case correct -> table.setColor(Pal.gray); + } + } + + // Property statuses for main dialog and property view dialog are a bit different + private PropertyStatus getPropertyStatus(String propKey, String propValue, String locale, boolean forView){ + if(forView && propValue == null) return PropertyStatus.missing; + + for(var bundle : locales.entries()){ + if(!forView && bundle.key.equals(selectedLocale)) continue; + if(forView && bundle.key.equals(locale)) continue; + + StringMap props = bundle.value; + + if(!props.containsKey(propKey)){ + if(!forView) return PropertyStatus.missing; + }else{ + if(props.get(propKey).equals(propValue)){ + return PropertyStatus.same; + } + } + } + + return PropertyStatus.correct; + } + + private void addLocaleDialog(){ + BaseDialog dialog = new BaseDialog("@add"); + + dialog.cont.pane(t -> { + for(var loc : Vars.locales){ + String name = loc.toString(); + + if(!locales.containsKey(name)){ + t.button(loc.getDisplayName(), Styles.flatTogglet, () -> { + if(name.equals(selectedLocale)) return; + + locales.put(name, new StringMap()); + + selectedLocale = name; + saved = false; + buildTables(); + dialog.hide(); + }).update(b -> b.setChecked(selectedLocale.equals(name))).size(400f, 50f).row(); + } + } + }); + + dialog.addCloseButton(); + dialog.show(); + } + + private void propEditDialog(Table card, String key, String value){ + BaseDialog dialog = new BaseDialog("@edit"); + + dialog.cont.pane(p -> { + p.margin(10f); + p.table(Tex.button, t -> { + t.defaults().size(450f, 60f).left(); + + t.button("@locales.addtoother", Icon.add, Styles.flatt, () -> { + for(var bundle : locales.values()){ + if(!bundle.containsKey(key)){ + bundle.put(key, value); + } + } + + saved = false; + updateCard(card, key, value); + dialog.hide(); + }).marginLeft(12f).row(); + + t.button("@locales.viewproperty", Icon.zoom, Styles.flatt, () -> { + viewPropertyDialog(key); + dialog.hide(); + }).marginLeft(12f).row(); + + t.button("@locales.addicon", Icon.image, Styles.flatt, () -> { + addIconDialog(res -> { + locales.get(selectedLocale).put(key, value + res); + saved = false; + }); + dialog.hide(); + }).marginLeft(12f).row(); + + t.button("@locales.rollback", Icon.undo, Styles.flatt, () -> { + locales.get(selectedLocale).put(key, lastSaved.get(selectedLocale).get(key)); + buildTables(); + dialog.hide(); + }).disabled(b -> { + if(!lastSaved.containsKey(selectedLocale)) return true; + StringMap savedMap = lastSaved.get(selectedLocale); + return !savedMap.containsKey(key) || savedMap.get(key).equals(locales.get(selectedLocale).get(key)); + }).marginLeft(12f).row(); + }); + }); + + dialog.addCloseButton(); + dialog.show(); + } + + private void localeEditDialog(String locale){ + BaseDialog dialog = new BaseDialog("@edit"); + + dialog.cont.pane(p -> { + p.margin(10f); + p.table(Tex.button, t -> { + t.defaults().size(350f, 60f).left(); + + t.button("@waves.copy", Icon.copy, Styles.flatt, () -> { + Core.app.setClipboardText(writeLocale(locale)); + ui.showInfoFade("@copied"); + dialog.hide(); + }).marginLeft(12f).row(); + t.button("@waves.load", Icon.download, Styles.flatt, () -> { + locales.put(locale, readLocale(Core.app.getClipboardText())); + buildTables(); + saved = false; + dialog.hide(); + }).disabled(Core.app.getClipboardText() == null).marginLeft(12f).row(); + }); + }); + + dialog.addCloseButton(); + dialog.show(); + } + + private void editDialog(){ + BaseDialog dialog = new BaseDialog("@edit"); + + dialog.cont.pane(p -> { + p.margin(10f); + p.table(Tex.button, t -> { + t.defaults().size(450f, 60f).left(); + + t.button("@waves.copy", Icon.copy, Styles.flatt, () -> { + Core.app.setClipboardText(writeBundles()); + ui.showInfoFade("@copied"); + dialog.hide(); + }).marginLeft(12f).row(); + t.button("@waves.load", Icon.download, Styles.flatt, () -> { + locales = readBundles(Core.app.getClipboardText()); + buildTables(); + saved = false; + dialog.hide(); + }).disabled(Core.app.getClipboardText() == null).marginLeft(12f).row(); + t.button("@locales.rollback", Icon.undo, Styles.flatt, () -> { + locales = lastSaved.copy(); + saved = true; + buildTables(); + dialog.hide(); + }).disabled(b -> saved).marginLeft(12f).row(); + }); + }); + + dialog.addCloseButton(); + dialog.show(); + } + + private void viewPropertyDialog(String key){ + BaseDialog dialog = new BaseDialog(Core.bundle.format("locales.viewing", key)); + + dialog.cont.table(t -> { + t.button(Icon.filter, Styles.emptyi, () -> filterDialog(() -> buildPropView(key))).size(35f); + + var field = t.field(searchString, v -> { + searchString = v; + buildPropView(key); + }).update(f -> f.setText(searchString)).maxTextLength(64).padLeft(10f).width(250f).update(f -> f.setMessageText(searchByValue ? "@locales.searchvalue" : "@locales.searchlocale")).get(); + + t.button(Icon.cancel, Styles.emptyi, () -> { + searchString = ""; + field.setText(""); + buildPropView(key); + }).padLeft(10f).size(35f); + }).row(); + + buildPropView(key); + dialog.cont.add(propView).grow().center().row(); + + dialog.addCloseButton(); + dialog.closeOnBack(); + dialog.hidden(this::buildMain); + + dialog.show(); + } + + private void buildPropView(String key){ + propView.clear(); + + propView.image().color(Pal.gray).height(3f).fillX().top().row(); + propView.pane(p -> { + int cols = (Core.graphics.getWidth() - 100) / ((int)cardWidth + 10); + if(cols == 0){ + propView.add("@empty").center().row(); + return; + } + p.defaults().top(); + + Table[] colTables = new Table[cols]; + for(var i = 0; i < cols; i++){ + colTables[i] = new Table(); + } + int i = 0; + + for(var loc : Vars.locales){ + String name = loc.toString(); + if(!locales.containsKey(name)) continue; + + PropertyStatus status = getPropertyStatus(key, locales.get(name).get(key), name, true); + if(status == PropertyStatus.correct && !showCorrect) continue; + if(status == PropertyStatus.missing && !showMissing) continue; + if(status == PropertyStatus.same && !showSame) continue; + + if(status != PropertyStatus.missing){ + var comparsionString = (searchByValue ? locales.get(name).get(key).toLowerCase() : loc.getDisplayName().toLowerCase()); + if(!searchString.isEmpty() && !comparsionString.contains(searchString.toLowerCase())) continue; + } + + colTables[i].table(Tex.whitePane, t -> { + t.add(loc.getDisplayName()).left().color(Pal.accent).row(); + t.image().color(Pal.accent).fillX().row(); + + if(status == PropertyStatus.missing){ + t.table(b -> + b.button("@add", Icon.add, () -> { + locales.get(name).put(key, "moai"); + + t.getCells().get(2).clearElement(); + t.getCells().remove(2); + + t.area(locales.get(name).get(key), v -> { + locales.get(name).put(key, v); + saved = false; + }).maxTextLength(1000).height(140f).growX().row(); + }).size(160f, 50f)).height(140f).growX().row(); + }else{ + t.area(locales.get(name).get(key), v -> { + locales.get(name).put(key, v); + saved = false; + }).maxTextLength(1000).height(140f).growX().row(); + } + }).update(t -> updateCard(t, key, locales.get(name).get(key), name, true)).top().width(cardWidth).pad(5f).row(); + + i = ++i % cols; + } + + if(!colTables[0].hasChildren()){ + propView.add("@empty").center().row(); + }else{ + p.add(colTables); + } + }).grow().row(); + propView.image().color(Pal.gray).height(3f).fillX().bottom().row(); + } + + private void filterDialog(Runnable hidden){ + BaseDialog dialog = new BaseDialog("@locales.filter"); + + dialog.cont.table(t -> { + t.add("@search").row(); + t.table(b -> { + b.button("@locales.byname", Styles.togglet, () -> searchByValue = false).size(300f, 50f).checked(v -> !searchByValue); + b.button("@locales.byvalue", Styles.togglet, () -> searchByValue = true).padLeft(10f).size(300f, 50f).checked(v -> searchByValue); + }).padTop(5f); + }).row(); + + dialog.cont.table(Tex.whitePane, t -> + t.button("@locales.showcorrect", Icon.ok, Styles.nonet, () -> showCorrect = !showCorrect).update(b -> { + ((Image)b.getChildren().get(1)).setDrawable(showCorrect ? Icon.ok : Icon.cancel); + b.setChecked(showCorrect); + }).grow().pad(15f)).size(450f, 100f).color(Pal.gray).padTop(50f); + + dialog.cont.row(); + + dialog.cont.table(Tex.whitePane, t -> + t.button("@locales.showmissing", Icon.ok, Styles.nonet, () -> showMissing = !showMissing).update(b -> { + ((Image)b.getChildren().get(1)).setDrawable(showMissing ? Icon.ok : Icon.cancel); + b.setChecked(showMissing); + }).grow().pad(15f)).size(450f, 100f).color(Pal.accent).padTop(50f); + + dialog.cont.row(); + dialog.cont.table(Tex.whitePane, t -> + t.button("@locales.showsame", Icon.ok, Styles.nonet, () -> showSame = !showSame).update(b -> { + ((Image)b.getChildren().get(1)).setDrawable(showSame ? Icon.ok : Icon.cancel); + b.setChecked(showSame); + }).grow().pad(15f)).size(450f, 100f).color(Pal.techBlue).padTop(50f); + + dialog.buttons.button("@back", Icon.left, () -> { + hidden.run(); + dialog.hide(); + }).size(210f, 64f); + dialog.closeOnBack(hidden); + + dialog.show(); + } + + private void addIconDialog(Cons cons){ + BaseDialog dialog = new BaseDialog("@locales.addicon"); + + Table icons = new Table(); + TextField search = Elem.newField("", v -> iconsTable(icons, v.replace(" ", "").toLowerCase(), dialog, cons)); + search.setMessageText("@search"); + + dialog.cont.table(t -> { + t.add(search).maxTextLength(64).padLeft(10f).width(250f); + + t.button(Icon.cancel, Styles.emptyi, () -> { + search.setText(""); + iconsTable(icons, "", dialog, cons); + }).padLeft(10f).size(35f); + }).row(); + + dialog.cont.pane(icons).scrollX(false); + dialog.resized(true, () -> iconsTable(icons, search.getText().replace(" ", "").toLowerCase(), dialog, cons)); + + dialog.addCloseButton(); + dialog.closeOnBack(); + dialog.setFillParent(true); + dialog.show(); + } + + private void iconsTable(Table table, String search, Dialog dialog, Cons cons){ + table.clear(); + + table.marginRight(19f).marginLeft(12f); + table.defaults().size(48f); + + int cols = (int)Math.min(20, Core.graphics.getWidth() / Scl.scl(52f)); + + int i = 0; + + var codes = new ObjectIntMap<>(Iconc.codes); + + for(var name : codes.keys()){ + if(!name.toLowerCase().contains(search)) codes.remove(name); + } + + if(codes.size > 0) table.image().colspan(cols).growX().width(-1f).height(3f).color(Pal.accent).row(); + + for(var icon : codes){ + String res = (char)icon.value + ""; + + table.button(Icon.icons.get(icon.key), Styles.flati, iconMed, () -> { + cons.get(res); + dialog.hide(); + }).tooltip(icon.key); + + if(++i % cols == 0) table.row(); + } + + for(ContentType ctype : contentIcons){ + var all = content.getBy(ctype).as().select(u -> u.localizedName.replace(" ", "").toLowerCase().contains(search) && u.uiIcon.found()); + + table.row(); + if(all.size > 0) table.image().colspan(cols).growX().width(-1f).height(3f).color(Pal.accent).row(); + + i = 0; + for(UnlockableContent u : all){ + table.button(new TextureRegionDrawable(u.uiIcon), Styles.flati, iconMed, () -> { + cons.get(u.emoji() + ""); + dialog.hide(); + }).tooltip(u.localizedName); + + if(++i % cols == 0) table.row(); + } + } + + var teams = new Seq<>(Team.baseTeams); + teams = teams.select(u -> u.localized().toLowerCase().contains(search) && Core.atlas.has("team-" + u.name)); + + table.row(); + if(teams.size > 0) table.image().colspan(cols).growX().width(-1f).height(3f).color(Pal.accent).row(); + + for(Team team : teams){ + var region = Core.atlas.find("team-" + team.name); + + table.button(new TextureRegionDrawable(region), Styles.flati, iconMed, () -> { + cons.get(team.emoji); + dialog.hide(); + }).tooltip(team.localized()); + + if(++i % cols == 0) table.row(); + } + } + + private String writeBundles(){ + StringBuilder data = new StringBuilder(); + + for(var locale : locales.keys()){ + data.append(locale).append(":\n").append(writeLocale(locale)); + } + + return data.toString(); + } + + private String writeLocale(String key){ + StringBuilder data = new StringBuilder(); + + if(!locales.containsKey(key)) return ""; + + for(var prop : locales.get(key).entries()){ + data.append(prop.key).append(" = ").append(prop.value).append("\n"); + } + + return data.toString(); + } + + private MapLocales readBundles(String data){ + MapLocales bundles = new MapLocales(); + + String currentLocale = ""; + + for(var line : data.split("\\r?\\n|\\r")){ + if(line.endsWith(":") && !line.contains("=")){ + currentLocale = line.substring(0, line.length() - 1); + bundles.put(currentLocale, new StringMap()); + }else{ + int sepIndex = line.indexOf(" = "); + if(sepIndex != -1 && !currentLocale.isEmpty()){ + bundles.get(currentLocale).put(line.substring(0, sepIndex), line.substring(sepIndex + 3)); + } + } + } + + return bundles; + } + + private StringMap readLocale(String data){ + StringMap map = new StringMap(); + + for(var line : data.split("\\r?\\n|\\r")){ + int sepIndex = line.indexOf(" = "); + if(sepIndex != -1){ + map.put(line.substring(0, sepIndex), line.substring(sepIndex + 3)); + } + } + + return map; + } + + private enum PropertyStatus{ + correct, + missing, + same + } +} diff --git a/core/src/mindustry/game/MapObjectives.java b/core/src/mindustry/game/MapObjectives.java index cef72e7971..264375ae1d 100644 --- a/core/src/mindustry/game/MapObjectives.java +++ b/core/src/mindustry/game/MapObjectives.java @@ -483,6 +483,14 @@ public class MapObjectives implements Iterable, Eachable, Eachable, Eachable namesToIds = new ObjectIntMap<>(); private Seq vars = new Seq<>(Var.class); @@ -65,6 +65,7 @@ public class GlobalVars{ varClientUnit = put("@clientUnit", null, true); varClientName = put("@clientName", null, true); varClientTeam = put("@clientTeam", 0, true); + varClientMobile = put("@clientMobile", 0, true); //special enums put("@ctrlProcessor", ctrlProcessor); @@ -168,6 +169,7 @@ public class GlobalVars{ vars.items[varClientUnit].objval = player.unit(); vars.items[varClientName].objval = player.name(); vars.items[varClientTeam].numval = player.team().id; + vars.items[varClientMobile].numval = mobile ? 1 : 0; } } @@ -183,14 +185,18 @@ public class GlobalVars{ return arr != null && content.id >= 0 && content.id < arr.length ? arr[content.id] : -1; } - /** @return a constant ID > 0 if there is a constant with this name, otherwise -1. - * Attempt to get privileged variable id from non-privileged logic executor returns null constant id. */ + /** + * @return a constant ID > 0 if there is a constant with this name, otherwise -1. + * Attempt to get privileged variable id from non-privileged logic executor returns null constant id. + */ public int get(String name){ return namesToIds.get(name, -1); } - /** @return a constant variable by ID. ID is not bound checked and must be positive. - * Attempt to get privileged variable from non-privileged logic executor returns null constant */ + /** + * @return a constant variable by ID. ID is not bound checked and must be positive. + * Attempt to get privileged variable from non-privileged logic executor returns null constant + */ public Var get(int id, boolean privileged){ if(!privileged && privilegedIds.contains(id)) return vars.get(namesToIds.get("null")); return vars.items[id]; diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index 643efb387f..253d452b0c 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -1099,6 +1099,41 @@ public class LExecutor{ } } + public static class FormatI implements LInstruction{ + public int value; + + public FormatI(int value){ + this.value = value; + } + + FormatI(){} + + @Override + public void run(LExecutor exec){ + + if(exec.textBuffer.length() >= maxTextBuffer) return; + + int placeholderIndex = exec.textBuffer.indexOf("@"); + + if(placeholderIndex == -1) return; + + //this should avoid any garbage allocation + Var v = exec.var(value); + if(v.isobj && value != 0){ + String strValue = PrintI.toString(v.objval); + + exec.textBuffer.replace(placeholderIndex, placeholderIndex + 1, strValue); + }else{ + //display integer version when possible + if(Math.abs(v.numval - (long)v.numval) < 0.00001){ + exec.textBuffer.replace(placeholderIndex, placeholderIndex + 1, (long)v.numval + ""); + }else{ + exec.textBuffer.replace(placeholderIndex, placeholderIndex + 1, v.numval + ""); + } + } + } + } + public static class PrintFlushI implements LInstruction{ public int target; @@ -1996,5 +2031,39 @@ public class LExecutor{ } } + public static class LocalePrintI implements LInstruction{ + public int name; + + public LocalePrintI(int name){ + this.name = name; + } + + public LocalePrintI(){ + } + + @Override + public void run(LExecutor exec){ + if(exec.textBuffer.length() >= maxTextBuffer) return; + + //this should avoid any garbage allocation + Var v = exec.var(name); + if(v.isobj){ + String name = PrintI.toString(v.objval); + + String strValue; + + if(mobile){ + strValue = state.mapLocales.containsProperty(name + ".mobile") ? + state.mapLocales.getProperty(name + ".mobile") : + state.mapLocales.getProperty(name); + }else{ + strValue = state.mapLocales.getProperty(name); + } + + exec.textBuffer.append(strValue); + } + } + } + //endregion } diff --git a/core/src/mindustry/logic/LStatements.java b/core/src/mindustry/logic/LStatements.java index fe3308212a..1a9e0473d8 100644 --- a/core/src/mindustry/logic/LStatements.java +++ b/core/src/mindustry/logic/LStatements.java @@ -301,6 +301,27 @@ public class LStatements{ } } + @RegisterStatement("format") + public static class FormatStatement extends LStatement{ + public String value = "\"frog\""; + + @Override + public void build(Table table){ + field(table, value, str -> value = str).width(0f).growX().padRight(3); + } + + @Override + public LInstruction build(LAssembler builder){ + return new FormatI(builder.var(value)); + } + + + @Override + public LCategory category(){ + return LCategory.io; + } + } + @RegisterStatement("drawflush") public static class DrawFlushStatement extends LStatement{ public String target = "display1"; @@ -2055,4 +2076,29 @@ public class LStatements{ return LCategory.world; } } + + @RegisterStatement("localeprint") + public static class LocalePrintStatement extends LStatement{ + public String value = "\"name\""; + + @Override + public void build(Table table){ + field(table, value, str -> value = str).width(0f).growX().padRight(3); + } + + @Override + public boolean privileged(){ + return true; + } + + @Override + public LInstruction build(LAssembler builder){ + return new LocalePrintI(builder.var(value)); + } + + @Override + public LCategory category(){ + return LCategory.world; + } + } } diff --git a/core/src/mindustry/net/NetworkIO.java b/core/src/mindustry/net/NetworkIO.java index fdc223184c..48599c6b96 100644 --- a/core/src/mindustry/net/NetworkIO.java +++ b/core/src/mindustry/net/NetworkIO.java @@ -11,6 +11,7 @@ import mindustry.io.*; import mindustry.logic.*; import mindustry.maps.Map; import mindustry.net.Administration.*; +import mindustry.type.*; import java.io.*; import java.nio.*; @@ -36,6 +37,7 @@ public class NetworkIO{ } stream.writeUTF(JsonIO.write(state.rules)); + stream.writeUTF(JsonIO.write(state.mapLocales)); SaveIO.getSaveWriter().writeStringMap(stream, state.map.tags); stream.writeInt(state.wave); @@ -62,6 +64,7 @@ public class NetworkIO{ try(DataInputStream stream = new DataInputStream(is)){ Time.clear(); state.rules = JsonIO.read(Rules.class, stream.readUTF()); + state.mapLocales = JsonIO.read(MapLocales.class, stream.readUTF()); state.map = new Map(SaveIO.getSaveWriter().readStringMap(stream)); state.wave = stream.readInt(); diff --git a/core/src/mindustry/type/MapLocales.java b/core/src/mindustry/type/MapLocales.java new file mode 100644 index 0000000000..88dc81237a --- /dev/null +++ b/core/src/mindustry/type/MapLocales.java @@ -0,0 +1,97 @@ +package mindustry.type; + +import arc.struct.*; +import arc.util.serialization.*; +import arc.util.serialization.Json.*; + +import java.util.*; + +import static arc.Core.*; + +/** Class for storing map-specific locale bundles */ +public class MapLocales extends ObjectMap implements JsonSerializable{ + + @Override + public void write(Json json){ + for(var entry : entries()){ + json.writeValue(entry.key, entry.value, StringMap.class, String.class); + } + } + + @Override + public void read(Json json, JsonValue jsonData){ + for(JsonValue value : jsonData){ + put(value.name, json.readValue(StringMap.class, value)); + } + } + + @Override + public MapLocales copy(){ + MapLocales out = new MapLocales(); + + for(var entry : this.entries()){ + StringMap map = new StringMap(); + map.putAll(entry.value); + out.put(entry.key, map); + } + + return out; + } + + public String getProperty(String key){ + if(!containsProperty(currentLocale(), key)){ + if(containsProperty("en", key)) return get("en").get(key); + return "???" + key + "???"; + } + return get(currentLocale()).get(key); + } + + private String getProperty(String locale, String key){ + if(!containsProperty(locale, key)){ + if(containsProperty("en", key)) return get("en").get(key); + return "???" + key + "???"; + } + return get(locale).get(key); + } + + public boolean containsProperty(String key){ + return containsProperty(currentLocale(), key) || containsProperty("en", key); + } + + private boolean containsProperty(String locale, String key){ + if(!containsKey(locale)) return false; + return get(locale).containsKey(key); + } + + public String getFormatted(String key, Object... args){ + StringBuilder result = new StringBuilder(); + if(!containsProperty(currentLocale(), key)){ + if(containsProperty("en", key)){ + result.append(getProperty("en", key)); + }else{ + return "???" + key + "???"; + } + }else{ + result.append(getProperty(currentLocale(), key)); + } + + for(var arg : args){ + int placeholderIndex = result.indexOf("@"); + + if(placeholderIndex == -1) break; + + result.replace(placeholderIndex, placeholderIndex + 1, arg.toString()); + } + + return result.toString(); + } + + // To handle default locale properly + public static String currentLocale(){ + String locale = settings.getString("locale"); + if(locale.equals("default")){ + locale = Locale.getDefault().getLanguage(); + } + return locale; + } +} diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index e3112cf3b6..4c54569b4d 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -50,7 +50,7 @@ public class CustomRulesDialog extends BaseDialog{ t.defaults().size(280f, 64f).pad(2f); t.button("@waves.copy", Icon.copy, style, () -> { - ui.showInfoFade("@waves.copied"); + ui.showInfoFade("@copied"); //hack: don't write the spawns, they just waste space var spawns = rules.spawns; diff --git a/core/src/mindustry/ui/dialogs/LanguageDialog.java b/core/src/mindustry/ui/dialogs/LanguageDialog.java index 495ae5e2ce..eb1b4baf50 100644 --- a/core/src/mindustry/ui/dialogs/LanguageDialog.java +++ b/core/src/mindustry/ui/dialogs/LanguageDialog.java @@ -5,6 +5,7 @@ import arc.scene.ui.*; import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; +import mindustry.type.*; import mindustry.ui.*; import java.util.*; From 54cf7812f0c9e442c150551dadb0d78760fed993 Mon Sep 17 00:00:00 2001 From: Github Actions Date: Sat, 2 Dec 2023 02:14:51 +0000 Subject: [PATCH 15/20] Automatic bundle update --- core/assets/bundles/bundle_be.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_bg.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_ca.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_cs.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_da.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_de.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_es.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_et.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_eu.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_fi.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_fil.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_fr.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_hu.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_id_ID.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_it.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_ja.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_ko.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_lt.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_nl.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_nl_BE.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_pl.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_pt_BR.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_pt_PT.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_ro.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_ru.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_sr.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_sv.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_th.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_tk.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_tr.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_uk_UA.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_vi.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_zh_CN.properties | 22 +++++++++++++++++++++ core/assets/bundles/bundle_zh_TW.properties | 22 +++++++++++++++++++++ 34 files changed, 748 insertions(+) diff --git a/core/assets/bundles/bundle_be.properties b/core/assets/bundles/bundle_be.properties index bb595100d0..35af3f2e99 100644 --- a/core/assets/bundles/bundle_be.properties +++ b/core/assets/bundles/bundle_be.properties @@ -433,6 +433,7 @@ editor.waves = Хвалі: editor.rules = Правілы: editor.generation = Генерацыя: editor.objectives = Мэты +editor.locales = Locale Bundles editor.ingame = Рэдагаваць ў гульні editor.playtest = Тэставаць editor.publish.workshop = Апублікаваць у майстэрні @@ -499,6 +500,7 @@ editor.errorlegacy = Гэтая карта занадта старая і вык editor.errornot = Гэта не файл карты. editor.errorheader = Гэты файл карты ня дзейнічае або пашкоджаны. editor.errorname = Карта не мае імя. Можа быць, Вы спрабуеце загрузіць захаванне? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Абнавіць editor.randomize = Выпадкова editor.moveup = Рухацца Уверх @@ -510,6 +512,7 @@ editor.sectorgenerate = Згенераваць Сектар editor.resize = Змяніць \nразмер editor.loadmap = Загрузіць \nкарту editor.savemap = Захаваць \nкарту +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Захавана! editor.save.noname = У Вашай карты няма імя! Назавіце яе ў меню «Інфармацыя аб карце». editor.save.overwrite = Ваша карта не можа быць запісана па-над убудаванай карты! Калі ласка, увядзіце іншую назву ў меню «Інфармацыя аб карце» @@ -594,6 +597,23 @@ filter.option.floor2 = Другая паверхню filter.option.threshold2 = Другасны гранічны парог filter.option.radius = Радыус filter.option.percentile = Процентль +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Шырыня: height = Вышыня: @@ -2216,6 +2236,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Read a number from a linked memory cell. lst.write = Write a number to a linked memory cell. lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. lst.drawflush = Flush queued [accent]Draw[] operations to a display. lst.printflush = Flush queued [accent]Print[] operations to a message block. @@ -2253,6 +2274,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Unit building logic is not allowed here. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.shoot = Shoot at a position. diff --git a/core/assets/bundles/bundle_bg.properties b/core/assets/bundles/bundle_bg.properties index e4c21ee198..759c7bd4b8 100644 --- a/core/assets/bundles/bundle_bg.properties +++ b/core/assets/bundles/bundle_bg.properties @@ -438,6 +438,7 @@ editor.waves = Вълни: editor.rules = Правила: editor.generation = Генериране: editor.objectives = Objectives +editor.locales = Locale Bundles editor.ingame = Редактирай в игра editor.playtest = Playtest editor.publish.workshop = Публикувай в Работилницата @@ -505,6 +506,7 @@ editor.errorlegacy = Тази карта е твърде стара, играт editor.errornot = Този файл не е карта. editor.errorheader = Този файл с карта е повреден или невалиден. editor.errorname = Картата няма зададено име. Да не се опитвате да заредите игра? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Обнови editor.randomize = Случайно editor.moveup = Move Up @@ -516,6 +518,7 @@ editor.sectorgenerate = Sector Generate editor.resize = Смени размера editor.loadmap = Зареди Карта editor.savemap = Запиши Карта +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Записано! editor.save.noname = Картата няма име! Задайте такова в 'Информация за картата' от менюто. editor.save.overwrite = Съществува стандартна карта с такова име! Изберете различно име от 'Информация за картата' от менюто. @@ -600,6 +603,23 @@ filter.option.floor2 = Втори под filter.option.threshold2 = Втори праг filter.option.radius = Радиус filter.option.percentile = Перцентил +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Дължина: height = Височина: @@ -2231,6 +2251,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Прочети число от свързано хранилище за памет. lst.write = Запиши число в свързано хранилище за памет. lst.print = Добави текст в буфера за изписване.\nНе визуализира нищо докато не използвате [accent]Print Flush[]. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Добавя операция в буфера за изображение.\nНе показва нищо докато не използвате [accent]Draw Flush[]. lst.drawflush = Изпълнява операции, поискани с команда [accent]Draw[] върху посочен дисплей. lst.printflush = Извежда текст натрупан с [accent]Print[] върху посочен блок за съобщение. @@ -2268,6 +2289,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Действия за строене на единици не са позволени тук. diff --git a/core/assets/bundles/bundle_ca.properties b/core/assets/bundles/bundle_ca.properties index d334a07bb2..925d9dfd54 100644 --- a/core/assets/bundles/bundle_ca.properties +++ b/core/assets/bundles/bundle_ca.properties @@ -438,6 +438,7 @@ editor.waves = Onades editor.rules = Regles editor.generation = Generació editor.objectives = Objectius +editor.locales = Locale Bundles editor.ingame = Edita des de la partida editor.playtest = Prova el mapa editor.publish.workshop = Publica al Workshop @@ -505,6 +506,7 @@ editor.errorlegacy = Aquest mapa és massa antic i fa servir un format obsolet. editor.errornot = No és un fitxer de mapa. editor.errorheader = Aquest fitxer de mapa no és vàlid o està corromput. editor.errorname = No s’ha definit el nom del mapa. Esteu intentant carregar una partida desada? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Actualitza editor.randomize = Assigna a l’atzar editor.moveup = Mou amunt @@ -516,6 +518,7 @@ editor.sectorgenerate = Generació del sector editor.resize = Canvia la mida editor.loadmap = Carrega un mapa editor.savemap = Desa el mapa +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = S’ha desat. editor.save.noname = El mapa no té nom! Trieu-ne un des del menú «Informació del mapa». editor.save.overwrite = El vostre mapa sobreescriu un mapa incorporat al joc! Trieu un nom diferent des del menú «Informació del mapa». @@ -603,6 +606,23 @@ filter.option.floor2 = Terra secundari filter.option.threshold2 = Llindar secundari filter.option.radius = Radi filter.option.percentile = Percentil +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Amplada: height = Alçada: @@ -2241,6 +2261,7 @@ unit.emanate.description = Construeix estructures per defensar el nucli Acròpol lst.read = Llegeix un nombre des d’una cel·la de memòria connectada. lst.write = Escriu un nombre en una cel·la de memòria connectada. lst.print = Afegeix un text a la cua d’impressió.\nEl text no es mostrarà fins que s’apliqui «[accent]Print Flush[]». +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Afegeix una instrucció de dibuix a la cua corresponent.\nEl resultat no es mostrarà fins que s’apliqui «[accent]Draw Flush[]». lst.drawflush = Executa les operacions de la cua de dibuix al monitor lògic. lst.printflush = Executa les operacions de la cua d’impressió al monitor lògic. @@ -2278,6 +2299,7 @@ lst.effect = Crea un efecte de particula. lst.sync = Sincronitza una variable a través de la xarxa.\nS’invoca com a molt 10 vegades per segon. lst.makemarker = Crea una marca lògica al món.\nS’ha de donar un ID per a identificar-la.\nEs poden establir fins a 20.000 marcadors per món. lst.setmarker = Estableix una propietat per a la marca.\nL’ID que es faci servir ha de ser el mateix que el de la instrucció de crear la marca. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Aquí no es permet construir blocs de tipus lògic. diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index 573074df31..16d1683b3d 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -438,6 +438,7 @@ editor.waves = Vln: editor.rules = Pravidla: editor.generation = Generace: editor.objectives = Úkoly: +editor.locales = Locale Bundles editor.ingame = Upravit ve hře editor.playtest = Playtest editor.publish.workshop = Publikovat do Workshopu na Steamu @@ -505,6 +506,7 @@ editor.errorlegacy = Tato mapa je příliš stará a používá formát mapy, kt editor.errornot = Toto není soubor mapy. editor.errorheader = Tento soubor mapy je buď neplatný nebo poškozen. editor.errorname = Mapa nemá definované jméno. Nesnažíš se náhodou nahrát soubor s uložením hry? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Aktualizovat editor.randomize = Náhodně vygenerovat editor.moveup = Pohyb Nahoru @@ -516,6 +518,7 @@ editor.sectorgenerate = Generovat Sektor editor.resize = Změnit velikost editor.loadmap = Načíst mapu editor.savemap = Uložit mapu +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Uloženo! editor.save.noname = Tvoje mapa nemá jméno! Jméno nastavíš v položce nabídky "Informace o mapě". editor.save.overwrite = Tvoje mapa přepisuje vestavěnou mapu! Nastav jí radši jiné jméno v položce nabídky "Informace o mapě". @@ -601,6 +604,23 @@ filter.option.floor2 = Druhotný povrch filter.option.threshold2 = Druhotný práh filter.option.radius = Poloměr filter.option.percentile = Percentil +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Šířka: height = Výška: @@ -2235,6 +2255,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Přečte číslo z připojené paměti. lst.write = Zapíše číslo do připojené paměti. lst.print = Přídá text do vypisovacího buferu.\nNezobrazí nic dokud [accent]Print Flush[] je použít. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Přídá operaci do vykreslovacího buferu.\nNezobrazí nic dokud [accent]Draw Flush[] je použít. lst.drawflush = Provede všechny [accent]Draw[] operace na zobrazovač logiky. Pak vyčistí vykreslovací bufer. lst.printflush = Provede všechny [accent]Print[] operace do zprávy. Pak vyčistí vypisovací bufer. @@ -2272,6 +2293,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Stavba budov pomoci jednotek kontrolované procesorem neni povolené. diff --git a/core/assets/bundles/bundle_da.properties b/core/assets/bundles/bundle_da.properties index 433f80e1a0..0e2c8d5a67 100644 --- a/core/assets/bundles/bundle_da.properties +++ b/core/assets/bundles/bundle_da.properties @@ -434,6 +434,7 @@ editor.waves = Bølge: editor.rules = Regler: editor.generation = Generering: editor.objectives = Objectives +editor.locales = Locale Bundles editor.ingame = Ændr i spil editor.playtest = Playtest editor.publish.workshop = Publicer på Workshop @@ -500,6 +501,7 @@ editor.errorlegacy = Denne bane er forældet, og bruger et eftermægle-format, d editor.errornot = Dette er ikke en bane-fil. editor.errorheader = Denne bane er enten ugyldig eller i stykker. editor.errorname = Banen har ikke noget navn. Forsøger du at gemme filen? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Opdater editor.randomize = Tilfældiggør editor.moveup = Move Up @@ -511,6 +513,7 @@ editor.sectorgenerate = Sector Generate editor.resize = Omskaler editor.loadmap = Indlæs bane editor.savemap = Gem bane +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Gemt! editor.save.noname = Din bane har intet navn! Giv den et navn under 'bane-information'-menuen. editor.save.overwrite = Din bane overskriver en indbygget bane! Vælge et andet navn under 'bane-information'-menuen. @@ -595,6 +598,23 @@ filter.option.floor2 = Sekundært gulv filter.option.threshold2 = Sekundær terskel filter.option.radius = Radius filter.option.percentile = Percentil +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Bredde: height = Højde: @@ -2216,6 +2236,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Read a number from a linked memory cell. lst.write = Write a number to a linked memory cell. lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. lst.drawflush = Flush queued [accent]Draw[] operations to a display. lst.printflush = Flush queued [accent]Print[] operations to a message block. @@ -2253,6 +2274,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Unit building logic is not allowed here. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.shoot = Shoot at a position. diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index ec44d25f83..22409d6be9 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -441,6 +441,7 @@ editor.waves = Wellen editor.rules = Regeln editor.generation = Generator editor.objectives = Ziele +editor.locales = Locale Bundles editor.ingame = Im Spiel bearbeiten editor.playtest = Playtest editor.publish.workshop = Im Workshop veröffentlichen @@ -508,6 +509,7 @@ editor.errorlegacy = Diese Karte ist zu alt und benutzt ein veraltetes Kartenfor editor.errornot = Dies ist keine Kartendatei. editor.errorheader = Diese Karte ist entweder nicht gültig oder beschädigt. editor.errorname = Karte hat keinen Namen. +editor.errorlocales = Error reading invalid locale bundles. editor.update = Aktualisieren editor.randomize = Zufällig anordnen editor.moveup = Hochschieben @@ -519,6 +521,7 @@ editor.sectorgenerate = Sektor generieren editor.resize = Größe\nanpassen editor.loadmap = Karte\nladen editor.savemap = Karte\nspeichern +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Gespeichert! editor.save.noname = Deine Karte hat keinen Namen! Setze einen Namen im [accent]Karten-Info[]-Menü. editor.save.overwrite = Deine Karte überschreibt eine Standardkarte! Wähle einen anderen Karten Namen im [accent]Karten-Info[]-Menü. @@ -606,6 +609,23 @@ filter.option.floor2 = Sekundärer Boden filter.option.threshold2 = Sekundärer Grenzwert filter.option.radius = Radius filter.option.percentile = Perzentil +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Breite: height = Höhe: @@ -2266,6 +2286,7 @@ unit.emanate.description = Baut Blöcke, um den Akropolis-Kern zu beschützen. H lst.read = Liest einen Wert aus einer verbundenen Speicherzelle. lst.write = Schreibt eine Zahl in einer verbundene Speicherzelle. lst.print = Fügt Text zum Textspeicher hinzu.\nZeigt nichts an, bis [accent]Print Flush[] verwendet wird. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Fügt eine [accent]Draw[]-Aufgabe zum Bildspeicher hinzu.\nZeigt nichts an, bis [accent]Draw Flush[] verwendet wird. lst.drawflush = Druckt [accent]Draw[]-Aufgaben aus dem Bildspeicher auf einen Bildschirm. lst.printflush = Druckt [accent]Print[]-Aufgaben aus dem Textspeicher auf einen Nachrichtenblock. @@ -2303,6 +2324,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Logik, die Blöcke baut, ist hier nicht erlaubt. diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index d0f31317af..0a468fef0c 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -438,6 +438,7 @@ editor.waves = Oleadas: editor.rules = Normas: editor.generation = Generación: editor.objectives = Objetivos +editor.locales = Locale Bundles editor.ingame = Editar desde la nave editor.playtest = Probar mapa editor.publish.workshop = Publicar en Steam Workshop @@ -505,6 +506,7 @@ editor.errorlegacy = Este mapa es demasiado antiguo y usa un formato obsoleto. editor.errornot = Esto no es un fichero de mapa. editor.errorheader = Este mapa no es válido o está corrupto. editor.errorname = El mapa no tiene un nombre definido. ¿Estás intentando cargar un fichero de guardado? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Actualizar editor.randomize = Aleatorizar editor.moveup = Subir @@ -516,6 +518,7 @@ editor.sectorgenerate = Generación de sector editor.resize = Redimensionar editor.loadmap = Cargar mapa editor.savemap = Guardar mapa +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = ¡Guardado! editor.save.noname = ¡Tu mapa no tiene un nombre! Ponle uno en el menú "Info del Mapa". editor.save.overwrite = ¡Tu mapa sobrescribe uno ya incorporado! Elige un nombre diferente en el menú 'Info del Mapa'. @@ -603,6 +606,23 @@ filter.option.floor2 = Terreno secundario filter.option.threshold2 = Umbral secundario filter.option.radius = Radio filter.option.percentile = Percentil +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Ancho: height = Alto: @@ -2259,6 +2279,7 @@ unit.emanate.description = Construye estructuras para defender el núcleo Acropo lst.read = Lee un número desde una unidad de memoria conectada. lst.write = Escribe un número en una unidad de memoria conectada. lst.print = Añade texto a la cola para imprimir texto.\nNo mostrará nada hasta que se use [accent]Print Flush[]. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Añade una operación a la cola para dibujar.\nNo mostrará nada hasta que se use [accent]Draw Flush[]. lst.drawflush = Muestra los datos en cola de operaciones [accent]Draw[] en un monitor gráfico. lst.printflush = Muestra los datos en cola de operaciones de [accent]Print[] en un bloque de mensaje. @@ -2296,6 +2317,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]No se permite construir bloques de categoría lógica. diff --git a/core/assets/bundles/bundle_et.properties b/core/assets/bundles/bundle_et.properties index e315dfc24d..a8ab0d2fc9 100644 --- a/core/assets/bundles/bundle_et.properties +++ b/core/assets/bundles/bundle_et.properties @@ -434,6 +434,7 @@ editor.waves = Lahingulained: editor.rules = Reeglid: editor.generation = Genereerimine: editor.objectives = Objectives +editor.locales = Locale Bundles editor.ingame = Redigeeri mängus editor.playtest = Playtest editor.publish.workshop = Avalda Workshop'is @@ -500,6 +501,7 @@ editor.errorlegacy = See maailmafail on liiga vana ja kasutab iganenud formaati, editor.errornot = See ei ole maailmafail. editor.errorheader = See maailmafail on ebasobiv või riknenud. editor.errorname = Maailma nime pole täpsustatud. +editor.errorlocales = Error reading invalid locale bundles. editor.update = Uuenda editor.randomize = Juhuslikusta editor.moveup = Move Up @@ -511,6 +513,7 @@ editor.sectorgenerate = Sector Generate editor.resize = Suurus editor.loadmap = Lae maailm editor.savemap = Salvesta +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Salvestatud! editor.save.noname = Su maailmal ei ole nime! Anna maailmale nimi, vajutades menüüs nupule "Üldinfo". editor.save.overwrite = Sinu maailm kirjutaks üle sisse-ehitatud maailma! Anna maailmale teistsugune nimi, vajutades menüüs nupule "Üldinfo". @@ -595,6 +598,23 @@ filter.option.floor2 = Teine põrand filter.option.threshold2 = Teine lävi filter.option.radius = Raadius filter.option.percentile = Protsentiil +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Laius: height = Kõrgus: @@ -2218,6 +2238,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Read a number from a linked memory cell. lst.write = Write a number to a linked memory cell. lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. lst.drawflush = Flush queued [accent]Draw[] operations to a display. lst.printflush = Flush queued [accent]Print[] operations to a message block. @@ -2255,6 +2276,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Unit building logic is not allowed here. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.shoot = Shoot at a position. diff --git a/core/assets/bundles/bundle_eu.properties b/core/assets/bundles/bundle_eu.properties index 2db4ff04d5..c1284ec210 100644 --- a/core/assets/bundles/bundle_eu.properties +++ b/core/assets/bundles/bundle_eu.properties @@ -436,6 +436,7 @@ editor.waves = Boladak: editor.rules = Arauak: editor.generation = Sorrarazi: editor.objectives = Objectives +editor.locales = Locale Bundles editor.ingame = Editatu jolasean editor.playtest = Playtest editor.publish.workshop = Argitaratu lantegian @@ -502,6 +503,7 @@ editor.errorlegacy = Mapa hau zaharregia da, eta jada onartzen ez den formatu za editor.errornot = Hau ez da mapa-fitxategi bat. editor.errorheader = Mapa hau hondatuta dago edo baliogabea da. editor.errorname = Mapak ez du zehaztutako izenik. Gordetako partida bat kargatzen saiatu zara? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Eguneratu editor.randomize = Ausazkoa editor.moveup = Move Up @@ -513,6 +515,7 @@ editor.sectorgenerate = Sector Generate editor.resize = Aldatu neurria editor.loadmap = Kargatu mapa editor.savemap = Gorde mapa +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Gordeta! editor.save.noname = Zure mapak ez du izenik" Jarri baten bat 'Mapa info' menuan. editor.save.overwrite = Zure mapak jolas barneko mapa bat gainidatziko luke! Hautatu beste izen bat 'Mapa info' menuan. @@ -597,6 +600,23 @@ filter.option.floor2 = Bigarren zorua filter.option.threshold2 = Bigarren atalasea filter.option.radius = Erradioa filter.option.percentile = Pertzentila +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Zabalera: height = Altuera: @@ -2220,6 +2240,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Read a number from a linked memory cell. lst.write = Write a number to a linked memory cell. lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. lst.drawflush = Flush queued [accent]Draw[] operations to a display. lst.printflush = Flush queued [accent]Print[] operations to a message block. @@ -2257,6 +2278,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Unit building logic is not allowed here. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.shoot = Shoot at a position. diff --git a/core/assets/bundles/bundle_fi.properties b/core/assets/bundles/bundle_fi.properties index 9962837363..64c142e223 100644 --- a/core/assets/bundles/bundle_fi.properties +++ b/core/assets/bundles/bundle_fi.properties @@ -434,6 +434,7 @@ editor.waves = Tasot: editor.rules = Säännöt: editor.generation = Generaatio: editor.objectives = Tehtävät +editor.locales = Locale Bundles editor.ingame = Muokka pelin sisällä editor.playtest = Testaa pelin sisällä editor.publish.workshop = Julkaise Workshoppiin @@ -500,6 +501,7 @@ editor.errorlegacy = Tämä kartta on liian vanha, ja se käyttää vanhentunutt editor.errornot = Tämä ei ole karttatiedosto. editor.errorheader = Tämä karttatiedosto on joko kelvoton tai turmeltunut. editor.errorname = Kartalla ei ole määritettyä nimeä. Yritätkö ladata tallennusta? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Päivitä editor.randomize = Satunnaista editor.moveup = Liiku yläkansioon @@ -511,6 +513,7 @@ editor.sectorgenerate = Sektorigeneraatio editor.resize = Säädä kokoa editor.loadmap = Lataa kartta editor.savemap = Tallenna kartta +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Tallennettu! editor.save.noname = Kartallasi ei ole nimeä! Aseta sellainen 'Kartan tiedot' valikossa. editor.save.overwrite = Karttasi on ylikirjoittamassa sisäänrakennettua karttaa! Valitse toinen nimi 'Kartan tiedot' -valikossa. @@ -595,6 +598,23 @@ filter.option.floor2 = Toinen lattia filter.option.threshold2 = Toissijainen raja-arvo filter.option.radius = Säde filter.option.percentile = Prosentti +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Leveys: height = Korkeus: @@ -2221,6 +2241,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Lue numero yhdistetystä muistisolusta. lst.write = Kirjoita numero yhdistettyyn muistisoluun. lst.print = Lisää tekstiä tekstipuskuriin.\nEi näytä mitään, kunnes [accent]Painosyötettä[] käytetään. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Lisää operaation piirtopuskuriin.\nEi näytä mitään, kunnes [accent]Piirtosyötettä[] käytetään. lst.drawflush = Syöttää jonottavat [accent]Piirto[]-operaatiot näyttöön. lst.printflush = Syöttää jonottavat [accent]Paino[]-operaatiot viestipalikkaan. @@ -2258,6 +2279,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Logiikan käyttö ei täällä ole sallittu yksikköjen tuottamisessa. lenum.type = Rakennuksen/Yksikön tyyppi.\nEsim. jokaisesta reitittimestä tämä palauttaa [accent]@router[].\nEi ole merkkijono. lenum.shoot = Ammu tiettyä sijaintia. diff --git a/core/assets/bundles/bundle_fil.properties b/core/assets/bundles/bundle_fil.properties index 01780b4db8..6a8950a100 100644 --- a/core/assets/bundles/bundle_fil.properties +++ b/core/assets/bundles/bundle_fil.properties @@ -434,6 +434,7 @@ editor.waves = Waves: editor.rules = Rules: editor.generation = Generation: editor.objectives = Objectives +editor.locales = Locale Bundles editor.ingame = Edit In-Game editor.playtest = Playtest editor.publish.workshop = I-Publish Sa Workshop @@ -500,6 +501,7 @@ editor.errorlegacy = Masyadong luma ang mapang ito, at gumagamit ng legacy na fo editor.errornot = Ito ay hindi isang file ng mapa. editor.errorheader = Ang file ng mapa na ito ay maaaring hindi wasto o sira. editor.errorname = Walang tinukoy na pangalan ang mapa. Sinusubukan mo bang mag-load ng save file? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Update editor.randomize = Randomize editor.moveup = Move Up @@ -511,6 +513,7 @@ editor.sectorgenerate = Sector Generate editor.resize = Resize editor.loadmap = Load Map editor.savemap = Save Map +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Saved! editor.save.noname = Walang pangalan ang iyong mapa! Itakda ang isa sa menu na 'impormasyon ng mapa'. editor.save.overwrite = Ino-overwrite ng iyong mapa ang isang built-in na mapa! Pumili ng ibang pangalan sa menu na 'impormasyon ng mapa'. @@ -595,6 +598,23 @@ filter.option.floor2 = Secondary Floor filter.option.threshold2 = Secondary Threshold filter.option.radius = Radius filter.option.percentile = Percentile +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Width: height = Height: @@ -2217,6 +2237,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Read a number from a linked memory cell. lst.write = Write a number to a linked memory cell. lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. lst.drawflush = Flush queued [accent]Draw[] operations to a display. lst.printflush = Flush queued [accent]Print[] operations to a message block. @@ -2254,6 +2275,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Unit building logic is not allowed here. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.shoot = Shoot at a position. diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index fb44cebe88..9f481dd570 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -444,6 +444,7 @@ editor.waves = Vagues editor.rules = Règles editor.generation = Génération editor.objectives = Objectifs +editor.locales = Locale Bundles editor.ingame = Éditer dans le jeu editor.playtest = Tester editor.publish.workshop = Publier sur le Workshop @@ -511,6 +512,7 @@ editor.errorlegacy = Cette carte est trop ancienne et utilise un format de carte editor.errornot = Ceci n'est pas un fichier de carte. editor.errorheader = Ce fichier de carte est invalide ou corrompu. editor.errorname = La carte n'a pas de nom. Essayez-vous de charger une sauvegarde ? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Mettre à jour editor.randomize = Générer editor.moveup = Monter @@ -522,6 +524,7 @@ editor.sectorgenerate = Générer un Secteur editor.resize = Redimensionner editor.loadmap = Charger la carte editor.savemap = Sauvegarder la carte +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Sauvegardé ! editor.save.noname = Votre carte n'a pas de nom !\nAjoutez un nom dans le menu 'Infos de la Carte'. editor.save.overwrite = Votre carte écrase une carte de base du jeu !\nChoisissez un nom différent dans le menu 'Infos de la Carte'. @@ -609,6 +612,23 @@ filter.option.floor2 = Sol secondaire filter.option.threshold2 = Seuil secondaire filter.option.radius = Rayon filter.option.percentile = Pourcentage +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Largeur : height = Hauteur : @@ -2267,6 +2287,7 @@ unit.emanate.description = Construit des structures pour défendre le Noyau acro lst.read = Lit un nombre depuis un bloc de mémoire relié au processeur. lst.write = Écrit un nombre dans un bloc de mémoire relié au processeur. lst.print = Ajoute du texte dans la mémoire tampon de l'imprimante.\nNe montrera aucun texte tant que [accent]Print Flush[] ne sera pas utilisé. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Ajoute une opération dans la mémoire tampon de dessin.\nNe montrera aucune image tant que [accent]Draw Flush[] ne sera pas utilisé. lst.drawflush = Affiche les opérations [accent]Draw[] en file d'attente vers un écran. lst.printflush = Affiche les opérations [accent]Print[] en file d'attente vers un bloc de message. @@ -2304,6 +2325,7 @@ lst.effect = Crée un effet de particules. lst.sync = Synchronise une variable dans le réseau.\nLimité à 20 fois par seconde et par variable. lst.makemarker = Crée un marqueur dans le monde.\nUn ID pour identifier le marqueur doit être donné.\nLes marqueurs sont limités à 20,000 par monde. lst.setmarker = Change une propriété d'un marqueur.\nL'ID utilisé doit être le même que celui de l'instruction "Make Marker". +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Les unités contrôlées par des processeurs ne peuvent pas construire ici. diff --git a/core/assets/bundles/bundle_hu.properties b/core/assets/bundles/bundle_hu.properties index b1af857920..88c1fbec78 100644 --- a/core/assets/bundles/bundle_hu.properties +++ b/core/assets/bundles/bundle_hu.properties @@ -444,6 +444,7 @@ editor.waves = Hullámok: editor.rules = Szabályok: editor.generation = Generálás: editor.objectives = Célok +editor.locales = Locale Bundles editor.ingame = Szerkesztés a játékban editor.playtest = Teszt játékban editor.publish.workshop = Közzététel Steam Műhelyben @@ -511,6 +512,7 @@ editor.errorlegacy = Ez a pálya túl régi, és már nem támogatott formátumo editor.errornot = Ez nem egy pálya fájl. editor.errorheader = Ez a pálya fájl vagy érvénytelen vagy sérült. editor.errorname = A pályának nincs neve. Mentést próbálsz betölteni? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Frissítés editor.randomize = Véletlenszerű editor.moveup = Mozgás fel @@ -522,6 +524,7 @@ editor.sectorgenerate = Szektor generálása editor.resize = Átméretezés editor.loadmap = pálya betöltése editor.savemap = Mentés +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Mentve! editor.save.noname = Nem adtál meg nevet! Állíts be egyet az "Általános" menüpont alatt! editor.save.overwrite = A pályád felülír egy már létező pályát! Válassz egy másik nevet az "Általános" menüpont alatt! @@ -609,6 +612,23 @@ filter.option.floor2 = Másodlagos Szint filter.option.threshold2 = Másodlagos Küszöbérték filter.option.radius = Sugár filter.option.percentile = Arány +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Szélesség: height = Magasság: @@ -2267,6 +2287,7 @@ unit.emanate.description = Az Akropolisz védelmére szolgáló építményeket lst.read = Szám kiolvasása egy összekapcsolt memóriacellából. lst.write = Írj egy számot egy összekapcsolt memóriacellába. lst.print = Szöveg hozzáadása a nyomtatási pufferhez.\nNem jelenít meg semmit, amíg a [accent]Kiírási Művelet[] használatban van. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Művelet hozzáadása a rajzpufferhez.\nNem jelenít meg semmit, amíg a [accent]Rajzolási Művelet[] használatban van. lst.drawflush = Sorba állított [accent]rajz[]műveletek megjelenítése a kijelzőn. lst.printflush = Sorba állított [accent]kiírási[] műveletek kiírása egy üzenetblokkba. @@ -2304,6 +2325,7 @@ lst.effect = Létrehoz egy részecske-effektet. lst.sync = Egy változó szinkronizálása a hálózaton keresztül.\nMásodpercenként legfeljebb 10 alkalommal hívható meg. lst.makemarker = Új logikai jelölő létrehozása a világban.\nEgy azonosítót kell megadni a jelölő azonosításához.\nA jelölők száma jelenleg világonként 20 000-re van korlátozva. lst.setmarker = Egy jelölő tulajdonságának beállítása.\nA használt azonosítónak meg kell egyeznie a Jelölő Készítő utasításban megadottal. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Az egységépítési logika itt nem megengedett. diff --git a/core/assets/bundles/bundle_id_ID.properties b/core/assets/bundles/bundle_id_ID.properties index b43bfac379..0da00b10b9 100644 --- a/core/assets/bundles/bundle_id_ID.properties +++ b/core/assets/bundles/bundle_id_ID.properties @@ -438,6 +438,7 @@ editor.waves = Gelombang: editor.rules = Peraturan: editor.generation = Generasi: editor.objectives = Tujuan +editor.locales = Locale Bundles editor.ingame = Sunting dalam Permainan editor.playtest = Tes Bermain editor.publish.workshop = Terbitkan di Workshop @@ -505,6 +506,7 @@ editor.errorlegacy = Peta ini terlalu tua, dan memakai format peta "legacy" yang editor.errornot = Ini bukan merupakan file peta. editor.errorheader = File peta ini bisa jadi tidak sah atau rusak. editor.errorname = Peta tidak ada nama. Apakah Anda mencoba untuk memuat file simpanan? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Perbaruan editor.randomize = Acak editor.moveup = Pindah Ke Atas @@ -516,6 +518,7 @@ editor.sectorgenerate = Generasi Sektor editor.resize = Ubah Ukuran editor.loadmap = Memuat Peta editor.savemap = Simpan Peta +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Tersimpan! editor.save.noname = Peta Anda tidak ada nama! Tambahkan di menu 'info peta'. editor.save.overwrite = Peta ini menindih peta built-in! Pilih nama yang berbeda di menu 'info peta'. @@ -603,6 +606,23 @@ filter.option.floor2 = Lantai Sekunder filter.option.threshold2 = Ambang Sekunder filter.option.radius = Radius filter.option.percentile = Perseratus +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Lebar: height = Tinggi: @@ -2257,6 +2277,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Membaca angka dari memori sel yang dihubungkan. lst.write = Menulis angka ke memori sel yang dihubungkan. lst.print = Menambahkan teks ke daftar cetak.\nTidak dapat menampilkan apapun sampai [accent]Print Flush[] dipakai. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Menambahkan perintah ke daftar gambar.\nTidak dapat menampilkan apapun sampai [accent]Draw Flush[] dipakai. lst.drawflush = Mengeluarkan perintah [accent]Draw[] dari daftar antrean untuk ditampilkan. lst.printflush = Mengeluarkan perintah [accent]Print[] dari daftar antrean untuk blok pesan. @@ -2294,6 +2315,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Logika unit membangun tidak diperbolehkan di sini. diff --git a/core/assets/bundles/bundle_it.properties b/core/assets/bundles/bundle_it.properties index 65cc5f965c..7d5cee5309 100644 --- a/core/assets/bundles/bundle_it.properties +++ b/core/assets/bundles/bundle_it.properties @@ -436,6 +436,7 @@ editor.waves = Ondate: editor.rules = Regole: editor.generation = Generazione: editor.objectives = Obbiettivi +editor.locales = Locale Bundles editor.ingame = Modifica in Gioco editor.playtest = Playtest editor.publish.workshop = Pubblica nel Workshop @@ -503,6 +504,7 @@ editor.errorlegacy = La mappa è troppo vecchia ed usa un formato che non è pi editor.errornot = Questo non è un file mappa. editor.errorheader = Il file di questa mappa non è valido o è corrotto. editor.errorname = Questa mappa è senza nome. Stai cercando di caricare un salvataggio? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Aggiorna editor.randomize = Casualizza editor.moveup = Muovi in alto @@ -514,6 +516,7 @@ editor.sectorgenerate = Genera settore editor.resize = Ridimensiona editor.loadmap = Carica Mappa editor.savemap = Salva Mappa +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Salvato! editor.save.noname = La tua mappa non ha un nome! Impostane uno nel menu 'Info Mappa'. editor.save.overwrite = La tua mappa sovrascrive quelle incluse! Imposta un nome diverso nel menu 'Info Mappa'. @@ -598,6 +601,23 @@ filter.option.floor2 = Terreno Secondario filter.option.threshold2 = Soglia Secondaria filter.option.radius = Raggio filter.option.percentile = Percentuale +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Larghezza: height = Altezza: @@ -2231,6 +2251,7 @@ unit.emanate.description = Costruisce strutture per difendere il nucleo dell'Acr lst.read = Leggi un numero da una cella di memoria collegata. lst.write = Scrivi un numero in una cella di memoria collegata. lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. lst.drawflush = Flush queued [accent]Draw[] operations to a display. lst.printflush = Flush queued [accent]Print[] operations to a message block. @@ -2268,6 +2289,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Unit building logic is not allowed here. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.shoot = Shoot at a position. diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index 47f5fa4d70..b59a37a712 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -438,6 +438,7 @@ editor.waves = ウェーブ: editor.rules = ルール: editor.generation = 生成: editor.objectives = オブジェクティブ +editor.locales = Locale Bundles editor.ingame = ゲーム内で編集する editor.playtest = Playtest editor.publish.workshop = ワークショップで公開 @@ -505,6 +506,7 @@ editor.errorlegacy = このマップは古いです。今後、古いマップ editor.errornot = これはマップファイルではありません。 editor.errorheader = このマップファイルは無効または破損しています。 editor.errorname = マップに名前が設定されていません。 +editor.errorlocales = Error reading invalid locale bundles. editor.update = 更新 editor.randomize = ランダム editor.moveup = 上に移動 @@ -516,6 +518,7 @@ editor.sectorgenerate = セクターを生成 editor.resize = リサイズ editor.loadmap = マップを読み込む editor.savemap = マップを保存 +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = 保存しました! editor.save.noname = マップに名前が設定されていません! メニューの 'マップ情報' から設定してください。 editor.save.overwrite = 組み込みマップを上書きしようとしています! メニューの 'マップ情報' から異なる名前に設定してください。 @@ -602,6 +605,23 @@ filter.option.floor2 = 2番目の地面 filter.option.threshold2 = 2番目の閾値 filter.option.radius = 半径 filter.option.percentile = パーセンタイル +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = 幅: height = 高さ: @@ -2235,6 +2255,7 @@ unit.emanate.description = アクロポリスコアを敵から守ります。\n lst.read = リンクされたメモリセルから数値を読み取ります。 lst.write = リンクされたメモリセルに数値を書き込みます。 lst.print = メッセージブロックにテキストを追加します。[accent]Print Flush[] を使用するまで何も表示しません。 +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = ロジックディスプレイに操作を追加します。[accent]Draw Flush[] を使用するまで何も表示しません。 lst.drawflush = キューに入れられた [accent]Draw[] 操作をディスプレイにフラッシュします。 lst.printflush = キューに入れられた [accent]Print[] 操作をメッセージ ブロックにフラッシュします。 @@ -2272,6 +2293,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]ここではユニット構築ロジックは使用できません。 lenum.type = ユニットや建物の種類を取得します。\n例:任意のルーターに対して、 [accent]@router[] を返します。\n文字列ではありません。 lenum.shoot = 指定した座標に向かって撃ちます。 diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index 9843f25f70..c138e309d8 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -437,6 +437,7 @@ editor.waves = 단계 editor.rules = 규칙 editor.generation = 지형 생성 editor.objectives = 목표 +editor.locales = Locale Bundles editor.ingame = 인게임 편집 editor.playtest = 맵 테스트 editor.publish.workshop = 창작마당 게시 @@ -504,6 +505,7 @@ editor.errorlegacy = 이 맵은 너무 오래됐고, 더 이상 지원하지 않 editor.errornot = 맵 파일이 아닙니다. editor.errorheader = 이 맵 파일은 유효하지 않거나 손상되었습니다. editor.errorname = 맵에 이름이 지정되어 있지 않습니다. 저장 파일을 불러오려고 시도하는 건가요? +editor.errorlocales = Error reading invalid locale bundles. editor.update = 업데이트 editor.randomize = 무작위 editor.moveup = 위로 이동 @@ -515,6 +517,7 @@ editor.sectorgenerate = 구역 형성 editor.resize = 맵 크기조정 editor.loadmap = 맵 불러오기 editor.savemap = 맵 저장 +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = 저장됨! editor.save.noname = 맵에 이름이 없습니다! '맵 정보' 메뉴에서 설정하세요. editor.save.overwrite = 이 맵은 내장된 맵을 덮어씁니다! '맵 정보' 에서 다른 이름을 선택하세요. @@ -602,6 +605,23 @@ filter.option.floor2 = 2번째 타일 filter.option.threshold2 = 2번째 경계선 filter.option.radius = 반경 filter.option.percentile = 백분율 +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = 너비: height = 높이: @@ -2234,6 +2254,7 @@ unit.emanate.description = 코어: 도심을 지켜내기 위해 구조물을 lst.read = 연결된 메모리 셀에서 숫자 읽음 lst.write = 연결된 메모리 셀에 숫자 작성 lst.print = 프린트 버퍼에 텍스트 추가\n[accent]Print Flush[]가 사용되기 전까진 아무것도 보여주지 않습니다 +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = 드로잉 버퍼에 실행문 추가\n[accent]Draw Flush[]가 사용되기 전까진 아무것도 보여주지 않습니다 lst.drawflush = 대기중인 [accent]Draw[]실행문을 디스플레이에 출력 lst.printflush = 대기중인 [accent]Print[]실행문을 메시지 블록에 출력 @@ -2271,6 +2292,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]기체의 건설 로직은 여기서 허용되지 않습니다. diff --git a/core/assets/bundles/bundle_lt.properties b/core/assets/bundles/bundle_lt.properties index c419d033ef..f644b1b3a1 100644 --- a/core/assets/bundles/bundle_lt.properties +++ b/core/assets/bundles/bundle_lt.properties @@ -434,6 +434,7 @@ editor.waves = Bangos: editor.rules = Taisyklės: editor.generation = Generacija: editor.objectives = Objectives +editor.locales = Locale Bundles editor.ingame = Redaguoti žaidime editor.playtest = Playtest editor.publish.workshop = Publikuoti Dirbtuvėje @@ -500,6 +501,7 @@ editor.errorlegacy = Šis žemėlapis yra per senas ir naudoja seną žemėlapi editor.errornot = Tai nėra žemėlapio formatas. editor.errorheader = Šis žemėlapis yra netaisyklingas arba sugadintas. editor.errorname = Šis žemėlapis neturi nustatyto pavadinimo. Ar bandote užkrauti išsaugotą failą? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Atnaujinti editor.randomize = Sumaišyti atsitiktinai editor.moveup = Move Up @@ -511,6 +513,7 @@ editor.sectorgenerate = Sector Generate editor.resize = Pakeisti dydį editor.loadmap = Užkrauti žemėlapį editor.savemap = Išsaugoti žemėlapį +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Išsaugota! editor.save.noname = Jūsų žemėlapis neturi pavadinimo! Nustatykite meniu 'žemėlapio informacija'. editor.save.overwrite = Jūsų žemėlapis perrašo integruotą žemėlapį! Pasirinkite skirtingą pavadinimą 'žemėlapio informacija' meniu. @@ -595,6 +598,23 @@ filter.option.floor2 = Antrasis sluoksnis filter.option.threshold2 = Antrasis slenkstis filter.option.radius = Spindulys filter.option.percentile = Procentilė +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Plotis: height = Aukštis: @@ -2218,6 +2238,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Read a number from a linked memory cell. lst.write = Write a number to a linked memory cell. lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. lst.drawflush = Flush queued [accent]Draw[] operations to a display. lst.printflush = Flush queued [accent]Print[] operations to a message block. @@ -2255,6 +2276,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Unit building logic is not allowed here. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.shoot = Shoot at a position. diff --git a/core/assets/bundles/bundle_nl.properties b/core/assets/bundles/bundle_nl.properties index 096b01124c..84872be5fa 100644 --- a/core/assets/bundles/bundle_nl.properties +++ b/core/assets/bundles/bundle_nl.properties @@ -442,6 +442,7 @@ editor.waves = Rondes: editor.rules = Regels: editor.generation = Generatie: editor.objectives = Doelen +editor.locales = Locale Bundles editor.ingame = Bewerk In-Spel editor.playtest = Speeltest editor.publish.workshop = Publiceer in Werkplaats @@ -508,6 +509,7 @@ editor.errorlegacy = Deze kaart is te oud, bestandsformaat word niet meer onders editor.errornot = Dat is geen kaartbestand. editor.errorheader = Dit kaartbestand is ongeldig of corrupt. editor.errorname = Kaart heeft geen naam. +editor.errorlocales = Error reading invalid locale bundles. editor.update = Bijwerken editor.randomize = Willekeurig editor.moveup = Beweeg Omhoog @@ -519,6 +521,7 @@ editor.sectorgenerate = Sector Genereren editor.resize = Verander formaat editor.loadmap = Laad Kaart editor.savemap = Bewaar Kaart +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Bewaard! editor.save.noname = Je kaart heeft geen naam! Stel er ��n in het menu 'kaartinfo'. editor.save.overwrite = De naam van deze kaart is al in gebruik door een van het spel zelf, kies een andere. @@ -605,6 +608,23 @@ filter.option.floor2 = Secundaire Vloer filter.option.threshold2 = Secundaire Drempel filter.option.radius = Straal filter.option.percentile = percentiel +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Breedte: height = Hoogte: @@ -2231,6 +2251,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Read a number from a linked memory cell. lst.write = Write a number to a linked memory cell. lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. lst.drawflush = Flush queued [accent]Draw[] operations to a display. lst.printflush = Flush queued [accent]Print[] operations to a message block. @@ -2268,6 +2289,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Unit building logic is not allowed here. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.shoot = Shoot at a position. diff --git a/core/assets/bundles/bundle_nl_BE.properties b/core/assets/bundles/bundle_nl_BE.properties index 74caec860a..74169a455d 100644 --- a/core/assets/bundles/bundle_nl_BE.properties +++ b/core/assets/bundles/bundle_nl_BE.properties @@ -434,6 +434,7 @@ editor.waves = Waves: editor.rules = Rules: editor.generation = Generation: editor.objectives = Objectives +editor.locales = Locale Bundles editor.ingame = Edit In-Game editor.playtest = Playtest editor.publish.workshop = Publish On Workshop @@ -500,6 +501,7 @@ editor.errorlegacy = This map is too old, and uses a legacy map format that is n editor.errornot = This is not a map file. editor.errorheader = This map file is either not valid or corrupt. editor.errorname = Map has no name defined. +editor.errorlocales = Error reading invalid locale bundles. editor.update = Update editor.randomize = Randomize editor.moveup = Move Up @@ -511,6 +513,7 @@ editor.sectorgenerate = Sector Generate editor.resize = Resize editor.loadmap = Load Map editor.savemap = Save Map +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Saved! editor.save.noname = Your map does not have a name! Set one in the 'map info' menu. editor.save.overwrite = Your map overwrites a built-in map! Pick a different name in the 'map info' menu. @@ -595,6 +598,23 @@ filter.option.floor2 = Secondary Floor filter.option.threshold2 = Secondary Threshold filter.option.radius = Radius filter.option.percentile = Percentile +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Width: height = Height: @@ -2218,6 +2238,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Read a number from a linked memory cell. lst.write = Write a number to a linked memory cell. lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. lst.drawflush = Flush queued [accent]Draw[] operations to a display. lst.printflush = Flush queued [accent]Print[] operations to a message block. @@ -2255,6 +2276,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Unit building logic is not allowed here. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.shoot = Shoot at a position. diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties index c618f1421a..4006da0d66 100644 --- a/core/assets/bundles/bundle_pl.properties +++ b/core/assets/bundles/bundle_pl.properties @@ -438,6 +438,7 @@ editor.waves = Fale: editor.rules = Zasady: editor.generation = Generacja: editor.objectives = Cele +editor.locales = Locale Bundles editor.ingame = Edytuj w Grze editor.playtest = Testuj Mapę editor.publish.workshop = Opublikuj w Warsztacie @@ -505,6 +506,7 @@ editor.errorlegacy = Ta mapa jest zbyt stara i używa starszego formatu mapy, kt editor.errornot = To nie jest plik mapy. editor.errorheader = Ten plik mapy jest nieprawidłowy lub uszkodzony. editor.errorname = Mapa nie zawiera nazwy. Czy próbujesz załadować zapis gry? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Aktualizuj editor.randomize = Losuj editor.moveup = Przesuń w górę @@ -516,6 +518,7 @@ editor.sectorgenerate = Generuj Sektor editor.resize = Zmień Rozmiar editor.loadmap = Załaduj Mapę editor.savemap = Zapisz Mapę +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Zapisano! editor.save.noname = Twoja mapa nie ma nazwy! Ustaw ją w 'Informacjach o mapie'. editor.save.overwrite = Ta mapa nadpisze wbudowaną mapę! Ustaw inną nazwę w 'Informacjach o mapie'. @@ -600,6 +603,23 @@ filter.option.floor2 = Druga Podłoga filter.option.threshold2 = Drugi Próg filter.option.radius = Zasięg filter.option.percentile = Procent +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Szerokość: height = Wysokość: @@ -2253,6 +2273,7 @@ unit.emanate.description = Lotnicza jednostka aministracyjna zdolna do wydobycia lst.read = Wczytuje liczbę z połączonej komórki pamięci. lst.write = Zapisuje liczbę do połączonej komórki pamięci. lst.print = Dodaje tekst do buforu drukującego.\nNie wyświetla niczego dopóki [accent]Print Flush[] nie jest użyte. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Dodaje operacje do buforu rysującego.\nNie wyświetla niczego dopóki [accent]Draw Flush[] nie jest użyte. lst.drawflush = Wyświetla oczekujące operacje z funkcji [accent]Draw[] na wyświetlaczu. lst.printflush = Dodaje oczekujące operacje z funkcji [accent]Print[] do bloku wiadomości. @@ -2290,6 +2311,7 @@ lst.effect = Stwórz efekt cząsteczki. lst.sync = Synchronizuje zmienną poprzez sieć.\nWywoływane maksymalnie 10 razy na sekundę. lst.makemarker = Stwórz nowy marker logiki.\nMusisz podać ID, aby móc go później zidentyfikować.\nLimit markerów to 20,000. lst.setmarker = Ustaw właściwości markera.\nID markera musi być takie samo jak podczas jego tworzenia. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Logika budowania jednostek nie jest tu dozwolona. diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index e304212ffd..187a136e0b 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -438,6 +438,7 @@ editor.waves = Hordas: editor.rules = Regras: editor.generation = Geração: editor.objectives = Objetivos: +editor.locales = Locale Bundles editor.ingame = Editar em jogo editor.playtest = Jogar Teste editor.publish.workshop = Publicar na oficina @@ -505,6 +506,7 @@ editor.errorlegacy = Esse mapa é velho demais, e usa um formato de mapa legacy editor.errornot = Este não é um arquivo de mapa. editor.errorheader = Este arquivo de mapa não é mais válido ou está corrompido. editor.errorname = O mapa não tem nome definido. +editor.errorlocales = Error reading invalid locale bundles. editor.update = Atualizar editor.randomize = Aleatorizar editor.moveup = Mover para Cima @@ -516,6 +518,7 @@ editor.sectorgenerate = Gerar Setor editor.resize = Redimen-\nsionar editor.loadmap = Carregar\nmapa editor.savemap = Salvar\nmapa +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Salvo! editor.save.noname = Seu mapa não tem um nome! Coloque um no menu de "Informação do mapa" editor.save.overwrite = O seu mapa substitui um mapa já construído! Coloque um nome diferente no menu "Informação do mapa" @@ -603,6 +606,23 @@ filter.option.floor2 = Chão secundário filter.option.threshold2 = Margem secundária filter.option.radius = Raio filter.option.percentile = Percentual +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Largura: height = Altura: @@ -2252,6 +2272,7 @@ unit.emanate.description = Constrói estruturas para defender o Núcelo Acrópol lst.read = Ler um número de uma célula de memória vinculada. lst.write = Escrever um número de uma célula de memória vinculada. lst.print = Adiciona texto ao buffer de impressão.\nNão exibe nada até [accent]Print Flush[] ser usado. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Adicionar uma operação ao buffer de desenho.\nNão exibe nada até [accent]Draw Flush[] ser usado. lst.drawflush = Liberar operações [accent]Draw[] enfileiradas para um display. lst.printflush = Liberar operações [accent]Print[] enfileiradas para um bloco de mensagem. @@ -2289,6 +2310,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Lógica de construção de unidades não é permitida aqui. diff --git a/core/assets/bundles/bundle_pt_PT.properties b/core/assets/bundles/bundle_pt_PT.properties index 9872b289e5..a43d85d095 100644 --- a/core/assets/bundles/bundle_pt_PT.properties +++ b/core/assets/bundles/bundle_pt_PT.properties @@ -434,6 +434,7 @@ editor.waves = Hordas: editor.rules = Regras: editor.generation = Geração: editor.objectives = Objectives +editor.locales = Locale Bundles editor.ingame = Editar em jogo editor.playtest = Playtest editor.publish.workshop = Publicar na oficina @@ -500,6 +501,7 @@ editor.errorlegacy = Esse mapa é velho demais, E usa um formato de mapa legacy editor.errornot = Este não é um ficheiro de mapa. editor.errorheader = Este ficheiro de mapa não é mais válido ou está corrompido. editor.errorname = O mapa não tem nome definido. +editor.errorlocales = Error reading invalid locale bundles. editor.update = Atualizar editor.randomize = Aleatorizar editor.moveup = Move Up @@ -511,6 +513,7 @@ editor.sectorgenerate = Sector Generate editor.resize = Redimen-\nsionar editor.loadmap = Carregar\nmapa editor.savemap = Gravar\nmapa +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Gravado! editor.save.noname = Seu mapa não tem um nome! Coloque um no menu de "Informação do mapa" editor.save.overwrite = O seu mapa substitui um mapa já construído! Coloque um nome diferente no menu "Informação do mapa" @@ -595,6 +598,23 @@ filter.option.floor2 = Chão secundário filter.option.threshold2 = Margem secundária filter.option.radius = Raio filter.option.percentile = Percentual +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Largura: height = Altura: @@ -2218,6 +2238,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Read a number from a linked memory cell. lst.write = Write a number to a linked memory cell. lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. lst.drawflush = Flush queued [accent]Draw[] operations to a display. lst.printflush = Flush queued [accent]Print[] operations to a message block. @@ -2255,6 +2276,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Unit building logic is not allowed here. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.shoot = Shoot at a position. diff --git a/core/assets/bundles/bundle_ro.properties b/core/assets/bundles/bundle_ro.properties index 7eb9475b2d..594bee3481 100644 --- a/core/assets/bundles/bundle_ro.properties +++ b/core/assets/bundles/bundle_ro.properties @@ -438,6 +438,7 @@ editor.waves = Valuri: editor.rules = Reguli: editor.generation = Generare: editor.objectives = Objectives +editor.locales = Locale Bundles editor.ingame = Editează în Joc editor.playtest = Playtest editor.publish.workshop = Publică pe Workshop @@ -505,6 +506,7 @@ editor.errorlegacy = Hartă aceasta este prea veche, și folosește un format î editor.errornot = Acesta nu este un fișier cu o hartă. editor.errorheader = Acest fișier de hartă este invalid sau corupf. editor.errorname = Harta nu are un nume definit. Încerci cumva să încarci un fișier cu o salvare de joc? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Update editor.randomize = Aleatoriu editor.moveup = Move Up @@ -516,6 +518,7 @@ editor.sectorgenerate = Sector Generate editor.resize = Schimbă Dimensiune editor.loadmap = Încarcă Harta editor.savemap = Salvează Harta +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Salvat! editor.save.noname = Hartă ta nu are un nume! Setează unul în meniul 'Informații despre hartă'. editor.save.overwrite = Hartă ta suprascrie o hartă prestabilită! Alege un nume diferit în meniul 'Informații despre hartă'. @@ -602,6 +605,23 @@ filter.option.floor2 = Podea Secundară filter.option.threshold2 = Cantitate Secundară filter.option.radius = Rază filter.option.percentile = Procent +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Lățime: height = Înălțime: @@ -2236,6 +2256,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Citește un număr dintr-o celulă de memorie conectată. lst.write = Scrie un număr într-o celulă de memorie conectată. lst.print = Adaugă text în bufferul de tipărire.\nNu tipărește decât când se execută [accent]Print Flush[]. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Adaugă o operație în bufferul de desenare.\nNu afișează decât când se execută [accent]Draw Flush[]. lst.drawflush = Afișează pe un monitor instrucțiunile [accent]Draw[] aflate în așteptare. lst.printflush = Tipărește într-un bloc Mesaj instrucțiunile [accent]Print[] aflate în așteptare. @@ -2273,6 +2294,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Nu ai voie să construiești cu unitățile folosind procesoare. diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index ab749a1a86..3e9fa23b84 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -438,6 +438,7 @@ editor.waves = Волны: editor.rules = Правила: editor.generation = Генерация: editor.objectives = Цели +editor.locales = Locale Bundles editor.ingame = Редактировать в игре editor.playtest = Опробовать карту editor.publish.workshop = Опубликовать в Мастерской @@ -505,6 +506,7 @@ editor.errorlegacy = Эта карта слишком старая и испол editor.errornot = Это не файл карты. editor.errorheader = Этот файл карты недействителен или повреждён. editor.errorname = Карта не имеет имени. Может быть, вы пытаетесь загрузить сохранение? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Обновить editor.randomize = Случайно editor.moveup = Выше @@ -516,6 +518,7 @@ editor.sectorgenerate = Генерация сектора editor.resize = Изменить\nразмер editor.loadmap = Загрузить\nкарту editor.savemap = Сохранить\nкарту +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Сохранено! editor.save.noname = У вашей карты нет имени! Назовите её в меню «Информация о карте». editor.save.overwrite = Ваша карта не может быть записана поверх встроенной карты! Введите другое название в меню «Информация о карте» @@ -602,6 +605,23 @@ filter.option.floor2 = Вторая поверхность filter.option.threshold2 = Вторичный предельный порог filter.option.radius = Радиус filter.option.percentile = Процентиль +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Ширина: height = Высота: @@ -2238,6 +2258,7 @@ unit.emanate.description = Защищает ядро «Акрополь» от lst.read = Считывает число из соединённой ячейки памяти. lst.write = Записывает число в соединённую ячейку памяти. lst.print = Добавляет текст в текстовый буфер. Ничего не отображает, пока не будет вызван [accent]Print Flush[]. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Добавляет операцию в буфер отрисовки. Ничего не отображает, пока не будет вызван [accent]Draw Flush[]. lst.drawflush = Сбрасывает буфер [accent]Draw[] операций на дисплей. lst.printflush = Сбрасывает буфер [accent]Print[] операций в блок-сообщение. @@ -2275,6 +2296,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Строительство с помощью процессоров здесь запрещено. diff --git a/core/assets/bundles/bundle_sr.properties b/core/assets/bundles/bundle_sr.properties index 8f9dcb248c..8fa9e69023 100644 --- a/core/assets/bundles/bundle_sr.properties +++ b/core/assets/bundles/bundle_sr.properties @@ -438,6 +438,7 @@ editor.waves = Talasi: editor.rules = Pravila: editor.generation = Generisanje: editor.objectives = Zadaci +editor.locales = Locale Bundles editor.ingame = Izmeni "U Igri" editor.playtest = Testiranje editor.publish.workshop = Objavi u Radionicu @@ -505,6 +506,7 @@ editor.errorlegacy = Ova mapa je stara, i koristi format mape koji nije podržan editor.errornot = Ovo nije datoteka mape. editor.errorheader = This map file is either not valid or corrupt. editor.errorname = Mapa nema definisano ime. Da li pokušavate da učitate sačuvanu igru? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Aržuriraj editor.randomize = Nasumično editor.moveup = Pomeri Gore @@ -516,6 +518,7 @@ editor.sectorgenerate = Sektorska Generacija editor.resize = Preuveličaj editor.loadmap = Učitaj Mapu editor.savemap = Sačuvaj Mapu +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Sačuvano! editor.save.noname = Vaša mapa ne sadrži ime! Postavi neko u 'informacije o mapi' meniju. editor.save.overwrite = Vaša mapa prerezuje ugrađenu mapu! Izaberi drugo ime u 'informacije o mapi' meniju. @@ -602,6 +605,23 @@ filter.option.floor2 = Drugi Pod filter.option.threshold2 = Secondary Threshold filter.option.radius = Radius filter.option.percentile = Percentile +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Širina: height = Visina: @@ -2239,6 +2259,7 @@ unit.emanate.description = Gradi građevine da odbrani Veliki Grad jezgro. Popra lst.read = Čita broj iz povezane memorijske ćelije. lst.write = Piše broj u povezanu memorijsku ćeliju. lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. lst.drawflush = Flush queued [accent]Draw[] operations to a display. lst.printflush = Flush queued [accent]Print[] operations to a message block. @@ -2276,6 +2297,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Unit building logic is not allowed here. diff --git a/core/assets/bundles/bundle_sv.properties b/core/assets/bundles/bundle_sv.properties index 2cad751f7d..3a82182162 100644 --- a/core/assets/bundles/bundle_sv.properties +++ b/core/assets/bundles/bundle_sv.properties @@ -434,6 +434,7 @@ editor.waves = Vågor: editor.rules = Regler: editor.generation = Generering: editor.objectives = Objectives +editor.locales = Locale Bundles editor.ingame = Edit In-Game editor.playtest = Playtest editor.publish.workshop = Publish On Workshop @@ -500,6 +501,7 @@ editor.errorlegacy = This map is too old, and uses a legacy map format that is n editor.errornot = This is not a map file. editor.errorheader = This map file is either not valid or corrupt. editor.errorname = Map has no name defined. Are you trying to load a save file? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Uppdatera editor.randomize = Slumpa editor.moveup = Move Up @@ -511,6 +513,7 @@ editor.sectorgenerate = Sector Generate editor.resize = Resize editor.loadmap = Load Map editor.savemap = Save Map +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Sparad! editor.save.noname = Your map does not have a name! Set one in the 'map info' menu. editor.save.overwrite = Your map overwrites a built-in map! Pick a different name in the 'map info' menu. @@ -595,6 +598,23 @@ filter.option.floor2 = Secondary Floor filter.option.threshold2 = Secondary Threshold filter.option.radius = Radie filter.option.percentile = Percentile +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Bredd: height = Höjd: @@ -2218,6 +2238,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Read a number from a linked memory cell. lst.write = Write a number to a linked memory cell. lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. lst.drawflush = Flush queued [accent]Draw[] operations to a display. lst.printflush = Flush queued [accent]Print[] operations to a message block. @@ -2255,6 +2276,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Unit building logic is not allowed here. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.shoot = Shoot at a position. diff --git a/core/assets/bundles/bundle_th.properties b/core/assets/bundles/bundle_th.properties index 44bf5b9c64..88b9f11dc2 100644 --- a/core/assets/bundles/bundle_th.properties +++ b/core/assets/bundles/bundle_th.properties @@ -438,6 +438,7 @@ editor.waves = คลื่น editor.rules = กฎ editor.generation = เจนเนอเรชั่น editor.objectives = เป้าหมาย +editor.locales = Locale Bundles editor.ingame = แก้ไขในเกม editor.playtest = เล่นทดสอบ editor.publish.workshop = เผยแพร่บนเวิร์กช็อป @@ -505,6 +506,7 @@ editor.errorlegacy = แมพนี้เก่าเกินไปและ editor.errornot = นี่ไม่ใช้ไฟล์แมพ editor.errorheader = ไฟล์แมพนี้เสียหรือไม่ถูกต้อง editor.errorname = แมพไม่มีการกำหนดชื่อ คุณกำลังพยายามโหลดไฟล์เซฟอยู่หรือไม่? +editor.errorlocales = Error reading invalid locale bundles. editor.update = อัปเดต editor.randomize = สุ่ม editor.moveup = ขยับขึ้น @@ -516,6 +518,7 @@ editor.sectorgenerate = สร้างเซ็กเตอร์ editor.resize = เปลี่ยนขนาด editor.loadmap = โหลดแมพ editor.savemap = เซฟแมพ +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = เซฟเรียบร้อย! editor.save.noname = แมพของคุณไม่มีชื่อ! สามารถตั้งชื่อได้ในเมนู 'ข้อมูลแมพ' editor.save.overwrite = แมพของคุณไปทับซ้อนกับแมพค่าเริ่มต้น! เปลี่ยนชื่อได้ในเมนู 'ข้อมูลแมพ' @@ -602,6 +605,23 @@ filter.option.floor2 = พื้นชั้นสอง filter.option.threshold2 = เกณฑ์ชั้นสอง filter.option.radius = รัศมี filter.option.percentile = เปอร์เซ็นต์ไทล์ +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = กว้าง: height = สูง: @@ -2256,6 +2276,7 @@ unit.emanate.description = สร้างสิ่งต่างๆ เพื lst.read = อ่านเลขจากเซลล์ความจำที่เชื่อมต่อไว้ lst.write = เขียนเลขไปยังเซลล์ความจำที่เชื่อมต่อไว้ lst.print = เพิ่มข้อความไปยังคิวข้อความ\nข้อความจะยังไม่แสดงจนกว่าจะใช้คำสั่ง [accent]Print Flush[] +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = เพิ่มรูปไปยังคิวการวาด\nภาพจะยังไม่แสดงจนกว่าจะใช้คำสั่ง [accent]Draw Flush[] lst.drawflush = ปล่อยคิว [accent]Draw[] ไปยังหน้าจอลอจิกที่เชื่อมต่อไว้ lst.printflush = ปล่อยคิว [accent]Print[] ไปยังตัวเก็บข้อความที่เชื่อมต่อไว้ @@ -2293,6 +2314,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]ไม่อนุญาตให้ใช้ลอจิกควบคุมให้ยูนิตสร้างที่นี่ diff --git a/core/assets/bundles/bundle_tk.properties b/core/assets/bundles/bundle_tk.properties index e195095e3e..cabd2f7088 100644 --- a/core/assets/bundles/bundle_tk.properties +++ b/core/assets/bundles/bundle_tk.properties @@ -434,6 +434,7 @@ editor.waves = Waves: editor.rules = Rules: editor.generation = Generation: editor.objectives = Objectives +editor.locales = Locale Bundles editor.ingame = Edit In-Game editor.playtest = Playtest editor.publish.workshop = Publish On Workshop @@ -500,6 +501,7 @@ editor.errorlegacy = This map is too old, and uses a legacy map format that is n editor.errornot = This is not a map file. editor.errorheader = This map file is either not valid or corrupt. editor.errorname = Map has no name defined. +editor.errorlocales = Error reading invalid locale bundles. editor.update = Update editor.randomize = Randomize editor.moveup = Move Up @@ -511,6 +513,7 @@ editor.sectorgenerate = Sector Generate editor.resize = Boyutunu degistir editor.loadmap = Harita yukle editor.savemap = Haritayi kaydet +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Kaydedildi! editor.save.noname = Haritanin ismi yok! 'Harita bilgisinden' bi tane ekle editor.save.overwrite = Haritanin ismi varolan bir haritanin ismi ile ayni! 'Harita bilgisinden' degisik bir isim sec @@ -595,6 +598,23 @@ filter.option.floor2 = Secondary Floor filter.option.threshold2 = Secondary Threshold filter.option.radius = Radius filter.option.percentile = Percentile +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Genislik: height = Yukseklik: @@ -2218,6 +2238,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Read a number from a linked memory cell. lst.write = Write a number to a linked memory cell. lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. lst.drawflush = Flush queued [accent]Draw[] operations to a display. lst.printflush = Flush queued [accent]Print[] operations to a message block. @@ -2255,6 +2276,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Unit building logic is not allowed here. lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.shoot = Shoot at a position. diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index ad6a0cfa2f..2a3c2a8fb7 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -438,6 +438,7 @@ editor.waves = Dalgalar: editor.rules = Kurallar: editor.generation = Oluşum: editor.objectives = Görevler: +editor.locales = Locale Bundles editor.ingame = Oyun içinde düzenle editor.playtest = Test Et editor.publish.workshop = Atölyede Yayınla @@ -505,6 +506,7 @@ editor.errorlegacy = Bu harita çok eski ve artık desteklenmeyen bir legacy har editor.errornot = Bu bir harita dosyası değil. editor.errorheader = Bu harita dosyası geçerli değil ya da bozuk. editor.errorname = Haritanın ismi yok!?! Bir kayıt dosyası mı yüklemeye çalışıyorsunuz? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Güncelle editor.randomize = Rastgele Yap editor.moveup = Yukarı Kaydır @@ -516,6 +518,7 @@ editor.sectorgenerate = Sektör Oluştur editor.resize = Yeniden Boyutlandır editor.loadmap = Harita Yükle editor.savemap = Haritayı Kaydet +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Kaydedildi! editor.save.noname = Haritanın bir ismi yok! 'Harita bilgileri' menüsünden bir isim seç. editor.save.overwrite = Haritan bir yerleşik haritayla örtüşüyor! 'Harita bilgileri' menüsünden farklı bir isim seç. @@ -602,6 +605,23 @@ filter.option.floor2 = İkincil Duvar filter.option.threshold2 = İkincil Eşik filter.option.radius = Yarıçap filter.option.percentile = Yüzdelik +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = En: height = Boy: @@ -2236,6 +2256,7 @@ unit.emanate.description = Akropolis Merkezini korumak için binalar inşa eder. lst.read = Bağlı hafıza kutusundaki numarayı okur. lst.write = Bağlı hafıza kutuaundaki numaraya yazar. lst.print = Yazı yazar. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Ekrana Çizer. lst.drawflush = Ekrana Çizimi Aktarır. lst.printflush = Mesaj bloğuna metnini aktarır, @@ -2273,6 +2294,7 @@ lst.effect = Parçacık efekti oluştur. lst.sync = Ağ boyunca bir değişkeni senkronize et.\nSaniyede en fazla 10 kere yapılabilir. lst.makemarker = Dünyada yeni bir İşlemci İşareti koy.\nBu İşarete bir Kimlik adamalısın.\nDünya başına 20.000 limit bulunmakta. lst.setmarker = Bir İşlemci İşareti için bir arazi seç.\nKimlik, İşaret Koyucudaki ile aynı olmalı. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Birim İnşası Yasak! diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index ad56f75c28..298033e0b9 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -440,6 +440,7 @@ editor.waves = Хвилі editor.rules = Правила editor.generation = Генерація editor.objectives = Завдання +editor.locales = Locale Bundles editor.ingame = Редагувати в грі editor.playtest = Протестувати в грі editor.publish.workshop = Опублікувати в Майстерні Steam @@ -507,6 +508,7 @@ editor.errorlegacy = Ця мапа занадто стара і використ editor.errornot = Це не мапа. editor.errorheader = Цей файл мапи недійсний або пошкоджений. editor.errorname = Мапа не має назви. Може, ви намагаєтеся завантажити збереження? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Оновити editor.randomize = Випадково editor.moveup = Підняти вище @@ -518,6 +520,7 @@ editor.sectorgenerate = Згенерувати сектор editor.resize = Змінити\nрозмір editor.loadmap = Завантажити мапу editor.savemap = Зберегти мапу +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Збережено! editor.save.noname = Ваша мапа не має назви! Установіть його в «Інформація про мапу». editor.save.overwrite = Ваша мапа перезаписує вбудовану мапу! Виберіть іншу назву в «Інформація про мапу». @@ -605,6 +608,23 @@ filter.option.floor2 = Друга поверхня filter.option.threshold2 = Вторинний граничний поріг filter.option.radius = Радіус filter.option.percentile = Спад +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Ширина: height = Висота: @@ -2263,6 +2283,7 @@ unit.emanate.description = Англійська назва: Emanate\nБудує lst.read = Зчитує число із з’єднаної комірки пам’яті. lst.write = Записує числу у з’єднану комірку пам’яті. lst.print = Додайте текст до буфера друку.\nНічого не відображає, поки [accent]Print Flush[] використовується. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Додає операцію до буфера рисунка.\nНічого не відображає, поки [accent]Draw Flush[] використовується. lst.drawflush = Скидає буфер операцій [accent]Draw[] на дисплей. lst.printflush = Скидає буфер операцій [accent]Print[] у блок «Повідомлення». @@ -2300,6 +2321,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Будування за допомогою процесорів заборено. diff --git a/core/assets/bundles/bundle_vi.properties b/core/assets/bundles/bundle_vi.properties index acc823c0d8..53cadbfa1c 100644 --- a/core/assets/bundles/bundle_vi.properties +++ b/core/assets/bundles/bundle_vi.properties @@ -439,6 +439,7 @@ editor.waves = Lượt: editor.rules = Luật: editor.generation = Cấu trúc: editor.objectives = Mục tiêu +editor.locales = Locale Bundles editor.ingame = Chỉnh sửa trong trò chơi editor.playtest = Chơi thử editor.publish.workshop = Xuất bản lên Workshop @@ -506,6 +507,7 @@ editor.errorlegacy = Bản đồ này quá cũ, và sử dụng định dạng b editor.errornot = Đây không phải là tệp bản đồ. editor.errorheader = Tệp bản đồ này không hợp lệ hoặc bị hỏng. editor.errorname = Bản đồ không có tên được xác định. Bạn đang cố gắng tải một bản lưu? +editor.errorlocales = Error reading invalid locale bundles. editor.update = Cập nhật editor.randomize = Ngẫu nhiên editor.moveup = Di chuyển lên @@ -517,6 +519,7 @@ editor.sectorgenerate = Tạo ra khu vực editor.resize = Thay đổi kích thước editor.loadmap = Mở bản đồ editor.savemap = Lưu bản đồ +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = Đã lưu! editor.save.noname = Bản đồ của bạn không có tên! Hãy đặt một cái tên trong 'Thông tin bản đồ'. editor.save.overwrite = Bản đồ của bạn ghi đè lên một bản đồ đã có sẵn! Hãy chọn một cái tên khác trong 'Thông tin bản đồ'. @@ -603,6 +606,23 @@ filter.option.floor2 = Nền phụ filter.option.threshold2 = Ngưỡng phụ filter.option.radius = Bán kính filter.option.percentile = Phần trăm +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = Chiều rộng: height = Chiều cao: @@ -2237,6 +2257,7 @@ unit.emanate.description = Xây công trình để phòng thủ lõi Acropolis. lst.read = Đọc một số từ bộ nhớ được liên kết. lst.write = Ghi một số vào bộ nhớ được liên kết. lst.print = Thêm văn bản vào bộ nhớ in.\nKhông hiển thị gì cho đến khi sử dụng [accent]Print Flush[]. +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = Thêm một thao tác vào bộ nhớ vẽ.\nKhông hiển thị gì cho đến khi sử dụng [accent]Draw Flush[]. lst.drawflush = Chuyển các thao tác [accent]Draw[] đến màn hình. lst.printflush = Chuyển các thao tác [accent]Print[] đến khối tin nhắn. @@ -2274,6 +2295,7 @@ lst.effect = Tạo một phần hiệu ứng nhỏ. lst.sync = Đồng bộ giá trị biến qua mạng.\nChỉ gọi tối đa 10 lần mỗi giây. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]Lô-gíc xây dựng đơn vị không được phép ở đây. diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 260ada9c3d..8ed46e5e41 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -441,6 +441,7 @@ editor.waves = 波次 editor.rules = 规则 editor.generation = 生成 editor.objectives = 目标 +editor.locales = Locale Bundles editor.ingame = 游戏内编辑 editor.playtest = 游戏内测试 editor.publish.workshop = 上传到创意工坊 @@ -508,6 +509,7 @@ editor.errorlegacy = 此地图太旧了,旧的地图格式已不再支持。 editor.errornot = 这不是地图文件。 editor.errorheader = 此地图文件无效或已损坏。 editor.errorname = 地图没有定义名称。 加载的可能是存档文件? +editor.errorlocales = Error reading invalid locale bundles. editor.update = 更新 editor.randomize = 重新生成 editor.moveup = 上移 @@ -519,6 +521,7 @@ editor.sectorgenerate = 生成区块 editor.resize = 改变尺寸 editor.loadmap = 载入地图 editor.savemap = 保存地图 +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = 已保存! editor.save.noname = 您还没有指定地图的名称!在“地图信息”菜单里设置一个名称。 editor.save.overwrite = 您正试图覆盖一张内置地图!在“地图信息”菜单里重新设置一个其他的名称。 @@ -606,6 +609,23 @@ filter.option.floor2 = 内层地形 filter.option.threshold2 = 内层比例 filter.option.radius = 半径 filter.option.percentile = 百分比 +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = 宽度: height = 高度: @@ -2262,6 +2282,7 @@ unit.emanate.description = 保护卫城核心,可建造建筑。 使用一对 lst.read = 从连接的内存读取数字 lst.write = 向连接的内存写入数字 lst.print = 添加文字到打印缓存\n使用[accent]Print Flush[]后才会真正显示 +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = 添加绘图操作到绘图缓存\n使用[accent]Draw Flush[]后才会真正显示 lst.drawflush = 将绘图缓存中的[accent]Draw[]队列刷新到显示屏 lst.printflush = 将打印缓存中的[accent]Print[]队列刷新到信息板 @@ -2299,6 +2320,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]此处不允许处理器操控单位去建设 diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index bedb9b9313..aa8aa82eb9 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -438,6 +438,7 @@ editor.waves = 波次: editor.rules = 規則: editor.generation = 自動生成: editor.objectives = Objectives +editor.locales = Locale Bundles editor.ingame = 在遊戲中編輯 editor.playtest = 測試 editor.publish.workshop = 在工作坊上發佈 @@ -505,6 +506,7 @@ editor.errorlegacy = 此地圖太舊,並使用不支援的舊地圖格式。 editor.errornot = 這不是地圖檔。 editor.errorheader = 此地圖檔無效或已損毀。 editor.errorname = 地圖沒有定義名稱。 +editor.errorlocales = Error reading invalid locale bundles. editor.update = 更新 editor.randomize = 隨機化 editor.moveup = Move Up @@ -516,6 +518,7 @@ editor.sectorgenerate = 產生地區 editor.resize = 調整大小 editor.loadmap = 載入地圖 editor.savemap = 儲存地圖 +editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them? editor.saved = 已儲存! editor.save.noname = 您的地圖沒有名稱!在「地圖資訊」畫面設定一個名稱。 editor.save.overwrite = 您的地圖覆寫了內建的地圖!在「地圖資訊」畫面設定其他名稱。 @@ -603,6 +606,23 @@ filter.option.floor2 = 次要地板 filter.option.threshold2 = 次要閾值 filter.option.radius = 半徑 filter.option.percentile = 百分比 +locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable) +locales.deletelocale = Are you sure you want to delete this locale bundle? +locales.applytoall = Apply Changes To All Locales +locales.addtoother = Add To Other Locales +locales.rollback = Rollback to last applied +locales.filter = Property filter +locales.searchname = Search name... +locales.searchvalue = Search value... +locales.searchlocale = Search locale... +locales.byname = By name +locales.byvalue = By value +locales.showcorrect = Show properties that are present in all locales and have unique values everywhere +locales.showmissing = Show properties that are missing in some locales +locales.showsame = Show properties that have same values in different locales +locales.viewproperty = View in all locales +locales.viewing = Viewing property "{0}" +locales.addicon = Add Icon width = 寬度: height = 長度: @@ -2248,6 +2268,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = [accent]讀取[]記憶體中的一項數值 lst.write = [accent]寫入[]一項數值到記憶體中 lst.print = 將文字加入輸出的暫存中,搭配[accent]Print Flush[], [accent]Flush message[]使用 +lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" lst.draw = 將圖形加入顯示的暫存中,搭配[accent]Draw Flush[]使用 lst.drawflush = 將所有暫存的[accent]Draw[]指令推到顯示器上 lst.printflush = 將所有暫存的[accent]Print[]指令推到訊息板上 @@ -2285,6 +2306,7 @@ lst.effect = Create a particle effect. lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second at most. lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world. lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction. +lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first. logic.nounitbuild = [red]單位建造邏輯已被禁止。 From de50b207e5c3f75b6c95decdba87f4e5a083a4eb Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 1 Dec 2023 21:16:37 -0500 Subject: [PATCH 16/20] Revert back to {0}-style format --- core/assets/bundles/bundle.properties | 2 +- core/src/mindustry/logic/LExecutor.java | 22 ++++++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 708d3bd0e1..9efc9b9a4b 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -2288,7 +2288,7 @@ unit.emanate.description = Builds structures to defend the Acropolis core. Repai lst.read = Read a number from a linked memory cell. lst.write = Write a number to a linked memory cell. lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. -lst.format = Replace next placeholder ("[accent]@[]") in text buffer with a value.\nExample:\n[accent]print "test @"\nformat "example" +lst.format = Replace next placeholder in text buffer with a value.\nDoes not do anything if placeholder pattern is invalid.\nPlaceholder pattern: "{[accent]number 0-9[]}"\nExample:\n[accent]print "test {0}"\nformat "example" lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. lst.drawflush = Flush queued [accent]Draw[] operations to a display. lst.printflush = Flush queued [accent]Print[] operations to a message block. diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index 253d452b0c..01e5266fea 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -1113,7 +1113,21 @@ public class LExecutor{ if(exec.textBuffer.length() >= maxTextBuffer) return; - int placeholderIndex = exec.textBuffer.indexOf("@"); + int placeholderIndex = -1; + int placeholderNumber = 10; + + for(int i = 0; i < exec.textBuffer.length(); i++){ + if(exec.textBuffer.charAt(i) == '{' && exec.textBuffer.length() - i > 2){ + char numChar = exec.textBuffer.charAt(i + 1); + + if(numChar >= '0' && numChar <= '9' && exec.textBuffer.charAt(i + 2) == '}'){ + if(numChar - '0' < placeholderNumber){ + placeholderNumber = numChar - '0'; + placeholderIndex = i; + } + } + } + } if(placeholderIndex == -1) return; @@ -1122,13 +1136,13 @@ public class LExecutor{ if(v.isobj && value != 0){ String strValue = PrintI.toString(v.objval); - exec.textBuffer.replace(placeholderIndex, placeholderIndex + 1, strValue); + exec.textBuffer.replace(placeholderIndex, placeholderIndex + 3, strValue); }else{ //display integer version when possible if(Math.abs(v.numval - (long)v.numval) < 0.00001){ - exec.textBuffer.replace(placeholderIndex, placeholderIndex + 1, (long)v.numval + ""); + exec.textBuffer.replace(placeholderIndex, placeholderIndex + 3, (long)v.numval + ""); }else{ - exec.textBuffer.replace(placeholderIndex, placeholderIndex + 1, v.numval + ""); + exec.textBuffer.replace(placeholderIndex, placeholderIndex + 3, v.numval + ""); } } } From c63e853f8b3a633ba041bd4205b58ac6ea3fbd8b Mon Sep 17 00:00:00 2001 From: 112Hack <144626073+112Hack@users.noreply.github.com> Date: Sat, 2 Dec 2023 18:48:07 +0300 Subject: [PATCH 17/20] Update servers_v7.json (#9338) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index dccae5b7e7..c8e026b26a 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -13,7 +13,7 @@ }, { "name": "CMS", - "address": ["195.2.84.144","23.88.73.88:25617"] + "address": ["195.2.84.144","65.108.101.89:32577"] }, { "name": "ShardDustry Eventos", From c353163c34706ce154d9254a756de91dd7ee30f0 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 2 Dec 2023 20:04:34 -0500 Subject: [PATCH 18/20] Fixed #9342 --- core/src/mindustry/entities/comp/BuilderComp.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/entities/comp/BuilderComp.java b/core/src/mindustry/entities/comp/BuilderComp.java index 64e9e155fa..64a575bb16 100644 --- a/core/src/mindustry/entities/comp/BuilderComp.java +++ b/core/src/mindustry/entities/comp/BuilderComp.java @@ -109,8 +109,8 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{ var core = core(); - //nothing to build. - if(buildPlan() == null) return; + //nothing to build, or core doesn't exist + if(buildPlan() == null || (core == null && !infinite)) return; //find the next build plan if(plans.size > 1){ @@ -163,7 +163,7 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{ } //if there is no core to build with or no build entity, stop building! - if((core == null && !infinite) || !(tile.build instanceof ConstructBuild entity)){ + if(!(tile.build instanceof ConstructBuild entity)){ continue; } From a0dc08aaca7893c938e5b3da5a341e2352c0b872 Mon Sep 17 00:00:00 2001 From: The1Crux <134880334+The1Crux@users.noreply.github.com> Date: Mon, 4 Dec 2023 07:44:17 -0400 Subject: [PATCH 19/20] Update servers_v7.json (#9345) new slots --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index c8e026b26a..f14b001d17 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -9,7 +9,7 @@ }, { "name": "Crux's Revelations", - "address": ["de-free-01.hosts.optikservers.com:31528","de-prem-01.hosts.optikservers.com:35160"] + "address": ["de-free-01.hosts.optikservers.com:31528","de-prem-01.hosts.optikservers.com:35160", "de-prem-01.hosts.optikservers.com:35116", "de-prem-01.hosts.optikservers.com:35922"] }, { "name": "CMS", From 5d4d904ef93a13fac56125ad2b647ac9267592d6 Mon Sep 17 00:00:00 2001 From: OSP <76648940+osp54@users.noreply.github.com> Date: Mon, 4 Dec 2023 18:35:37 +0300 Subject: [PATCH 20/20] Darkdustry reborn. Again. (#9346) --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index f14b001d17..df78ef83f7 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -81,7 +81,7 @@ }, { "name": "MinDurka", - "address": ["143.47.246.70", "143.47.246.70:3001", "143.47.246.70:3002", "143.47.246.70:3003", "143.47.246.70:3004", "143.47.246.70:3005", "143.47.246.70:3006", "143.47.246.70:3007", "143.47.246.70:3008", "143.47.246.70:3009", "143.47.246.70:3010"] + "address": ["81.30.157.68", "81.30.157.68:3001", "81.30.157.68:3002", "81.30.157.68:3003", "81.30.157.68:3004", "81.30.157.68:3005", "81.30.157.68:3006", "81.30.157.68:3007", "81.30.157.68:3008", "81.30.157.68:3009", "81.30.157.68:3010"] }, { "name": "Chaotic Neutral",