From 3fa9d5ed10dfe9c93c4c267e17c02c405c1547ea Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 10 Mar 2018 12:14:10 -0500 Subject: [PATCH 1/9] Updated FR bundle --- core/assets/bundles/bundle_fr_FR.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/assets/bundles/bundle_fr_FR.properties b/core/assets/bundles/bundle_fr_FR.properties index 63ac09daa0..bd1a6664cc 100644 --- a/core/assets/bundles/bundle_fr_FR.properties +++ b/core/assets/bundles/bundle_fr_FR.properties @@ -86,13 +86,13 @@ text.menu=Menu text.play=Jouer text.load=Charger text.save=Sauvegarder -text.settings=Paramètres +text.settings=Parametres text.tutorial=Tutoriel -text.editor=Éditeur +text.editor=Editeur text.mapeditor=Éditeur de carte text.donate=Faire un don text.settings.reset=Remettre les paramètres par défaut -text.settings.controls=Contrôles +text.settings.controls=Controles text.settings.game=Jeu text.settings.sound=Son text.settings.graphics=Graphismes @@ -352,7 +352,7 @@ block.liquidjunction.fulldescription=Agit comme un pont pour deux conduits de pa block.liquiditemjunction.name=jonction de liquides-objets block.liquiditemjunction.fulldescription=Agit comme un pont quand un conduit coupe un tapis roulant. block.liquiditemjunction.description=Sert de jonction pour les articles et les liquides. -block.powerbooster.name=booster d'énergie +block.powerbooster.name=Disperseur d'énergie block.powerbooster.fulldescription=Distribue l'énergie à tous les blocs se trouvant dans son rayon. block.powerbooster.description=Distribue la puissance dans un rayon. block.powerlaser.name=laser d'énergie From c9342d60d7ee6ea9d8b32fe988fb8d0b6fd92918 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 10 Mar 2018 14:03:23 -0500 Subject: [PATCH 2/9] Fixed invalid FR bundle format --- core/assets/bundles/bundle_fr_FR.properties | 410 +++++++++--------- core/assets/version.properties | 4 +- core/src/io/anuke/mindustry/core/Control.java | 4 +- .../src/io/anuke/mindustry/ui/MenuButton.java | 1 + 4 files changed, 209 insertions(+), 210 deletions(-) diff --git a/core/assets/bundles/bundle_fr_FR.properties b/core/assets/bundles/bundle_fr_FR.properties index bd1a6664cc..c912694dc5 100644 --- a/core/assets/bundles/bundle_fr_FR.properties +++ b/core/assets/bundles/bundle_fr_FR.properties @@ -1,25 +1,25 @@ -text.about=Créé par [ROYAL]Anuken.[]\nÀ l'origine une entrée dans le [orange]GDL[] MM Jam.\n\n Crédits:\n- Effets sonores réalisés avec [YELLOW]bfxr[]\n- Musique faite par [GREEN]RoccoW[] / trouvé sur [lime]FreeMusicArchive.org[]\n\n Un grand merci à:\n- [coral]MitchellFJN[]: test de jeu étendu et rétroaction\n- [sky]Luxray5474[]: wiki travail, contribution de code\n- Tous les bêta-testeurs sur itch.io et Google Play\n +text.about=Créé par [ROYAL]Anuken.[]\nÀ l'origine une entrée dans le [orange]GDL[] MM Jam.\n\n Crédits:\n- Effets sonores réalisés avec [YELLOW]bfxr[]\n- Musique faite par [GREEN]RoccoW[] / trouvé sur [lime]FreeMusicArchive.org[]\n\n Un grand merci à:\n- [coral]MitchellFJN[]: test de jeu étendu et rétroaction\n- [sky]Luxray5474[]: wiki travail, contribution de code\n- Tous les bêta-testeurs sur itch.io et Google Play\n text.discord=Rejoignez le discord de Mindustry! -text.gameover=Le Noyau a été détruit. +text.gameover=Le Noyau a été détruit. text.highscore=[YELLOW]Nouveau record -text.lasted=Vous avez survécu jusqu'à la vague +text.lasted=Vous avez survécu jusqu'à la vague text.level.highscore=Meilleur Score : [accent] {0} text.level.delete.title=Confirmation de la suppression -text.level.delete=Êtes-vous sûr de vouloir supprimer \nla carte "[orange]{0}" ? -text.level.select=Sélection de niveau +text.level.delete=Êtes-vous sûr de vouloir supprimer \nla carte "[orange]{0}" ? +text.level.select=Sélection de niveau text.level.mode=Mode de jeu : text.savegame=Sauvegarder la partie text.loadgame=Chargement du jeu text.quit=Quitter -text.tutorial.back=< Précédent +text.tutorial.back=< Précédent text.tutorial.next=Suivant > text.save.new=Nouvelle Sauvegarde -text.save.overwrite=Êtes-vous sûr de vouloir remplacer \ncet emplacement de sauvegarde ? -text.overwrite=Écraser -text.save.none=Aucune sauvegarde trouvée ! +text.save.overwrite=Êtes-vous sûr de vouloir remplacer \ncet emplacement de sauvegarde ? +text.overwrite=Écraser +text.save.none=Aucune sauvegarde trouvée ! text.saveload=[accent]Sauvegarde... -text.savefail=Échec de la sauvegarde du jeu ! -text.save.delete.confirm=Êtes-vous sur de vouloir supprimer cette sauvegarde ? +text.savefail=Échec de la sauvegarde du jeu ! +text.save.delete.confirm=Êtes-vous sur de vouloir supprimer cette sauvegarde ? text.save.delete=Supprimer text.save.export=Exporter une sauvegarde text.save.import.invalid=[orange]Cette sauvegarde est invalide ! @@ -29,8 +29,8 @@ text.save.import=Importer une sauvegarde text.save.newslot=Nom de la sauvegarde : text.save.rename=Renommer text.save.rename.text=nouveau nom : -text.selectslot=Sélectionnez une sauvegarde. -text.selectslot=Sélectionnez un emplacement de sauvegarde. +text.selectslot=Sélectionnez une sauvegarde. +text.selectslot=Sélectionnez un emplacement de sauvegarde. text.slot=[accent]Emplacement {0} text.save.corrupted=[orange]Ficher de sauvegarde invalide ou corrompu ! text.empty= @@ -39,7 +39,7 @@ text.off=Off text.save.autosave=Sauvegarde auto : {0} text.save.map=Carte : {0} text.save.wave=Vague {0} -text.save.date=Enregistré le {0} +text.save.date=Enregistré le {0} text.confirm=Confirmer text.delete=Effacer text.ok=Ok @@ -47,7 +47,7 @@ text.open=Ouvrir text.cancel=Annuler text.openlink=Ouvrir le lien text.back=Retour -text.quit.confirm=Êtes-vous sûr de vouloir quitter ? +text.quit.confirm=Êtes-vous sûr de vouloir quitter ? text.loading=[accent]Chargement... text.wave=[orange]Vague {0} text.wave.waiting=Vague dans {0} @@ -60,106 +60,106 @@ text.saveimage=Enregistrer l'image text.editor.badsize=[orange]Dimensions de l'image incorrectes![]\n Dimensions de carte valides: {0} text.editor.errorimageload=Erreur lors du chargement du fichier image:\n[orange]{0} text.editor.errorimagesave=Erreur lors de l'enregistrement du fichier image:\n[orange]{0} -text.editor.generate=Générer +text.editor.generate=Générer text.editor.resize=Redimensionner text.editor.loadmap=Chargement de la carte text.editor.savemap=Enregistrer la carte text.editor.loadimage=Chargement de l'image text.editor.saveimage=Enregistrer l'image -text.editor.unsaved=[scarlet]Vous avez des changements non enregistrés![]\n Êtes-vous sûr de vouloir quitter? +text.editor.unsaved=[scarlet]Vous avez des changements non enregistrés![]\n Êtes-vous sûr de vouloir quitter? text.editor.brushsize=Taille du pinceau: {0} text.editor.noplayerspawn=Cette carte n'a pas de point d'apparition de joueur! text.editor.manyplayerspawns=Les cartes ne peuvent pas avoir plus \nd'un point d'apparition! -text.editor.manyenemyspawns=Ne peut pas avoir plus de \n{0} points de réapparition ennemis! +text.editor.manyenemyspawns=Ne peut pas avoir plus de \n{0} points de réapparition ennemis! text.editor.resizemap=Redimensionner la carte -text.editor.resizebig=[scarlet]Attention! \n[]Les cartes de plus de 256 unités peuvent être décalées et instables! +text.editor.resizebig=[scarlet]Attention! \n[]Les cartes de plus de 256 unités peuvent être décalées et instables! text.editor.mapname=Nom de la carte: -text.editor.overwrite=[accent]Attention! \nCela écrase une carte existante -text.editor.failoverwrite=[crimson]Impossible d'écraser la carte par défaut! -text.editor.selectmap=Sélectionnez une carte à charger: +text.editor.overwrite=[accent]Attention! \nCela écrase une carte existante +text.editor.failoverwrite=[crimson]Impossible d'écraser la carte par défaut! +text.editor.selectmap=Sélectionnez une carte à charger: text.width=Largeur: text.height=Hauteur: -text.randomize=Aléatoire +text.randomize=Aléatoire text.apply=Appliquer -text.update=Mettre à jour +text.update=Mettre à jour text.menu=Menu text.play=Jouer text.load=Charger text.save=Sauvegarder -text.settings=Parametres +text.settings=paramètres text.tutorial=Tutoriel text.editor=Editeur -text.mapeditor=Éditeur de carte +text.mapeditor=Éditeur de carte text.donate=Faire un don -text.settings.reset=Remettre les paramètres par défaut +text.settings.reset=Remettre les paramètres par défaut text.settings.controls=Controles text.settings.game=Jeu text.settings.sound=Son text.settings.graphics=Graphismes -text.upgrades=Mises à niveau -text.purchased=[LIME]Acheté! +text.upgrades=Mises à niveau +text.purchased=[LIME]Acheté! text.weapons=Armes text.paused=Pause -text.respawn=Réapparition dans +text.respawn=Réapparition dans text.error.title=[crimson]Une erreur est survenue -text.error.crashmessage=[SCARLET]Une erreur inattendue s'est produite qui aurait causé un crash. []Veuillez indiquer les circonstances exactes dans lesquelles cette erreur s'est produite pour le développeur: \n[ORANGE]anukendev@gmail.com[] +text.error.crashmessage=[SCARLET]Une erreur inattendue s'est produite qui aurait causé un crash. []Veuillez indiquer les circonstances exactes dans lesquelles cette erreur s'est produite pour le développeur: \n[ORANGE]anukendev@gmail.com[] text.error.crashtitle=Une erreur est survenue -text.blocks.extrainfo=[accent]Informations supplémentaires sur les blocs: +text.blocks.extrainfo=[accent]Informations supplémentaires sur les blocs: text.blocks.blockinfo=Bloquer les infos -text.blocks.powercapacity=Capacité Electrique +text.blocks.powercapacity=Capacité Electrique text.blocks.powershot=Puissance/Tir text.blocks.powersecond=Puissance/Seconde -text.blocks.powerdraindamage=Drain de puissance/Dégats +text.blocks.powerdraindamage=Drain de puissance/Dégats text.blocks.shieldradius=Rayon de bouclier text.blocks.itemspeedsecond=Vitesse/objet -text.blocks.range=Portée +text.blocks.range=Portée text.blocks.size=Taille text.blocks.powerliquid=Puissance/Liquide text.blocks.maxliquidsecond=Max liquide/Seconde -text.blocks.liquidcapacity=Capacité Liquide +text.blocks.liquidcapacity=Capacité Liquide text.blocks.liquidsecond=Liquide/Seconde -text.blocks.damageshot=Dégats/Tirs -text.blocks.ammocapacity=Capacité de munitions +text.blocks.damageshot=Dégats/Tirs +text.blocks.ammocapacity=Capacité de munitions text.blocks.ammo=Munitions text.blocks.ammoitem=Munitions/objet text.blocks.maxitemssecond=Max d'objet/Seconde -text.blocks.powerrange=Portée de la Puissance -text.blocks.lasertilerange=Portée du carreau Laser -text.blocks.capacity=Capacité -text.blocks.itemcapacity=Capacité de l'objet -text.blocks.powergenerationsecond=Génération d'énergie/seconde -text.blocks.generationsecondsitem=Génération secondes/item +text.blocks.powerrange=Portée de la Puissance +text.blocks.lasertilerange=Portée du carreau Laser +text.blocks.capacity=Capacité +text.blocks.itemcapacity=Capacité de l'objet +text.blocks.powergenerationsecond=Génération d'énergie/seconde +text.blocks.generationsecondsitem=Génération secondes/item text.blocks.input=Carburant -text.blocks.inputliquid=Liquide d'entrée -text.blocks.inputitem=Élément d'entrée +text.blocks.inputliquid=Liquide d'entrée +text.blocks.inputitem=Élément d'entrée text.blocks.output=Sortie text.blocks.secondsitem=Secondes/Article text.blocks.maxpowertransfersecond=Transfert de puissance maximum/seconde text.blocks.explosive=Hautement explosif! -text.blocks.repairssecond=Réparations/seconde -text.blocks.health=Santé -text.blocks.inaccuracy=Présicion +text.blocks.repairssecond=Réparations/seconde +text.blocks.health=Santé +text.blocks.inaccuracy=Présicion text.blocks.shots=Tirs text.blocks.shotssecond=Tirs/seconde text.placemode=Mode Placement -text.breakmode=Mode Démolition -text.health=Santé +text.breakmode=Mode Démolition +text.health=Santé setting.saveinterval.name=Intervalle de la sauvegarde automatique setting.seconds={0} Secondes setting.difficulty.easy=Facile setting.difficulty.normal=Normal setting.difficulty.hard=Difficile -setting.difficulty.name=Difficulté -setting.screenshake.name=Vibration de l'écran -setting.smoothcam.name=Mouvements de la caméra lissés +setting.difficulty.name=Difficulté +setting.screenshake.name=Vibration de l'écran +setting.smoothcam.name=Mouvements de la caméra lissés setting.indicators.name=Indicateurs d'ennemis setting.effects.name=Afficher les effets -setting.sensitivity.name=Sensibilité de la manette +setting.sensitivity.name=Sensibilité de la manette setting.fps.name=Afficher FPS setting.vsync.name=VSync -setting.lasers.name=Afficher les lasers d'énergie -setting.healthbars.name=Afficher les barres de santés d'une entitée -setting.pixelate.name=Écran Pixélisé +setting.lasers.name=Afficher les lasers d'énergie +setting.healthbars.name=Afficher les barres de santés d'une entitée +setting.pixelate.name=Écran Pixélisé setting.musicvol.name=Volume de la musique setting.mutemusic.name=Musique muette setting.sfxvol.name=Volume des effets sonores @@ -170,66 +170,66 @@ map.sinkhole.name=Gouffre map.caves.name=Cavernes map.volcano.name=Volcan map.caldera.name=Caldera -map.scorch.name=Terres Brûlée -map.desert.name=Désert -map.island.name=île +map.scorch.name=Terres Brûlée +map.desert.name=Désert +map.island.name=île map.grassland.name=Prairie map.tundra.name=Toundra map.spiral.name=Spirale map.tutorial.name=Tutoriel tutorial.intro.text=[yellow]Bienvenue dans le tutoriel.[] Pour commencer, appuyez sur "Suivant" -tutorial.moveDesktop.text=Pour vous déplacer, utilisez les touches [orange][[WASD (pour qwerty) ou ZQSD (pour azerty)][] . Maintenir [orange]MAJ[] active le Booster. Maintenir [orange]CTRL[] en utilisant la [orange]molette[] pour faire un zoom avant ou arrière. -tutorial.shootInternal.text=Utilisez votre souris pour viser, maintenez [orange]le clic gauche de la souris[] pour tirer. Essayez de vous entraîner sur la [yellow]cible[]. -tutorial.moveAndroid.text=Pour déplacer la vue, faites glisser un doigt sur l'écran. Pincez et faites glisser pour effectuer un zoom avant ou arrière. -tutorial.placeSelect.text=Essayez de sélectionner un [yellow]tapis roulant[] du menu à bloc en bas à droite. -tutorial.placeConveyorDesktop.text=Utilisez la [orange]molette[] pour faire tourner le tapis roulant afin de l'orienter vers l'[orange]avant[], puis placez-le dans l'[yellow]emplacement marqué[] en utilisant le [orange]clic gauche de la souris[]. -tutorial.placeConveyorAndroid.text=Utilisez le [orange]bouton de rotation[] pour faire tourner le tapis roulant afin de l'orienter vers l'[orange]avant[], faites-le glisser puis puis placez-le dans l'[yellow]emplacement marqué[]. -tutorial.placeConveyorAndroidInfo.text=Vous pouvez également appuyer sur l'icône oeil en bas à gauche pour passer en [orange]mode tactile[]et placez des blocs en tapant sur l'écran. En mode tactile, les blocs peuvent être pivotés avec la flèche en bas à gauche. Pressez [yellow]prochain[] pour l'essayer -tutorial.placeDrill.text=Maintenant, sélectionnez et placez un [yellow]extracteur de pierre[] à l'endroit marqué -tutorial.blockInfo.text=Si vous voulez en savoir plus sur un bloc, vous pouvez appuyer sur le [orange]point d'intérrogation[] en haut à droite pour lire sa description. -tutorial.deselectDesktop.text=Vous pouvez désélectionner un bloc en appuyant sur le [orange]clic droit de la souris[]. -tutorial.deselectAndroid.text=Vous pouvez désélectionner un bloc en appuyant sur le bouton [orange]X[]. -tutorial.drillPlaced.text=L'extracteur va maintenant produire [yellow]de la pierre,[] la sortir sur le tapis roulant, et le déplacer dans le [Yellow]noyau[]. -tutorial.drillInfo.text=Les différents minerais ont besoin d'extracteurs différents. La pierre nécessite des extracteurs de pierre, le fer nécessite des extracteurs de fer, etc. -tutorial.drillPlaced2.text=Le déplacement de minerais dans le noyau les placent dans votre [yellow]inventaire[], en haut à gauche. Le placement de blocs utilise des minerais de votre inventaire. -tutorial.moreDrills.text=Vous pouvez relier plusieurs extracteurs et tapis roulants ensemble, comme ça. +tutorial.moveDesktop.text=Pour vous déplacer, utilisez les touches [orange][[WASD (pour qwerty) ou ZQSD (pour azerty)][] . Maintenir [orange]MAJ[] active le Booster. Maintenir [orange]CTRL[] en utilisant la [orange]molette[] pour faire un zoom avant ou arrière. +tutorial.shootInternal.text=Utilisez votre souris pour viser, maintenez [orange]le clic gauche de la souris[] pour tirer. Essayez de vous entraîner sur la [yellow]cible[]. +tutorial.moveAndroid.text=Pour déplacer la vue, faites glisser un doigt sur l'écran. Pincez et faites glisser pour effectuer un zoom avant ou arrière. +tutorial.placeSelect.text=Essayez de sélectionner un [yellow]tapis roulant[] du menu à bloc en bas à droite. +tutorial.placeConveyorDesktop.text=Utilisez la [orange]molette[] pour faire tourner le tapis roulant afin de l'orienter vers l'[orange]avant[], puis placez-le dans l'[yellow]emplacement marqué[] en utilisant le [orange]clic gauche de la souris[]. +tutorial.placeConveyorAndroid.text=Utilisez le [orange]bouton de rotation[] pour faire tourner le tapis roulant afin de l'orienter vers l'[orange]avant[], faites-le glisser puis puis placez-le dans l'[yellow]emplacement marqué[]. +tutorial.placeConveyorAndroidInfo.text=Vous pouvez également appuyer sur l'icône oeil en bas à gauche pour passer en [orange]mode tactile[]et placez des blocs en tapant sur l'écran. En mode tactile, les blocs peuvent être pivotés avec la flèche en bas à gauche. Pressez [yellow]prochain[] pour l'essayer +tutorial.placeDrill.text=Maintenant, sélectionnez et placez un [yellow]extracteur de pierre[] à l'endroit marqué +tutorial.blockInfo.text=Si vous voulez en savoir plus sur un bloc, vous pouvez appuyer sur le [orange]point d'intérrogation[] en haut à droite pour lire sa description. +tutorial.deselectDesktop.text=Vous pouvez désélectionner un bloc en appuyant sur le [orange]clic droit de la souris[]. +tutorial.deselectAndroid.text=Vous pouvez désélectionner un bloc en appuyant sur le bouton [orange]X[]. +tutorial.drillPlaced.text=L'extracteur va maintenant produire [yellow]de la pierre,[] la sortir sur le tapis roulant, et le déplacer dans le [Yellow]noyau[]. +tutorial.drillInfo.text=Les différents minerais ont besoin d'extracteurs différents. La pierre nécessite des extracteurs de pierre, le fer nécessite des extracteurs de fer, etc. +tutorial.drillPlaced2.text=Le déplacement de minerais dans le noyau les placent dans votre [yellow]inventaire[], en haut à gauche. Le placement de blocs utilise des minerais de votre inventaire. +tutorial.moreDrills.text=Vous pouvez relier plusieurs extracteurs et tapis roulants ensemble, comme ça. tutorial.deleteBlock.text=vous pouvez supprimer des blocs en utilisant le [orange]clic droit de la souris[] sur le bloc que vous voulez supprimer. Essayez de supprimer ce tapis roulant. -tutorial.deleteBlockAndroid.text=Vous pouvez supprimer des blocs en sélectionnant l'oeil[] dans le [orange]menu en mode pause[] en bas à gauche et en tapant un bloc. Essayez de supprimer ce tapis roulant. -tutorial.placeTurret.text=Maintenant, sélectionnez et placez une [yellow]tourelle[] [yellow]à l'endroit marqué[]. +tutorial.deleteBlockAndroid.text=Vous pouvez supprimer des blocs en sélectionnant l'oeil[] dans le [orange]menu en mode pause[] en bas à gauche et en tapant un bloc. Essayez de supprimer ce tapis roulant. +tutorial.placeTurret.text=Maintenant, sélectionnez et placez une [yellow]tourelle[] [yellow]à l'endroit marqué[]. tutorial.placedTurretAmmo.text=La tourelle va maintenant accepter les [yellow]munitions[] venant du tapis roulant. vous pouvez voir combien de munitions il reste en la touchant et en regardant la [green]barre verte[]. -tutorial.turretExplanation.text=Les tourelles tirent automatiquement sur l'ennemi le plus proche et à portée de tir si elles ont des munitions. -tutorial.waves.text=Toutes les [yellow]60[] secondes, une vague d'[coral]ennemis[] apparaîtra dans des endroits spécifiques et tentera de détruire le noyau. -tutorial.coreDestruction.text=Votre objectif est de [yellow]défendre le noyau[]. Si le noyau est détruit, vous [coral]perdez la partie[]. -tutorial.pausingDesktop.text=Si vous avez besoin de mettre en pause, appuyer sur le [orange]boutton pause[] en haut à gauche ou sur [orange]la touche espace[]. Vous pourrez toujours sélectionner et placer des blocs mais vous ne pourrez bouger ou tirer. -tutorial.pausingAndroid.text=Si vous avez besoin de mettre en pause, appuyer sur le [orange]boutton pause[] en haut à gauche. Vous pourez toujours sélectionner et placer des blocs. -tutorial.purchaseWeapons.text=Vous pouvez acheter de nouvelles [yellow]armes[] pour votre mecha en ouvrant le menu des améliorations en bas à gauche. -tutorial.switchWeapons.text=Changez d'armes en cliquant sur leur icône en bas à gauche, ou en utilisant les chiffres [orange][[1-9][]. -tutorial.spawnWave.text=Une vague est en train d'arriver. Détruisez-la. -tutorial.pumpDesc.text=Pour les vagues suivantes, Vous pourriez avoir besoin de la [yellow]pompe[] pour alimenter les générateurs avec certains liquides. -tutorial.pumpPlace.text=Les pompes fonctionnent comme les extracteurs à l'exception qu'elles produisent un liquide et non un minerai. Essayez de placer une pompe sur [yellow]la flaque d'huile désignée[]. -tutorial.conduitUse.text=Maintenant, placez un [orange]conduit[] pour récupérer la production de la pompe. +tutorial.turretExplanation.text=Les tourelles tirent automatiquement sur l'ennemi le plus proche et à portée de tir si elles ont des munitions. +tutorial.waves.text=Toutes les [yellow]60[] secondes, une vague d'[coral]ennemis[] apparaîtra dans des endroits spécifiques et tentera de détruire le noyau. +tutorial.coreDestruction.text=Votre objectif est de [yellow]défendre le noyau[]. Si le noyau est détruit, vous [coral]perdez la partie[]. +tutorial.pausingDesktop.text=Si vous avez besoin de mettre en pause, appuyer sur le [orange]boutton pause[] en haut à gauche ou sur [orange]la touche espace[]. Vous pourrez toujours sélectionner et placer des blocs mais vous ne pourrez bouger ou tirer. +tutorial.pausingAndroid.text=Si vous avez besoin de mettre en pause, appuyer sur le [orange]boutton pause[] en haut à gauche. Vous pourez toujours sélectionner et placer des blocs. +tutorial.purchaseWeapons.text=Vous pouvez acheter de nouvelles [yellow]armes[] pour votre mecha en ouvrant le menu des améliorations en bas à gauche. +tutorial.switchWeapons.text=Changez d'armes en cliquant sur leur icône en bas à gauche, ou en utilisant les chiffres [orange][[1-9][]. +tutorial.spawnWave.text=Une vague est en train d'arriver. Détruisez-la. +tutorial.pumpDesc.text=Pour les vagues suivantes, Vous pourriez avoir besoin de la [yellow]pompe[] pour alimenter les générateurs avec certains liquides. +tutorial.pumpPlace.text=Les pompes fonctionnent comme les extracteurs à l'exception qu'elles produisent un liquide et non un minerai. Essayez de placer une pompe sur [yellow]la flaque d'huile désignée[]. +tutorial.conduitUse.text=Maintenant, placez un [orange]conduit[] pour récupérer la production de la pompe. tutorial.conduitUse2.text=Et un autre... tutorial.conduitUse3.text=Et encore un autre... -tutorial.generator.text=Maintenant, placez un [orange]générateur à combustion[] à la fin des conduits. -tutorial.generatorExplain.text=Ce générateur va maintenant créer de l'[yellow]énergie[] à partir de l'huile. -tutorial.lasers.text=L'énergie peut-être redistribuée en utilisant les [yellow]lasers énergétiques[]. Placez-en un. -tutorial.laserExplain.text=Le générateur va maintenant distribuer de l'énergie à travers le laser. Un faisceau [yellow]opaque[] signifie une transmission d'énergie, et un faisceau [yellow]transparent[] signifie qu'il n'en transmet pas. -tutorial.laserMore.text=Vous pouvez vérifier le niveau énergétique d'un bloc en le sélectionnant et en regardant la [yellow]barre jaune[] au-dessus du bloc. -tutorial.healingTurret.text=Ce laser peut-être utilisé pour alimenter une [lime]tourelle réparatrice[]. Placez-en une ici. -tutorial.healingTurretExplain.text=Tant qu'elle sera alimentée, cette tourelle va [lime]réparer les blocs voisins.[] Lorsque vous jouez, assurez-vous d'en avoir le plus rapidement possible ! +tutorial.generator.text=Maintenant, placez un [orange]générateur à combustion[] à la fin des conduits. +tutorial.generatorExplain.text=Ce générateur va maintenant créer de l'[yellow]énergie[] à partir de l'huile. +tutorial.lasers.text=L'énergie peut-être redistribuée en utilisant les [yellow]lasers énergétiques[]. Placez-en un. +tutorial.laserExplain.text=Le générateur va maintenant distribuer de l'énergie à travers le laser. Un faisceau [yellow]opaque[] signifie une transmission d'énergie, et un faisceau [yellow]transparent[] signifie qu'il n'en transmet pas. +tutorial.laserMore.text=Vous pouvez vérifier le niveau énergétique d'un bloc en le sélectionnant et en regardant la [yellow]barre jaune[] au-dessus du bloc. +tutorial.healingTurret.text=Ce laser peut-être utilisé pour alimenter une [lime]tourelle réparatrice[]. Placez-en une ici. +tutorial.healingTurretExplain.text=Tant qu'elle sera alimentée, cette tourelle va [lime]réparer les blocs voisins.[] Lorsque vous jouez, assurez-vous d'en avoir le plus rapidement possible ! tutorial.smeltery.text=Beaucoup de blocs ont besoin d'[orange]acier[]. Pour en fabriquer, il faut une [orange]fonderie[]. Placez-en une ici. tutorial.smelterySetup.text=La fonderie produit maintenant de l'[orange]acier[] avec le charbon et le fer. -tutorial.end.text=Vous avez fini le tutoriel! Bien joué! -keybind.move_x.name=déplacement_x -keybind.move_y.name=déplacement_y -keybind.select.name=sélectionner +tutorial.end.text=Vous avez fini le tutoriel! Bien joué! +keybind.move_x.name=déplacement_x +keybind.move_y.name=déplacement_y +keybind.select.name=sélectionner keybind.break.name=casser keybind.shootInternal.name=tirer keybind.zoom_hold.name=maintenir_pour_zoomer keybind.zoom.name=zoomer keybind.menu.name=menu keybind.pause.name=pause -keybind.dash.name=accélération +keybind.dash.name=accélération keybind.rotate_alt.name=tourner_alt keybind.rotate.name=tourner keybind.weapon_1.name=arme_1 @@ -239,18 +239,18 @@ keybind.weapon_4.name=arme_4 keybind.weapon_5.name=arme_5 keybind.weapon_6.name=arme_6 mode.waves.name=vagues -mode.sandbox.name=bac à sable +mode.sandbox.name=bac à sable mode.freebuild.name=construction weapon.blaster.name=Blaster weapon.blaster.description=Tire une balle lente et faible. weapon.triblaster.name=Triple blaster weapon.triblaster.description=Tire 3 balles dans une propagation. weapon.multigun.name=Mitrailleuse -weapon.multigun.description=Tire des balles imprécises mais avec une haute cadance de feu. +weapon.multigun.description=Tire des balles imprécises mais avec une haute cadance de feu. weapon.flamer.name=Lance-flamme weapon.flamer.description=Tire une colonne de feu. -weapon.railgun.name=Fusil a énergie -weapon.railgun.description=Tire une balle à longue portée. +weapon.railgun.name=Fusil a énergie +weapon.railgun.description=Tire une balle à longue portée. weapon.mortar.name=Mortier weapon.mortar.description=Tire sur un obus lent mais explosif. item.stone.name=pierre @@ -263,13 +263,13 @@ item.uranium.name=uranium liquid.water.name=eau liquid.plasma.name=plasma liquid.lava.name=lave -liquid.oil.name=pétrole +liquid.oil.name=pétrole block.air.name=air block.blockpart.name=blockpart block.deepwater.name=eau profonde block.water.name=eau block.lava.name=lave -block.oil.name=pétrole +block.oil.name=pétrole block.stone.name=pierre block.blackstone.name=pierre noir block.iron.name=fer @@ -289,182 +289,182 @@ block.grassblock.name=block d'herbe block.mossblock.name=bloc de mousse block.shrub.name=arbuste block.rock.name=rocher -block.icerock.name=rocher glacé +block.icerock.name=rocher glacé block.blackrock.name=rocher noir -block.dirtblock.name=bloc de pousière +block.dirtblock.name=bloc de pousière block.stonewall.name=mur de pierre -block.stonewall.fulldescription=Un bloc défensif bon marché. Utile pour protéger le noyau et les tourelles dans les premières vagues. +block.stonewall.fulldescription=Un bloc défensif bon marché. Utile pour protéger le noyau et les tourelles dans les premières vagues. block.ironwall.name=mur de fer -block.ironwall.fulldescription=Un bloc défensif de base. Fournit une protection contre les ennemis. +block.ironwall.fulldescription=Un bloc défensif de base. Fournit une protection contre les ennemis. block.steelwall.name=mur d'acier -block.steelwall.fulldescription=Un bloc défensif standard. une protection adéquate contre les ennemis. +block.steelwall.fulldescription=Un bloc défensif standard. une protection adéquate contre les ennemis. block.titaniumwall.name=mur de titane -block.titaniumwall.fulldescription=Un bloc défensif soldie. Fournit une protection contre les ennemis. +block.titaniumwall.fulldescription=Un bloc défensif soldie. Fournit une protection contre les ennemis. block.duriumwall.name=mur de dirium -block.duriumwall.fulldescription=Un bloc défensif très solide. Fournit une protection contre les ennemis. +block.duriumwall.fulldescription=Un bloc défensif très solide. Fournit une protection contre les ennemis. block.compositewall.name=mur composite block.steelwall-large.name=grand mur d'acier -block.steelwall-large.fulldescription=Un bloc défensif standard. Couvre plusieurs cases. +block.steelwall-large.fulldescription=Un bloc défensif standard. Couvre plusieurs cases. block.titaniumwall-large.name=grand mur de titane -block.titaniumwall-large.fulldescription=Un bloc défensif solide. Couvre plusieurs cases. +block.titaniumwall-large.fulldescription=Un bloc défensif solide. Couvre plusieurs cases. block.duriumwall-large.name=grand mur de dirium -block.duriumwall-large.fulldescription=Un bloc défensif très solide. Couvre plusieurs cases. -block.titaniumshieldwall.name=mur blindé -block.titaniumshieldwall.fulldescription=Un bloc défensif résistant, avec un bouclier intégré supplémentaire. Nécessite de l'énergie. Utilise l'énergie pour absorber les balles ennemies. Il est recommandé d'utiliser des boosters de puissance pour fournir de l'énergie à ce bloc. -block.repairturret.name=tourelle de réparation -block.repairturret.fulldescription=Répare les blocs endommagés à portée à un rythme lent. Utilise de petites quantités d'énergie. -block.repairturret.description=[powerinfo]Utilise de l'énergie[white]\nRépare les bloc à proximité. -block.megarepairturret.name=tourelle de réparation II -block.megarepairturret.fulldescription=Répare les blocs endommagés à porté à un rythme moyen. Utilise de l'énergie. -block.megarepairturret.description=[powerinfo]Utilise de l'énergie[white]\nRépare les bloc à proximité. -block.shieldgenerator.name=générateur de bouclier -block.shieldgenerator.fulldescription=Un bloc défensif avancé. Protège tous les blocs dans un rayon des attaques. Utilise l'énergie à un rythme lent, mais draine l'énergie rapidement au contact des balles. +block.duriumwall-large.fulldescription=Un bloc défensif très solide. Couvre plusieurs cases. +block.titaniumshieldwall.name=mur blindé +block.titaniumshieldwall.fulldescription=Un bloc défensif résistant, avec un bouclier intégré supplémentaire. Nécessite de l'énergie. Utilise l'énergie pour absorber les balles ennemies. Il est recommandé d'utiliser des boosters de puissance pour fournir de l'énergie à ce bloc. +block.repairturret.name=tourelle de réparation +block.repairturret.fulldescription=Répare les blocs endommagés à portée à un rythme lent. Utilise de petites quantités d'énergie. +block.repairturret.description=[powerinfo]Utilise de l'énergie[white]\nRépare les bloc à proximité. +block.megarepairturret.name=tourelle de réparation II +block.megarepairturret.fulldescription=Répare les blocs endommagés à porté à un rythme moyen. Utilise de l'énergie. +block.megarepairturret.description=[powerinfo]Utilise de l'énergie[white]\nRépare les bloc à proximité. +block.shieldgenerator.name=générateur de bouclier +block.shieldgenerator.fulldescription=Un bloc défensif avancé. Protège tous les blocs dans un rayon des attaques. Utilise l'énergie à un rythme lent, mais draine l'énergie rapidement au contact des balles. block.door.name=Porte -block.door.fulldescription=Un bloc qui peut être ouvert et fermé en le tapant. +block.door.fulldescription=Un bloc qui peut être ouvert et fermé en le tapant. block.door.description=Ouvre et ferme. \ N [interact] Appuyez pour ouvrir block.door-large.name=Grande Porte -block.door-large.fulldescription=Un bloc qui peut être ouvert et fermé en le tapant. +block.door-large.fulldescription=Un bloc qui peut être ouvert et fermé en le tapant. block.door-large.description=Ouvre et ferme. \ N [interact] Appuyez pour ouvrir block.conduit.name=conduit -block.conduit.fulldescription=Bloc de transport de liquide. Fonctionne comme un tapis roulant, mais avec des liquides. Peut-être connecté avec des pompes ou d'autres conduits. Peut-être utilisé comme un pont au-dessus des liquides pour les ennemis et les joueurs. -block.pulseconduit.name=conduit à pulsation -block.pulseconduit.fulldescription=Bloc de transport de liquide avancé. Transporte les liquides plus rapidement et stocke plus que les conduits standards. +block.conduit.fulldescription=Bloc de transport de liquide. Fonctionne comme un tapis roulant, mais avec des liquides. Peut-être connecté avec des pompes ou d'autres conduits. Peut-être utilisé comme un pont au-dessus des liquides pour les ennemis et les joueurs. +block.pulseconduit.name=conduit à pulsation +block.pulseconduit.fulldescription=Bloc de transport de liquide avancé. Transporte les liquides plus rapidement et stocke plus que les conduits standards. block.liquidrouter.name=routeur de liquide -block.liquidrouter.fulldescription=Fonctionne de manière similaire à un routeur. Accepte l'entrée de liquide d'un côté et l'envoie vers les autres côtés. Utile pour séparer le liquide d'un seul conduit en plusieurs autres conduits. -block.liquidrouter.description=Divise le liquide d'entrée dans 3 directions. +block.liquidrouter.fulldescription=Fonctionne de manière similaire à un routeur. Accepte l'entrée de liquide d'un côté et l'envoie vers les autres côtés. Utile pour séparer le liquide d'un seul conduit en plusieurs autres conduits. +block.liquidrouter.description=Divise le liquide d'entrée dans 3 directions. block.conveyor.name=tapis roulant -block.conveyor.fulldescription=Bloc de transport élémentaire. Déplace les objets vers l'avant et les dépose automatiquement dans les tourelles ou les crafters. Rotatif. Peut être utilisé comme un pont sur les liquides pour les ennemis et les joueurs. +block.conveyor.fulldescription=Bloc de transport élémentaire. Déplace les objets vers l'avant et les dépose automatiquement dans les tourelles ou les crafters. Rotatif. Peut être utilisé comme un pont sur les liquides pour les ennemis et les joueurs. block.steelconveyor.name=tapis roulant en acier -block.steelconveyor.fulldescription=Bloc de transport d'élément avancé. Déplace les objets plus rapidement que les tapis roulants standard. -block.poweredconveyor.name=tapis roulant à pulsation -block.poweredconveyor.fulldescription=Le bloc de transport d'élément ultime. Déplace les objets plus rapidement que les tapis roulants en acier. +block.steelconveyor.fulldescription=Bloc de transport d'élément avancé. Déplace les objets plus rapidement que les tapis roulants standard. +block.poweredconveyor.name=tapis roulant à pulsation +block.poweredconveyor.fulldescription=Le bloc de transport d'élément ultime. Déplace les objets plus rapidement que les tapis roulants en acier. block.router.name=routeur -block.router.fulldescription=Accepte les éléments d'une direction et les redistribue dans les 3 autres directions. Peut également stocker une certaine quantité d'objets. Utile pour dédoubler les matériaux d'un extracteur dans plusieurs tourelles. -block.router.description=Diviser les matériaux d'entrée dans 3 directions. +block.router.fulldescription=Accepte les éléments d'une direction et les redistribue dans les 3 autres directions. Peut également stocker une certaine quantité d'objets. Utile pour dédoubler les matériaux d'un extracteur dans plusieurs tourelles. +block.router.description=Diviser les matériaux d'entrée dans 3 directions. block.junction.name=jonction -block.junction.fulldescription=Agit comme un pont pour deux tapis roulants croisé. Utile dans les situations avec deux tapis roulants différents transportant des matériaux différents se coupant. +block.junction.fulldescription=Agit comme un pont pour deux tapis roulants croisé. Utile dans les situations avec deux tapis roulants différents transportant des matériaux différents se coupant. block.junction.description=Sert de jonction de tapis roulant. block.conveyortunnel.name=tunnel de transport -block.conveyortunnel.fulldescription=Transporte l'objet sous les blocs. Pour l'utiliser, placez les côte à côte, les entrées de chaque côté avec maximum deux blocs d'écart. +block.conveyortunnel.fulldescription=Transporte l'objet sous les blocs. Pour l'utiliser, placez les côte à côte, les entrées de chaque côté avec maximum deux blocs d'écart. block.conveyortunnel.description=Transporte les objets sous les blocs. block.liquidjunction.name=jonction pour liquide -block.liquidjunction.fulldescription=Agit comme un pont pour deux conduits de passage. Utile dans les situations avec deux conduits différents transportant différents liquides se coupant. +block.liquidjunction.fulldescription=Agit comme un pont pour deux conduits de passage. Utile dans les situations avec deux conduits différents transportant différents liquides se coupant. block.liquiditemjunction.name=jonction de liquides-objets block.liquiditemjunction.fulldescription=Agit comme un pont quand un conduit coupe un tapis roulant. block.liquiditemjunction.description=Sert de jonction pour les articles et les liquides. -block.powerbooster.name=Disperseur d'énergie -block.powerbooster.fulldescription=Distribue l'énergie à tous les blocs se trouvant dans son rayon. +block.powerbooster.name=Disperseur d'énergie +block.powerbooster.fulldescription=Distribue l'énergie à tous les blocs se trouvant dans son rayon. block.powerbooster.description=Distribue la puissance dans un rayon. -block.powerlaser.name=laser d'énergie -block.powerlaser.fulldescription=Crée un laser qui transmet l'énergie au bloc en face de lui. Ne génère pas d'énergie lui-même. Idéal avec des générateurs ou d'autres lasers. -block.powerlaser.description=Transmet l'énergie. +block.powerlaser.name=laser d'énergie +block.powerlaser.fulldescription=Crée un laser qui transmet l'énergie au bloc en face de lui. Ne génère pas d'énergie lui-même. Idéal avec des générateurs ou d'autres lasers. +block.powerlaser.description=Transmet l'énergie. block.powerlaserrouter.name=routeur laser -block.powerlaserrouter.fulldescription=Laser qui distribue la puissance dans trois directions à la fois. Utile dans les situations où il est nécessaire d'alimenter plusieurs blocs avec un seul générateur. -block.powerlaserrouter.description=Divise l'énergie d'entrée en 3 lasers. +block.powerlaserrouter.fulldescription=Laser qui distribue la puissance dans trois directions à la fois. Utile dans les situations où il est nécessaire d'alimenter plusieurs blocs avec un seul générateur. +block.powerlaserrouter.description=Divise l'énergie d'entrée en 3 lasers. block.powerlasercorner.name=laser d'angle -block.powerlasercorner.fulldescription=Laser qui distribue la puissance dans deux directions à la fois. Utile dans les situations où il est nécessaire d'alimenter plusieurs blocs avec un seul générateur, et, où, un routeur est imprécis. -block.powerlasercorner.description=Divise l'énergie d'entrée en 2 lasers. -block.teleporter.name=téléporteur -block.teleporter.fulldescription=Bloc de transport de minerai avancé. Les téléporteurs transmettent des objets à d'autres téléporteurs de la même couleur. Ne fait rien si aucun téléporteur de la même couleur n'existe. Si plusieurs téléporteurs de la même couleur existent, un téléporteur aléatoire est sélectionné. Cliquez sur les flèches pour changer de couleur. +block.powerlasercorner.fulldescription=Laser qui distribue la puissance dans deux directions à la fois. Utile dans les situations où il est nécessaire d'alimenter plusieurs blocs avec un seul générateur, et, où, un routeur est imprécis. +block.powerlasercorner.description=Divise l'énergie d'entrée en 2 lasers. +block.teleporter.name=téléporteur +block.teleporter.fulldescription=Bloc de transport de minerai avancé. Les téléporteurs transmettent des objets à d'autres téléporteurs de la même couleur. Ne fait rien si aucun téléporteur de la même couleur n'existe. Si plusieurs téléporteurs de la même couleur existent, un téléporteur aléatoire est sélectionné. Cliquez sur les flèches pour changer de couleur. block.teleporter.description=[interact]Tapez sur le bloc pour le configurer[] block.sorter.name=trieur -block.sorter.fulldescription=Trie les objets par type de matériau. Le matériel à accepter est indiqué par la couleur dans le bloc. Tous les éléments qui correspondent au matériau de tri sont sortis vers l'avant, tout le reste est sorti à gauche et à droite. +block.sorter.fulldescription=Trie les objets par type de matériau. Le matériel à accepter est indiqué par la couleur dans le bloc. Tous les éléments qui correspondent au matériau de tri sont sortis vers l'avant, tout le reste est sorti à gauche et à droite. block.sorter.description=[interact]Tapez sur le bloc pour le configurer[] block.core.name=noyau block.pump.name=pompe -block.pump.fulldescription=Pompe les liquides provenant d'un bloc source - généralement de l'eau, de la lave ou de l'huile. distribut le liquide dans les conduits voisins. +block.pump.fulldescription=Pompe les liquides provenant d'un bloc source - généralement de l'eau, de la lave ou de l'huile. distribut le liquide dans les conduits voisins. block.pump.description=Pompe les liquides dans les conduits voisins. -block.fluxpump.name=pompe à flux élevé -block.fluxpump.fulldescription=Une version avancée de la pompe. Stocke plus de liquide et pompe le liquide plus rapidement. +block.fluxpump.name=pompe à flux élevé +block.fluxpump.fulldescription=Une version avancée de la pompe. Stocke plus de liquide et pompe le liquide plus rapidement. block.fluxpump.description=Pompe les liquides dans les conduits voisins. block.smelter.name=fonderie -block.smelter.fulldescription=Le bloc d'artisanat essentiel. Lorsqu'est entré 1 fer et 1 charbon, un acier est produit. +block.smelter.fulldescription=Le bloc d'artisanat essentiel. Lorsqu'est entré 1 fer et 1 charbon, un acier est produit. block.smelter.description=Convertit le charbon + le fer en acier. block.crucible.name=creuset -block.crucible.fulldescription=Un bloc d'artisanat avancé. Lors de l'entrée d'un titane et d'un acier, un dirium en sort. +block.crucible.fulldescription=Un bloc d'artisanat avancé. Lors de l'entrée d'un titane et d'un acier, un dirium en sort. block.crucible.description=Convertit l'acier + le titane en dirium. block.coalpurifier.name=convertisseur de charbon -block.coalpurifier.fulldescription=Un bloc de conversion de base. Produit du charbon lorsqu'on lui fourni de grandes quantités d'eau et de pierre. +block.coalpurifier.fulldescription=Un bloc de conversion de base. Produit du charbon lorsqu'on lui fourni de grandes quantités d'eau et de pierre. block.coalpurifier.description=Convertit la pierre + l'eau en charbon. block.titaniumpurifier.name=convertisseur de titane -block.titaniumpurifier.fulldescription=Un bloc de conversion standard. Produit du titane lorsqu'est fourni de grandes quantités d'eau et de fer. +block.titaniumpurifier.fulldescription=Un bloc de conversion standard. Produit du titane lorsqu'est fourni de grandes quantités d'eau et de fer. block.titaniumpurifier.description=Convertit le fer + l'eau en titane. -block.oilrefinery.name=raffinerie de pétrole -block.oilrefinery.fulldescription=Raffine de grandes quantités de pétrole en charbon. Utile pour alimenter les tourelles à charbon lorsque les filons de charbon sont rares. +block.oilrefinery.name=raffinerie de pétrole +block.oilrefinery.fulldescription=Raffine de grandes quantités de pétrole en charbon. Utile pour alimenter les tourelles à charbon lorsque les filons de charbon sont rares. block.oilrefinery.description=Convertit l'huile en charbon. block.stoneformer.name=fabrique de pierre -block.stoneformer.fulldescription=Il transforme la lave en pierre. Utile pour produire des quantités massives de pierre pour les convertisseurs de charbon. +block.stoneformer.fulldescription=Il transforme la lave en pierre. Utile pour produire des quantités massives de pierre pour les convertisseurs de charbon. block.stoneformer.description=Convertit la lave en pierre. block.lavasmelter.name=fonderie de lave -block.lavasmelter.fulldescription=Utilise la lave pour convertir le fer en acier. Une alternative aux fonderies. Utile dans les situations où le charbon est rare. +block.lavasmelter.fulldescription=Utilise la lave pour convertir le fer en acier. Une alternative aux fonderies. Utile dans les situations où le charbon est rare. block.lavasmelter.description=Convertit le fer + la lave en acier. block.stonedrill.name=extracteur de pierre -block.stonedrill.fulldescription=L'extracteur essentiel. Lorsqu'il est placé sur des cases de pierre, les pierres sont produitent à un rythme lent, indéfiniment. +block.stonedrill.fulldescription=L'extracteur essentiel. Lorsqu'il est placé sur des cases de pierre, les pierres sont produitent à un rythme lent, indéfiniment. block.stonedrill.description=Mine 1 pierre toutes les 4 secondes. block.irondrill.name=extracteur de fer -block.irondrill.fulldescription=Un extracteur de base. Lorsqu'il est placé sur des cases de minerai de fer, produit du fer à un rythme lent, indéfiniment. +block.irondrill.fulldescription=Un extracteur de base. Lorsqu'il est placé sur des cases de minerai de fer, produit du fer à un rythme lent, indéfiniment. block.irondrill.description=Mine 1 fer toutes les 5 secondes. block.coaldrill.name=extracteur de charbon -block.coaldrill.fulldescription=Un extracteur de base. Lorsqu'il est placé sur des cases de minerai de charbon, produit du charbon à un rythme lent, indéfiniment. +block.coaldrill.fulldescription=Un extracteur de base. Lorsqu'il est placé sur des cases de minerai de charbon, produit du charbon à un rythme lent, indéfiniment. block.coaldrill.description=Mine 1 charbon toutes les 5 secondes. block.uraniumdrill.name=extracteur d'uranium -block.uraniumdrill.fulldescription=Un extracteur avancé. Lorsqu'il est placés sur des cases d'uranium, il produit de l'uranium à un rythme lent, indéfiniment. +block.uraniumdrill.fulldescription=Un extracteur avancé. Lorsqu'il est placés sur des cases d'uranium, il produit de l'uranium à un rythme lent, indéfiniment. block.uraniumdrill.description=Mine 1 uranium toutes les 7 secondes. block.titaniumdrill.name=extracteur de titane -block.titaniumdrill.fulldescription=Un extracteur avancé. Lorsqu'il est placé sur des cases de minerai de titane, il produit du titane à un rythme lent, indéfiniment. +block.titaniumdrill.fulldescription=Un extracteur avancé. Lorsqu'il est placé sur des cases de minerai de titane, il produit du titane à un rythme lent, indéfiniment. block.titaniumdrill.description=Mine 1 titane toutes les 5 secondes. block.omnidrill.name=omni-extracteur -block.omnidrill.fulldescription=L'extracteur ultime. Exploitera n'importe quel minerai sur lequel il est placé à un rythme rapide. +block.omnidrill.fulldescription=L'extracteur ultime. Exploitera n'importe quel minerai sur lequel il est placé à un rythme rapide. block.omnidrill.description=Mine 1 de toute ressource toutes les 3 secondes. -block.coalgenerator.name=générateur à charbon -block.coalgenerator.fulldescription=Le générateur essentiel. Génère de l'énergie à partir du charbon. Des lasers d'énergies sortent des 4 côtés. -block.coalgenerator.description=Génère de la puissance depuis du charbon. -block.thermalgenerator.name=Générateur thermique -block.thermalgenerator.fulldescription=Génère de la puissance depuis la lave. Emet de la puissance depuis les 4 cotés. -block.thermalgenerator.description=Génère de la puissance depuis la lave. -block.combustiongenerator.name=Générateur a combustion -block.combustiongenerator.fulldescription=Génère de la puissance depuis du petrole. Emet de la puissance depuis les 4 cotés. -block.combustiongenerator.description=Génère de la puissance avec du pétrole. -block.rtgenerator.name=Générateur RTG -block.rtgenerator.fulldescription=Génère de petites partie de puissance avec de l'uranium. Emet de la puissance depuis les 4 cotés. -block.rtgenerator.description=Génère de la puissance depuis l'uranium -block.nuclearreactor.name=Réacteur nucléaire -block.nuclearreactor.fulldescription=Une version avancée du générateur RTG, et le générateur ultime de puissance. Génère de la puissance depuis l'uranium. Requiert un refoidissement par eau. Très instable; Explose violemment s'il n'est pas bien refroidit. +block.coalgenerator.name=générateur à charbon +block.coalgenerator.fulldescription=Le générateur essentiel. Génère de l'énergie à partir du charbon. Des lasers d'énergies sortent des 4 côtés. +block.coalgenerator.description=Génère de la puissance depuis du charbon. +block.thermalgenerator.name=Générateur thermique +block.thermalgenerator.fulldescription=Génère de la puissance depuis la lave. Emet de la puissance depuis les 4 cotés. +block.thermalgenerator.description=Génère de la puissance depuis la lave. +block.combustiongenerator.name=Générateur a combustion +block.combustiongenerator.fulldescription=Génère de la puissance depuis du petrole. Emet de la puissance depuis les 4 cotés. +block.combustiongenerator.description=Génère de la puissance avec du pétrole. +block.rtgenerator.name=Générateur RTG +block.rtgenerator.fulldescription=Génère de petites partie de puissance avec de l'uranium. Emet de la puissance depuis les 4 cotés. +block.rtgenerator.description=Génère de la puissance depuis l'uranium +block.nuclearreactor.name=Réacteur nucléaire +block.nuclearreactor.fulldescription=Une version avancée du générateur RTG, et le générateur ultime de puissance. Génère de la puissance depuis l'uranium. Requiert un refoidissement par eau. Très instable; Explose violemment s'il n'est pas bien refroidit. block.turret.name=tourelle -block.turret.fulldescription=Une tourrelle basique. Utilise de la pierre comme munition. A légèrement plus de distance que la tourelle double. +block.turret.fulldescription=Une tourrelle basique. Utilise de la pierre comme munition. A légèrement plus de distance que la tourelle double. block.turret.description=[turretinfo]Munition: pierre block.doubleturret.name=tourelle double -block.doubleturret.fulldescription=Une version légèrement plus puissante que la tourelle. Utilise de la pierre comme munition. Inflige plus de dégâts mais a une distance plus faible. Tire deux balles. +block.doubleturret.fulldescription=Une version légèrement plus puissante que la tourelle. Utilise de la pierre comme munition. Inflige plus de dégâts mais a une distance plus faible. Tire deux balles. block.doubleturret.description=[turretinfo]Munition: pierre block.machineturret.name=tourelle gatling -block.machineturret.fulldescription=Une tourelle rotative. Utilise du fer comme munition. A une cadence de tir avec des dégâts croissants. +block.machineturret.fulldescription=Une tourelle rotative. Utilise du fer comme munition. A une cadence de tir avec des dégâts croissants. block.machineturret.description=[turretinfo]Munition: fer -block.shotgunturret.name=tourelle à dispersion -block.shotgunturret.fulldescription=une tourelle basique. Utilise du fer comme munition. Tire 7 balles dispersées. Distance faible, mais inflige plus de dégâts que la tourelle gatling. +block.shotgunturret.name=tourelle à dispersion +block.shotgunturret.fulldescription=une tourelle basique. Utilise du fer comme munition. Tire 7 balles dispersées. Distance faible, mais inflige plus de dégâts que la tourelle gatling. block.shotgunturret.description=[turretinfo]Munition: fer block.flameturret.name=Tourelle lance-flamme -block.flameturret.fulldescription=Tourelle avancée à faible distance. Utilise le charbon comme munition. A une distance très faible, mais inflige beaucoup de dégâts. Fort au combat rapproché. Utilisation recommandé derrière les murs. +block.flameturret.fulldescription=Tourelle avancée à faible distance. Utilise le charbon comme munition. A une distance très faible, mais inflige beaucoup de dégâts. Fort au combat rapproché. Utilisation recommandé derrière les murs. block.flameturret.description=[turretinfo]Munition: charbon -block.sniperturret.name=tourelle à énergie -block.sniperturret.fulldescription=Tourelle avancée à longue portée. Utilise l'acier pour les munitions. Dommages très élevés, mais faible cadence de tir. Cher à utiliser, mais peut-être placé loin des lignes ennemies en raison de sa portée. +block.sniperturret.name=tourelle à énergie +block.sniperturret.fulldescription=Tourelle avancée à longue portée. Utilise l'acier pour les munitions. Dommages très élevés, mais faible cadence de tir. Cher à utiliser, mais peut-être placé loin des lignes ennemies en raison de sa portée. block.sniperturret.description=[turretinfo]munition : acier -block.mortarturret.name=tourelle antiaérienne -block.mortarturret.fulldescription=Tourelle avancée pour les dégâts de zone. Utilise du charbon pour les munitions. Vitesse de tir et balles très lente mais de gros dégâts de cible et de zone. Utile pour les grandes foules d'ennemis. +block.mortarturret.name=tourelle antiaérienne +block.mortarturret.fulldescription=Tourelle avancée pour les dégâts de zone. Utilise du charbon pour les munitions. Vitesse de tir et balles très lente mais de gros dégâts de cible et de zone. Utile pour les grandes foules d'ennemis. block.mortarturret.description=[turretinfo]munition : charbon block.laserturret.name=tourelle laser -block.laserturret.fulldescription=Tourelle avancée à cible unique. Utilise de l'énergie. Tourelle polyvalente de moyenne portée. Une seule cible seulement. Ne manque jamais. -block.laserturret.description=[turretinfo]Utilise de l'énergie. +block.laserturret.fulldescription=Tourelle avancée à cible unique. Utilise de l'énergie. Tourelle polyvalente de moyenne portée. Une seule cible seulement. Ne manque jamais. +block.laserturret.description=[turretinfo]Utilise de l'énergie. block.waveturret.name=tourelle Tesla -block.waveturret.fulldescription=Tourelle multi-cible avancée utilisant de l'énergie. A une portée moyenne. Ne rate jamais sa cible. Elle provoque peu de dégâts mais peut frapper plusieurs ennemis simultanément avec une chaîne d'éclairs. -block.waveturret.description=[turretinfo]Utilise de l'énergie. -block.plasmaturret.name=tourelle à plasma -block.plasmaturret.fulldescription=Version très avancée de la tourelle lance-flamme. Utilise du charbon comme munition. Dommages très élevés, de faible à moyenne portée. +block.waveturret.fulldescription=Tourelle multi-cible avancée utilisant de l'énergie. A une portée moyenne. Ne rate jamais sa cible. Elle provoque peu de dégâts mais peut frapper plusieurs ennemis simultanément avec une chaîne d'éclairs. +block.waveturret.description=[turretinfo]Utilise de l'énergie. +block.plasmaturret.name=tourelle à plasma +block.plasmaturret.fulldescription=Version très avancée de la tourelle lance-flamme. Utilise du charbon comme munition. Dommages très élevés, de faible à moyenne portée. block.plasmaturret.description=[turretinfo]munition : charbon -block.chainturret.name=tourelle à mitrailleuse -block.chainturret.fulldescription=La tourelle ultime à tir rapide. Utilise de l'uranium comme munition. Tire de grosses salves à une fréquence élevée. Portée moyenne. Traverse plusieurs carreaux. Extrêmement puissant. +block.chainturret.name=tourelle à mitrailleuse +block.chainturret.fulldescription=La tourelle ultime à tir rapide. Utilise de l'uranium comme munition. Tire de grosses salves à une fréquence élevée. Portée moyenne. Traverse plusieurs carreaux. Extrêmement puissant. block.chainturret.description=[turretinfo]munition : Uranium block.titancannon.name=Canon titan -block.titancannon.fulldescription=La tourelle à longue portée ultime. Utilise de l'uranium comme munition. Tire de gros obus provoquant des dégâts de zone à une cadence de tir moyenne. Traverse plusieurs carreaux. Extrêmement puissant. +block.titancannon.fulldescription=La tourelle à longue portée ultime. Utilise de l'uranium comme munition. Tire de gros obus provoquant des dégâts de zone à une cadence de tir moyenne. Traverse plusieurs carreaux. Extrêmement puissant. block.titancannon.description=[turretinfo]munition : uranium block.playerspawn.name=point d'apparition du joueur block.enemyspawn.name=point d'apparition des ennemis diff --git a/core/assets/version.properties b/core/assets/version.properties index 2509ea0a1e..0d6774d756 100644 --- a/core/assets/version.properties +++ b/core/assets/version.properties @@ -1,7 +1,7 @@ #Autogenerated file. Do not modify. -#Fri Mar 09 19:30:43 EST 2018 +#Sat Mar 10 14:01:23 EST 2018 version=release -androidBuildCode=364 +androidBuildCode=365 name=Mindustry code=3.4 build=custom build diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index 0accd00231..317c3d9c31 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -25,9 +25,7 @@ import io.anuke.ucore.core.Inputs.DeviceType; import io.anuke.ucore.entities.Entities; import io.anuke.ucore.modules.Module; import io.anuke.ucore.scene.ui.layout.Unit; -import io.anuke.ucore.util.Atlas; -import io.anuke.ucore.util.InputProxy; -import io.anuke.ucore.util.Mathf; +import io.anuke.ucore.util.*; import static io.anuke.mindustry.Vars.*; diff --git a/core/src/io/anuke/mindustry/ui/MenuButton.java b/core/src/io/anuke/mindustry/ui/MenuButton.java index 273ce7ee68..f6d4a06d43 100644 --- a/core/src/io/anuke/mindustry/ui/MenuButton.java +++ b/core/src/io/anuke/mindustry/ui/MenuButton.java @@ -40,6 +40,7 @@ public class MenuButton extends Button{ scale = Unit.dp.scl(1f); } add(text, style, scale).color(hasInvalid ? Color.DARK_GRAY : Color.WHITE); + if(hasInvalid){ row(); add(text, style, scale).padTop(Unit.dp.scl(-Core.font.getData().lineHeight * scale * 2f - 4f)).color(Color.WHITE); From a0f85a8e4bd60bb8fa7039b16caf2874e3a93bfc Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 11 Mar 2018 10:08:13 -0400 Subject: [PATCH 3/9] Updated uCore/crash fix --- build.gradle | 2 +- core/assets/version.properties | 4 ++-- core/src/io/anuke/mindustry/core/UI.java | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 6d62477c27..8867b40fc6 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ allprojects { appName = 'Mindustry' gdxVersion = '1.9.8' aiVersion = '1.8.1' - uCoreVersion = '156dff2' + uCoreVersion = 'cdfa32d' getVersionString = { String buildVersion = getBuildVersion() diff --git a/core/assets/version.properties b/core/assets/version.properties index 0d6774d756..edf92eb160 100644 --- a/core/assets/version.properties +++ b/core/assets/version.properties @@ -1,7 +1,7 @@ #Autogenerated file. Do not modify. -#Sat Mar 10 14:01:23 EST 2018 +#Sun Mar 11 10:07:56 EDT 2018 version=release -androidBuildCode=365 +androidBuildCode=367 name=Mindustry code=3.4 build=custom build diff --git a/core/src/io/anuke/mindustry/core/UI.java b/core/src/io/anuke/mindustry/core/UI.java index 0f57ad3fd4..75205309c0 100644 --- a/core/src/io/anuke/mindustry/core/UI.java +++ b/core/src/io/anuke/mindustry/core/UI.java @@ -128,8 +128,7 @@ public class UI extends SceneModule{ if(Graphics.drawing()) Graphics.end(); - scene.act(); - scene.draw(); + act(); if(control.showCursor()) { Draw.color(); From 1ab9961cfecfb7074ae51c326fd5385de67246a5 Mon Sep 17 00:00:00 2001 From: Sonnicon <36009275+Sonnicon@users.noreply.github.com> Date: Mon, 12 Mar 2018 21:32:38 +0000 Subject: [PATCH 4/9] Leftover line of code. --- core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java b/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java index e69b377800..eb727a30f2 100644 --- a/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java @@ -33,7 +33,6 @@ public class WeaponBlocks{ reload = 13f; bullet = BulletType.stone; ammo = Item.stone; - health = 55; health = 45; } From 8fffc1cf9ccdc8a0920a4b87c00282b202fe855f Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 13 Mar 2018 11:44:22 -0400 Subject: [PATCH 5/9] Fixed misaligned desktop placing and breaking --- core/assets/version.properties | 4 ++-- .../anuke/mindustry/input/DesktopInput.java | 21 +++++++------------ 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/core/assets/version.properties b/core/assets/version.properties index edf92eb160..8598a6b480 100644 --- a/core/assets/version.properties +++ b/core/assets/version.properties @@ -1,7 +1,7 @@ #Autogenerated file. Do not modify. -#Sun Mar 11 10:07:56 EDT 2018 +#Tue Mar 13 11:43:39 EDT 2018 version=release -androidBuildCode=367 +androidBuildCode=369 name=Mindustry code=3.4 build=custom build diff --git a/core/src/io/anuke/mindustry/input/DesktopInput.java b/core/src/io/anuke/mindustry/input/DesktopInput.java index 3d70d62363..494c88fe87 100644 --- a/core/src/io/anuke/mindustry/input/DesktopInput.java +++ b/core/src/io/anuke/mindustry/input/DesktopInput.java @@ -17,16 +17,16 @@ import io.anuke.ucore.util.Mathf; import static io.anuke.mindustry.Vars.*; public class DesktopInput extends InputHandler{ - int mousex, mousey; - int endx, endy; + float mousex, mousey; + float endx, endy; private boolean enableHold = false; private boolean beganBreak; private boolean rotated = false, rotatedAlt, zoomed; - @Override public float getCursorEndX(){ return select() ? getCursorX() : endx; } - @Override public float getCursorEndY(){ return select() ? getCursorY() : endy; } - @Override public float getCursorX(){ return (int)(Graphics.screen(mousex, mousey).x); } - @Override public float getCursorY(){ return (int)(Gdx.graphics.getHeight() - Graphics.screen(mousex, mousey).y); } + @Override public float getCursorEndX(){ return endx; } + @Override public float getCursorEndY(){ return endy; } + @Override public float getCursorX(){ return (Graphics.screen(mousex, mousey).x); } + @Override public float getCursorY(){ return (Gdx.graphics.getHeight() - 1 - Graphics.screen(mousex, mousey).y); } @Override public boolean drawPlace(){ return !beganBreak; } @Override @@ -48,8 +48,8 @@ public class DesktopInput extends InputHandler{ } if(!Inputs.keyDown("select") && !Inputs.keyDown("break")){ - mousex = (int)Graphics.mouseWorld().x; - mousey = (int)Graphics.mouseWorld().y; + mousex = Graphics.mouseWorld().x; + mousey = Graphics.mouseWorld().y; } endx = Gdx.input.getX(); @@ -156,11 +156,6 @@ public class DesktopInput extends InputHandler{ } - boolean select(){ - return !Inputs.keyDown("select") && !Inputs.keyRelease("select") && - !Inputs.keyDown("break") && !Inputs.keyRelease("break"); - } - public int tilex(){ return (recipe != null && recipe.result.isMultiblock() && recipe.result.width % 2 == 0) ? From ea9b3cc7dd44382617aa5c2cad64cdfbecd3fe63 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 13 Mar 2018 13:40:57 -0400 Subject: [PATCH 6/9] Fixed some minor bugs with teleporters an changelog --- core/assets/bundles/bundle.properties | 2 ++ core/assets/version.properties | 6 +++--- core/src/io/anuke/mindustry/input/DesktopInput.java | 4 ++-- .../anuke/mindustry/ui/dialogs/ChangelogDialog.java | 12 ++++++++++-- core/src/io/anuke/mindustry/world/Block.java | 1 + .../world/blocks/types/distribution/Teleporter.java | 1 - 6 files changed, 18 insertions(+), 8 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 0fe8e7cebc..630e900ac4 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -115,6 +115,8 @@ text.openlink=Open Link text.back=Back text.quit.confirm=Are you sure you want to quit? text.changelog.title=Changelog +text.changelog.loading=Getting changelog... +text.changelog.error.android=[orange]Note that the changelog does not work on Android 4.4 and below!\nThis is due to an internal Android bug. text.changelog.error=[scarlet]Error getting changelog!\nCheck your internet connection. text.changelog.current=[yellow][[Current version] text.changelog.latest=[orange][[Latest version] diff --git a/core/assets/version.properties b/core/assets/version.properties index 8598a6b480..8537ad38ee 100644 --- a/core/assets/version.properties +++ b/core/assets/version.properties @@ -1,7 +1,7 @@ #Autogenerated file. Do not modify. -#Tue Mar 13 11:43:39 EDT 2018 +#Tue Mar 13 13:31:03 EDT 2018 version=release -androidBuildCode=369 +androidBuildCode=380 name=Mindustry code=3.4 -build=custom build +build=34 diff --git a/core/src/io/anuke/mindustry/input/DesktopInput.java b/core/src/io/anuke/mindustry/input/DesktopInput.java index 494c88fe87..2caca02569 100644 --- a/core/src/io/anuke/mindustry/input/DesktopInput.java +++ b/core/src/io/anuke/mindustry/input/DesktopInput.java @@ -25,8 +25,8 @@ public class DesktopInput extends InputHandler{ @Override public float getCursorEndX(){ return endx; } @Override public float getCursorEndY(){ return endy; } - @Override public float getCursorX(){ return (Graphics.screen(mousex, mousey).x); } - @Override public float getCursorY(){ return (Gdx.graphics.getHeight() - 1 - Graphics.screen(mousex, mousey).y); } + @Override public float getCursorX(){ return Graphics.screen(mousex, mousey).x; } + @Override public float getCursorY(){ return Gdx.graphics.getHeight() - 1 - Graphics.screen(mousex, mousey).y; } @Override public boolean drawPlace(){ return !beganBreak; } @Override diff --git a/core/src/io/anuke/mindustry/ui/dialogs/ChangelogDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/ChangelogDialog.java index 2c228c36fb..d96b0cb754 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/ChangelogDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/ChangelogDialog.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.ui.dialogs; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.Vars; import io.anuke.mindustry.io.Changelogs; import io.anuke.mindustry.io.Changelogs.VersionInfo; import io.anuke.mindustry.io.Version; @@ -17,6 +18,10 @@ public class ChangelogDialog extends FloatingDialog{ public ChangelogDialog(){ super("$text.changelog.title"); + addCloseButton(); + + content().add("$text.changelog.loading"); + Changelogs.getChangelog(result -> { versions = result; Gdx.app.postRunnable(this::setup); @@ -30,12 +35,15 @@ public class ChangelogDialog extends FloatingDialog{ Table table = new Table(); ScrollPane pane = new ScrollPane(table, "clear"); + content().clear(); content().add(pane).grow(); - addCloseButton(); - if(versions == null){ table.add("$text.changelog.error"); + if(Vars.android){ + table.row(); + table.add("$text.changelog.error.android").padTop(8); + } }else{ for(VersionInfo info : versions){ Table in = new Table("clear"); diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index edb0500aba..d5914ac382 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -122,6 +122,7 @@ public class Block{ public void configure(Tile tile, byte data){} public void setConfigure(Tile tile, byte data){ + configure(tile, data); if(Net.active()) NetEvents.handleBlockConfig(tile, data); } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java index 6c185a4d10..bcce6b3314 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java @@ -117,7 +117,6 @@ public class Teleporter extends PowerBlock{ for(int i = 0; i < colors; i ++){ final int f = i; ImageButton button = cont.addImageButton("white", "toggle", 24, () -> { - entity.color = (byte)f; lastColor = (byte)f; setConfigure(tile, (byte)f); }).size(34, 38).padBottom(-5.1f).group(group).get(); From f056edded77f1a4f6153c811868ffa55ccaaea48 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 13 Mar 2018 14:30:46 -0400 Subject: [PATCH 7/9] Fixed getting oldest version instead of latest one --- core/assets/version.properties | 4 ++-- core/src/io/anuke/mindustry/ui/dialogs/ChangelogDialog.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/assets/version.properties b/core/assets/version.properties index 8537ad38ee..1b46609194 100644 --- a/core/assets/version.properties +++ b/core/assets/version.properties @@ -1,7 +1,7 @@ #Autogenerated file. Do not modify. -#Tue Mar 13 13:31:03 EDT 2018 +#Tue Mar 13 13:44:46 EDT 2018 version=release -androidBuildCode=380 +androidBuildCode=381 name=Mindustry code=3.4 build=34 diff --git a/core/src/io/anuke/mindustry/ui/dialogs/ChangelogDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/ChangelogDialog.java index d96b0cb754..665b5831dd 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/ChangelogDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/ChangelogDialog.java @@ -53,7 +53,7 @@ public class ChangelogDialog extends FloatingDialog{ if(info.build == Version.build){ in.row(); in.add("$text.changelog.current"); - }else if(info == versions.peek()){ + }else if(info == versions.first()){ in.row(); in.add("$text.changelog.latest"); } From 95db857fb5f9f81393eb78eb205a81b062f1e39f Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 15 Mar 2018 12:29:19 -0400 Subject: [PATCH 8/9] Updated uCore --- build.gradle | 2 +- core/assets/version.properties | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 8867b40fc6..da94f43d1a 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ allprojects { appName = 'Mindustry' gdxVersion = '1.9.8' aiVersion = '1.8.1' - uCoreVersion = 'cdfa32d' + uCoreVersion = '36de2b4' getVersionString = { String buildVersion = getBuildVersion() diff --git a/core/assets/version.properties b/core/assets/version.properties index 1b46609194..7dd63cd907 100644 --- a/core/assets/version.properties +++ b/core/assets/version.properties @@ -1,7 +1,7 @@ #Autogenerated file. Do not modify. -#Tue Mar 13 13:44:46 EDT 2018 +#Thu Mar 15 12:29:06 EDT 2018 version=release -androidBuildCode=381 +androidBuildCode=388 name=Mindustry code=3.4 -build=34 +build=custom build From ae89a004a6f247dae16fb7a6f4192403596579a8 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 15 Mar 2018 12:53:47 -0400 Subject: [PATCH 9/9] Fixed port bug, possible random disconnect fix --- core/assets/bundles/bundle.properties | 1 + core/assets/version.properties | 2 +- .../io/anuke/mindustry/core/NetClient.java | 39 ++++++++----------- core/src/io/anuke/mindustry/net/Packets.java | 9 ++++- .../mindustry/ui/fragments/DebugFragment.java | 3 +- .../anuke/mindustry/server/ServerControl.java | 36 +++++++++-------- 6 files changed, 47 insertions(+), 43 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 630e900ac4..7f75cb6a13 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -70,6 +70,7 @@ text.joingame.byip=Join by IP... text.joingame.title=Join Game text.joingame.ip=IP: text.disconnect=Disconnected. +text.disconnect.data=Failed to load world data! text.connecting=[accent]Connecting... text.connecting.data=[accent]Loading world data... text.connectfail=[crimson]Failed to connect to server: [orange]{0} diff --git a/core/assets/version.properties b/core/assets/version.properties index 7dd63cd907..5e49680142 100644 --- a/core/assets/version.properties +++ b/core/assets/version.properties @@ -1,5 +1,5 @@ #Autogenerated file. Do not modify. -#Thu Mar 15 12:29:06 EDT 2018 +#Thu Mar 15 12:52:13 EDT 2018 version=release androidBuildCode=388 name=Mindustry diff --git a/core/src/io/anuke/mindustry/core/NetClient.java b/core/src/io/anuke/mindustry/core/NetClient.java index a3c68f1f00..b0ad4a281c 100644 --- a/core/src/io/anuke/mindustry/core/NetClient.java +++ b/core/src/io/anuke/mindustry/core/NetClient.java @@ -40,10 +40,10 @@ public class NetClient extends Module { private Timer timer = new Timer(5); private boolean connecting = false; - private boolean gotData = false; private boolean kicked = false; private IntSet recieved = new IntSet(); private IntMap recent = new IntMap<>(); + private float timeoutTime = 0f; //data timeout counter public NetClient(){ @@ -53,8 +53,8 @@ public class NetClient extends Module { Net.setClientLoaded(false); recieved.clear(); recent.clear(); + timeoutTime = 0f; connecting = true; - gotData = false; kicked = false; ui.chatfrag.clearMessages(); @@ -77,14 +77,6 @@ public class NetClient extends Module { } Net.send(c, SendMode.tcp); - - Timers.runTask(dataTimeout, () -> { - if (!gotData) { - Log.err("Failed to load data!"); - ui.loadfrag.hide(); - Net.disconnect(); - } - }); }); Net.handleClient(Disconnect.class, packet -> { @@ -105,8 +97,6 @@ public class NetClient extends Module { NetworkIO.loadWorld(data.stream); player.set(world.getSpawnX(), world.getSpawnY()); - gotData = true; - finishConnecting(); }); @@ -123,7 +113,7 @@ public class NetClient extends Module { }); Net.handleClient(SyncPacket.class, packet -> { - if (!gotData) return; + if (connecting) return; int players = 0; int enemies = 0; @@ -180,9 +170,8 @@ public class NetClient extends Module { } }); - Net.handleClient(BreakPacket.class, (packet) -> { - Placement.breakBlock(packet.x, packet.y, true, Timers.get("breakblocksound", 10)); - }); + Net.handleClient(BreakPacket.class, (packet) -> + Placement.breakBlock(packet.x, packet.y, true, Timers.get("breakblocksound", 10))); Net.handleClient(EntitySpawnPacket.class, packet -> { EntityGroup group = packet.group; @@ -246,7 +235,7 @@ public class NetClient extends Module { kicked = true; Net.disconnect(); state.set(State.menu); - ui.showError("$text.server.kicked." + packet.reason.name()); + if(!packet.reason.quiet) ui.showError("$text.server.kicked." + packet.reason.name()); ui.loadfrag.hide(); }); @@ -316,16 +305,22 @@ public class NetClient extends Module { if(!Net.client()) return; if(!state.is(State.menu)){ - if(gotData) sync(); + if(!connecting) sync(); }else if(!connecting){ Net.disconnect(); + }else{ //...must be connecting + timeoutTime += Timers.delta(); + if(timeoutTime > dataTimeout){ + Log.err("Failed to load data!"); + ui.loadfrag.hide(); + kicked = true; + ui.showError("$text.disconnect.data"); + Net.disconnect(); + timeoutTime = 0f; + } } } - public boolean hasData(){ - return gotData; - } - public boolean isConnecting(){ return connecting; } diff --git a/core/src/io/anuke/mindustry/net/Packets.java b/core/src/io/anuke/mindustry/net/Packets.java index c639005cfb..734f33988f 100644 --- a/core/src/io/anuke/mindustry/net/Packets.java +++ b/core/src/io/anuke/mindustry/net/Packets.java @@ -377,7 +377,14 @@ public class Packets { } public enum KickReason{ - kick, invalidPassword, clientOutdated, serverOutdated, banned + kick, invalidPassword, clientOutdated, serverOutdated, banned, gameover(true); + public final boolean quiet; + + KickReason(){ quiet = false; } + + KickReason(boolean quiet){ + this.quiet = quiet; + } } public static class UpgradePacket implements Packet{ diff --git a/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java b/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java index a141e5d591..1848ed7c73 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java @@ -130,8 +130,7 @@ public class DebugFragment implements Fragment { Net.client() ? "chat.open: " + ui.chatfrag.chatOpen() + "\n" + "chat.messages: " + ui.chatfrag.getMessagesSize() + "\n" + - "client.connecting: " + netClient.isConnecting() + "\n" + - "client.hasdata: " + netClient.hasData() : "", + "client.connecting: " + netClient.isConnecting() + "\n" : "", "players: " + playerGroup.size(), "enemies: " + enemyGroup.size(), "tiles: " + tileGroup.size(), diff --git a/server/src/io/anuke/mindustry/server/ServerControl.java b/server/src/io/anuke/mindustry/server/ServerControl.java index 0b8da6e4f6..7299696239 100644 --- a/server/src/io/anuke/mindustry/server/ServerControl.java +++ b/server/src/io/anuke/mindustry/server/ServerControl.java @@ -11,6 +11,7 @@ import io.anuke.mindustry.game.GameMode; import io.anuke.mindustry.io.SaveIO; import io.anuke.mindustry.io.Version; import io.anuke.mindustry.net.Net; +import io.anuke.mindustry.net.NetConnection; import io.anuke.mindustry.net.NetEvents; import io.anuke.mindustry.net.Packets.ChatPacket; import io.anuke.mindustry.net.Packets.KickReason; @@ -75,25 +76,26 @@ public class ServerControl extends Module { Events.on(GameOverEvent.class, () -> { info("Game over!"); - Timers.runTask(10f, () -> { + for(NetConnection connection : Net.getConnections()){ + Net.kickConnection(connection.id, KickReason.gameover); + } + + if (mode != ShuffleMode.off) { + Array maps = mode == ShuffleMode.both ? world.maps().getAllMaps() : + mode == ShuffleMode.normal ? world.maps().getDefaultMaps() : world.maps().getCustomMaps(); + + Map previous = world.getMap(); + Map map = previous; + while (map == previous || !map.visible) map = maps.random(); + + info("Selected next map to be {0}.", map.name); + state.set(State.playing); + logic.reset(); + world.loadMap(map); + }else{ state.set(State.menu); Net.closeServer(); - - if (mode != ShuffleMode.off) { - Array maps = mode == ShuffleMode.both ? world.maps().getAllMaps() : - mode == ShuffleMode.normal ? world.maps().getDefaultMaps() : world.maps().getCustomMaps(); - - Map previous = world.getMap(); - Map map = previous; - while (map == previous || !map.visible) map = maps.random(); - - info("Selected next map to be {0}.", map.name); - state.set(State.playing); - logic.reset(); - world.loadMap(map); - host(); - } - }); + } }); info("&lcServer loaded. Type &ly'help'&lc for help.");