Aller au contenu
Trxyy

[W.I.P] Créer un Launcher avec un Background Animé

Recommended Posts

Créer un launcher Minecraft Animé

UN PROBLEME MAJEUR AU LANCEMENT DU JEU A ETAIT PATCH.

 


Cette œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas dUtilisation Commerciale - Pas de Modification 3.0 non transposé . Tout partage implique que vous citiez l'auteur original.

 

< INTRODUCTION >

Bonjour a tous.

Dans ce tutoriel, nous allons voir comment faire un launcher "animé" grâce a une librairie faite par moi-même.

CECI EST UNE LIBRAIRIE EST EN DEVELOPPEMENT! ELLE SERA MODIFIEE AVEC LE TEMPS.

ATTENTION, cette librairie est utilisée surtout pour le visuel de votre launcher!

DES TUTOS VIDEOS SANS UTILISATION DE LA LIBRAIRIE SE TROUVENT ICI (CLIQUER POUR VOIR)

La librairie est basée sur le JavaFX, elle ne sert que de support. Le mieux est quand même de développer sois-même.

 

< PRE-REQUIS >

-La librairie "TLib" qui vous pouvez vous procurer ici: TLib.jar

-Le fichier index.php pour les fichiers a télécharger. index.php

-Les bases du développement 

-Un cerveau, du temps ainsi que de l'envie.

 

< SOMMAIRE >

1) CREER LA PARTIE VISUELLE

2) OPTIONNEL MISE A JOUR & LANCEMENT

3) AUTHENTIFICATION

4) OPTIONNEL SAUVEGARDE DES IDENTIFIANTS

 

 

[1] CRÉER LA CLASSE PRINCIPALE

 

Alors pour commencer, il faut crée un nouveau Projet Java (Click droit, new > java project) puis mettre le nom que vous voulez.

On va ajouter notre librairie au projet, clique droit sur le projet, Properties (tout en bas), puis a gauche aller sur "Java build Path", puis dans Libraries dans l'onglet en haut, et enfin sur Add external JARs a droite, sélectionnez la librairie TLib.jar, puis faites ok, ensuite, cliquez sur la fleche sur le "JRE System Library [JavaSE-**], cliquez sur Access rules, puis sur EDIT a droite, cliquez sur ADD

Dans Résolution mettez ACCESSIBLE et dans rule Pattern ecrivez "javafx/**",

eclipse_2018-05-26_23-20-27.png.f9b9eb1a14bbdbd327dced5453d4b019.png

puis validez tout et faites OK jusqu’à retourner sur le plan de travail.

Après on va créer une classe qui s'appellera comme vous le voulez.

Pour le coup, je l'appellerais Main, puis juste avant de cliquer sur Finish, on va cocher un carré avec écrit "public static void main(String[] args)

comme ça, ça nous aura créer cette fonction qui est la fonction "maître", car c'est la fonction qui lancera notre application.

 

eclipse_2018-05-26_23-12-43.png.beb65809c0f61808720f651c3f8bb7d3.png

Voila, ensuite on va extends notre classe vers "Application"

Pour l'import, ca sera javafx.application.Application, ensuite on aura une petite erreur sur Main, pour remédier a ça, on mets le curseur sur Main et clique sur "Add unimplementeds methods"

Et on obtient alors ceci

eclipse_2018-05-26_23-25-17.png.82c7c4a557baa04de7b7293d9308a77d.png

 

Ensuite, on va écrire quelques lignes de code pour préparer le terrain.

Dans la fonction void main, on ajoute ceci.

		TConstants.setParameters("MonServeur", "monServeur", 880, 520, "/chemin vers le package des resources/", "url de mise à jour", Versions.V1_7_10, "g2po");
		launch(args); // JAVAFX

Alors, décortiquons un peu. Nom du Launcher, nom de la APPDATA, Taille horizontale de la fenêtre, Taille verticale de la fenêtre, le chemin vers le package des ressources, L’URL du site de mise a jour,

