diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 05105c60e2..8eb97c7124 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -779,6 +779,7 @@ rules.respawntime = Respawn Time:[lightgray] (sec) rules.wavespacing = Wave Spacing:[lightgray] (sec) rules.buildcostmultiplier = Build Cost Multiplier rules.buildspeedmultiplier = Build Speed Multiplier +rules.deconstructrefundmultiplier = Deconstruct Refund Multiplier rules.waitForWaveToEnd = Waves Wait for Enemies rules.dropzoneradius = Drop Zone Radius:[lightgray] (tiles) rules.respawns = Max respawns per wave diff --git a/core/assets/bundles/bundle_fi.properties b/core/assets/bundles/bundle_fi.properties index a017e15ecc..41bcb8bd8f 100644 --- a/core/assets/bundles/bundle_fi.properties +++ b/core/assets/bundles/bundle_fi.properties @@ -12,7 +12,7 @@ link.itch.io.description = itch.io -sivu tietokoneversion latausten kanssa link.google-play.description = Google Play Kauppa -sivu link.f-droid.description = F-Droid catalogue listing link.wiki.description = Virallinen Mindustry wiki -link.feathub.description = Suggest new features +link.feathub.description = Ehdota uusia ominaisuuksia linkfail = Linkin avaaminen epäonnistui!\nOsoite on kopioitu leikepöydällesi. screenshot = Kuvankaappaus tallennettu sijaintiin {0} screenshot.invalid = Kartta liian laaja, kuvankaappaukselle ei mahdollisesti ole tarpeeksi tilaa. @@ -193,7 +193,7 @@ confirmkick = Oletko varma että haluat potkia tämän pelaajan? confirmvotekick = Oletko varma että haluat äänestää tämän pelaajan potkituksi? confirmunban = Oletko varma että haluat päästää tämän pelaajan takaisin? confirmadmin = Oletko varma että haluat antaa pelaajalle hallinto-oikeuksia? -confirmunadmin = Are you sure you want to remove admin status from this player? +confirmunadmin = Oletko varma että haluat poistaa hallinto-oikeudet pelaajalta? joingame.title = Liity peliin joingame.ip = Osoite: disconnect = Yhteys katkaistu. @@ -214,9 +214,9 @@ overwrite = Overwrite save.none = No saves found! saveload = Tallennetaan... savefail = Pelin tallentaminen epäonnistui! -save.delete.confirm = Are you sure you want to delete this save? -save.delete = Delete -save.export = Export Save +save.delete.confirm = Oletko varma että haluat poistaa tämän tallennuksen? +save.delete = Poista +save.export = Vie Tallennus save.import.invalid = [accent]This save is invalid! save.import.fail = [crimson]Failed to import save: [accent]{0} save.export.fail = [crimson]Failed to export save: [accent]{0} @@ -256,7 +256,7 @@ data.invalid = This isn't valid game data. data.import.confirm = Importing external data will overwrite[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately. classic.export = Export Classic Data classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app? -quit.confirm = Are you sure you want to quit? +quit.confirm = Oletko varma että haluat poistua? quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[] loading = [accent]Ladataan... reloading = [accent]Reloading Mods... @@ -282,7 +282,7 @@ map.random = [accent]Satunnainen kartta map.nospawn = Tässä kartassa ei ole ytimiä joihin syntyä! Lisää[accent] oranssi[] ydin karttaan editorissa. map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] non-orange[] cores to this map in the editor. map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor. -map.invalid = Error loading map: corrupted or invalid map file. +map.invalid = Virhe ladatessa karttaa: korruptoitunut tai väärä karttatiedosto. workshop.update = Update Item workshop.error = Error fetching workshop details: {0} map.publish.confirm = Are you sure you want to publish this map?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your maps will not show up! @@ -337,7 +337,7 @@ editor.errorload = Virhe ladattaessa tiedostoa:\n[accent]{0} editor.errorsave = Virhe tallennettaessa tiedostoa:\n[accent]{0} editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. editor.errorlegacy = This map is too old, and uses a legacy map format that is no longer supported. -editor.errornot = This is not a map file. +editor.errornot = Tämä ei ole karttatiedosto. 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.update = Päivitä @@ -365,7 +365,7 @@ editor.exportimage = Export Terrain Image editor.exportimage.description = Export a map image file editor.loadimage = Import Terrain editor.saveimage = Export Terrain -editor.unsaved = [scarlet]You have unsaved changes![]\nAre you sure you want to exit? +editor.unsaved = [scarlet]Sinulla on tallentamattomia muutoksia![]\nOletko varma että haluat poistua? editor.resizemap = Resize Map editor.mapname = Kartan nimi: editor.overwrite = [accent]Warning!\nThis overwrites an existing map. @@ -437,11 +437,11 @@ editor = Editori mapeditor = Kartan Editori abandon = Hylkää -abandon.text = This zone and all its resources will be lost to the enemy. +abandon.text = Tämä alue ja kaikki sen resurssit menetetään viholliselle. locked = Lukittu complete = [lightgray]Reach: requirement.wave = Pääse Tasolle {0} kartassa {1} -requirement.core = Tuhoa vihollise ydin kartassa {0} +requirement.core = Tuhoa vihollisen ydin kartassa {0} requirement.unlock = Avaa {0} resume = Resume Zone:\n[lightgray]{0} bestwave = [lightgray]Paras taso: {0} @@ -724,7 +724,7 @@ keybind.pause.name = Pause keybind.pause_building.name = Pause/Resume Building keybind.minimap.name = Pienoiskartta keybind.chat.name = Keskustelu -keybind.player_list.name = Player list +keybind.player_list.name = Pelaaja lista keybind.console.name = Console keybind.rotate.name = Rotate keybind.rotateplaced.name = Rotate Existing (Hold) diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index c7452aceb6..3c44ecbe79 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -39,6 +39,8 @@ be.check = 檢查是否有新的更新 schematic = 藍圖 schematic.add = 儲存藍圖... schematics = 藍圖 +schematic.replace = 相同名稱的藍圖已經存在。是否取代它? +schematic.exists = 相同名稱的藍圖已經存在。 schematic.import = 匯入藍圖... schematic.exportfile = 匯出檔案 schematic.importfile = 匯入檔案 @@ -775,6 +777,7 @@ rules.respawntime = 重生時間︰[lightgray](秒) rules.wavespacing = 波次間距︰[lightgray](秒) rules.buildcostmultiplier = 建設成本倍數 rules.buildspeedmultiplier = 建設速度倍數 +rules.deconstructrefundmultiplier = 拆除資源返還比例 rules.waitForWaveToEnd = 等待所有敵人毀滅才開始下一波次 rules.dropzoneradius = 空降區半徑:[lightgray](格) rules.respawns = 每波次最多重生次數 diff --git a/core/src/mindustry/core/ContentLoader.java b/core/src/mindustry/core/ContentLoader.java index 30360315bc..a52dbcc349 100644 --- a/core/src/mindustry/core/ContentLoader.java +++ b/core/src/mindustry/core/ContentLoader.java @@ -1,5 +1,6 @@ package mindustry.core; +import arc.files.*; import arc.struct.*; import arc.func.*; import arc.graphics.*; @@ -180,6 +181,9 @@ public class ContentLoader{ } if(currentMod != null){ content.minfo.mod = currentMod; + if(content.minfo.sourceFile == null){ + content.minfo.sourceFile = new Fi(content.name); + } } contentNameMap[content.getContentType().ordinal()].put(content.name, content); } diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index e93c4a55d3..1a6cf6bc18 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -45,6 +45,8 @@ public class Rules{ public float buildCostMultiplier = 1f; /** Multiplier for building speed. */ public float buildSpeedMultiplier = 1f; + /** Multiplier for percentage of materials refunded when deconstructing */ + public float deconstructRefundMultiplier = 0.5f; /** No-build zone around enemy core radius. */ public float enemyCoreBuildRadius = 400f; /** Radius around enemy wave drop zones.*/ diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index 42ae294123..341368a51c 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -142,6 +142,7 @@ public class CustomRulesDialog extends FloatingDialog{ check("$rules.reactorexplosions", b -> rules.reactorExplosions = b, () -> rules.reactorExplosions); number("$rules.buildcostmultiplier", false, f -> rules.buildCostMultiplier = f, () -> rules.buildCostMultiplier, () -> !rules.infiniteResources); number("$rules.buildspeedmultiplier", f -> rules.buildSpeedMultiplier = f, () -> rules.buildSpeedMultiplier); + number("$rules.deconstructrefundmultiplier", false, f -> rules.deconstructRefundMultiplier = f, () -> rules.deconstructRefundMultiplier, () -> !rules.infiniteResources); number("$rules.blockhealthmultiplier", f -> rules.blockHealthMultiplier = f, () -> rules.blockHealthMultiplier); main.addButton("$configure", diff --git a/core/src/mindustry/world/blocks/BuildBlock.java b/core/src/mindustry/world/blocks/BuildBlock.java index 47dd54d054..278b1b49fb 100644 --- a/core/src/mindustry/world/blocks/BuildBlock.java +++ b/core/src/mindustry/world/blocks/BuildBlock.java @@ -127,7 +127,7 @@ public class BuildBlock extends Block{ private float[] accumulator; private float[] totalAccumulator; - + @Override public String getDisplayName(){ return Core.bundle.format("block.constructing", cblock == null ? previous.localizedName : cblock.localizedName); @@ -230,7 +230,7 @@ public class BuildBlock extends Block{ } public void deconstruct(Unitc builder, @Nullable Tilec core, float amount){ - float deconstructMultiplier = 0.5f; + float deconstructMultiplier = state.rules.deconstructRefundMultiplier; if(cblock != null){ ItemStack[] requirements = cblock.requirements; diff --git a/desktop/build.gradle b/desktop/build.gradle index b222d4ec92..9cda811c00 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -104,7 +104,7 @@ PackrConfig.Platform.values().each{ platform -> classpath = ["desktop/build/packr/desktop.jar"] removePlatformLibs = ["desktop/build/packr/desktop.jar"] - vmArgs = ["Djava.net.preferIPv4Stack=true"] + vmArgs = [] minimizeJre = "desktop/packr_minimize.json" jdk = JDK_DIR + "jdk-${platform.toString().toLowerCase()}.zip"