diff --git a/core/assets/bundles/bundle_hu.properties b/core/assets/bundles/bundle_hu.properties index e35f55df03..ed271c3967 100644 --- a/core/assets/bundles/bundle_hu.properties +++ b/core/assets/bundles/bundle_hu.properties @@ -2927,7 +2927,7 @@ lglobal.@clientName = A kódot futtató kliens játékosneve lglobal.@clientTeam = A kódot futtató kliens csapatazonosítója lglobal.@clientMobile = Igaz, ha a kódot futtató kliens egy hordozható eszköz, egyébként hamis lglobal.@clientMusicPlaying = Igaz, ha jelenleg folyamatban van bármilyen zene lejátszása -lglobal.@clientCurrentMusic = A jelenleg játszott zeneszám neve, vagy nulla +lglobal.@clientCurrentMusic = A jelenleg játszott zeneszám neve, vagy null lenum.type = Az épület/egység típusa.\nPéldául bármilyen elosztó esetén a [accent]@router[] értéket adja vissza.\nNem karakterlánc. lenum.shoot = Lövés egy adott pontra. @@ -2950,63 +2950,63 @@ laccess.displayheight = Egy kijelzőblokk magassága pixelben. laccess.buffersize = Üzenetek esetén: A tartalom hossza.\nKijelzők esetén: A feldolgozatlan grafikus parancsok száma. laccess.operations = A blokkon végrehajtott műveletek száma.\nKijelzők esetén a drawflush-műveletek számát adja vissza. laccess.maxunits = Egy csapat maximális egységeinek száma.\nCsak támaszpontokból érzékelhető. -laccess.totalitems = Total number of items contained. -laccess.firstitem = First item contained, or null if empty. -laccess.totalliquids = Total amount of liquid contained. -laccess.totalpower = For blocks with a buffered power store, the amount of power stored; for other blocks, buffer fullness from 0 to 1. -laccess.itemcapacity = Maximum number of items this building can hold. -laccess.liquidcapacity = Maximum amount of liquid this building can hold. -laccess.powercapacity = Maximum amount of power this building can store. -laccess.powernetstored = Total power stored in the connected power grid. -laccess.powernetcapacity = Total power storage capacity of the connected power grid. -laccess.powernetin = Power entering the connected power grid, per second. -laccess.powernetout = Power leaving the connected power grid, per second. -laccess.ammo = Current ammo count of a turret. -laccess.ammocapacity = Maximum ammo count of a turret. -laccess.health = Current health.\nFor bullets, their damage. -laccess.maxhealth = Maximum health.\nFor bullets, the base damage. -laccess.heat = Current heat of a turret that consumes heat, 0 to 1. -laccess.shield = Current shield amount of a unit. -laccess.armor = Armor value; flat damage reduction per hit. -laccess.efficiency = Operating efficiency of a building, where 1 is nominal. -laccess.timescale = Time scale multiplier affecting a building, where 1 is normal speed. -laccess.rotation = Facing angle of a unit or turret, in degrees.\nFor most other buildings, the 0 to 3 orientation. -laccess.x = X position, in tiles. -laccess.y = Y position, in tiles. -laccess.velocityx = X velocity of a unit, in tiles/sec. -laccess.velocityy = Y velocity of a unit, in tiles/sec. -laccess.shootx = X coordinate a unit or turret is aiming at. -laccess.shooty = Y coordinate a unit or turret is aiming at. -laccess.camerax = X position of the controlling player's camera. -laccess.cameray = Y position of the controlling player's camera. -laccess.camerawidth = Width of the controlling player's view, in tiles. -laccess.cameraheight = Height of the controlling player's view, in tiles. -laccess.solid = Whether this building blocks movement. -laccess.range = Range of a unit or turret, in tiles. -laccess.shooting = Whether a unit or turret is currently shooting. -laccess.boosting = Whether a unit is currently boosting or flying over terrain. -laccess.minex = X tile coordinate a unit is mining, or -1 if not mining. -laccess.miney = Y tile coordinate a unit is mining, or -1 if not mining. -laccess.mining = Whether a unit is currently mining. -laccess.buildx = X tile coordinate a unit is building at, or -1 if not building. -laccess.buildy = Y tile coordinate a unit is building at, or -1 if not building. -laccess.pingx = X coordinate a player is pinging, or null if not pinging. -laccess.pingy = Y coordinate a player is pinging, or null if not pinging. -laccess.pingtext = Text of a player's current ping, or null if not pinging. -laccess.building = Building a unit is currently constructing, or null. -laccess.breaking = Building a unit is currently deconstructing, or null. -laccess.team = Team ID of a unit or building. -laccess.flag = Numeric flag value stored on a unit. -laccess.flying = Whether a unit is currently airborne. -laccess.name = Name of the player controlling this unit, or null. -laccess.payloadcount = Number of payloads currently held. -laccess.payloadtype = Type of the last payload picked up, or null. -laccess.totalpayload = Combined size of all held payloads. -laccess.payloadcapacity = Maximum combined payload size a unit or building can carry. -laccess.selectedblock = Block currently selected by the controlling player, or null. -laccess.selectedrotation = Build rotation currently selected by the controlling player, 0 to 3. -laccess.bulletlifetime = Total lifetime of a bullet, in ticks. -laccess.bullettime = Time a bullet has existed, in ticks. +laccess.totalitems = A tárolt elemek teljes száma. +laccess.firstitem = Az első tárolt elem, vagy null, ha üres. +laccess.totalliquids = A tárolt folyadék teljes mennyisége. +laccess.totalpower = Pufferezett energiatárolóval rendelkező blokkoknál a tárolt energia mennyisége; más blokkoknál a puffer telítettsége 0-tól 1-ig. +laccess.itemcapacity = A maximális elemszám, amit ez az épület tárolni tud. +laccess.liquidcapacity = A maximális folyadékmennyiség, amit ez az épület tárolni tud. +laccess.powercapacity = A maximális energiamennyiség, amit ez az épület tárolni tud. +laccess.powernetstored = Az összekapcsolt energiahálózatban tárolt teljes energiamennyiség. +laccess.powernetcapacity = Az összekapcsolt energiahálózat teljes energiatárolási kapacitása. +laccess.powernetin = Az összekapcsolt energiahálózatba másodpercenként belépő energia. +laccess.powernetout = Az összekapcsolt energiahálózatból másodpercenként kilépő energia. +laccess.ammo = Egy lövegtorony jelenlegi lőszerkészlete. +laccess.ammocapacity = Egy lövegtorony maximális lőszerkészlete. +laccess.health = Jelenlegi életerő.\nLövedékek esetén azok sebzése. +laccess.maxhealth = Maximális életerő.\nLövedékek esetén az alapsebzés. +laccess.heat = Hőt fogyasztó lövegtorony jelenlegi hője, 0-tól 1-ig. +laccess.shield = Egy egység jelenlegi pajzsának mennyisége. +laccess.armor = Páncélzat értéke; fix sebzéscsökkentés találatonként. +laccess.efficiency = Egy épület működési hatásfoka, ahol az 1 a normális érték. +laccess.timescale = Egy épületre ható időskálaszorzó, ahol az 1 a normál sebesség. +laccess.rotation = Egy egység vagy lövegtorony irányszöge fokban.\nA legtöbb más épületnél a 0-tól 3-ig terjedő tájolás. +laccess.x = X-pozíció mezőkben. +laccess.y = Y-pozíció mezőkben. +laccess.velocityx = Egy egység X-irányú sebessége (mező/mp). +laccess.velocityy = Egy egység Y-irányú sebessége (mező/mp). +laccess.shootx = Annak a mezőnek az X-koordinátája, amire egy egység vagy lövegtorony céloz. +laccess.shooty = Annak a mezőnek az Y-koordinátája, amire egy egység vagy lövegtorony céloz. +laccess.camerax = Az irányító játékos kamerájának X-pozíciója. +laccess.cameray = Az irányító játékos kamerájának Y-pozíciója. +laccess.camerawidth = Az irányító játékos nézetének szélessége mezőkben. +laccess.cameraheight = Az irányító játékos nézetének magassága mezőkben. +laccess.solid = Meghatározza, hogy akadályozza-e ez az épület a mozgást. +laccess.range = Egy egység vagy lövegtorony hatótávolsága mezőkben. +laccess.shooting = Meghatározza, hogy éppen lő-e egy egység vagy lövegtorony. +laccess.boosting = Meghatározza, hogy gyorsít-e, vagy repül-e éppen a terep felett egy egység. +laccess.minex = Annak a mezőnek az X-koordinátája, amit egy egység bányászik, vagy -1, ha nem. +laccess.miney = Annak a mezőnek az Y-koordinátája, amit egy egység bányászik, vagy -1, ha nem. +laccess.mining = Meghatározza, hogy éppen bányászik-e egy egység. +laccess.buildx = Annak a mezőnek az X-koordinátája, ahol egy egység épít, vagy -1, ha nem. +laccess.buildy = Annak a mezőnek az Y-koordinátája, ahol egy egység épít, vagy -1, ha nem. +laccess.pingx = Annak a mezőnek az X-koordinátája, amit egy játékos pingel,\nvagy null, ha nem. +laccess.pingy = Annak a mezőnek az Y-koordinátája, amit egy játékos pingel,\nvagy null, ha nem. +laccess.pingtext = Egy játékos jelenlegi pingjének szövege, vagy null, ha nincs ping. +laccess.building = Az az épület, amit egy egység éppen épít, vagy null. +laccess.breaking = Az az épület, amit egy egység éppen lebont, vagy null. +laccess.team = Egy egység vagy épület csapatának azonosítója. +laccess.flag = Egy egységen tárolt számszerű jelző értéke. +laccess.flying = Meghatározza, hogy repül-e éppen egy egység. +laccess.name = Az egységet irányító játékos neve, vagy null. +laccess.payloadcount = A jelenleg hordozott rakományok száma. +laccess.payloadtype = A legutóbb felvett rakomány típusa, vagy null. +laccess.totalpayload = Az összes hordozott rakomány együttes mérete. +laccess.payloadcapacity = A maximális együttes rakományméret, amit egy egység vagy épület elbír. +laccess.selectedblock = Az irányító játékos által jelenleg kiválasztott blokk, vagy null. +laccess.selectedrotation = Az irányító játékos által jelenleg kiválasztott építési irány, 0-tól 3-ig. +laccess.bulletlifetime = Egy lövedék teljes élettartama tickekben. +laccess.bullettime = Az idő, amióta egy lövedék létezik, tickekben. lcategory.unknown = Ismeretlen lcategory.unknown.description = Nem kategorizált utasítások. @@ -3150,11 +3150,11 @@ lenum.boost = Erősítés indítása/leállítása. lenum.flushtext = Az írási puffer tartalmának ürítése a jelölőre, ha alkalmazható.\nHa a „fetch” igaz, akkor megpróbálja lekérni a tulajdonságokat a pálya nyelvi csomagjából vagy a játék csomagjából. lenum.texture = A textúra neve közvetlenül a játék textúra-atlaszából (úgynevezett „kebab-case” elnevezési stílus használatával).\nHa a „printFlush” igaz, akkor a szöveges puffer tartalmát használja szöveges argumentumként. -lenum.texturesize = A textúra mérete mezőben. A nulla érték a jelölő szélességét az eredeti textúra méretére skálázza. +lenum.texturesize = A textúra mérete mezőben. A null érték a jelölő szélességét az eredeti textúra méretére skálázza. lenum.autoscale = Meghatározza, hogy a jelölő a játékos nagyítási szintjéhez igazodik-e. -lenum.posi = Indexelt pozíció, vonal- és négyszögjelzőkhöz használatos, ahol a nulla az első pozíció. +lenum.posi = Indexelt pozíció, vonal- és négyszögjelzőkhöz használatos, ahol a null az első pozíció. lenum.uvi = A textúra pozíciója nullától egyig, négyzetjelölőkhöz használatos. -lenum.colori = Indexelt szín, vonal- és négyzetjelölőkhöz használatos, ahol a nulla az első szín. +lenum.colori = Indexelt szín, vonal- és négyzetjelölőkhöz használatos, ahol a null az első szín. lenum.wavetimer = Meghatározza, hogy a hullámok automatikusan indulnak-e az időzítő alapján. Ha nem, akkor a hullámok a lejátszásgomb megnyomásakor indulnak. lenum.wave = Jelenlegi hullámszám. Bármi lehet a nem-hullámalapú játékmódokban. @@ -3461,7 +3461,7 @@ radartarget.label.player = játékos radartarget.label.attacker = támadó radartarget.label.flying = légi radartarget.label.ground = földi -radartarget.label.boss = boss +radartarget.label.boss = főellenség tilelayer.label.floor = padló tilelayer.label.ore = érc tilelayer.label.block = blokk @@ -3527,7 +3527,7 @@ name.token.-lookup = = keresés name.token.type = típus name.token.get = lekérés name.token.team = csapat -name.token.angle = angle +name.token.angle = szög name.token.spawn = elhelyezés name.token.-bullet = = lövedék name.token.unit = egység diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 08f0297479..2d9f24ba6d 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -50,7 +50,7 @@ mods.browser.add = 安装 mods.browser.reinstall = 重新安装 mods.browser.view-releases = 查看版本 mods.browser.noreleases = [scarlet]找不到任何版本\n[accent]无法找到该模组的任何版本。请检查一下该模组的仓库是否发布了版本。 -mods.browser.current = [lightgray]Most recent commit +mods.browser.current = [lightgray]最新提交 mods.browser.latest = [lightgray][最新] mods.browser.releases = 版本 mods.browser.fetching = 获取版本中... @@ -145,7 +145,7 @@ mods.initfailed = [red]⚠[] Mindustry 上一次启动失败。这可能是由 mods = 模组 mods.name = 模组: mods.none = [lightgray]未找到模组! -mods.restore = Restore Failed +mods.restore = 恢复失败 mods.guide = 模组指南 mods.report = 举报错误 mods.openfolder = 打开文件夹 @@ -164,7 +164,7 @@ mod.installed = [[已安装] mod.display = [gray]模组:[orange] {0} mod.enabled = [lightgray]已启用 mod.disabled = [red]未启用 -mod.failed = [red]Failed +mod.failed = [red]失败 mod.multiplayer.compatible = [gray]支持多人游戏 mod.disable = 禁用 mod.version = 版本: @@ -1242,9 +1242,9 @@ stat.buildspeedmultiplier = 建造速度倍率 stat.reactive = 反应 stat.immunities = 免疫 stat.healing = 治疗 -stat.status = Status Effect +stat.status = 状态效果 stat.efficiency = [stat]{0}% 效率 -stat.chance = [stat]{0}%[lightgray] chance of [white] +stat.chance = [stat]{0}%[lightgray] 概率 [white] stat.hitsize = 碰撞箱大小 stat.resettime = 重置时间 @@ -1293,7 +1293,7 @@ ability.stat.minspeed = [stat]{0}格/秒[lightgray] 最低速度 ability.stat.duration = [stat]{0} 秒[lightgray] 持续时间 ability.stat.buildtime = [stat]{0} 秒[lightgray] 建造时间 -bar.displaytoolarge = 尺寸太大\n(Max:{0}x{0}) +bar.displaytoolarge = 尺寸太大\n(上限:{0}x{0}) bar.onlycoredeposit = 仅可将资源丢入核心 bar.drilltierreq = 需要更高级的钻头 bar.nobatterypower = 电池电力储存不足 @@ -1304,7 +1304,7 @@ bar.cargounitcap = 达到货运单位上限 bar.drillspeed = 挖掘速度:{0}/秒 bar.pumpspeed = 泵送速度:{0}/秒 bar.efficiency = 效率:{0}% -bar.yield = Yield: +{0}% +bar.yield = 产量: +{0}% bar.boost = 超速:+{0}% bar.powerbuffer = 电池电力:{0}/{1} bar.powerbalance = 电力:{0}/秒 @@ -1440,8 +1440,8 @@ setting.distinctcontrolgroups.name = 每单位限制一个编队 setting.distinctcontrolgroups.description = 启用后,每个单位只能从属于一个编队。 setting.modcrashdisable.name = 游戏启动崩溃后禁用模组 setting.modcrashdisable.description = 启用后,若启动时模组崩溃,则会禁用所有模组以避免无休止的崩溃。 -setting.animatedwater.name = 动态液体 -setting.animatedwater.description = 是否开启液体表面的动画,如水和矿渣。 +setting.animatedwater.name = 动态效果 +setting.animatedwater.description = 是否显示水、矿渣和护盾等表面的动画。 setting.playerindicators.name = 玩家指示器 setting.playerindicators.description = 在地图上显示标记,来指示其他玩家的方向。 setting.showpings.name = 显示标记 @@ -1743,7 +1743,7 @@ rules.enemyteam = 敌方队伍 rules.playerteam = 玩家队伍 rules.title.waves = 波次 rules.title.resourcesbuilding = 资源与建筑 -rules.title.enemy = 敌对阵营 +rules.title.enemy = 敌人 rules.title.unit = 单位 rules.title.experimental = 实验性 rules.title.environment = 环境 @@ -2836,7 +2836,7 @@ lst.read = 从连接的内存读取数字。 lst.write = 向连接的内存写入数字。 lst.print = 添加文字到打印缓存\n使用[accent]打印文本[]后才会真正显示。 lst.printchar = 向打印缓存添加一个 UTF-16 字符或内容图标。\n直到使用[accent]打印文本[]后才会真正显示。 -lst.format = 用一个值替换文本缓冲区中的下一个占位符。\n如果占位符模式无效,则不会执行任何操作。\n占位模式:"{[accent]number 0-9[]}"\n示例:\n[accent]打印 "test {0}"\n格式 “示例”。 +lst.format = 用一个值替换文本缓冲区中的下一个占位符。\n如果占位符模式无效,则不会执行任何操作。\n占位模式:"{[accent]number 0-9[]}"\n示例:\n[accent]打印 "test {0}"\n格式化 “示例”。 lst.draw = 添加绘图操作到绘图缓存\n使用[accent]打印绘图[]后才会真正显示。 lst.drawflush = 将绘图缓存中的[accent]绘图[]队列刷新到显示屏。 lst.printflush = 将打印缓存中的[accent]打印[]队列刷新到信息板。 @@ -2950,63 +2950,63 @@ laccess.displayheight = 显示屏的高度(以像素为单位)。 laccess.buffersize = 显示器图形缓冲区中未处理的命令数。 laccess.operations = 方块执行操作的次数。\n对于显示屏,返回[accent]打印绘图[]调用次数。 laccess.maxunits = 队伍能拥有的最大单位数。\n只能从核心中读取。 -laccess.totalitems = Total number of items contained. -laccess.firstitem = First item contained, or null if empty. -laccess.totalliquids = Total amount of liquid contained. -laccess.totalpower = For blocks with a buffered power store, the amount of power stored; for other blocks, buffer fullness from 0 to 1. -laccess.itemcapacity = Maximum number of items this building can hold. -laccess.liquidcapacity = Maximum amount of liquid this building can hold. -laccess.powercapacity = Maximum amount of power this building can store. -laccess.powernetstored = Total power stored in the connected power grid. -laccess.powernetcapacity = Total power storage capacity of the connected power grid. -laccess.powernetin = Power entering the connected power grid, per second. -laccess.powernetout = Power leaving the connected power grid, per second. -laccess.ammo = Current ammo count of a turret. -laccess.ammocapacity = Maximum ammo count of a turret. -laccess.health = Current health.\nFor bullets, their damage. -laccess.maxhealth = Maximum health.\nFor bullets, the base damage. -laccess.heat = Current heat of a turret that consumes heat, 0 to 1. -laccess.shield = Current shield amount of a unit. -laccess.armor = Armor value; flat damage reduction per hit. -laccess.efficiency = Operating efficiency of a building, where 1 is nominal. -laccess.timescale = Time scale multiplier affecting a building, where 1 is normal speed. -laccess.rotation = Facing angle of a unit or turret, in degrees.\nFor most other buildings, the 0 to 3 orientation. -laccess.x = X position, in tiles. -laccess.y = Y position, in tiles. -laccess.velocityx = X velocity of a unit, in tiles/sec. -laccess.velocityy = Y velocity of a unit, in tiles/sec. -laccess.shootx = X coordinate a unit or turret is aiming at. -laccess.shooty = Y coordinate a unit or turret is aiming at. -laccess.camerax = X position of the controlling player's camera. -laccess.cameray = Y position of the controlling player's camera. -laccess.camerawidth = Width of the controlling player's view, in tiles. -laccess.cameraheight = Height of the controlling player's view, in tiles. -laccess.solid = Whether this building blocks movement. -laccess.range = Range of a unit or turret, in tiles. -laccess.shooting = Whether a unit or turret is currently shooting. -laccess.boosting = Whether a unit is currently boosting or flying over terrain. -laccess.minex = X tile coordinate a unit is mining, or -1 if not mining. -laccess.miney = Y tile coordinate a unit is mining, or -1 if not mining. -laccess.mining = Whether a unit is currently mining. -laccess.buildx = X tile coordinate a unit is building at, or -1 if not building. -laccess.buildy = Y tile coordinate a unit is building at, or -1 if not building. -laccess.pingx = X coordinate a player is pinging, or null if not pinging. -laccess.pingy = Y coordinate a player is pinging, or null if not pinging. -laccess.pingtext = Text of a player's current ping, or null if not pinging. -laccess.building = Building a unit is currently constructing, or null. -laccess.breaking = Building a unit is currently deconstructing, or null. -laccess.team = Team ID of a unit or building. -laccess.flag = Numeric flag value stored on a unit. -laccess.flying = Whether a unit is currently airborne. -laccess.name = Name of the player controlling this unit, or null. -laccess.payloadcount = Number of payloads currently held. -laccess.payloadtype = Type of the last payload picked up, or null. -laccess.totalpayload = Combined size of all held payloads. -laccess.payloadcapacity = Maximum combined payload size a unit or building can carry. -laccess.selectedblock = Block currently selected by the controlling player, or null. -laccess.selectedrotation = Build rotation currently selected by the controlling player, 0 to 3. -laccess.bulletlifetime = Total lifetime of a bullet, in ticks. -laccess.bullettime = Time a bullet has existed, in ticks. +laccess.totalitems = 含有的物品总数。 +laccess.firstitem = 含有的第一个物品,若为空则返回 null。 +laccess.totalliquids = 含有的液体总量。 +laccess.totalpower = 对于能储电的建筑,指存储的电量;对于其他建筑,以0~1表示供电满足率。 +laccess.itemcapacity = 该建筑可容纳的最大物品数量。 +laccess.liquidcapacity = 该建筑可容纳的最大液体量。 +laccess.powercapacity = 该建筑可存储的最大电量。 +laccess.powernetstored = 相连接电网的总储电量。 +laccess.powernetcapacity = 相连接电网的总储电容量。 +laccess.powernetin = 相连接的电网每秒输入的电力。 +laccess.powernetout = 相连接的电网每秒输出的电力。 +laccess.ammo = 炮塔当前的弹药数量。 +laccess.ammocapacity = 炮塔的最大弹药量。 +laccess.health = 当前生命值\n对于子弹,指其伤害值。 +laccess.maxhealth = 最大生命值\n对于子弹,指其基础伤害。 +laccess.heat = 耗热炮塔当前的热量值,范围为 0 到 1。 +laccess.shield = 单位当前的护盾值。 +laccess.armor = 护甲值;每次受击时的固定伤害减免。 +laccess.efficiency = 建筑的运行效率,以 1 为标准值。 +laccess.timescale = 影响建筑的时间缩放倍率,其中1为正常速度。 +laccess.rotation = 单位或炮塔的朝向角度(以度为单位)。\n对于大多数其他建筑,朝向值为 0 到 3。 +laccess.x = X 坐标(以格为单位)。 +laccess.y = Y 坐标(以格为单位)。 +laccess.velocityx = 单位的 X 轴速度,单位为格/秒。 +laccess.velocityy = 单位的 Y 轴速度,单位为格/秒。 +laccess.shootx = 单位或炮塔所瞄准目标的 X 坐标。 +laccess.shooty = 单位或炮塔所瞄准目标的 Y 坐标。 +laccess.camerax = 控制玩家镜头的 X 坐标。 +laccess.cameray = 控制玩家镜头的 Y 坐标。 +laccess.camerawidth = 控制玩家镜头的宽度(以格为单位)。 +laccess.cameraheight = 控制玩家镜头的高度(以格为单位)。 +laccess.solid = 普通陆地单位是否不可通过该建筑。 +laccess.range = 单位或炮塔的射程(以格为单位)。 +laccess.shooting = 单位或炮塔当前是否正在射击。 +laccess.boosting = 单位当前是否处于助推状态或正在飞越地形。 +laccess.minex = 单位所采矿物的 X 地块坐标,若未在采矿则为 -1。 +laccess.miney = 单位所采矿物的 Y 地块坐标,若未在采矿则为 -1。 +laccess.mining = 单位是否正在进行采矿。 +laccess.buildx = 单位正在建造的建筑 X 坐标,若未建造则为 -1。 +laccess.buildy = 单位正在建造的建筑 Y 坐标,若未建造则为 -1。 +laccess.pingx = 玩家标记的标记点位置的 X 坐标,若未标记则为 null。 +laccess.pingy = 玩家标记的标记点位置的 Y 坐标,若未标记则为 null。 +laccess.pingtext = 玩家标记的标记点文本内容,若无则为 null。 +laccess.building = 正在建造的建筑原始名称,若无则为 null。 +laccess.breaking = 正在拆除的建筑原始名称,若无则为 null。 +laccess.team = 单位或建筑的队伍 ID。 +laccess.flag = 存储在单位身上的 flag。 +laccess.flying = 单位当前是否正在飞行。 +laccess.name = 控制该单位的玩家名称,若无则为 null。 +laccess.payloadcount = 当前持有的有效载荷数量。 +laccess.payloadtype = 最后获取的有效载荷类型,若无则为 null。 +laccess.totalpayload = 所有持有的有效载荷的总大小。 +laccess.payloadcapacity = 单位或建筑所能承载的最大综合有效载荷大小。 +laccess.selectedblock = 玩家当前在建筑列表选中的方块,若无则为 null。 +laccess.selectedrotation = 玩家当前在建筑列表选择的建造旋转角度,范围为 0 到 3。 +laccess.bulletlifetime = 子弹可存在的总时长(以 tick 为单位)。 +laccess.bullettime = 子弹已存在的时长(以 tick 为单位)。 lcategory.unknown = 未知 lcategory.unknown.description = 未分类的指令 @@ -3116,7 +3116,7 @@ unitradar.output = 找到的单位存入该变量 control.of = 要控制的建筑 control.unit = 要瞄准的单位或建筑 -control.shoot = 是否射击 +control.shoot = 射击? unitlocate.enemy = 是否搜寻敌方建筑(0 或 false 则搜寻己方建筑) unitlocate.found = 若找到,在该变量中存入 true;未找到则存入 false @@ -3159,7 +3159,7 @@ lenum.colori = 索引位置,用于线和四边形标记,索引零表示第 lenum.wavetimer = 波次是否自动出现在计时器上。如果没有,按下播放按钮时会出现波次 lenum.wave = 当前波数,可以是非波次模式下的任何值 lenum.currentwavetime = 波次倒计时(以 tick 为单位) -lenum.waves = 波次是否可以生成 +lenum.waves = 波次是否可生成 lenum.wavesending = 是否可以通过播放按钮手动生成波次 lenum.attackmode = 游戏是否为进攻模式 lenum.wavespacing = 波次之间的时间间隔(以 tick 为单位) @@ -3226,8 +3226,8 @@ instruction.setrate = 设置速率 instruction.fetch = 获取对象 instruction.sync = 网络同步 instruction.clientdata = 客户端数据 -instruction.getflag = 获取flag -instruction.setflag = 设置flag +instruction.getflag = 获取 flag +instruction.setflag = 设置 flag instruction.setprop = 设置属性 instruction.playsound = 播放音效 instruction.playmusic = 播放音乐 @@ -3258,8 +3258,8 @@ cutsceneaction.label.pan = 移动 cutsceneaction.label.zoom = 缩放 cutsceneaction.label.stop = 停止 cutsceneaction.label.shake = 抖动 -cutsceneaction.label.gethud = 获取Hud -cutsceneaction.label.sethud = 设置Hud +cutsceneaction.label.gethud = 获取 Hud +cutsceneaction.label.sethud = 设置 Hud fetchtype.label.unit = 单位 fetchtype.label.player = 玩家控制单位 fetchtype.label.core = 核心 @@ -3299,8 +3299,8 @@ laccess.label.ammo = 弹药量 laccess.label.ammocapacity = 弹药容量 laccess.label.currentammotype = 当前弹药类型 laccess.label.memorycapacity = 内存块单元数量 -laccess.label.health = 生命值 -laccess.label.maxhealth = 最大生命值 +laccess.label.health = 生命值/伤害 +laccess.label.maxhealth = 最大生命值/基础伤害 laccess.label.heat = 热量 laccess.label.shield = 护盾 laccess.label.armor = 护甲 @@ -3314,10 +3314,10 @@ laccess.label.velocityx = X轴移动速度 laccess.label.velocityy = Y轴移动速度 laccess.label.shootx = 射击X坐标 laccess.label.shooty = 射击Y坐标 -laccess.label.camerax = 相机X坐标 -laccess.label.cameray = 相机Y坐标 -laccess.label.camerawidth = 相机宽度 -laccess.label.cameraheight = 相机高度 +laccess.label.camerax = 镜头X坐标 +laccess.label.cameray = 镜头Y坐标 +laccess.label.camerawidth = 镜头宽度 +laccess.label.cameraheight = 镜头高度 laccess.label.displaywidth = 显示屏宽度 laccess.label.displayheight = 显示屏高度 laccess.label.buffersize = 缓冲区大小 @@ -3326,18 +3326,18 @@ laccess.label.size = 大小/长度 laccess.label.solid = 实体 laccess.label.dead = 已摧毁/失效 laccess.label.range = 雷达范围 -laccess.label.shooting = 射击状态 -laccess.label.boosting = 助推状态 +laccess.label.shooting = 射击? +laccess.label.boosting = 助推? laccess.label.minex = 采矿X坐标 laccess.label.miney = 采矿Y坐标 -laccess.label.mining = 采矿状态 +laccess.label.mining = 采矿? laccess.label.buildx = 建造于X坐标 laccess.label.buildy = 建造于Y坐标 laccess.label.pingx = 标记点X坐标 laccess.label.pingy = 标记点Y坐标 laccess.label.pingtext = 标记点文本 -laccess.label.building = 建造状态 -laccess.label.breaking = 破坏状态 +laccess.label.building = 建造的建筑 +laccess.label.breaking = 破坏的建筑 laccess.label.speed = 速度 laccess.label.team = 队伍 laccess.label.type = 类型 @@ -3385,7 +3385,7 @@ lmarkercontrol.label.fontsize = 字体大小 lmarkercontrol.label.textheight = 文本高度 lmarkercontrol.label.textalign = 文本对齐 lmarkercontrol.label.linealign = 线对齐 -lmarkercontrol.label.labelflags = flag标签 +lmarkercontrol.label.labelflags = flag 标签 lmarkercontrol.label.texture = 纹理 lmarkercontrol.label.texturesize = 纹理大小 lmarkercontrol.label.posi = 位置 @@ -3393,7 +3393,7 @@ lmarkercontrol.label.uvi = 纹理位置范围 lmarkercontrol.label.colori = 颜色 logicrule.label.currentwavetime = 波次倒计时 logicrule.label.wavetimer = 有波次计时器? -logicrule.label.waves = 波次是否可以生成 +logicrule.label.waves = 波次可生成? logicrule.label.wave = 当前波数 logicrule.label.wavespacing = 波次间隔 logicrule.label.wavesending = 手动生成波次? @@ -3403,7 +3403,7 @@ logicrule.label.dropzoneradius = 敌人出生点半径 logicrule.label.unitcap = 单位上限 logicrule.label.maparea = 地图大小和有效范围 logicrule.label.lighting = 启用环境光? -logicrule.label.cangameover = 游戏可否结束 +logicrule.label.cangameover = 游戏可结束? logicrule.label.ambientlight = 环境光颜色 logicrule.label.unitlight = 单位光 logicrule.label.solarmultiplier = 太阳能板效率 @@ -3436,7 +3436,7 @@ lunitcontrol.label.itemtake = 从建筑取出物品 lunitcontrol.label.paydrop = 卸下载荷 lunitcontrol.label.paytake = 拾取载荷 lunitcontrol.label.payenter = 进入载荷 -lunitcontrol.label.flag = 赋予单位flag +lunitcontrol.label.flag = 赋予单位 flag lunitcontrol.label.mine = 采集矿物 lunitcontrol.label.build = 建造建筑 lunitcontrol.label.getblock = 用坐标获取类型 diff --git a/core/src/mindustry/editor/data/MapAudioView.java b/core/src/mindustry/editor/data/MapAudioView.java index 533b98e9a3..5074376fe5 100644 --- a/core/src/mindustry/editor/data/MapAudioView.java +++ b/core/src/mindustry/editor/data/MapAudioView.java @@ -38,10 +38,15 @@ public class MapAudioView implements AssetView{ Fi file = asset.getCacheFile(); var audioSource = (AudioSource)Core.assets.getOrNull(DataAudioLoader.prefix + asset.name, (Class)(type == DataAssetType.music ? Music.class : Sound.class)); - if(file == null || audioSource == null || !audioSource.valid()){ + if(file == null || audioSource == null || (!audioSource.valid() && !audioSource.isLazy())){ list.button(Icon.warning, Styles.graySquarei, iconMed, () -> ui.showInfo(file == null ? "@asset.broken" : "@asset.audio.invalid")).size(h); }else{ list.button(Icon.play, Styles.graySquarei, iconMed, () -> { + if(!audioSource.valid() && !audioSource.isLazy()){ + ui.showInfo("@asset.audio.invalid"); + return; + } + if(lastPlaying != null && lastPlaying.countPlaying() > 0){ lastPlaying.stop(); if(lastPlaying == audioSource){ @@ -56,16 +61,26 @@ public class MapAudioView implements AssetView{ lastPlaying = s; s.play(control.sound.uiBus); } - }).update(i -> i.getStyle().imageUp = audioSource != null && audioSource.countPlaying() > 0 ? Icon.pause : Icon.play).size(h); + }).update(i -> i.getStyle().imageUp = (!audioSource.isLazy() && !audioSource.valid()) ? Icon.warning : audioSource.countPlaying() > 0 ? Icon.pause : Icon.play).size(h); } float w = (mobile ? 390f : 450f); list.table(Styles.grayPanel, in -> { + in.left(); in.table(v -> { v.left(); - v.add("[accent]" + asset.name).labelAlign(Align.left).left().ellipsis(true).width(w / 2f); + v.add("[accent]" + asset.name).labelAlign(Align.left).left().ellipsis(true).width(audioSource instanceof Music ? w / 2f : w * 0.8f); v.row(); - v.add("[lightgray][[" + (audioSource == null ? "?" : UI.formatTime(audioSource.getLength() * 60f)) + "]").left(); + if(audioSource != null){ + Runnable addTime = () -> v.add("[lightgray][[" + UI.formatTime(audioSource.getLength() * 60f) + "]").left(); + + if(audioSource.valid()){ + addTime.run(); + }else if(audioSource instanceof Sound s){ + //force-load sounds when viewing so that length/invalid status is shown + s.checkLazyLoad(addTime); + } + } }).width(w / 2f).tooltip("dp-" + asset.name.replace(' ', '_')); if(audioSource instanceof Music m){ diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index 70a0cb7f94..a0b41203b0 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -343,6 +343,10 @@ public class Rules{ return unitFactoryActivationDelay + teams.get(team).unitFactoryActivationDelay; } + public boolean isInfiniteResources(Team team){ + return infiniteResources || teams.get(team).infiniteResources; + } + /** A team-specific ruleset. */ public static class TeamRule{ /** Whether, when AI is enabled, ships should be spawned from the core. TODO remove / unnecessary? */ diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index 0b5968c937..b011dbeeda 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -1590,7 +1590,7 @@ public class LExecutor{ public void run(LExecutor exec){ if(net.client()) return; - Tile tile = world.tile(Mathf.round(x.numf()), Mathf.round(y.numf())); + Tile tile = world.tile(x.numi(), y.numi()); if(tile != null && block.obj() instanceof Block b){ switch(layer){ case ore -> { diff --git a/core/src/mindustry/logic/LStatements.java b/core/src/mindustry/logic/LStatements.java index 219dd00e45..1491fa884c 100644 --- a/core/src/mindustry/logic/LStatements.java +++ b/core/src/mindustry/logic/LStatements.java @@ -440,11 +440,8 @@ public class LStatements{ //Q: why don't you just use arrays for this? //A: arrays aren't as easy to serialize so the code generator doesn't handle them - int c = 0; for(int i = 0; i < type.params.length; i++){ - - fields(table, type.params[i], i == 0 ? p1 : i == 1 ? p2 : i == 2 ? p3 : p4, i == 0 ? v -> p1 = v : i == 1 ? v -> p2 = v : i == 2 ? v -> p3 = v : v -> p4 = v); - + fields(table, type.params[i], type.params.length > 1 && LCanvas.isCompact(), i == 0 ? p1 : i == 1 ? p2 : i == 2 ? p3 : p4, i == 0 ? v -> p1 = v : i == 1 ? v -> p2 = v : i == 2 ? v -> p3 = v : v -> p4 = v); } } @@ -537,7 +534,7 @@ public class LStatements{ table.add(" = "); - tfield = field(table, type, str -> type = str).padRight(0f).get(); + tfield = field(table, type, str -> type = str).width(LCanvas.isCompact() ? 140f : 180f).padRight(0f).get(); table.button(b -> { b.image(Icon.pencilSmall); @@ -699,16 +696,7 @@ public class LStatements{ }else{ //"function"-type operations have the name at the left and arguments on the right if(op.func){ - if(LCanvas.isCompact()){ - table.left(); - table.table(c -> { - c.color.set(category().color); - c.left(); - funcs(c, table); - }).colspan(2).left(); - }else{ - funcs(table, table); - } + funcs(table, table); }else{ field(table, a, str -> a = str); @@ -2406,7 +2394,7 @@ public class LStatements{ private static String soundCategory(String entryName){ String normalized = entryName.replace('\\', '/'); int end = normalized.lastIndexOf('/'); - if(end < 0) return "Data Patch"; + if(end < 0) return "data patch"; int start = normalized.lastIndexOf('/', end - 1); return normalized.substring(start + 1, end); diff --git a/core/src/mindustry/mod/DataAudioLoader.java b/core/src/mindustry/mod/DataAudioLoader.java index ed32ce8d0f..4f523f5aa9 100644 --- a/core/src/mindustry/mod/DataAudioLoader.java +++ b/core/src/mindustry/mod/DataAudioLoader.java @@ -30,7 +30,8 @@ public class DataAudioLoader{ } Fi file = asset.getCacheFile(); - Sound sound = Vars.headless || file == null ? new Sound() : Sound.createStream(file); + //large sounds become streams, standard ones don't + Sound sound = Vars.headless || file == null ? new Sound() : file.length() > 100_000 ? Sound.createStream(file) : Sound.createLazy(file); loadedSounds.add(sound); Sounds.registerSound(sound, nextSoundId ++); diff --git a/core/src/mindustry/ui/Fonts.java b/core/src/mindustry/ui/Fonts.java index 1be30a82fc..3a117afa59 100644 --- a/core/src/mindustry/ui/Fonts.java +++ b/core/src/mindustry/ui/Fonts.java @@ -328,7 +328,7 @@ public class Fonts{ @Override public float imageSize(){ - return size; + return size / Scl.scl(1f); } }; diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index 255b5719f5..2c839fcd59 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -177,7 +177,7 @@ public class CustomRulesDialog extends BaseDialog{ number("@rules.blockdamagemultiplier", f -> rules.blockDamageMultiplier = f, () -> rules.blockDamageMultiplier); if(Core.bundle.get("configure").toLowerCase().contains(ruleSearch)){ - current.button("@configure", + current.button("@configure", Icon.boxSmall, () -> loadoutDialog.show(999999, rules.loadout, i -> true, () -> rules.loadout.clear().add(new ItemStack(Items.copper, 100)), @@ -186,7 +186,7 @@ public class CustomRulesDialog extends BaseDialog{ } if(Core.bundle.get("bannedblocks").toLowerCase().contains(ruleSearch)){ - current.button("@bannedblocks", () -> bannedBlocks.show(rules.bannedBlocks)).left().width(300f).row(); + current.button("@bannedblocks", Icon.cancelSmall, () -> bannedBlocks.show(rules.bannedBlocks)).left().width(300f).row(); } check("@rules.hidebannedblocks", b -> rules.hideBannedBlocks = b, () -> rules.hideBannedBlocks); check("@bannedblocks.whitelist", b -> rules.blockWhitelist = b, () -> rules.blockWhitelist); @@ -207,7 +207,7 @@ public class CustomRulesDialog extends BaseDialog{ check("@rules.logicunitdeconstruct", b -> rules.logicUnitDeconstruct = b, () -> rules.logicUnitDeconstruct, () -> rules.logicUnitControl); if(Core.bundle.get("bannedunits").toLowerCase().contains(ruleSearch)){ - current.button("@bannedunits", () -> bannedUnits.show(rules.bannedUnits)).left().width(300f).row(); + current.button("@bannedunits", Icon.unitsSmall, () -> bannedUnits.show(rules.bannedUnits)).left().width(300f).row(); } check("@bannedunits.whitelist", b -> rules.unitWhitelist = b, () -> rules.unitWhitelist); @@ -234,7 +234,7 @@ public class CustomRulesDialog extends BaseDialog{ number("@rules.solarmultiplier", f -> rules.solarMultiplier = f, () -> rules.solarMultiplier); if(Core.bundle.get("rules.weather").toLowerCase().contains(ruleSearch)){ - current.button("@rules.weather", this::weatherDialog).width(250f).left().row(); + current.button("@rules.weather", Icon.rainSmall, this::weatherDialog).width(250f).left().row(); } category("light"); @@ -251,10 +251,6 @@ public class CustomRulesDialog extends BaseDialog{ } check("@rules.lighting.unitlight", b -> rules.unitLight = b, () -> rules.unitLight); - if(Core.bundle.get("rules.weather").toLowerCase().contains(ruleSearch)){ - current.button("@rules.weather", this::weatherDialog).width(250f).left().row(); - } - category("music"); Boolp allowMusic = () -> !rules.disableMusic; diff --git a/core/src/mindustry/ui/dialogs/KeybindDialog.java b/core/src/mindustry/ui/dialogs/KeybindDialog.java index 55799804f5..248aa3d78b 100644 --- a/core/src/mindustry/ui/dialogs/KeybindDialog.java +++ b/core/src/mindustry/ui/dialogs/KeybindDialog.java @@ -167,6 +167,7 @@ public class KeybindDialog extends Dialog{ buttons.button("@back", Icon.left, this::hide).size(bw, bh).get().addListener(blocker); buttons.button("@settings.unbindKey", Icon.cancel, () -> { keyBind.unset(); + keyBind.save(); hide(); }).size(bw, bh).get().addListener(blocker); }}; diff --git a/core/src/mindustry/ui/fragments/PlacementFragment.java b/core/src/mindustry/ui/fragments/PlacementFragment.java index 54dcd456bb..04b3c75ef2 100644 --- a/core/src/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/mindustry/ui/fragments/PlacementFragment.java @@ -312,7 +312,7 @@ public class PlacementFragment{ button.update(() -> { //color unplacable things gray Building core = player.core(); - Color color = (state.rules.infiniteResources || (core != null && (core.items.has(block.requirements, state.rules.buildCostMultiplier) || state.rules.infiniteResources))) && player.isBuilder() ? Color.white : Color.gray; + Color color = (state.rules.isInfiniteResources(player.team()) || (core != null && (core.items.has(block.requirements, state.rules.buildCostMultiplier) || state.rules.infiniteResources))) && player.isBuilder() ? Color.white : Color.gray; button.forEach(elem -> elem.setColor(color)); button.setChecked(control.input.block == block); @@ -407,7 +407,7 @@ public class PlacementFragment{ line.label(() -> { Building core = player.core(); int stackamount = Math.round(stack.amount * state.rules.buildCostMultiplier); - if(core == null || state.rules.infiniteResources) return "*/" + stackamount; + if(core == null || state.rules.isInfiniteResources(player.team())) return "*/" + stackamount; int amount = core.items.get(stack.item); String color = (amount < stackamount / 2f ? "[scarlet]" : amount < stackamount ? "[accent]" : "[white]");