La version du jeu, et une série de caractères (pour enregistrer le pseudonyme et le mot de passe)

Pour l'URL de mise à jour => Votre lien est par exemple http://monsite.fr/downloads/, il doit y avoir http://monsite.fr/downloads/index.php, 

http://monsite.fr/downloads/assets,/ http://monsite.fr/downloads/game/ et http://monsite.fr/downloads/libraries/

Pour le package, çà sera votre package ou il y aura toutes vos ressources (Images des boutons, vidéo d’arrière plan, logo, icone...)

2018-05-26_23-34-36.png.f839d2b34ae6e3ba8fc67fe4e546c05a.png

Moi pour le coup je l'ai appelé resources_custom.

Retrouvez ICI les resources utilisés pour le tuto.

Bon maintenant, on va dans la fonction start, puis on va écrire

eclipse_2018-05-26_23-39-35.thumb.png.9d8522a4313ed1cc201abc473f917859.png

Scene scen = new Scene(); <= C'est la base de notre appli.

TApp app = new TApp(arguments...); <= C'est une classe que j'ai fait déjà prête afin de pouvoir déplacer la fenêtre en cliquant etc.. les arguments sont, Stage, Scene, Nom du Launcher, Taille horizontal, taille verticale, et le style de la fenêtre, du genre, avec bordure, sans bordures etc... La j'ai mis, StageStyle.UNDECORATED pour qu'il n'y ai pas de rebord.

enfin nous avons le app.setIconImage pour définir l'icone de la fenêtre.

On a une erreur sur create(); et c'est normal car nous n'avons pas créer la fonction encore, donc on se mets au boulot et on génère ça!

eclipse_2018-05-26_23-47-08.thumb.png.b05cad8e11390a0032953a9cc624c467.png

Donc la on a une vue d'ensemble de la classe en même temps comme ça, on vérifie qu'on ai rien oublié.

bref surtout on regarde la fonction create. on creer le "Pane root = new Pane()", on défini sa taille avec setPrefSize. et on return root.

Et c'est ici qu'on va définir nos "Constantes" pour afficher la vidéo d'arrière plan ainsi que le logo, les boutons etc..

 

En haut de la classe un va écrire ceci:

	private TBackground bk;
	private ResourceLocation loc;
	private TConfig data;
	private LauncherPanel panel;

Et dans la fonction create on ajoute ceci:

		root.setPrefSize(TConstants.getWidth(), TConstants.getHeight());
		// DEBUT AJOUT
		data = new TConfig(McDir.getDirectory());
		bk = new TBackground(loc.getMedia("background.mp4"), root);
		panel = new LauncherPanel(root, stage);
		// FIN AJOUT
		return root;

 

Donc alors, la on a ajouté le background vidéo, le ResourceLocation, la classe Config ainsi qu'une classe LauncherPanel qui a une erreur.

le data = new TConfig() C'est pour l'enregistrement des logs tout ça tout ça.

Le bk = new TBackground(), le background.mp4 c'est le nom de votre video dans votre package, si la video se nomme "giselle_en_trotinette.mp4", bah vous remplacez background.mp4 par giselle_en_trotinette.mp4.

panel = new LauncherPanel() C'est notre panel qu'on a pas encore crée. Donc on mets le curseur sur LauncherPanel et on clique sur Create classe LauncherPanel.

Bon déjà la, si vous avez mis vos ressources dans votre package prévu a l'effet, ainsi que les lignes de codes, vous devez avoir votre vidéo qui se lit.

 

eclipse_2018-05-27_00-02-49.thumb.png.2bb862a1f6c20e58300338e9d43b4745.png

Pour moi, ça rends comme ça, après, tout dépendra de votre vidéo hein.

Bon, maintenant on va faire nos boutons ainsi que les textfields pour le pseudo et mot de passe.

