Aller au contenu
Top-Metin2.org - Vous êtes à la recherche d'un serveur Metin 2 ? ×
×
×
  • Créer...

Metin2 Dev

Robot
  • Compteur de contenus

    3211
  • Inscription

  • Dernière visite

    jamais
  • Jours gagnés

    9

Tout ce qui a été posté par Metin2 Dev

  1. Merci Saw! Je vais tester et je vais voir pour adapter le code! Si besoin, je vais rajouter le fix à ce tutoriel !
  2. Centre de Téléchargement Télécharger ( Interne ) Bonjour Je vais vous partager quelque bout de code, qui vous permettrons de bloquer votre expérience ingame via la source et d'un item. Allez ses partie ! Ouvrez Char.cpp Chercher : if (gPlayerMaxLevel <= GetLevel()) return; Ajouter en dessous : if (block_exp && amount > 0) { return; } Ont n'a terminer avec le char.ccp, on ouvre maintenant le char.h Chercher : void SetExp(DWORD exp) { m_points.exp = exp; } Ajouter en dessous : bool block_exp; Enregistrer et fermer le char.h, passons maintenant au Questlua_pc.cpp Rechercher : { "give_award_socket", pc_give_award_socket }, Ajouter en dessous : { "block_exp", _block_exp }, //Bloque votre expérience { "unblock_exp", _unblock_exp }, //Débloque votre expérience -Rechercher : (toujours dans le même fichier) void RegisterPCFunctionTable() Ajouter en dessous : int _block_exp(lua_State* L) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); ch->block_exp = true; return 0; } int _unblock_exp(lua_State* L) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); ch->block_exp = false; return 0; } Ensuite : input_login.cpp Rechercher : if (g_bCheckClientVersion) { Ajouter en dessous de la ( ch->block_exp = false; Comme sa : if (g_bCheckClientVersion) { ch->block_exp = false; int version = atoi(g_stClientVersion.c_str()); int date = atoi(d->GetClientVersion()); - FIX GUILD : Gurgarath Ouvrez guild.cpp Dans la fonction bool CGuild::OfferExp(LPCHARACTER ch, int amount) Ajouter : if (ch->block_exp == true) return false; Vous pouvez maintenant compiler votre game. Ensuite Ajouter ceci dans votre quest_function pc.block_exp pc.unblock_exp Et voici ma quêtes : quest blocage_experience begin state start begin when login begin if pc.getqf("antiexp") == 1 then pc.block_exp() chat("Rappel : Vérifier si votre anneau est bien bloquer ou débloquer.") end end when 40004.use begin if pc.getqf("antiexp") == 0 then pc.block_exp() pc.setqf("antiexp", 1) chat("Le blocage d'expérience à été activer") elseif pc.getqf("antiexp") == 1 then pc.unblock_exp() pc.setqf("antiexp", 0) chat("Le blocage d'expérience à été désactiver.") end end end end Source : J4M. Quêtes : Moi FIX GUILD : Gurgarath Il existe des quêtes qui bloquent l'exp, mais je n'aime pas trop le concepts, Celui ci bloque directement l'exp via la sources et non via une quêtes! L'anneau ce désactive pas à chaque téléportations, un rappel s'effectue à chaque changement de maps, pour avertir le joueurs en cas.
  3. Centre de Téléchargement Télécharger ( Interne ) EterNexus Ce sont les sources du logiciel EterNexus, il permet de DePack & RePack votre Client Metin2. GitHub : ICI Cordialement, Hey hey
  4. Bonjour, Déjà présent sur ton tutoriel (tu peux éditer ton tutoriel)
  5. Centre de Téléchargement Télécharger ( Interne ) Salut ! Je viens de retrouver un vieux scripts Python que j'avais fais pour convertir les clés de sécurités LZO en hexa, je vous le partage ici : import struct print("Exemple de clé: b99eb0026f69810563989b2879181a00\n") string=input("Clé héxadécimal: ") lista=struct.unpack("LLLL", string.decode('hex')) n=0 print("\nGenerateur: \n") for i in lista: n+=1 i=str(i) i=i.replace("L", "") print("A"+ str(n) + " = " + i) Bien cordialement.
  6. Bonsoir, [Hidden Content] Je ne t'écris pas de tuto pour t'en servir, et pour retraduire en SQL/TXT etc. Je voulais pas mettre plus de temps à te répondre que les cinq secondes que tu as dû consacrer à ton poste pour ne même pas avoir mit une seule formule de politesse.
  7. Metin2 Dev

    Bonne année !

    C'est toi l'enfant oui. Bonne année !
  8. Bonjour, Merci de bien vouloir lire le règlement.
  9. Elle est inutile sauf que je conseil de s'habituer à la mette tout le temps, au moins pas de problème d'oublie dans les autres fichiers. Pensez juste à ne rien mettre après la balise, même des lignes vides, ça générerait du code HTML inutile. @Takuma C'est exactement ça. @ASIKOO Non, des petit carrés qu'on peut relier par des traits et mettre un peu où on veut, je l'avais vu sur un autre site il me semble, si je le retrouve je te le montrerais. @Holly Heureuse que ça te plaise
  10. Salut ! Avant de suivre cette partie, je vous invite à lire la précédente : Je vais ici essayer de vous faire découvrir HTML, CSS, JS et PHP. Voici les différents objectives de cette partie : Découvrir les éléments basiques de l'HTML tels que : La doctype Différents balises : Les principales balises telles que le p,h1,ul,td... Les principales balises orphelines telles que le hr, br... Les formulaires qui seront très utiles pour la suite, Les tableaux, Les liaisons : CSS, JS. PHP : Découverte de PDO : Créer sa requête : Préparation, Insertion de données, Exécution, Traiter les données : Nombre de ligne affectée, Colonne affectée, Ligne des colonnes affectées. Divers. Nous avons un emploi du temps assez chargé, nous ferions mieux de nous y mettre maintenant ! HTML: HTML est un langage de balisage. Il dispose de balise. Je vous propose une petite liste, qui résume les principales balises. @ASIKOO Il faudrait un système pour faire des cartes mentales ! ! (Je sais pas si c'est toi que je devais taguer, mais tu m'as l'air d'être le seul actif...). Sauf si je précise que les balises sont orphelines, elles devront être ouvertes puis fermées. Utilisez pour les fermer la même balise que pour les ouvrir, mais ajoutez un "/" exemple : <p>Message</p> Des balises assez spéciales : <!DOCTYPE html> Elle au dessus de tout votre code HTML. Elle est obligatoire, même si le code marche sans, pas de question, c'est obligatoire. Balise orpheline. <head>.. </head> Se place après la balise de doctype. Elle contient les informations complémentaires de la pages telles que : Le titre, Les mots clés, Les importations de : CSS, JS. Toutes les méta-informations. <body> .. </body> Se place après la balise de fermeture </head> Contient littéralement le corps de la page. C'est tout ce qui sera affiché au client. Les balises principales : Texte brut : <p> : Permet de rédiger un paragraphe. <h1>,<h2>... <h6> Permet d'écrire un titre plus ou moins important. L'évolution de l'importance est décroissante par rapport à la valeur associée à h. Les tableaux, un tableau ce compose de ces balises : <table> : Désigne le début et la fin du tableau, <tr> : Désigne une ligne du tableau, <td> : Désigne une cellule du tableau. On va donc créer un tableau comme ceci : <table> --> On crée le tableau <tr> --> On crée une nouvelle ligne <td>.. </td> --> On crée les colonnes en désignant les cellules </tr> --> On marque la fin de la ligne <tr> --> On crée une nouvelle ligne <td>.. </td> --> On crée les colonnes en désignant les cellules </tr> --> On marque la fin de la ligne </table> --> On marque la fin du tableau Il existe aussi (mais nous en reparlerons si nécessaire) : <thead> <tfoot> <tbody> Liste dite ordonnée : <ol> <li> élément </li> </ol> Liste dite non ordonnée : <ul> <li> élément </li> </ul> Je n'ai pas d'autre balise en tête dans l'instant présent. Si une balise que l'on va utiliser n'est pas présente dans ce petit regroupement, je vous l'expliquerais le moment venu. Je vais maintenant vous parlez des liaisons. Si vous ne le savez pas encore l'html, le css, et le javascript ne se mettent pas dans le même fichier pour des raisons évidentes de : Propretés, Efficacités Facilités. Il y a deux types de lignes différents qui se mettent tous les deux dans l'entête (head) du fichier html : <link href="assets/css/style.css" rel="stylesheet"> Ici, nous importons, créons un lien entre les deux fichiers. Notez que la seule valeur à changer est celle du href="" (Qui désigne une destination) vers la destination du fichier voulu. <script src="assets/js/modernizr.js"></script> Cette balise est assez bizarre je sais. Vous n'avez qu'à changer la destination nécessaire dans la valeur de l'attribue src. Je vous propose d'entamer maintenant PHP, PDO : PHP --> PDO: Bien, je vous rappelle que nous avons déjà crée notre connexion PDO stockée dans la variable db. Je vous propose pour commencer de déjà vous apprendre à créer une fonction en php. Une fonction vous permet d'effectuer un protocole plus ou moins long sans devoir le retaper entièrement. C'est le même principe que les fonctions en mathématiques, sauf qu'ici, nous ne faisons pas qu'ajouter des nombres, multiplier, etc... La structure d'une fonction est assez simple : <?php function GetUserIP(){ } ?> Ici, nous avons crée notre fonction nommée GetuserIP. Si votre fonction prends en compte des paramètres, (comme un x en mathématiques par exemple), vous les ajouterez entre les parenthèses, sous forme de variable, et séparés par des virgules. Ici, je vous montre une fonction assez technique, ça va peut-être, être même la fonction la plus compliquée que nous allons faire avec ce CMS. Car clairement... Il n'y a rien de compliqué sur un CMS Metin2. Bien, avant de commencer à écrire notre code, il sera préférable de savoir exactement ce que va faire la fonction. Pour des raisons de sécurités, nous allons vérifier que l'utilisateur dispose bien d'une IP valide, et que le serveur peut "capter". On ne sera pas à l'abri des VPNs, mais c'est déjà mieux que rien. Nous allons définir pour commencer trois variables qui contiendront : client L'ip de la personne enregistrée si possible forward L'ip malgré un proxy remote L'ip du client qui demande la page courante Pour cela nous allons utiliser une super variable. Si vous avez lu l'autre tutoriel, vous savez que les supers variables commencent toutes pas : $_ ici, nous allons utiliser la super variable server, donc : $_SERVEUR. Pour client et forward, nous allons mettre un arobase devant le dollars. Pour un soucis de type, je m'attarde pas là dessus, nous ne l'utiliserons plus de toute façon... Vous ne pouvez pas deviner le code, sauf si vous chercher des heures sur la doc, cela donne : <?php $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = $_SERVER['REMOTE_ADDR']; ?> Bien, nous allons maintenant vérifier si au moins client ou forward à le format d'une IP, sinon, nous utiliserons remote. Nous allons pour ça faire un bloc de condition facilement représentable grâce à ce schéma : On définie la variable client On définie la variable forward On définie la variable remote Si client ressemble à une IP valide, si oui : On assimile sa valeur à une autre variable nommée IP Si client n'a pas l'air d'être une IP valide : On vérifie si forwad là, si oui : On assimile sa valeur à une autre variable nommée IP Sinon : On assimile la valeur de remote à la variable nommée IP. Pour vérifier son format, on va utiliser une filtre, pas d'expression régulière c'est démodée. Vous ne pouvez pas le deviner, cela donne : <?php $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = $_SERVER['REMOTE_ADDR']; if(filter_var($client, FILTER_VALIDATE_IP)){ $ip = $client; }elseif(filter_var($forward, FILTER_VALIDATE_IP)){ $ip = $forward; }else{ $ip = $remote; } ?> On utilise donc les outils if --> Il veut dire "Si", soit : Si ce que je te dis dans la parenthèse est vrai (=true) alors : Il fait ce qu'il y a entre les accolades. Si la condition est respectée, on sort de la boucle. elseif marche comme le if à une différence près : Il ne peut être placé qu'après un if Ne s'exécutera que si le if n'est pas respecté Si la condition est respectée, on sort de la boucle. else --> Si aucune des conditions n'est respectées, le code fait ce qui se trouve dans le else. Sachez que additionner des if à la suite, et mettre des elseif n'a pas le même effet. Si vous enchainez des if, le code va tous les essayer un par un. Si vous mettez des elseif, il va tous les vérifier dans l'ordre, mais dès qu'il aura trouvé une solution, il ne va plus suivre les autres elseif de ce bloc. Il ne nous reste plus qu'une chose à faire : Vérifier si la variable IP est définie Si non : On sort de la condition en affichant une erreur Si oui : On retourne l'IP en sortit de variable Je vous montre une autre façon de faire un if (pas de panique, il n'en n'existe que deux) je vous explique après, notre fonction donne : <?php function GetUserIp(){ $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = $_SERVER['REMOTE_ADDR']; if(filter_var($client, FILTER_VALIDATE_IP)){ $ip = $client; }elseif(filter_var($forward, FILTER_VALIDATE_IP)){ $ip = $forward; }else{ $ip = $remote; } if(!isset($ip)) exit("ERREUR"); return $ip; } ?> Quelques petites précisions : La méthode exit permet de retourner une erreur et d'arrêter le script actuel, il va bloquer l'utilisateur. La méthode return permet de sortir de la fonction en retournant une valeur, ici l'ip. La méthode isset() permet de vérifier si une valeur est définie ou non. Ajouter un ! devant des méthodes telles que isset inverse leur fonctionnement. En quelque sorte nous faisons ici : Si l'ip n'est pas définie : Tu dégages le mec avec un bon coup de pied au cul Sinon, tu le laisse passer ! Et voilà vous avez fait votre première fonction ! Et pas des plus facile en plus. S'il y a du code que vous ne comprenez pas. La divine bible est là pour vous. Bien, allons enfin au vif du sujet : PDO. Pour envoyer une query au serveur, nous allons : Stocker notre requête dans une variable Lui attribuer des paramètres si nécessaires Exécuter la requête. Pour cela nous allons stocker notre requête dans une variable en utilisant un facteur d'affectation. Nous allons pour ça nous servir de la variable DB de la dernière fois. Si vous utilisez la variable $db dans une fonction, il faudrait que vous refassiez un include dans cette même fonction. Bien, on va préparer une query, on va utiliser : db->prepare(query); On va assigner ça à la variable $Akihira par exemple, tapons : <?php $Akihira = $db->prepare(); ?> Bien, nous allons taper une query au hasard, par exemple une assez simple : <?php $Akihira = $db->prepare("SELECT * FROM account.account"); ?> Bien, ici pas besoin d'attribuer des paramètres, vous pouvez exécuter votre fonction comme ceci : <?php $Akihira = $db->prepare("SELECT * FROM account.accoun"); $Akihira->execute(); ?> Maintenant, nous avons trois façon de récupérer des informations sur ce que nous avons fait : Savoir combien de ligne ont été affectée, ici cela nous renvoie le nombre de compte crée en réalité? rowCount(); Sélectionner les lignes affectées avec les colonnes indiqués fetch(); Sélectionner toutes les les colonnes de toutes les lignes affectées. fetchAll(); Bien, pour le rowCount(); c'est le plus simple, tapez : <?php $Akihira = $db->prepare("SELECT * FROM account.accoun"); $Akihira->execute(); $Akihira = $Akihira->rowCount(); ?> Ici, comme nous avons tout sélectionner ("*"), au niveau où vous êtes pour l'instant, il n'y a pas de différence, mais ne vous habituez pas à ça, il y en aura bientôt ! Pour le fetch, il va vous créer un tableau, il va falloir utiliser une méthode spécial pour obtenir les résultats. Mais on va voir ça dans un prochaine tutoriel où je vous parlerais plus en détails des tableaux, et on verra aussi la boucle foreach je pense pour pouvoir parler plus en détail du fetchAll. En attendant je vous dis merci d'avoir lu, et référé vous à la doc en attendant Salut !
  11. La page de vote c'est le plus simple ! Tu as 90% des codes déjà disponibles sur le topMetin2. Il ne te resteras plus qu'à faire la query pour créditer les monnaies au compte.
  12. Salut ! Merci beaucoup ! Je vais essayer ce soir de faire une autre partie avec les classements. Je suis assez prise ce soir. Je vais voir ce que je peux faire. Tu as des préférences dans l'ordre ? Bonne soirée !
  13. Salut ! Comme les tutoriels de @Takuma on été (si j'ai compris) totalement détruit par le changement de moteur forum, je vais essayer de reprendre ses tutoriels avec plus de détails, et en publiant du contenue régulièrement. J'espère faire au moins aussi bien qu'il l'a fait. Voilà pourquoi j'ai repris son nom de poste, et que je vais partir sur la même branche que lui. Introduction : Vous voulez apprendre à créer votre CMS metin2 ? Mais vous ne vous pensez pas capable d'apprendre tant de langage de programmation ? Pas d'inquiétude. Je vais vous guider pas à pas (dans l'élimination des pages de publicité... Ah non désolé ça c'est une pub !) pour vous familiariser avec l'HTML et le CSS. Je vous donnerais également quelques astuces en JavaScript, chose que il me semble @Takuma n'avait pas fait. Puis dans le même temps, nous allons parler de PHP, et même l'utiliser. HTML : L'HTML est un langage de balisage. Il permet de donner une structure à votre code. Tout seul, il ne rend rien de beau. la mise en page s'effectue avec un autre langage. CSS : Nous parlions de mise en page ? La voici. Le CSS est un lagage de style, il permet de mettre en page votre site web. Vous pouvez déjà commencer rien qu'avec ses connaissances basiques à créer un site web. Cependant, il sera nommé site statique. Pour la simple raison que aucune interaction ne sera possible avec votre site. Ces deux langages permettent une création de page de présentation par exemple. Impossible de faire un espace membre digne de ce nom ou autre. JavaScript/JS : C'est un langage de script. Il permet de faire des pages webs interactives. Malheureusement, nous ne pouvons nous contenter de celui-ci. Il est accessible au client, c'est à dire qu'il peut le modifier, et faire ce qu'il veut de son côté. PHP : Le PHP ! Mon petit chouchou. Le PHP lui, par rapport aux trois aux langages ci-dessus, est exclusivement interprété par le serveur, le client ne recevra jamais aucune ligne de PHP. Votre PHP est traduit dans les trois langages ci-dessus avant d'être envoyer au client. Cela vous permet des opérations sécurisées et efficaces. Ne négligez cependant pas la sécurité de votre site web, elle est primordiale. PHP est très pratique, mais s'il n'est pas maîtrisé, en mettre sur votre site peut-être comme vous tirez une balle dans le pied. Notre site web, se devra d'être complet. Comme je n'ai pas le temps de créer à la main un design, je ne l'évoquerai pas. Vous pouvez cependant utiliser vous des designs déjà partagés. Ou même créer le votre, vous trouvez tout ce dont vous avez besoin sur internet en vous renseignant sur l'HTML et le CSS. Avant de vous dire ce que contiendra notre site web, je dois vous parler de la canon, la belle, la jolie, la sacrée, la légendaire, la divine et céleste documentation PHP ! Elle est complète, claire, disponible en français, courte et efficace. Ce sera pour mes tutoriels votre bible. Oubliez vos religions elle, vous prierez elle, et seulement elle. Bien ! Que va contenir notre futur site web alors ? Un système de news, vous pourrez les gérer entièrement sans aucune manipulation technique grâce à son panneau d'administration qui vous permettra : Ajouter une news, Supprimer une news, Modifier une news, Épingler des news afin qu'elles soient visibles en priorité par rapport aux autres. Un espace membre complet : Inscriptions : Nom de compte, Mot de passe crypté Mot de passe clair si l'utilisateur le désire en cas de perte de mot de passe pour ne pas avoir à remettre à 0 son mot de passe : Panneau de prévention en quoi cette option est déconseillée. Mail valide. Acceptation des règles. Connexion, Gestion du compte : Suppression du compte, Modification du mot de passe, Gestion du mot de passe entrepôt si celui-ci est ouvert IG (activé), Changer son adresse mail. Inscription avec validation par mail. Un système de vote : Vérification du vote : Si le joueur a bien voté Si le temps entre les vote est respecté Accréditation des crédits si le vote est validé. Classements : Classement joueurs complet : Top 10 en page d'accueil, Classement habituel avec les pages. Classement de guilde complet : Top 10 en page d'accueil en fonction du niveau et des victoires. Classement habituel avec les pages. Option permettant de trier le classement par ordre décroissant/croissant. Option permettant de chosire le facteur pris en compte pour la classement : Niveau Nom (A->Z ou inversement) Nom du chef (A->Z ou inversement) Energie etc... Un ItemShop complet et opérationnel : Gestion des catégories : Ajout, Suppression, Modifications (ordre, nom, etc...). Gestion des items : Ajout, Suppression, Modifications (ordre, prix, nom, etc..). Les icons seront placés automatiquement grâce au pack icon qui sera uplodad dans une destination bien spéciale. Système de langue : Un fichier spécifique par langue, Modifiable sur le site, Choix pour chaque personne la langue désirée qui sera stockée grâce à un système de cookies s'ils sont acceptés par le client. Système de support : Comptes : Super-Administrateur (compte d'ID 1) : Ajout de Super Administrateur, Suppression, Tous les droits. Administrateurs (Implementor) : Toute la modérations et l'administration nécessaire. Modérateur (GM) : Toute la modération permettant de répondre au sujet sans avoir tous les droits d'un administrateur. Système d'installation : Configuration générale du site : Nom, Date, Copyrtight, etc... Configuration des base de données : Base de données du site : Nom de la base de données. Base de données du jeu : Nom des bases de données : Player, Account, Common. Adresse IP, Utilisateur, Mot de passe, Port, Administration : Configuration générale du site, Gestion des GM, Configuration des langues Gestion du jeu. J'oublie beaucoup de paramètre. Mais quand nous aurons déjà fait tout ça, nous aurons déjà travailler un petit bout de temps ! Vous êtes prêts ? Démarrage du tutoriel... Les pré-requis: Pour suivre ce tutoriel, vous n'aurez pas besoin de beaucoup de chose, mais elles seront toutes obligatoires. Un éditeur de texte adapté. Je ne compte pas vous faire un cours sur l'édition du code avec un bloc note, foncez prendre un éditeur adapté tel que : Sublime texte NotePad++ Atome DreamWeaver Un serveur WEB : Distant : Hebergement mutualisé VPS, dédié avec Apache Locale : EasyPHP, WAMP, XAMP. Des bases de données : Player Common Account Website Si vous avez besoin d'aide pour ceci, je vous aiderais en pv. Où non demandez à @Takuma ça l'occupera, d'après ce qu'il m'a dit il n'a rien à faire de ces vacances d'étudiant. Fainéant. L'arborescence : Mon arborescence est beaucoup utilisée, mais est des fois assez bizarre. Je vais m'adapter à une arborescence plus connu, cela donne : assets css js img pages db.php functions.php admin capatcha index.php Nous ajouterons plus tard des dossiers comme celui de l'installateur par exemple, mais celui-ci se fera à la fin. En attendant pour conclure cette première partie au même point que @Takuma l'avait fait, je vais vous faire créer une connexion PDO. La connexion à la base de données principale : Bien, pour ceci, nous allons nous rendre dans notre fichier index.php : Nous allons tout d'abord dire au site : "Je veux écrire du PHP", pour cela il n'existe qu'un moyen (enfin deux... mais utilisez celui là) : <?php //J'écris ici mon code PHP ?> Notez que tout le contenue précédé de // dans sa ligne est nommé commentaire. C'est à dire qu'il ne sera pas interprété par PHP, vous pouvez mette ce que vous voulez. Ce code ne sera pas visible pas le client non plus. Ici, à la différence de @Takuma Je vais directement inclure mon fichier nommé functions.php dans mon index. Ce fichier va contenir toutes les fonctions PHP, mais aussi la connexion à la base de données, vous verrez. <?php require_once('assets/functions.php'); ?> Il existe trois façon d'inclure du code d'un fichier dans un autre : require_once include require Ces méthodes ont toutes les trois le même but, mais elles ont des subtilités : include : Vous pouvez importez autant de fois que vous voulez le fichier. Si le fichier n'est pas trouvé le code ne s'arrête pas, et continue quand même. require : Vous pouvez inclure autant de fois que nécessaire le fichier dans un autre. Cependant, si une seule fois le fichier n'est pas trouvé, le code s'arrête net, puis affiche une erreur. require_once : Vous pouvez inclure seulement une seule fois un fichier dans un autre, et celui-ci doit obligatoirement être là, sinon erreur et arrêt immédiat du code. Bien, une fois ceci tapez, ouvrons notre fichier functions.php (assets/functions.php), puis tapez : <?php require('db.php'); ?> Ici, nous donnons cette instruction au fichier : Tu importes le fichier db.php qui se trouve dans la même destination que toi, si tu ne le trouves pas, tu coupes tout Franky ! Pourquoi ne pas avoir faire un require_once ? Vous comprendrez plus tard, nous allons importer souvent ce fichier. Passons pour finir à l'édition de notre fichier db.php : Nous allons créer quatre variables : IP : Elle contiendra l'adresse d'accès à nos base de données USER : Elle contiendra l'utilisateur PASS : Elle contiendra le mot de passe WEBDBNAME : Elle contiendra le nom de la base de données du site. Nous allons comme @Takuma créer une variable (un peu spécial) qui va contenir notre connexion PDO. Créons déjà nos variables, en PHP pour créer une variable nous utilisons : $ puis le nom de la variable (ne doit pas commencer par _ car c'est le prefix des super variables, nous verrons ça plus tard). Cela donne : <?php $IP = "192.168.1.29"; $USER = "root"; $PASS = "pF5tfiUH3f7KDyT49rQu52Hu88"; $WEBDBNAME = "website" ; ?> Adaptez selon vos identifiants. Nous allons par contre rajouter un petit code qui vous nous permettre d'afficher absolument tous les warnings/errors possibles et imaginables dès qu'il y en aura en ajoutant ces deux lignes avant la déclaration de notre variable IP : <?php ini_set('display-errors', true); error_reporting(E_ALL); ?> (Je n'ajoute les balises PHP que pour que vous puissiez profiter de la coloration syntaxique). Bien créons maintenant notre connexion dans un bloc try cela donne en théorie : Essaye de : Te connecter Si cela echoue : Tu coupes le code Tu affiches l'erreur Bien, je vous donne le code, vous ne pouvez pas le devinez de toute façon, en tout cela donne : <?php ini_set('display-errors', true); error_reporting(E_ALL); $IP = "192.168.1.29"; $USER = "root"; $PASS = "pF5tfiUH3f7KDyT49rQu52Hu88"; $WEBDBNAME = "website" ; try { $db = new PDO('mysql:host='.$IP.';dbname='.$WEBDBNAME, $USER, $PASS,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); } catch (PDOException $e) { print "DATABASE ERROR : " . $e->getMessage() . "<br/>"; die; } ?> Et voilà, vous avez crée votre variable $db qui contient les informations nécessaires à l'utilisation complète de PDO. J'espère avoir été claire, désolé j'ai pas vraiment l'habitude de faire des tutoriels. D'habitude je reste un peu inactive, en ninja sur les autres forums. Bonne lecture !
  14. Notez que maintenant c'est possible de s'inscrire directement sur le client. Il faut faire remplir des inputs, sauvegarder ça dans une liste par exemple, et l'envoyer en packet par les sources. Attention aux robots avec cette méthode.
  15. Centre de Téléchargement Télécharger ( Interne ) Salut ! Dans le but que tout le monde soit sur le même pied, et encourager les administrateurs à sans cesse augmenter leur protection, je vous propre d'apprendre brièvement à extraire des fichiers cachés dans un autre grâce au programme Enigma. Pour cela, vous aurez besoin de ce petit programme : [Hidden Content] Virus total, comme il est obligatoire pour la section des cheats : [Hidden Content] Il est possible que ce programme ne marche pas avec les prochaines mises à jours de Virtual Box, car il parlait il me semble dans la premium de crypter les fichiers Certain client, comme celui de LegendOfMetin ont caché leur index dans un fichier .bin (ou .dat, j'ai un trou de mémoire), n'hésitez pas à changer l'extension du fichier afin de pouvoir utiliser ce programme Vous êtes maintenant prêts. Succès.
  16. @Spike88 Où se trouvent les erreurs quand tu entres les lignes que t'as données @Takuma ?
  17. Metin2 Dev

    Armes - Feux X7

    MDP : www.liron-3d.com
  18. Metin2 Dev

    vdi freebsd

    Oui c'est possible. Tu peux suivre le tutoriel d'installation, sauf que pour avoir le tar gz des files, tu vas sur ta vm et tu fais : tar cvf metin2.tar.gz /usr/metin2 (je sais plus exactement les arguments, l'ordre, chercher tar sur internet :p) Et tu vas sur navicat et tu export tes tables en .sql Désolé si j'explique brièvement je suis sur portable et j'ai peu de réseau... Si tu comprends pas, je prendrais le temps de t'expliquer mieux une fois sur l'ordinateur !
  19. Le mot de passe mysql peut est différent du mot de passe root. Pour changer le mot de passe mysql, tape à la suite ses lignes dans ta console (oublie pas de changer desiredpassword par ton futur mot de passe mysql) :
  20. Metin2 Dev

    Grade de guerre.

    Faut juste attendre qu'il le passe en résolu, il a bien trouvé par lui même comment faire !
  21. Ça veut juste dire que t'as pas le bon mdp... T'as bien mis le p5 je sais plus quoi ? PS : 88 ? je kiff les Vosges !
  22. Metin2 Dev

    Metin2 files2016

    Ligne 9 de ton intrologin.py tu as mis : import serverInfo Tu as bien ce fichier dans ton root ? Normalement il est quasi-obligatoire...
  23. Metin2 Dev

    Metin2 files2016

    BONJOUUUUUUUUUURRR (Message subliminale). Syserr c'est le fichier System Error... En gros, c'est un fichier qui contient les erreurs de ton client.. .A la racine... Et il te demande de le copier/coller ici

Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.