On  va dans la classe LauncherPanel qui est vide normalement, et on ajoute ceci en haut

	public static TTextField usernameField;
	public static TPassField passwordField;
	public static TButton loginButton;
	public static TButton closeButton;
	public static TButton minimizeButton;
	private static TConstants config;
	private ResourceLocation resourceLocation;

Puis le constructeur aussi

	public LauncherPanel(Pane contentPane, Stage primaryStage) { }

Bon, la on défini nos boutons ainsi que nos textfields.

Ensuite dans le constructeur de LauncherPanel, on ajoutes ces lignes de codes la.

       loginButton = new TButton(contentPane);
        loginButton.setFont(FontLoader.loadFont(config, "Sabado-Regular.otf", "Sabado", 16F));
        loginButton.setText("JOUER");
        loginButton.setSize(100, 30);
        loginButton.setPosition(config.getWidth() / 2 - 50, config.getHeight() / 2 + 75);
        loginButton.setAction(event -> {
          // ACTION
        });
        
        minimizeButton = new TButton(contentPane);
        minimizeButton.setSize(37, 20);
        minimizeButton.setPosition(config.getWidth() - 83, -4);
        minimizeButton.setInvisible();
        minimizeButton.setGraphic(new ImageView(resourceLocation.loadImage("minimize.png")));
        minimizeButton.setHover(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                minimizeButton.setOpacity(0.80);
            }
        });
        minimizeButton.setUnHover(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                minimizeButton.setOpacity(1.0);
            }
        });
        minimizeButton.setAction(event -> {
            Stage stage = (Stage)((TButton)event.getSource()).getScene().getWindow();
            stage.setIconified(true);
        });
        
        closeButton = new TButton(contentPane);
        closeButton.setSize(37, 20);
        closeButton.setPosition(config.getWidth() - 45, -4);
        closeButton.setInvisible();
        closeButton.setGraphic(new ImageView(resourceLocation.loadImage("close.png")));
        closeButton.setHover(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                closeButton.setOpacity(0.80);
            }
        });
        closeButton.setUnHover(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                closeButton.setOpacity(1.0);
            }
        });
        closeButton.setAction(event -> {
            TConfig.onExit();
            System.exit(0);
        });

        usernameField = new TTextField(contentPane);
        usernameField.setFont(FontLoader.loadFont(config, "Sabado-Regular.otf", "Sabado", 17F));
        usernameField.setSize(200, 30);
        usernameField.setPosition(config.getWidth() / 2 - 100, config.getHeight() / 2);
        usernameField.setVoidText("pseudonyme");
        usernameField.setOnKeyPressed(new EventHandler<KeyEvent>()
        {
            @Override
            public void handle(KeyEvent ke)
            {
                if (ke.getCode().equals(KeyCode.ENTER))
                {
                    // ACTION
                }
            }
        });

        passwordField = new TPassField(contentPane);
        passwordField.setFont(FontLoader.loadFont(config, "Sabado-Regular.otf", "Sabado", 17F));
        passwordField.setSize(200, 30);
        passwordField.setPosition(config.getWidth() / 2 - 100, config.getHeight() / 2 + 35);
        passwordField.setVoidText("mot de passe");
        passwordField.setOnKeyPressed(new EventHandler<KeyEvent>()
        {
            @Override
            public void handle(KeyEvent ke)
            {
                if (ke.getCode().equals(KeyCode.ENTER))
                {
                    //ACTION
                }
            }
        });

Bon on va décrypter un peut tout ça.

		loginButton = new TButton(contentPane);
		loginButton.setFont(TFont.loadFont(config, "Sabado-Regular.otf", "Sabado", 16F));
		loginButton.setText("JOUER");
		loginButton.setSize(100, 30);
		loginButton.setPosition(config.getWidth() / 2 - 50, config.getHeight() / 2 + 75);
		loginButton.setAction(event -> {
		// ACTION
		});

Pour les boutons, on dis que 

leBouton = nouveau Bouton.

leBouton.setFont <= On défini la police d’écriture (args: config, "nom de la police d’écriture dans le package", "Nom de la police d’écriture (se trouve on ouvrant la police d’écriture)", taille police.

leBouton.setText <= on dis quel texte on veut qu'il y ai sur notre bouton)

leBouton.setSize <= Taille horizontale et verticale du bouton.

leBouton.setPosition <= Position du bouton sur la fenetre.

leBouton.setAction <= Action du bouton

et eventuellement, pour les boutons Images on mets

leBouton.setInvisible()

Et leBouton.setGraphic <= pour afficher une image.

		usernameField = new TTextField(contentPane);
		usernameField.setFont(TFont.loadFont(config, "Sabado-Regular.otf", "Sabado", 17F));
		usernameField.setSize(200, 30);
		usernameField.setPosition(config.getWidth() / 2 - 100, config.getHeight() / 2);
		usernameField.setVoidText("pseudonyme");
		usernameField.setOnKeyPressed(new EventHandler<KeyEvent>()
	    {
	        @Override
	        public void handle(KeyEvent ke)
	        {
	            if (ke.getCode().equals(KeyCode.ENTER))
	            {
					// ACTION
	            }
	        }
	    });

leField = nouveau textField

leField.setFont <= Police d'ecriture

leField.setSize <= taille horizontale et verticale 

leField.setPosition <= position sur la fenêtre

leField.setVOidText <= texte quand le textfield est vide.

leField.setOnKeyPressed <= Action quand on appuie sur une touche, actuellement, c'est KeyCode.ENTER pour que quand on appuie sur ENTREE, ca fasse l'action du bouton JOUER.

 

Pour l'instant on obtient un truc comme ça:

javaw_2018-05-27_00-21-03.png.469b051ed16505876a9554f21286b898.png

Pour l'instant on a un assez bon résultat. On va ajouter le Logo du Serveur.

On va retourner dans la Classe Main, on va ajouter 

	public static TLogo logoPanel;

Et

  logoPanel = new TLogo(loc.loadImage("logo.png"), 600, 100, 150, 40, root);

 

Décryptons. TLogo(loadImage(imageLogo, taille de l'image X, taille Y, position X, position Y, root,)

Si vous souhaitez avoir un petit effet de mouvement du Logo, mettez ceci a la place:

		logoPanel = new TLogo(loc.loadImage("logo.png"), 400, 80, root);
		logoPanel.setImagePos(TConstants.WIDTH / 2 - 180,  50);

Ajouter setImagePos(position X, position Y); // Tout simplement et le mouvement se fera tout seul =)

Bon après, ça fais un peu vide en haut, et en bas aussi, et aussi au milieu tiens, pourquoi pas. 

On va ajouter 3 rectangles dans la classe LauncherPanel qui vont redonner un peu plus de style ;)

	public static TRectangle rectTop = new TRectangle(0, 0, 1100, 20);
	public static TRectangle rectLow = new TRectangle(0, config.getHeight() - 20, 1100, config.getHeight());
	public static TRectangle rectLoginBox;
	// A AJOUTER EN HAUT DE CLASSE

Et ensuite on ajoute ceci mais au dessus de "loginButton = new TButton(contentPane);" :

		rectTop.setColor(Color.WHITE);
		rectTop.setOpacity(0.8);
		contentPane.getChildren().add(rectTop);
		
		rectLow.setColor(Color.BLACK);
		rectLow.setOpacity(0.6);
		contentPane.getChildren().add(rectLow);
		
		rectLoginBox = new TRectangle(config.getWidth() / 2 - 110, config.getHeight() / 2 - 25, 220, 140);
		rectLoginBox.setColor(Color.BLACK);
		rectLoginBox.setOpacity(0.6);
		contentPane.getChildren().add(rectLoginBox);

Car sinon les rectangles seront en dessus et çà cacherais nos boutons.

La en gros on dis: 

rectangle = nouveau Rectangle

rectangle.setColor <= On défini la couleur du rectangle.

rectangle.setOpacity <= L'opacité du rectangle

contentPane.getChildren.add() <= Ajouter a la fenêtre.

Bref, voila que maintenant on a une barre en haut, en bas et un carré au milieu pour faire comme une zone de Login.

Dans la barre du haut, on va afficher notre nom de serveur.

	public TLabel labelTitle;

Et

		labelTitle = new TLabel(contentPane);
		labelTitle.setText("Tutoriel Launcher");
		labelTitle.setPosition(TConstants.WIDTH / 2 - 90, -4);
		labelTitle.setFont(FontLoader.loadFont(config, "Sabado-Regular.otf", "Sabado", 22F));
		labelTitle.setTextFill(Color.WHITE);

 

Ligne 1: définir le texte à afficher

Ligne 2: position X et Y

Ligne 3: La police d'ecriture

Ligne 4: Couleur du texte

 

Bon, voila déja on a une base de launcher. Après c'est vrai que ça fais un peu brouillon.. Donc faut modifier tout ça et rajouter du Style.

On ajoute ceci en desous de loginButton = new TButton(contentPane);

loginButton.setStyle("-fx-background-color: rgba(53,89,119,0.4); -fx-text-fill: white;");

Ça va faire un truc un peu plus "joulie tout beau tahu.", Un effet assez sympathique, que l'on peut réutiliser sur les usernameField et passwordField.

Si on décortique, on écrit:

-fx-background-color: rgba(53,89,119,0.4); || Pour définir la couleur d'arrière plan ainsi que l'opacité (rgba(rouge,vert,bleu,opacité);

-fx-text-fill: white; || Pour définir la couleur du texte. (pour l'exemple, white (blanc)).

Ça nous rends un truc comme ça

javaw_2018-05-27_00-50-36.png.656e89e380b7f76b3086aefcf36c3b5b.png

On profite de regarder le rendu du Logo aussi ;)

[2] Bon c'est bien beau tout ça, mais la partie du téléchargement et du lancement du jeu ?

Bien nous avons plusieurs solutions. Soit utiliser un système de téléchargement custom, ou bien utiliser ce qui suit.

Personnellement, je vous conseille de faire votre propre système de téléchargement, c'est toujours mieux.

Il va falloir déjà upload sur notre site les fichiers que Minecraft aura besoin.

Ce que je vous conseille c'est de supprimer votre .minecraft et de télécharger la version de votre minecraft que vous souhaitez utiliser.

vu que votre minecraft a était supprimé, votre installation sera neuve et donc ça sera mieux pour regrouper tout les fichiers nécessaires.

Moi je l'ai fait et j'ai téléchargé la version 1.7.10.

PACKS PREFAITS:

PACK 1.7.10

PACK 1.8

PACK 1.9

Pour le Pattern du Dossier de téléchargement il faut qu'il soit présenté comme ceci:

explorer_2018-05-27_00-56-48.png.f4d025486d86b0e19bf5f663dd6a1d0a.png

Dans le dossier assets, il vous faut les assets de votre version, personnellement j'ai ceci

explorer_2018-05-27_00-58-19.png.d2141566dde646fc282e83fefd6abff5.png

Ensuite dans le dossier game il faut: 

explorer_2018-05-27_00-57-08.png.a79890d920a53b7b7db2a32234751795.png

un dossier natives avec toutes les natives (télécharger les natives ICI (1.7.10))

et un fichier game.jar (en gros c'est le 1.7.10.jar qu'il faut renommer game.jar)

Et dans le dossier libraires, il faut toutes les libs.

libraries.png.a49b0b17bba64929423f43807696f25d.png

Après, il faut le index.php a la racine, comme sur la première image.

Mettez le dans le dossier de téléchargement sur votre hebergeur WEB.

Ensuite dans votre classe LauncherPanel,

	public static Updater updater = new Updater();
	public static XMLParser parser = new XMLParser();
	public TLabel labelState;
	public static DecimalFormat df2 = new DecimalFormat(".##");
	public TProgressBar bar;

XMLParser <= Il va vérifier les fichiers

Updater <= il va mettre a jour.

labelState <= nombre de fichiers restants.

df2<= Format décimal pour le pourcentage du téléchargement.

bar <= Barre de progression.

ensuite on ajoute ceci 

		labelState = new TLabel(contentPane);
		labelState.setText("WAIT");
		labelState.setPosition(2, TConstants.getHeight() - 20);
		labelState.setFont(FontLoader.loadFont(config, "votre police ecriture", "nom de la police", 60F));
		labelState.setTextFill(Color.WHITE);
		labelState.setVisible(false);

Ligne 2: texte a afficher

Ligne 3 position

Ligne 4: définir police écriture

Ligne 5: Mettre sur Non visible car on télécharge pas directement.

Puis:

	    bar = new TProgressBar(contentPane);
		bar.setPosition(0, TConstants.getHeight() - 10);
	    bar.setStyle("-fx-background-color: rgba(255, 255, 255, 0.0); -fx-padding: 1px; -fx-background-insets: 0; -fx-text-box-border: forestgreen; -fx-control-inner-background: palegreen;");
	    bar.setSize(TConstants.getWidth(), 20);

Ligne 2: position

Ligne 3: style (décoration)

Ligne 4: taille de la barre.

 

On va créer une fonction play() en bas de la classe et dans le loginButton.SetOnAction() on écrit play();.

C’est ce qu va faire notre action quand on va cliquer sur le bouton.

on ajoute de même pour les fields

Pour être plus rapide, et si vous avez copié le code, faire une recherche avec CTRL + F et recherchez //AJOUT et remplacez //AJOUT par play();.

dans la fonction play(), Il faut ajouter ceci à l’intérieur.

		Wrapper.log("Logging In...");
		loginButton.setVisible(false);
		usernameField.setVisible(false);
		passwordField.setVisible(false);
		labelState.setVisible(true);
        rectLoginBox.setVisible(false);
		
        Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(0), event -> labelState.setText("Mise a jour en cours... (" + df2.format(bar.getProgress() * 100) + "%)")), new KeyFrame(Duration.seconds(0.1)));
        timeline.setCycleCount(Animation.INDEFINITE);
        timeline.play();

		if (!updater.isUpdating) {
			updater.checkForUpdate(parser, updater, bar);
		}

 

Ligne 2 -> 5 <= On mets en invisible tout les composants et on affiche le label de téléchargement (labelState)

 

ensuite on dis que si le updater n'est pas entrain de travailler, on va démarrer le téléchargement.

et updater.CheckForUpdate va vérifier les fichiers invalides et les télécharger.

Si vous n'avez pas de barre de progression, mettez null a la place de bar.

Voilà, maintenant plus qu'a faire notre système d'authentification car sinon, c'est du Launcher Crack qu'on parle la :/

[3] Authentification

Alors Maintenant, pour l'authentification, on va devoir écrire en haut de notre fonction play();

		Authenticator auth = new Authenticator(usernameField.getText(), passwordField.getText(), true);
		auth.auth();

Puis ensuite, avec tout le code qu'il y a en dessous, on va devoir dire que si on est connecté, on lance le téléchargement, sinon, on affiche une erreur.

		if (auth.isAuthed) {
		Wrapper.log("Logging In...");
		loginButton.setVisible(false);
		usernameField.setVisible(false);
        passwordField.setVisible(false);
        labelState.setVisible(true);
		rectLoginBox.setVisible(false);
		
                  Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(0), event -> labelState.setText("Mise a jour en cours... (" + df2.format(bar.getProgress() * 100) + "%)")), new KeyFrame(Duration.seconds(0.1)));
        timeline.setCycleCount(Animation.INDEFINITE);
        timeline.play();
          
          if (!updater.isUpdating) {
              updater.checkForUpdate(parser, updater, labelState);
          }
        }
	else {
		new TALert("Can't connect to minecraft.net", AlertType.ERROR);
			Wrapper.log("Can't connect to minecraft.net");
		}

Et c'est tout!

[4] SAUVEGARDE DES IDENTIFIANTS

En haut de notre classe LauncherPanel, on ajoute 

    public Preferences savedData = Preferences.userRoot();

Ensuite, on va récupérer les identifiants, ensuite, en dessous de usernameField.setFont(Font.font("Sabado", 17F));

usernameField.setText(savedData.get(config.PREFERENCES_ABREV + "_username", ""));

en dessous de  passwordField.setFont(Font.font("Sabado", 17F)); On ajoute:

passwordField.setText(savedData.get(config.PREFERENCES_ABREV + "_pwd", ""));

 

Et dans la fonction play();, en dessous de if (auth.isAuthed) {

On ajoute:

            savedData.put(config.PREFERENCES_ABREV + "_username", usernameField.getText());
            savedData.put(config.PREFERENCES_ABREV + "_pwd", passwordField.getText());

Et voilà, la nos identifiants sont enregistrés & sauvegardés.

Bon voilà, il y a des chances que le tuto soit modifié pour des raisons d'optimisation car ce n'est pas optimisé du tout (du moins je pense car c'est la première version de la Lib)

Merci de m'avoir lu, passez une agréable journée/soirée.

 

N'hésitez pas à réagir a ce tutoriel afin de me faire remonter des problèmes etc..

 

 

javaw_2018-05-27_00-49-42.png

 

 

Modifié par Trxyy
BIG UPDATE PATCH PROBLEME LANCEMENT JEU
  • Like 1
  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello :)

Comment dire ...
Cela fonctionne parfaitement sur Intellij Idea, donc pour ceux utilisant ce logiciel, c'est good !

Merci à toi pour ce tuto, j'espère que cela continuera longtemps et sur la bonne voie :)

Modifié par Dream's
Bonjour !!

Partager ce message


Lien à poster
Partager sur d’autres sites
à l’instant, SundOwn a dit :

Ou télécharger le index.php ? :p et autres

Bonjour.

Ouvre la librairie avec Winrar et tu la récupère (tu auras 2 dossiers ainsi que 1 fichier => le index.php)

 

Cordialement.

Partager ce message


Lien à poster
Partager sur d’autres sites
à l’instant, Trxyy a dit :

Bonjour.

Ouvre la librairie avec Winrar et tu la récupère (tu auras 2 dossiers ainsi que 1 fichier => le index.php)

 

Cordialement.

Merci et super tuto :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut

 

déjà merci pour ton tuto sa m'a beaucoup aider a créer mon launcher :) 

J'aurrait aimer savoir quel modif faire pour remplacer le "téléchargement de ..."  par une progress bar et un "%"  ?

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 10 heures, Baxymoz a dit :

Salut

 

déjà merci pour ton tuto sa m'a beaucoup aider a créer mon launcher :) 

J'aurrait aimer savoir quel modif faire pour remplacer le "téléchargement de ..."  par une progress bar et un "%"  ?

Merci

Bonjour,

La librairie est en développement ;).

Je n'ai pas encore pensé a ajouter une barre de progression ni le pourcentage, je vais y travailler dessus ;)

 

Cordialement.

Partager ce message


Lien à poster
Partager sur d’autres sites

ok ^^

et quel modif il faut faire pour le passer en crack ? j'ai juste enlever le passwordField mais sa ne marche pas 

Merci

Modifié par Baxymoz

Partager ce message


Lien à poster
Partager sur d’autres sites
à l’instant, Baxymoz a dit :

ok ^^

et quel modif il faut faire pour le pasder en crack ? j'ai juste enlever le passwordField mais sa ne marche pas 

Merci

Bonsoir, le crack n'est pas autorisé.

Je ne peux donc pas t'expliquer comment faire ceci.

Cependant, si tu le souhaite, tu peux éventuellement m'ajouter sur Discord pour en parler, mais sache que je n'apprécie pas du tout les systèmes de crack.

Discord Name:  Trxyy#2332

 

Cordialement.

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×