Aller au contenu

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'tutoriel'.



Plus d’options de recherche

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Inscription & Connexion
    • Inscription
    • Connexion
  • Espace Communautaire
    • Funky-Emulation
    • Présentations
    • Discussions Générales
    • Bureau de la Communauté
    • Espace Gaming
    • Espace Premium
  • Emulation & Co
    • Réécrire un Partage / Tutoriel
    • Proposer un Partage / Tutoriel
    • La Boite à Idées
  • Emulation de jeux
    • RaiderZ
    • Aura Kingdom
    • Metin2
    • Dofus
    • Minecraft
    • World of Warcraft
    • Aion
    • Habbo
    • Wakfu
    • GTA San Andreas
    • Jeux .IO
    • Divers
  • Espace Divers
    • Programmation
    • Administration de Systèmes
    • Arts
    • Discord
    • Mobile
    • Divers
  • Internationnal Forum
    • Community
    • Games Emulation
    • Others
  • Corbeille & Archives
    • Archives (FR...)
    • Archives (INT...)
  • Forum de PassionDev

Rechercher les résultats dans…

Rechercher les résultats qui contiennent…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


Discord


Skype


Biographie


Nationalité


Sexe

25 résultats trouvés

  1. Niveau requis : Intermédiaire Temps estimé : 30 à 45 minutes Bonjour/Bonsoir! Si vous souhaitez créer un serveur Metin2 sous Windows, ce tutoriel est fait pour vous! Pourquoi faire un serveur sous Windows? Quelle différence par rapport à FreeBSD? Pré-requis: I. Installation des files II. Installation de la base de donnée III. Configuration des files Vous venez de terminer ce tutoriel! Votre serveur est prêt à être lancé pour une utilisation en local ! Si vous voulez que votre serveur soit accessible de l'extérieur, n'oubliez pas d'ouvrir les ports correspondant à Metin2 sur votre box (1) Définition issue du site MicroZoom
  2. Niveau requis : Intermédiaire Temps estimé : 10 minutes Bonjour à tous, BugFix: 2014+: Grace à ce bugfix, vous aurez la possibilité de vous connecter à votre serveur en local avec vos joueurs ! Toutes les modifications se font sur les sources serveur ! CONFIG.CPP Cherchez char g_szInternalIP[16] = "0"; Ajoutez char g_szExternalIP[16] = "0"; Cherchez TOKEN("bind_ip") { strlcpy(g_szPublicIP, value_string, sizeof(g_szPublicIP)); } Ajoutez TOKEN("bind_external_ip") { strlcpy(g_szExternalIP, value_string, sizeof(g_szExternalIP)); } CONFIG.H Cherchez extern char g_szInternalIP[16]; Ajoutez extern char g_szExternalIP[16]; DESC_CLIENT.CPP Cherchez if (!bSentBoot) { bSentBoot = true; TPacketGDBoot p; p.dwItemIDRange[0] = 0; p.dwItemIDRange[1] = 0; memcpy(p.szIP, g_szPublicIP, 16); DBPacket(HEADER_GD_BOOT, 0, &p, sizeof(p)); } } TEMP_BUFFER buf; TPacketGDSetup p; memset(&p, 0, sizeof(p)); strlcpy(p.szPublicIP, g_szPublicIP, sizeof(p.szPublicIP)); Remplacez if (!bSentBoot) { bSentBoot = true; TPacketGDBoot p; p.dwItemIDRange[0] = 0; p.dwItemIDRange[1] = 0; memcpy(p.szIP, g_szExternalIP, 16); DBPacket(HEADER_GD_BOOT, 0, &p, sizeof(p)); } } TEMP_BUFFER buf; TPacketGDSetup p; memset(&p, 0, sizeof(p)); strlcpy(p.szPublicIP, g_szExternalIP, sizeof(p.szPublicIP)); Finalisation : compiler et remplacer le game et ouvrir les fichiers CONFIG (Auth, Channel(X)/Core(X) et Game99) et ajoutez : BIND_EXTERNAL_IP: TON_IP_EXTERNE Source : M2D & Gurgarath Cordialement, ASIKOO
  3. Bonsoir à tous, Tout d'abord en quoi consiste le special_item_group (en quelques mots): Ce fichier consiste en grande partie à gérer le contenu d'un coffre et leur pourcentage de chance d'obtenir le contenu. Comment se présentent les lignes d'un coffre (exemple: coffre chef orc pour id 50070): Maintenant en quoi consiste chaque colonne: Group: Sert de commentaire pour différencier les groupes entre eux. Vnum: Correspond à l'ID du coffre (attention à ne pas mettre un coffre inexistant ou en double). La première colonne: Indique le numéro correspond à l'index de votre item. On commence toujours par l'index 1, et à chaque nouvelle entrée (ligne) on ajoute 1 pour permettre d'obtenir plusieurs items du même exemplaire. Par exemple, si je fais ceci: Group 웅귀족장의상자 { Vnum 50070 1 27001 200 100 2 27001 200 100 3 27001 200 100 4 27001 200 100 5 27001 200 100 6 27001 200 100 } J'obtiendrai 6 fois une pile de 200 de l'item 27001, car j'ai 100% de chance à chaque ligne. La 2ème colonne: Indique l'ID de l'item que vous voulez obtenir. La 3ème colonne: Indique la quantité de l'item souhaité. (Exemple: si vous mettez 200 perles bleues vous en aurez 200 dans l'inventaire) La 4ème colonne: Indique le pourcentage de chance d'obtenir l'item (exemple: si je mets 50, j'aurai 1 chance sur 2 d'avoir l'item). Parfois une 5ème colonne: c'est un pourcentage de rareté, qui permet d'obtenir un item "rare"... Un item "rare" c'est un item qui possède un ou des bonus aléatoire(s) dès l'ajout dans l'inventaire. J'espère que ça aidera un peut de monde même si mon français et moi fait 2. Au plaisir d'aider encore et encore, cordialement bd59140 (NOOB)
  4. Niveau requis : Débutant Temps estimé : 30 minutes Salut à toi ! Tu n'as jamais fait de serveur Metin2 ? Ce tutoriel est fait pour toi ! Je vais t'expliquer comment créer un serveur de A à Z ! Tu pourras ensuite le modifier à ta guise et le mettre à ton image. Information. Lors de ce tutoriel, vous allez apprendre à créer un serveur en No-IP. Vos amis pourront donc rejoindre le serveur pour jouer avec vous ! Attention ! Les files utilisés pendant ce tutoriel sont les 2014. Cependant, sur les 2014+, un bug survient à la sélection du personnage quand un ami souhaite se connecter quand le serveur est sur une machine virtuelle. Aucune solution n'a été trouvé aujourd'hui. Cependant, vous pourrez installer les Files 2012 (fonctionnel à ce niveau là) ou faire votre serveur sous Windows Pré-requis: Virtual Box, qui nous permettra de virtualiser un système d'exploitation. En effet, un serveur Metin2 fonctionne sous FreeBSD, il sera plus simple pour vous de virtualiser ce système sur votre Windows que de faire une deuxième installation sur votre ordinateur. Navicat, un client Mysql. Il vous permettra de vous connecter à la base de données de votre serveur Metin2. On y retrouveras toutes les informations liées aux joueurs, aux items, aux comptes des utilisateurs, etc ... WinSCP, un client SFTP. Similaire au FTP, il vous permettra de naviguer sur les différents fichiers de votre serveur (maps, configurations, etc ..) Le serveur VDI tout prêt pour vous qui possède déjà tous les fichiers du serveur avec FreeBSD d'installé. Il ne nous manquera plus qu'à le lancer avec Virtual Box. Le client metin2 qui vous permettra de vous connecter en jeu à votre serveur. No-IP, un outil qui va vous permettre d'avoir une IP fixe si votre fournisseur d'accès vous donne une IP dynamique. Sinon, les joueurs devront changer l'IP du client à chaque fois que la votre change. Pas très pratique, non ? I. La machine virtuelle II. Configuration de la machine virtuelle III. Installation de No-IP IV. Configuration des ports sur la box V. Lancement du serveur Metin2 VI. Se connecter In Game VII. Accéder aux fichiers du serveur VIII. Accéder à la base de données Vous pouvez maintenant vous amuser sur votre serveur ou tout simplement y rajouter des fonctionnalités sympas. Pour continuer: Vous trouverez de nombreux partages et de tutoriels sur Funky-Emu dans la section Metin2. Cette FAQ pourra répondre à la plupart de vos questions. Vous pouvez créer un compte GM en suivant ce tutoriel Une catégorie support est disponible. Si vous avez un problème ou une question, n'hésitez pas à poster une demande ! Bon courage à vous et bienvenue dans le monde des serveurs privés Metin2 !
  5. Niveau requis Débutant Temps estimé : 5 minutes Bonjour à vous, Vous avez installé des Files Metin2 mais vous êtes perdu au niveau de la gestion de MySQL ? Alors ce tutoriel est fait pour vous ! Pré-requis: Il vous faut seulement une machine (un dédié ou une machine virtuelle par exemple) sous FreeBSD avec MySQL d'installé. Généralement, il est déjà installé. Si ce n'est pas le cas, suivez ce tutoriel I. MySQL, j'y comprends vraiment rien ... II. Créer un utilisateur MySQL pour Metin2 Pour continuer: Vous trouverez de nombreux partages et tutoriels sur Funky-Emu dans la section Metin2. Cette FAQ pourra répondre à la plupart de vos questions. Une catégorie support est disponible. Si vous avez un problème ou une question, n'hésitez pas à poster une demande !
  6. Niveau requis Débutant Temps estimé : Entre 15 et 30 minutes Bonjour à toi, Tu souhaites installer des files Metin2 sur ta machine ? Ou tout simplement les changer ? Alors ce tutoriel est fait pour toi ! Pré-requis: Il vous faut des Files Metin2 que vous avez trouvez je ne sais où. Vous pouvez en trouver dans la section File WinSCP, un client SFTP qui vous permettra de vous connecter en SFTP à votre serveur pour pouvoir modifier les fichiers du serveur. Navicat pour vous connecter à votre base de données de votre serveur. Une machine FreeBSD prête à l'emploi Attention ! Pour réaliser ce tutoriel, il vous faut une machine avec FreeBSD et MySQL. Si ce n'est pas le cas, je vous invite à suivre l'un de ces tutoriels si vous êtes débutant: - Créer un serveur Metin2 - Créer un serveur Metin2 avec No-IP - Créer un serveur Metin2 avec Hamachi - Créer un serveur Metin2 sous Windows - Installer un serveur dédié Metin2 I. Installer les fichiers serveurs II. Installation de la base de données MySQL III. Connecter le serveur à la base données Pour continuer: Vous trouverez de nombreux partages et tutoriels sur Funky-Emu dans la section Metin2. Pour configurer votre client pour connecter à votre serveur, suivez ce tutoriel Cette FAQ pourra répondre à la plupart de vos questions. Une catégorie support est disponible. Si vous avez un problème ou une question, n'hésitez pas à poster une demande !
  7. Les Interfaces (suite logique des classes abstraites) Une interface est un type, au même titre qu’une classe, mais abstrait et qui donc ne peut être instancié (par appel à 'new' plus 'constructeur'). Une interface décrit un ensemble de signatures de méthodes, sans implémentation, qui doivent être implémentées dans toutes les classes qui implémentent l’interface. L’utilité du concept d’interface réside dans le regroupement de plusieurs classes (les interfaces sont très utilisées même à haut un niveau!) , tel que chacune implémente un ensemble commun de méthodes, sous un même type. Une interface possède les caractéristiques suivantes : ● elle contient des signatures de méthodes; ● elle ne peut pas contenir de variables; ● une interface peut hériter d’une autre interface (avec le mot-clé extends); ● une classe (abstraite ou non) peut implémenter plusieurs interfaces. La liste des interfaces implémentées doit alors figurer après le mot-clé 'implements' placé dans la déclaration de classe, en séparant chaque interface par une virgule. Dans notre exemple précédent (du premier cours), Forme peut être une interface décrivant les méthodes qui doivent être implémentées par les classes Rectangle et Cercle, ainsi que par la classe Carre (non explicitée précédemment, même si celle-ci peut profiter de son héritage de Rectangle). L’interface Forme s’écrit alors de la manière suivante : public interface Forme { public int surface(); public void affiche(); } Pour obliger les classes Rectangle, Cercle et Carre à implémenter les méthodes surface() et affiche(), il faut modifier l’héritage de ce qui était la classe Forme en une implémentation de l’interface définie ci-dessus : public class Rectangle implements Forme { ... } et public class Cercle implements Forme { ... } Note assez importante : En déclarant un tableau constitué d’objets implémentant l’interface Forme, on peut appeler la méthode affiche() qui existe et est implémentée par chaque objet. Si une classe implémente une interface mais que le programmeur n’a pas écrit l’implémentation de toutes les méthodes de l’interface, une erreur de compilation se produira sauf si la classe est une classe abstraite ! Les classes abstraites et les interfaces sont des notions très abstraite, la compréhension des ces notions est très compliquée mais son utilité est redoutable. Elles permettent de décomposer les travaux et une optimisation du code certaine. En vous souhaitant une bonne compréhension, Homéo'
  8. Classes abstraites Nota Bene : pour ce cours je prend comme hypothèse que vous avez déjà des bases de Java, le cas échéant, allez lire les cours présents dans la section 'tutoriels'. Le concept de classe abstraite se situe entre celui de classe et celui d’interface (notion que j'introduirai plus tard, selon moi c'est plus simple de commencer par les classes abstraites). C’est donc une classe qu’on ne peut pas directement instancier car certaines de ses méthodes ne sont pas implémentées. Une classe abstraite peut donc contenir des variables (de n'importe quel type, primitif ou non), des méthodes implémentées et des signatures de méthode à implémenter. Une classe abstraite peut donc implémenter (partiellement ou totalement, même s'il est rare que ce le soit totalement) des interfaces et peut hériter d’une classe ou d’une classe abstraite. La création d'une classe abstraite se fait de la sorte : public abstract class { … }. Imaginons que l’on souhaite attribuer deux variables, origine_x et origine_y, à tout objet représentant une forme nous avons donc la classe suivante avec les 'Getter' et les 'Setter' : comme suit : public abstract class Forme { private int origine_x; private int origine_y; // Constructeur dit 'par défaut' public Forme() { this.origine_x = 0; this.origine_y = 0; } // Getter public int getOrigineX() { return this.origine_x; } public int getOrigineY() { return this.origine_y; } // Setter public void setOrigineX(int x) { this.origine_x = x; } public void setOrigineY(int y) { this.origine_y = y; } // Méthodes abstraites public abstract int surface(); public abstract void affiche();} - Classes et méthodes génériques : De plus, il faut rétablir l’héritage des classes Rectangle et Cercle vers Forme (car les rectangles et les cercles sont des formes , et si vous avez bien suivi votre cours sur l'héritage, on utilise le mot-clé 'extends' (toutefois il en existe un autre qui pour les interfaces appelées 'implements' qui fait strictement la même chose, j'en parlerai dans un prochain cours!) : // Classe Rectangle qui étend forme public class Rectangle extends Forme { ... } // Classe Cercle qui étend forme public class Cercle extends Forme { ... } Lorsqu’une classe hérite d’une classe abstraite, elle doit : - soit implémenter les méthodes abstraites de sa super-classe en les dotant d’un corps ; - soit être elle-même abstraite si au moins une des méthodes abstraites de sa super-classe reste abstraite. Fin de ce premier cours. Cordialement, Homéo
  9. Bonjour à tous ! Je vous présente un court tuto qui vous permettra de colorer vos niveaux ! Ouvrez donc le fichier InstanceBaseEffect.cpp du dossier UserInterface de vos sources client Cherchez ces lignes : sprintf(szText, "Lv. %d", level); CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor); Et remplacez les par : if (level >= 1 && level < 10) { sprintf(szText, "|cFF959697[Niv. %d] |r", level); CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor); } else if (level >= 10 && level < 20) { sprintf(szText, "|cFFFFFFFF[Niv. %d] |r", level); CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor); } else if (level >= 20 && level < 30) { sprintf(szText, "|cFF00FF7F[Niv. %d] |r", level); CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor); } else if (level >= 30 && level < 40) { sprintf(szText, "|cFF00FF00[Niv. %d] |r", level); CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor); } else if (level >= 40 && level < 50) { sprintf(szText, "|cFF00CCFF[Niv. %d] |r", level); CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor); } else if (level >= 50 && level < 60) { sprintf(szText, "|cFF0000FF[Niv. %d] |r", level); CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor); } else if (level >= 60 && level < 70) { sprintf(szText, "|cFFDA70D6[Niv. %d] |r", level); CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor); } else if (level >= 70 && level < 80) { sprintf(szText, "|cFFC67171[Niv. %d] |r", level); CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor); } else if (level >= 80 && level < 90) { sprintf(szText, "|cFF00FFFF[Niv. %d] |r", level); CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor); } else if (level >= 90 && level < 100) { sprintf(szText, "|cFFFFCC00[Niv. %d] |r", level); CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor); } else if (level >= 100 && level < 105) { sprintf(szText, "|cFFFF4500[Niv. %d] |r", level); CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor); } else if (level >= 105) { sprintf(szText, "|cFFCD661D[Niv. %d] |r", level); CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor); } Pour changer les couleurs il suffit juste d'appliquer le code après le cFF (vous prenez un code couleur HTML mais vous enlevez le #) Sauvegardez et compilez ! Source : FreakPlay
  10. (Ce tutoriel est un repost suite à une supression. Le tutoriel a été entièrement rédigé par Mei, merci à elle) Bonjour/Bonsoir à tous, Comme j'ai pu annoncé déjà il y a quelques semaines de cela, je commence une petite série de tutoriels concernant le domaine du Texturing sur Metin2. Je vais diviser mes tutoriels en plusieurs parties sinon la lecture aurait été bien trop longue et ennuyeuse pour vous ! Voici le sommaire du premier cours : Qu'est-ce que le Texturing et quel est le lien avec Metin2 ? Les qualités requises et le matériel requis pour faire cela. Comment organiser son espace de travail (Photoshop & Client) Conseils & Erreurs Fréquentes Nous allons donc commencer notre petit tutoriel ! I°/Qu'est-ce que le Texturing et quel est le lien avec Metin2 ? Information Pour commencer, une texture sur Metin2 est l'image qui recouvre un modèle 3D, c'est un peu la peau d'un modèle. Sans ça vous vous baladeriez avec un personnage blanc sur une map blanche avec un cheval blanc (d'Henri IV). Quand on parle du domaine du Texturing sur Metin2, on parle notamment de la modification visuelle des Textures en général. C'est à dire que vous allez changer la couleur, le specular ou alors redessiner complètement la texture. Vous allez donc passer par des logiciels dits d'Infographie pour effectuer votre tâche (Photoshop pour les plus téméraires ou Gimp/Photofiltre pour les plus débutants) mais on en parlera de la suite quant aux logiciels requis ! Vous allez donc retrouvez sur Metin2 des textures sous format .dds (certains modèles adaptés par des gens de l'émulation peuvent avoir des textures sous format .tga ou .png) . Alors de manière subjective je vous dis que le .dds est le top du format, pourquoi ? Car l'extension Nvdia de Photoshop propose des tas de configurations d'enregistrement pour que votre texture soit de meilleure qualité. Contrairement aux autres qui auront que la compression dans les paramètres. Pas top hein ? Le domaine du Texturing sur Metin2 a toujours fait fuir la plupart des membres, jugé trop "chiant" et "pas rentable". Alors oui et non c'est un peu comme tout ! On peut trouver des petits délires à faire avec les textures, il y a des armures qu'on aimerait modifier et d'autres non mais parfois certaines choses peuvent nous contraindre à toutes les modifier même si nous aimons pas certaines d'entre-elles .. (Petite anecdote sur la Correction des brillances c'est que je ronchonnais très sérieusement lorsqu'il s'agissait de modifier les Ninjas & les Suras car je n'apprécie pas leurs armures). Et le côté pas rentable bah c'est à cause du temps, vous ne pouvez pas donner de la qualité en travaillant 10 min sur une texture c'est pas possible... Pour donner un exemple les corrections de canaux alpha (soit 80 textures) m'ont pris 1 mois & 1 semaine sans pause c'est à dire que je faisais ça tous les jours de 9h du matin à 23h au soir. Et proposer cela en tant que service ça demande d'autant plus de temps (car il faut satisfaire le client et qu'ils ne savent pas forcément ce qu'ils veulent en général) donc il faudra proposer plusieurs textures avant qu'il soit satisfait. II°/Les qualités requises et le matériel requis pour faire du Texturing. L'âme d'artiste : Pour modifier des textures il faut avoir des connaissances de manière artistique, attention ça sert à rien de connaître Picasso ou Monet, juste savoir quelles couleurs peuvent s'accorder ensemble, quel dégradé peut s'appliquer sur une partie du corps et pas une autre. Donner un aspect métallique à certaines parties d'armes ou d'armures, tout cela fait partie de la connaissance artistique ! Déterminé & Persévérant : Vous allez comprendre dans ce domaine que vous n'allez rien réussir du premier coup, c'est très rare de réaliser une texture parfaite avec chaque détails parfait en une fois (surtout si vous débutez). Donc il faut savoir prendre sur soi pour recommencer, recommencer & encore recommencer jusqu'à obtenir le résultat voulu ! C'est la base de l'apprentissage non ? Patient, très patient : Une texture d'armure ne vous prendra pas 10 minutes vu la technique que je vais vous proposer. Comptez minimum 30 minutes et jusqu'à 6 heures pour les plus complexes et selon ce que vous voulez faire. Donc oui il faut savoir être patient, car vous allez rester figé à votre écran en bougeant délicatement votre souris sur une texture et vous allez devoir vous y reprendre plusieurs fois pour faire une courbe parfaite ! (pensez à mettre des mix de musiques sinon effectivement c'est ennuyeux à force) Maintenant de quoi il faut s'équiper pour faire tout ça ?! Alors je vais directement vous conseiller d'avoir Photoshop (je vais pas vous dire comment cracker le logiciel, il y a des tutos, la preuve je vous donne les liens de téléchargements : Installer le plugin dds sur Photoshop En passant il vous faudra le plugin installé sur Photoshop (CS5,CS6 ou CS6 Extended) alors pour répondre rapidement à certaines interrogations, non on ne peut pas avoir le plugin sous les dernières versions de Photoshop car Nvdia n'a pas fait de mise à jour depuis 2014 je crois si ce n'est moins. Donc malheureusement vous allez devoir utiliser de vieux photoshop ! Et pour installer le plugin je vous ai donné le lien juste au dessus de ce paragraphe, lisez et suivez le tutoriel attentivement et si vous avez des questions il faut allez dans la section A/Q/S ! Attention Je déconseille d'utiliser Gimp & Compagnie, car certains vont vous conseiller de passer par des convertisseurs DDS to PNG ou to TGA mais le problème c'est que ça casse complètement la texture, c'est absolument pas bon pour la qualité ! En passant il vous faudra un serveur & un client sur lesquelles vous pouvez tester vos textures à votre guise ! III°/Comment organiser son espace de travail 1-Photoshop Comment bien travailler sur Photoshop ? Il faudra travailler plusieurs choses mais ouvrez d'abord votre texture ! Suite à ça faites un duplicata de votre fond afin de garder une petite save ou alors faites une sauvegarde de votre texture vierge dans un coin de votre ordinateur, mais pour éviter de chercher personnellement je prends la première solution. Donc ça donne cela si on duplique le calque : Vous possédez donc une sauvegarde de votre texture, maintenant pour partir sur de bonnes bases (et ne afin de ne pas appliquer des couleurs sur des couleurs déjà existantes) on va désaturer notre calque avec SHIFT+CTRL+U Votre calque sera normalement dans les nuances de gris (noir & Blanc pour parler plus simplement) Si vous trouvez votre texture très sombre n'hésitez pas à modifier les paramètres de contraste et de luminosité Voilà vous avez une base que vous pouvez modifier avec le pinceau ! Pour avoir plus d'organisation vous pouvez créer des dossiers afin de ranger vos calques de couleurs à l’intérieur ! Maintenant que votre Photoshop est bien organisé il manque plus qu'à vous donner une petite astuce pour votre client ! 2-Votre client Vous allez ou vous avez déjà remarqué que repack des textures avec tous les modèles, les animations & compagnie dans vos fichiers c'est long, très long. Pour mieux vous organiser, n'hésitez pas à créer de nouveaux patch ! Comme ceci : Pourquoi créer des dossiers comme ça ? Tout simplement pour organiser et repack un peu plus vite vos fichiers. En effet, dedans vous n'allez mettre que vos textures et uniquement vos textures (pas de gr2, pas d'animations, pas d'effets etc...) Attention N'oubliez pas donc de déclarer vos nouveaux patch dans votre fichier Index, sinon votre client ne les liera pas ! Et voilà un bon petit plan de travail pour faire des textures tranquillou ! IV°/Conseils & Erreurs fréquentes N'hésitez pas au début à faire des expériences sur des petites textures pas très complexes comme les coiffures ou les monstres. N'hésitez pas à vous renseigner sur les ensembles de couleurs ! Il y a des sites qui vous permettent de savoir quelle couleur peut s'accorder avec une autre ! Certains me diront que rajouter des patchs ça alourdi le client : Oui MAIS si vous le souhaitez vous pouvez supprimer les textures originales dans les fichiers pour éviter de faire des doublons Attention si vous ne faites pas de patch pour les armures par exemple ! Des textures peuvent se situer dans les patch1 & 2 qui passent avant les fichiers pc et pc2 ! Vérifiez que des patch ne passent pas avant d'autres dans l'index si une texture existe en deux fois. N'utilisez pas de convertisseur DDS to PNG ou TGA, cela casse la texture et peut notamment supprimer le canal alpha (brillance) Sauvegardez toujours la texture originale ! Comme ça si vous voulez recommencer vous n'avez pas besoin de redepack un client ! Prenez beaucoup de cafés, de thés & écoutez beaucoup de musique car il faudra beaucoup de patience. C'est la fin du premier chapitre ! Je continuerai les prochains dans quelques temps ! Enjoy ! Mei,
  11. Bonjour à tous ! Je vous présente ce tutoriel qui vous permettra d'installer le fameux plug-in DDS sur photoshop. ____________________________________________________________________________________ TÉLÉCHARGEMENTS REQUIS ____________________________________________________________________________________ 1°/Il vous faut un Photoshop (Je vous propose donc ici trois photoshop) : Photoshop CS5 : Cliquez ici Photoshop CS6 : Cliquez ici Photoshop CS6 Extended : Cliquez ici ! 2°/Le plug-in faites votre choix au niveau de la méthode : Méthode setup : Cliquez ici Méthode manuelle : Cliquez ici Vous avez choisi votre Photoshop et votre méthode ? Alors rendez-vous dans celle que vous avez choisi ! ____________________________________________________________________________________ MÉTHODE SETUP ____________________________________________________________________________________ Vous avez donc téléchargé le plugin DDS adéquate à votre version via le site de NVIDIA. Ouvrez l'exe' que vous avez téléchargé. Suivez donc ces étapes illustrées : Faites next/suivant puis cliquez sur install, patientez puis passez à la configuration sur Photoshop une fois le processus terminé. ____________________________________________________________________________________ MÉTHODE MANUELLE ____________________________________________________________________________________ Vous avez donc téléchargé l'archive de la méthode manuelle, Vous devez placez les fichiers dans les bons emplacements, je vais indiquer les chemins pour les photoshop que j'ai partagé ci-dessus. Photoshop CS5 : dds.8bi => Adobe Photoshop CS5 Portable => Plug-ins => File Formats NormalMapFilter.8bf => Adobe Photoshop CS5 Portable => Plug-ins => Filters NVIDIA_CubeMapShuffler.jsx => Adobe Photoshop CS5 Portable => Presets => Scripts NVIDIA_Mipster.jsx => Adobe Photoshop CS5 Portable => Presets => Scripts Photoshop CS6 : dds.8bi => PhotoshopCS6Portable => App => PhotoshopCS6 => Required => Plug-ins => File Formats NormalMapFilter.8bf => PhotoshopCS6Portable => App => PhotoshopCS6 => Required => Plug-Ins => Filters NVIDIA_CubeMapShuffler.jsx => PhotoshopCS6Portable => App => PhotoshopCS6 => Presets => Scripts NVIDIA_Mipster.jsx => PhotoshopCS6Portable => App => PhotoshopCS6 => Presets => Scripts Voilà une fois les fichiers placés vous pouvez passer à la configuration sur Photoshop. ____________________________________________________________________________________ CONFIGURATION SUR PHOTOSHOP ET VÉRIFICATION ____________________________________________________________________________________ Ouvrez donc votre Photoshop, sur la barre de navigation allez sur Edition, préférences, modules externes. Cette page s'affiche, sélectionnez la racine de votre fichier Photoshop comme indiquez ci-dessus. Une fois ceci faites OK puis fermez votre logiciel, ré-ouvrez le et normalement quand vous voulez ouvrir un fichier dans la liste des extensions il y a ceci : Voilà vous avez installé votre plugin vous pouvez maintenant modifier des textures de divers MMO ! Ce tutoriel a entièrement été rédigé par moi même ! Que cela puisse vous servir. Tutoriel rédigé par Mei
  12. Bonjour, Ce tutoriel nécessite Photoshop équipé du plugin de lecture des fichiers en .DDS. Comment supprimer une brillance ? Comment ajouter ou modifier une brillance ? N'oubliez pas d'enregistrer sous le format suivant : 8.8.8.8 ARGB unsigned Source : Mei. Au plaisir,
  13. Niveau requis : Débutant Temps estimé : Entre 15 et 30 minutes Bonjour à tous, Si vous lisez ce tutoriel c'est que vous souhaitez en apprendre plus sur les magasins de Metin2 n'est-ce pas ? Alors prenez le temps de lire et vous allez apprendre deux à trois petites choses concernant ces magasins ! Tout d'abord il existe deux types de magasins, le simple (lorsque vous cliquez sur les PNJ's une fenêtre de magasin s'ouvre directement ) ou alors les magasins multiples (lorsque vous cliquez sur les PNJ's vous allez avoir plusieurs choix de magasins / exemple : Épées, Dagues...). A propos : Avant d'appliquer un magasin veillez à avoir un pnj, si vous souhaitez implanter un nouveau pnj pour lui placer des magasins suivez donc ces tutoriels avant de suivre celui-ci : - Implanter un monstre/PNJ -Gèrer les spawns A propos² : Si un PNJ est déjà lié à une quête (par exemple le Forgeron) il faut impérativement créer le magasin via une quête (donc suivez la partie magasins multiples). Sinon le PNJ ne vous proposera que les quêtes déjà liées sans pour autant vous ouvrir le magasin. I°/Créer un magasin de type SIMPLE Il faudra simplement utiliser navicat, n'est-ce par merveilleux ? Bon peut-être un peu l'item_names.txt si vous souhaitez connaître l'ID d'un item et le mob_names.txt pour l'ID d'un PNJ ! Alors commençons ! Allez sur navicat, plus particulièrement sur votre base de données player, nous nous servirons uniquement de la table shop et de la table shop_item. La table shop permet de créer le magasin en lui même et la table shop_item permet d'associer un item en vente à un magasin entre autre de le remplir. Premièrement nous allons créer notre magasin ! (Ne mettons pas la charrette avant les bœufs voyons ! ) Pour cela, rendez-vous dans la table shop et observons nos petites colonnes ! vnum = Un nombre que vous allez donner à votre magasin (un numéro d'identification) mais attention ! Vérifiez que le vnum n'est pas déjà utilisé par un autre magasin ! donc ici nous avons des vnum allant de 1 à 6 (donc le serveur identifie les magasins de sorte à lire Magasin 3 = Shop = La Marchande) Name = Alors, le name est totalement inutile. Mais vous pouvez l'utiliser pour vous indiquer le contenu du magasin. Cela peut vous servir de repère. npc_vnum = C'est l'id de votre pnj , là c'est à vous de retrouvez l'id de votre pnj via le mob_names ou mob_proto (exemple ici, 9001 = Marchand d'armes , 9003 = Marchande, 9009 = Pêcheur etc...) Une fois votre ligne personnalisée créée, sauvegardez tout cela ! Passons à la deuxième étape ! Ouvrez donc votre table shop_item maintenant et observons les colonnes à nouveau ! shop_vnum = Vous vous souvenez du nombre que vous avez choisi pour votre magasin ? C'est ici qu'il faut le placer ! Ainsi le serveur pourra lire que shop_vnum (Magasin) possède l'item (item_vnum) avec une quantité égale à (count) item_vnum = Si vous avez suivi la ligne écrite au dessus, vous avez compris que l'item_vnum correspond à l'ID de votre item en question (trouvable dans l'item_names ou item_proto) count = C'est tout simplement la quantité à vendre, attention vérifiez que votre item est empilable sinon le magasin va écrire que votre item sera vendu par 200 mais vous n'en recevrez qu'un seul dans votre inventaire ! Sauvegardez vos lignes ajoutées et rebootez votre serveur ! Maintenant cliquez sur votre PNJ et le tour est joué ! Bravo vous avez crée un magasin simple ! II°/Créer des magasins multiples Alors pour ceux qui ont lu mon introduction vous savez donc qu'un magasin simple ne peut pas s'accorder avec une quête déjà présente (exemple Forgeron qui possèdent déjà 4 quêtes) entre autre il faudra proposer votre magasin dans les choix de quêtes lorsque vous cliquez sur le PNJ. Sinon vous souhaitez juste avoir plusieurs magasins sur un seul et même PNJ ! Ici on va se servir de Navicat de Winscp, de Notepadd++ et de votre logique ! Logique ! Première étape ! La création de vos magasins ! Pour cela rendez-vous sur navicat, dans votre base de données player et cherchez la table shop ! Ouvrez cette table et observons les colonnes ! Attention l'utilisation des colonnes est différente que lorsque l'on crée un magasin simple. (En réalité certaines deviennent inutiles tout simplement) vnum = C'est un numéro qui identifiera votre magasin, un vnum = un magasin , vous ne pouvez pas utiliser deux fois le même nombre ! name = Cette colonne est inutile mais vous pouvez écrire un nom afin de vous repérez plus facilement dans vos magasins (dans la BDD) npc_vnum = Pour les magasins multiples cette colonne est inutile car en réalité les magasins seront liés à une quête, je vous expliquerai la quête juste après ces lignes ! Du coup une fois que vous avez crée vos nouvelles lignes, sauvegardez tout cela ! Et rendez-vous sur Notepadd++ , ne soyez pas surpris par la quête, elle peut paraître compliquée à comprendre mais au final elle est très simple ! Prenons une petite quête de test (oú j'ai volontairement retiré les ID etc..) quest NOMQUETE begin state start begin when IDPNJ.chat."NOMSHOP" begin npc . open_shop( IDSHOP ) setskin(NOWINDOW) end when IDPNJ.chat."NOMSHOP" begin npc . open_shop( IDSHOP ) setskin(NOWINDOW) end when IDPNJ.chat."NOMSHOP" begin npc . open_shop( IDSHOP ) setskin(NOWINDOW) end end end Mais qu'est-ce que c'est ce bordel hein ? Je vais expliquer ce que vous devez remplacer ! Et/ou ajouter ! BON ! NOMQUETE = Vous l'avez deviné ? C'est le nom de votre quête, choisissez un nom simple & efficace par exemple magasinsmult ! IDPNJ = L'id de votre pnj que vous pouvez retrouvez dans votre mob_proto ou mob_names (Exemple Marchande = 9003) NOMSHOP = Alors tout d'abord ne supprimez pas les " " sinon vous allez casser la quête, mais encore une fois choisissez un nom qui ici représentera le contenu de votre magasin (Exemple : Épées, Dagues, Arcs) IDSHOP = Le vnum (souvenez vous de la première colonne de la table shop) , c'est ici qu'il faut le mettre ! Et n'oubliez pas un vnum = un magasin Alors pour ceux qui veulent bien plus de 3 magasins avec des PNJ différents, il vous suffit de copier coller ce bout de code à la suite du premier et de le modifier, tout simplement. Après vous pouvez ajouter des commentaires pour mieux vous y retrouvez (les commentaires n'apparaissent pas en jeu) when IDPNJ.chat."NOMSHOP" begin npc . open_shop( IDSHOP ) setskin(NOWINDOW) end Exemple avec un commentaire : ---Mon commentaire exemple disons que le code en dessous correspond a la marchande--- when IDPNJ.chat."NOMSHOP" begin npc . open_shop( IDSHOP ) setskin(NOWINDOW) end De ce fait après de bonnes modification voici une quête d'exemple : Vous allez me dire mais qu'est-ce qu'on fait avec ça sur Notepadd ++ maintenant ? Enregistrez la sous format .quest et mettez dans la dans le fichier metin2/share/locale/france/quest. Maintenant qu'elle est mise dans le bon fichier, il va falloir la déclarer auprès du serveur (un peu comme déclarer un nouvel enfant auprès d'une mairie) et donc dans le fichier quest oú se trouve votre quête, il y aura un fichier nommé locale_list. Ouvrez le et ajoutez votre quête tout à la fin (et laissez une ligne vide) Sauvegardez et faites un sh quest.sh sur votre console (ou vdi ou vhd ou virtualbox peu importe comment vous appelez ça) In game faites un reload q avec un personnage GM. Voici donc le résultat de notre quête d'exemple ! Attendez ne partez pas ! Il reste encore vos magasins à remplir (Rappel qu'un magasin simple sera présenté de la même manière si il est déclaré avec une quête déjà présente et dans ce cas de figure au lieu de mettre un nom de type Épées mettez plus un : Ouvrir mon magasin) Revenons à Navicat ! Ouvrez la table shop_item présente dans la base de données player ! shop_vnum = Au vnum (première colonne de la table shop) soit le nombre qui identifie votre magasin ! item_vnum = L'ID de votre item (retrouvable dans l'item_proto ou l'item_names , par exemple 19 = Épée +9) count = C'est tout simplement la quantité à vendre, attention vérifiez que votre item est empilable sinon le magasin va écrire que votre item sera vendu par 200 mais vous n'en recevrez qu'un seul dans votre inventaire ! Ajoutez vos lignes et sauvegardez ! Maintenant faites un reboot via votre console et voilà vos magasins multiples sont créées et remplis ! Si vous avez des questions n'hésitez pas à les poser dans la section A/Q/S et j'espère que ce tutoriel vous sera utile ! Tutoriel écrit par Mei
  14. Niveau requis : Intermédiaire Compétence nécessaire : Savoir utiliser les sources Temps estimé : Entre 3 et 5 minutes Bonjour à tous, Vous voulez compiler votre propre dump_proto ? Par ici alors ! Mais avant toute chose je vais vous expliquer qu'est-ce qu'un dumpproto. Alors le DumpProto est un exécutable (un petit mini logiciel) qui servira à créer vos item_proto et mob_proto côté client ! Ah oui et il est seulement utile que pour les files 2013 + (files fonctionnant sous .txt). A propos : Il faut savoir qu'un dumpproto peut être propre à un serveur, pourquoi ? Car si vous ajoutez des systèmes tels que les étoles ou l'anti-magie ou encore la liaison d'âme vous allez devoir modifier les colonnes de vos item_proto et/ou mob_proto et de ce fait vous allez devoir aussi modifier la lecture de votre dump_proto donc on ne peut pas piquer le dump du serveur voisin si vous avez pas les mêmes fichiers que lui . A propos² : Vous allez devoir vous munir de Visual Studio 2013 et de vos fichiers item_proto.txt, item_names.txt , mob_proto.txt et mob_names.txt (si vous souhaitez tester votre dump) et le plus important, munissez vous de sources vierges de Dump que je vous fournis gentiment : Cliquez ici (elles proviennent de la branche mainline) I°/Compiler son DumpProto Ouvrez donc la solution Importer avec Visual Studio vous allez vous retrouvez avec une page vide, rien de grave et surtout pour compiler son dump rien de plus simple. Dans la barre de menu en haut, changez le mode Debug en mode Release et faites CTRL+SHIFT+B et laissez votre solution se compiler ! Voilà vous avez compilé votre dump ! Il est disponible dans le fichier Release des sources ! Alors pour vous faire quelques petites indications vous allez souvent modifier le fichier ItemCSVReader.cpp c'est lui qui va gèrer la lecture de vos colonnes. Donc lorsque vous implanterez un système c'est la plupart du temps dans ce fichier là que vous allez devoir ajouter vos nouvelles colonnes ! Bon on peut rapidement observez ensemble le fichier ! Même si il n'y a rien de compliquer à comprendre car toutes les indications sont inscrites ! Item_Proto string arType[] = Les Types d'objets string arSub1[] à string arSub31[] = Les SubTypes string arAntiFlag[] = Les AntiFlags string arFlag[] = Les Flags string arWearrFlag[] = Les WearFlags string arImmune[] = Les immunités string arLimitType[] = Les limitypes (conditions) string arApplyType[] = Les applytypes (Bonus) Mob_Proto string arRank[] = Rang du monstre string arType[] = Le type de l'objet string arBattleType[] = Le type d'attaque (Monstre qui attaque par distance, par corps à corps) string arSize[] = La taille string arAIFlag[] = aiflag (Particularité du monstre) string arRaceFlag[] = RaceFlag (Type de monstre exemple : animal, eso etc...) string arImmuneFlag[] = Les immunités qu'il possède Si vous souhaitez en savoir plus concernant les items, je vous renvoie vers ce tutoriel => Configurer tous ses objets II°/Utiliser son Dump_Proto Maintenant que vous avez un dump_proto compilé, on va créer un dossier sur notre bureau oú l'on va placer notre dump, nos item_proto/names.txt et mob_proto/names.txt dedans comme ceci : Il faut savoir que si vous implanter juste une arme par exemple, ça ne sert à rien de dump votre mob_proto. Bon maintenant rien de plus simple ! Double-cliquez sur l'application Dump_proto.exe ! Il se peut qu'un erreur survienne, dans ce cas réessayez sinon c'est que vous avez une erreur soit dans les protos ou les fichiers sources du dump. Désormais vous avez vos protos côté client que vous pouvez placer dans le fichier locale_X ! Fin du tutoriel. Tutoriel écrit par Mei Si vous avez des questions n'hésitez pas à les poser dans la section A/Q/S.
  15. Niveau requis : Débutant Temps estimé : Entre 2 et 5 minutes Bonjour à tous, Vous avez certainement remarqué que parfois vos PNJ's ou même vos monstres disaient des choses lorsque vous les approchez ? Je vais vous apprendre comment ajouter des paroles à vos nouveaux monstres ou PNJ's ! A propos : Vous allez avoir besoin de Winscp I°Ajouter de nouvelles paroles Alors ! Démarrez votre Winscp et rendez-vous dans le fichier locale.lua situé dans /metin2/share/locale/france/quest Cherchez donc la ligne suivante : locale.monster_chat = { En dessous de celle-ci il y avoir beaucoup de lignes qui représentent les paroles d'un monstre ou d'un PNJ [20024]={ " Taurean est vraiment casse-pied " , " J'assume ce que je suis ...et ce que je m'apprête à faire " , " Il fait vraiment chaud dans ce pays " }, [20024]= =L'ID de votre pnj ou de votre monstre qui est trouvable dans le mob_proto ou mob_names. (Ici 20024 = Harang) {"Taurean est vraiment casse-pied",[...]}, = Les paroles du PNJ (Attention elles doivent être mises entre guillemets) Alors à savoir que si vous décidez de mettre plusieurs phrases à chaque fin de phrases (après le dernier guillemet il faudra ajouter une virgule et par ailleurs à la fin de votre fonction entière il faut aussi ajouter une virgule). Par exemple : [9003]={ " ASIKOO il aime le JAVA ! " , " Mei deal du KFC " , " Calypso ! Bah Calypso. " }, Ici nous avons le PNJ 9003 (Marchande) donc vous apercevez que chaque phrase est terminé par une virgule et que ma fonction entière est terminé par une accolade + virgule Une fois vos lignes ou votre ligne ajoutée(s) allez sur votre putty/virtual box et faites soit la commande reboot soit un sh quest.sh accompagné d'un reload q in game (avec un personnage IMPLEMENTOR) Fin du tutoriel ! Tutoriel écrit par Mei Si vous avez des questions n'hésitez pas à les poser dans la section A/Q/S.
  16. Niveau requis : Intermédiaire Compétences nécessaires : Savoir utiliser les sources et avoir des bases avec Photoshop Temps estimé : Entre 15 et 30 minutes (pour un objet) Bonjour à tous, Vous souhaitez rajouter un peu de beauté et de design sur vos monstres et vos PNJs ? Alors suivez un peu ce tutoriel qui vous permettra d'activer les brillances sur eux. A propos : Il faudra vous munir de sources client, de Visual Studio (pour compiler) , de notepadd++ et de Photoshop. D'ailleurs Photoshop devra avoir le plugin DDS pour cela suivez ce tutoriel : Installer le plugin DDS sur Photoshop I°/Activer la brillance à partir des sources client. Ouvrez donc votre solution des sources avec Visual Studio ! Rendez-vous maintenant dans la solution GameLib puis dans le fichier ActorInstanceData.cpp Cherchez donc les lignes suivantes : void CActorInstance::SetShape(DWORD eShape, float fSpecular) { Placez ceci en dessous de l’accolade : if (IsNPC() || IsPoly() || IsEnemy() || IsStone()) { fSpecular = 1.0; } Donc pour comprendre un peu le code je vais le traduire de manière littérale , donc SI l'objet est un PNJ / une polymorphie / un monstre ou une Metin ALORS la brillance est égal à une opacité de 100. Donc le résultat d'un code bien placé se présente comme ceci : Maintenant vous pouvez compiler votre solution en faisant CTRL+SHIFT+B. Retrouvez donc votre lanceur dans le fichier Release (si vous compilez en mode Release). Ensuite placez votre lanceur à la racine de votre client. II°/Modifier la partie MSM de votre PNJ/Monstre/Metin Alors pour modifier le MSM de votre objet, veuillez dépack le fichier oú il se situe (npc/npc2/monster/monster ou alors les patch_XXX) Quand vous ouvrez le fichier de votre objet vous allez retrouver un fichier .msm et bien ouvrez le avec Notepadd++. Donc vous allez vous retrouver face à beaucoup de lignes, pas de panique on va juste ajouter un code entre elles. Au tout début de votre fichier MSM, il doit y avoir une ligne de ce type : BaseModelFileName "D:\Ymir Work\fichiernpc\PNJMOBMETIN\NOMDUMODELE.GR2" En dessous de cette ligne il va falloir ajouter un code, c'est le suivant : Group ShapeData { PathName "d:/ymir work/FICHIERPRINCIPAL/FICHIERDUMOBPNJMETIN/" ShapeDataCount 1 Group ShapeData00 { ShapeIndex 0 Model "nomdumodèle.gr2" SourceSkin "satextureprincipale.dds" TargetSkin "satextureprincipaleoualternative.dds" } } Alors petits changements à effectuer : Sur la ligne PathName : FICHIERPRINCIPAL = Le nom du fichier dans lequel se trouve le pnj mob (donc soit npc, npc2, monster, monster2) NOMDUMODELE = Le nom du fichier .gr2 (Par exemple pour les tigres c'est tiger.gr2) Dans le code ShapeData : Alors il ne faut pas supprimer les guillemets au risque de casser votre client et d'avoir des erreurs. nomdumodèle = Le nom du fichier .gr2 satextureprincipale = La texture qui est lié au gr2 (il faut le nom précis) satextureprincipaleoualternative = Lorsque le mob est divisé en deux (par exemple les tigres) soit ça va être tiger.dds ou white_tiger.dds mais si le modèle ne possède qu'une seule texture alors réécrivez le nom de sa texture principale tout simplement. Une fois les changements effectués et le bout de code ajouté, sauvegardez ! III°/Ajout du Canal Alpha via Photoshop Ouvrez donc la texture de votre objet avec Photoshop, allez dans le menu "Couches" et si la Couche Alpha n'existe pas ajoutez la en cliquant sur Créer une nouvelle couche. Alors, il faut savoir que pour cette partie vous devrez avoir des connaissances basiques sur Photoshop, Pourquoi ? Bon là on va copier coller vulgairement la couche RGB sur le Canal Alpha ce qui va donner ce rendu : Vous comprendrez que TOUTE la texture va se mettre à briller de manière très intensive (et qui par ailleurs va gâcher le côté esthétique du modèle) , pour obtenir une brillance dite correcte il va falloir jouer avec le pinceau et la gomme (avec plusieurs opacités). Sachez que vous allez devoir vous y reprendre à plusieurs reprises avant d'avoir la brillance que vous souhaitez (d'ailleurs tout ce qui est animaux, ils ne nécessitent pas forcément de brillance vu qu'ils ont un pelage et non pas de partie "métallique") Une fois que vous avez un Canal Alpha bien travaillé, sauvegardez votre texture sous le format .dds avec la configuration DXT5 Interpolated Alpha et vous pouvez repacker le tout ! Fin du tutoriel ! Tutoriel écrit par Mei Si vous avez des questions n'hésitez pas à les poser dans la section A/Q/S.
  17. Niveau requis : Débutant Temps estimé : Entre 5 et 10 minutes Bonjour à tous, Vous souhaitez apporter une touche d'originalité en terme d'histoire à votre serveur ? Alors changez vos descriptions et rendez cela plus épique ! Ici nous parlerons principalement de la description des royaumes, des races, des objets et enfin des compétences. A propos : Munissez vous de Notepadd++ , d'Eternexus, de votre client et de votre clavier ! On aura besoin uniquement de fichiers se situant dans le fichier locale_X. A propos² : Vous ne trouverez pas de fichier locale_X le X remplace des abréviations de pays (FR = France , DE = Allemand , RO = Roumain , TR = Turc , ES = Espagnol, JP=Japon etc.. etc...) I°/Modifier la description des royaumes. Pour nos si beaux royaumes il faut donc allez dans notre locale_X plus précisément dans ces fichiers : empiredesc_a.txt , empiredesc_b.txt et empiredesc_c.txt. Petit point culture au niveau des maps ! (a=Shinsoo b=Chunjo c=Jinno) Ouvrons un fichier et observons le : [DELAY value;10] Empire Shinsoo[ENTER] [ENTER] L'Empire Shinsoo se trouve[ENTER] au sud du continent. Son[ENTER] infrastructure est axée sur[ENTER] [WAIT] le commerce. Sous la[ENTER] direction de Yoon-Yoing, les[ENTER] échanges commerciaux avec[ENTER] l'est de Shinsoo ont amené[ENTER] rapidement la prospérité que[ENTER] [WAIT] l'on connaît aujourd'hui.[ENTER] Par contre, les habitants[ENTER] sont en conflit avec[ENTER] l'ouest et la route[ENTER] commerciale est bloquée.[ENTER] [WAIT] Conscients de la menace que[ENTER] représente les pierres[ENTER] Metin, les commerçants ont[ENTER] décidé de s'armer. Leurs[ENTER] buts sont de se défendre[ENTER] [WAIT] contre les attaques venant[ENTER] de l'ouest, de rouvrir la[ENTER] route commerciale et de[ENTER] contrôler l'ensemble de[ENTER] l'Empire. Vous remarquerez que des petits bouts de codes apparaissent en début ou fin de ligne, pas de panique ! ( à bord le fun et la vitesse d'abord). [DELAY value;10] = Le délai d'affichage de votre description (d'ailleurs si vous mettez 0 la description s'affiche de manière instantané) [WAIT] = C'est la fin d'un paragraphe, votre joueur sera obligé d'appuyer sur suivant pour lire la suite [ENTER] = Un simple retour à la ligne Petite conseil : Ne mettez pas plus de 24 caractères par ligne au risque de gâcher un peu votre description (de manière esthétique). Une fois que vous avez terminé de changer tout ça dans ce cas sauvegardez et repackez votre locale_X ! II°/Modifier la description des races. Vous souhaitez remodifier l'histoire de vos races sur Metin ? Dans ce cas changez un peu leur description ! Toujours dans votre fichier locale_X vous aurez le choix entre 5 fichiers (4 si vous ne possédez pas le Lycan) ce sont les fichiers suivants : jobdesc_assassin.txt , jobdesc_warrior.txt , jobdesc_sura.txt , jobdesc_shaman.txt, jobdesc_wolfman.txt . Un petit peu de traduction pour comprendre le nom des fichiers ? job = La race desc = description assassin = Ninjas warrior = Guerriers sura = Suras shaman = Chamanes wolfman = Lycan Ouvrez donc votre fichier et observons ces merveilleux textes accompagnés de quelques bouts de codes ! [DELAY value;10] Les Ninjas sont des tueurs[ENTER] professionnels toujours[ENTER] capables d'attaquer sans le[ENTER] moindre bruit. Pour garantir[ENTER] leur agilité et leur[ENTER] [WAIT] vitesse, ils ne portent que[ENTER] de très légères protections[ENTER] et armures. Selon leur[ENTER] spécialisation, les Ninjas[ENTER] peuvent devenir des Maîtres[ENTER] [WAIT] dans l'utilisation de la[ENTER] dague ou des tireurs[ENTER] d'élite avec leur arc. Donc déjà pour éviter de salir votre description, évitez de dépasser 24 caractères par ligne (pire que Twitter) Ensuite voici une petite explication des petits codes qui ne sont pas très offensifs ! [WAIT] = Votre joueur sera obligé de cliquer sur Suivant pour obtenir la suite de la description [DELAY value;10] = Le délai d'affichage de votre description (Si le DELAY = 0 alors l'affichage est instantané) [ENTER] = Un retour à la ligne Une fois les modifications apportées à votre description, n'oubliez pas de sauvegarder ! III°/Modifier la description des objets. Modifier ou ajouter ! Afin d'indiquer l'utilité d'un nouvel objet que vous avez implanté ! Pour cela rendez-vous dans le fichier itemdesc.txt Voilà comment se présente une ligne de description d'item, soyez attentif à certains détails ! 39013 Bénédiction du Dragon Bénédiction qui régénère immédiatement la totalité de vos PV et PM. Cet objet peut être vendu. Alors ! Avant de vous précipitez à ajouter des lignes il faut que je vous apporte quelques indications ! Déjà comment se présente la ligne. 39013 = L'ID de l'item, c'est la première chose que vous devez indiquer pour déterminer quel objet est concerné. Bénédiction du dragon = L'intitulé de votre item Bénédiction qui [...] vendu = La description de votre item Alors il faut savoir que deux tabulations se présentent ! Et il ne faut pas les oublier sinon vous risqueriez d'avoir des erreurs dans votre client ! Alors par logique les tabulations ce sont les deux espaces que vous voyez entre l'id de l'item et l'intitulé ainsi qu'entre l'intitulé et la description ! Entre autre ! 39013[TAB]Bénédiction du Dragon[TAB]Bénédiction qui régénère immédiatement la totalité de vos PV et PM. Cet objet peut être vendu. Voilà les deux tabulations vulgairement affichées, alors comment faire une tabulation ? Appuyez tout simplement sur cette touche : Et voilà ! Maintenant que vous avez les indications nécessaires vous allez pouvoir modifier ou ajouter des lignes à votre guise pour améliorer les indications de votre serveur. N'oubliez jamais de sauvegarder votre travail et de repack à la suite de vos modifications ! IV°/Modifier la description des compétences. Pour modifier la description de vos compétences il faudra nous rendre une énième fois dans le fichier locale_X plus particulièrement dans skilldesc.txt Des lignes comme celle-ci vont se présenter, analysons la : 1 WARRIOR Triple lacération Triple entaille Triple Coup Tranche vos ennemis à la vitesse de la lumière. Attaque frontale violente à 3 temps Attaque plusieurs cibles ATTACK_SKILL|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED samyeon 1 4 Puissance totale de l'attaque %.0f-%.0f (1.1*MinATK + (0.1*MinATK + 1.5*STR)*SkillPoint) * 3 (1.1*MaxATK + (0.1*MaxATK + 1.5*STR)*SkillPoint) * 3 1 = L'id de la compétence WARRIOR = La race ou le type de compétences (SUPPORT, GUILD, HORSE, WARRIOR, WOLFMAN, SURA, SHAMAN, NINJA) Triple lacération = Le nom du niveau 0 à 20 ou P Triple Entaille = Le nom du niveau M1 à M10 Triple Coup = Le nom du niveau G1 à G10 Tranche vos ennemis à la vitesse de la lumière. = La description principale de votre compétence Attaque frontale violente à 3 temps Attaque plusieurs cibles = La description technique de votre compétence ATTACK_SKILL|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED = Conditions d'utilisation de la compétence (Ici par exemple c'est une compétence qui a besoin d'une cible et qui est seulement utilisée à l'épée ou à la lance) samyeon = Nom de la compétence dans les fichiers 1 = Nombre représentant le placement de la compétence (entre autre ici c'est la première compétence des Guerriers) 4 = ? Puissance totale de l'attaque %.0f-%.0f (1.1*MinATK + (0.1*MinATK + 1.5*STR)*SkillPoint) * 3 (1.1*MaxATK + (0.1*MaxATK + 1.5*STR)*SkillPoint) * 3 = Comme indiqué c'est la puissance totale de l'attaque avec le calcul effectué pour obtenir la valeur affichée Petite indication : Il faut savoir que beaucoup de tabulations sont présentes dans une seule et unique ligne, je vous montre grossièrement oú elles sont placées afin d'éviter de casser votre client ! 1[TAB]WARRIOR[TAB]Triple lacération[TAB]Triple entaille[TAB]Triple Coup[TAB]Tranche vos ennemis à la vitesse de la lumière.[TAB]Attaque frontale violente à 3 temps[TAB]Attaque plusieurs cibles[TAB][TAB][TAB]ATTACK_SKILL|NEED_TARGET|WEAPON_LIMITATION[TAB]SWORD|TWO_HANDED[TAB]samyeon[TAB]1[TAB]4[TAB][TAB][TAB]Puissance totale de l'attaque %.0f-%.0f[TAB](1.1*MinATK + (0.1*MinATK + 1.5*STR)*SkillPoint) * 3[TAB](1.1*MaxATK + (0.1*MaxATK + 1.5*STR)*SkillPoint) * 3[TAB] [TAB] Si vous souhaitez modifier uniquement la description dans ce cas seules les descriptions principale & technique doivent être modifiées, le reste est à laisser de côté ! Une fois que vous avez modifié ces deux lignes dans ce cas sauvegardez et repackez votre client ! Tutoriel écrit par Mei & Takuma En espérant que cela vous sera utile à l'avenir !
  18. Bonsoir à tous. Je ne participe quasiment jamais sur le forum, mais mieux vaut tard que jamais. Aujourd'hui, je vais vous apprendre (ou pas) comment créer un module Python par le biais de vos sources client. Quel intérêt me direz-vous ? Et bien à vous de le décider. Je ne suis pas très active sur Metin2. Mais je me souviens il y a de ça 3 ans avoir fait un système et crée un nouveau module pour pouvoir mieux m'y retrouver, car mes fonctions ne rentraient vraiment dans aucun des nombreux modules disponibles. Et j'aime quand les choses sont bien rangées ! Vous vous doutez bien que pour suivre ce tutoriel, vous aurez besoin de votre tête, un cerveau si possible(/disponible après une bonne journée de travail) et de vos sources client. Explications du code et préambule : Et si nous codions ?! Ça vient ça vient ! je vous invite premièrement à créer un nouveau fichier dans vos sources client. Il va stocker notre nouveau module. Pour cela, vous allez vous rendre tout seul dans votre fichier où se trouvent tous les autres fichiers sources tels que PythonApplicationModule.cpp. Inspirez vous de ce nom, et créez par exemple PythonRoryModule (Rory étant le nom de votre module). Essayez de ne pas faire de fautes de frappes ! Quoi que vous seriez aux normes d'ymir... Nous allons ensuite l'ajouter à nos sources pour cela, si vous utilisez visual studio : Allez ensuite chercher votre fichier. Ouvrez le dans votre éditeur, et nous allons pouvoir commencer ! Pour commencer, nous allons inclure deux fichiers : #include "Locale_inc.h" #include "StdAfx.h" Pourquoi le Locale_inc.h ? Car nous allons utiliser le préprocesseur define, et nous allons le définir dans ce fichier. Je vous invite d'ailleurs à le faire : #define ENABLE_FIRST_MODULE Ceci étant fait, je vous propre de directement ajouter le ifdef et coder de dans : #include "Locale_inc.h" #include "StdAfx.h" #ifdef ENABLE_FIRST_MODULE #endif Pour commencer "vrai" code, nous allons créer la variable d'initialisation. On peut dire que c'est elle qui va poser la base de notre module. C'est la racine de l'arbre ! Elle sera du type void car nous n'attendrons pas de retour de la fonction : void initrory() { } (J'aurai ajouté une majuscule pour séparer les deux mots, mais ymir ne l'a pas fait avant, je respecte leur façon d'écrire et je ne change pas). Dans cette fonction, nous allons faire trois choses différentes : Enregistrer toutes nos fonctions Enregistrer le module Enregistrer différentes constantes. Nous allons commencer par enregistrer nos méthodes, pour cela, nous allons créer une liste : void initrory() { static PyMethodDef s_methods[] = { { NULL, NULL }, }; } Notez que j'ai déjà ajouter quelque chose dans s_methods: Il se finira toujours par cette ligne. Ça permet de créer une case vide si vous voulez, cela évite qu'elle soit vide dans tous les cas. Avant cette ligne, vous allez pouvoir enregistrer autant de méthodes que vous le voudrez comme ceci : { "pyMethod", cppMethod, METH_VARARGS }, Comprenez bien que : pyMethod : Nom de la fonction Python. cppMethod : Lien direct avec la fonction c++ que nous allons créer après. METH_VARARGS : Par convention Cython. Ne vous souciez pas de ça, c'est rare d'avoir à le modifier sur Metin, je ne pense pas avoir vu autre chose comme METH_KEYWORDS par exemple. Pour enregistrer notre module, nous allons ajouter l'instruction : PyObject * poModule = Py_InitModule("rory", s_methods); "rory" étant le nom de votre module. Ce qui donne : #include "Locale_inc.h" #include "StdAfx.h" #ifdef ENABLE_FIRST_MODULE void initrory() { static PyMethodDef s_methods[] = { { NULL, NULL }, }; PyObject * poModule = Py_InitModule("rory", s_methods); } #endif Voici ! Maintenant, il ne nous reste plus que quelques méthodes à voir. je vais vous donner un exemple de fonction pour achever ce tutoriel : Ajouter dans s_methods une fonction... Qui va récupérer un nombre entier et le renvoyer dans la console par exemple. Par défaut, notre fonction va ressembler à ça : PyObject * roryFirstMethod(PyObject * poSelf, PyObject * poArgs) { return Py_BuildNone(); } Maintenant, pour vous montrer de manière complète la chose, je vais imaginer que ma fonction requiert un argument comme un string par exemple. Pour stocker cette argument, nous allons créer un pointeur. Cela évitera d'allouer de la mémoire pour rien. Créons donc un pointeur nommé text par exemple : char* text = NULL; Bien, maintenant nous allons récupérer l'argument 0 (le premier). Voici là méthode pour le faire et l'attribuer au pointeur text, : PyTuple_GetString(poArgs, 0, &text) Notez que nous avons pour habitude de le mettre dans une condition pour gérer dans la foulé le manque d'argument : if (!PyTuple_GetString(poArgs, 0, &text)) return Py_BuildException(); Bien. Maintenant nous allons ajouter ça dans la console. Ce qui donne : Tracenf("%s", text); Voilà ! Notre fonction est donc : PyObject * roryFirstMethod(PyObject * poSelf, PyObject * poArgs) { char* text = NULL; if (!PyTuple_GetString(poArgs, 0, &text)) return Py_BuildException(); Tracenf("%s", text); return Py_BuildNone(); } Nous n'avons plus qu'à ajouter dans notre s_methods : { "Log", roryFirstMethod, METH_VARARGS }, Bien, maintenant nous allons nous rendre à deux endroits afin d'y ajouter un appel à notre fonction d'initialisation, et sa déclaration et nous aurons fini : Dans RunMainScript se trouvant dans UserInterface.cpp #ifdef ENABLE_FIRST_MODULE initrory(); #endif Avec les autres dans le StAfx.h de l'UserInterface toujours pour la déclarer. #ifdef ENABLE_FIRST_MODULE void initrory(); #endif Et voici, votre module est désormais disponible une fois vos sources compiler : import rory et : rory.Log(arg) Merci d'avoir lu jusqu'au bout, j'espère avoir été assez claire... Bonne chance de votre côté ! Amicalement.
  19. Bonjour à tous ! Sur ce tutoriel je vais vous expliquer les étapes d'implantation des montures (sans bonus) en détails. Je sais bien que Calypso a fait un tutoriel sur l'implantation d'une monture mais certaines personnes sont un peu perdues. Le tutoriel de calypso expliquant comment passer par les sources (Super montures) et comment mettre des bonus dessus. Mon tutoriel expliquera en détail comment passer de l'implantation du sceau à la monture IG (sans passer par les sources). Au sommaire : Création du sceau. La création du monstre. La mise en place de la quête pour associer le sceau au monstre. Le rendu en jeu. C'est parti ! 1. Création du sceau 2. La création du monstre. 3. La mise en place de la quête pour associer le sceau au monstre. 4. Le rendu en jeu : Voilà toujours en espérant en avoir aidé plus d'un ! Bonne journée à vous bd59140. (NOOB)
  20. bd59140

     tutoriel Info Map

    Bonjour, Comme promis un news tutoriel! Ce tutoriel a pour but de vous faire s'avoir quel map est quel map cotes serveur. (Exemple: Map_a1 = map1 rouge) Précision: -J'ai pris les Files 2016 by Saw : -Les map's avec marquer Non Fonctionnel je verrais pour les réparer plus tard. Où trouver les map's en question : cotes serveur: cd /usr/metin/share/locale/france/map Les map's: Info: (Map autre: map fonctionnel non utiliser) gm_guild_build: Map autre. map_n_snowm_01: Map mont sohan. map_n_snowm_02: Map autre.(2eme map identique au mont sohan) map_n_threeway: Map Orc. metin2_map_a1: Map 1 Rouge. metin2_map_a2_1: Map autre.(2eme map identique a la map orc) metin2_map_a3: Map 2 Rouge. metin2_map_b1: Map 1 Jaune. metin2_map_b2: Map non fonctionnel metin2_map_b3: Map 2 Jaune. metin2_map_battlearena01: Map chateau empire neige.(map autre) metin2_map_battlearena02: Map chateau empire normal. (map autre) metin2_map_battlearena03: Map chateau empire Desert. (map autre) metin2_map_bayblacksand: Map Baie de Néphrite 90+. metin2_map_c1: Map 1 Bleu. metin2_map_c2: Map non fonctionnel. metin2_map_c3: Map 2 Bleu. metin2_map_capedragonhead: Map Cap Feu du Dragon 90+. metin2_map_dawnmistwood: Map Falaise de Gautama 90+. metin2_map_dd: Map non fonctionnel a voir si y a un tuto sinon j'en ferai 1. metin2_map_devilscatacomb: Map des Catacombes. metin2_map_deviltower1: Map Tour des Demons. metin2_map_duel: Map duel accecible via le pnj map2. metin2_map_empirewar01: Map chateau empire neige.(map autre) metin2_map_empirewar02: Map chateau empire normal. (map autre) metin2_map_empirewar03: Map chateau empire Desert. (map autre) metin2_map_ew02: Map autre. metin2_map_fielddungeon: Map autre non implanter cotes client. metin2_map_guild_01: Map terrain guilde. metin2_map_guild_02: Map terrain guilde. metin2_map_guild_03: Map terrain guilde. metin2_map_guild_inside01: non fonctionnel. metin2_map_guild_village_01: Map autre.(identique au terrain de guilde) metin2_map_guild_village_02: Map autre.(identique au terrain de guilde) metin2_map_guild_village_03: Map autre.(identique au terrain de guilde) metin2_map_holyplace_flame: Non fonctionnel a reparer. metin2_map_milgyo: Temple de Hwang. metin2_map_milgyo_a: Non fonctionnel. metin2_map_monkey_dungeon: Non utiliser. metin2_map_monkey_dungeon_11: Donjon Singe Facile. metin2_map_monkey_dungeon_12: Donjon Singe Facile. metin2_map_monkey_dungeon_13: Donjon Singe Facile. metin2_map_monkey_dungeon2: Donjon Singe Normal. metin2_map_monkey_dungeon3: Donjon Singe Difficile. metin2_map_mt_thunder: Map Tonnerre 90+. metin2_map_n_desert_01: Desert de Yonbi. metin2_map_n_desert_02: Map autre. (identique a Desert de Yonbi) metin2_map_n_flame_01: Terre de Feu. metin2_map_n_flame_02: Map autre. (identique a Terre de Feu) metin2_map_n_flame_dungeon_01: Gorge du Purgatoire. metin2_map_n_snow_dungeon_01: Nemere. metin2_map_naga1: Non Fonctionnel à réparer. metin2_map_nusluck01: Map des Geants. metin2_map_oxevent: Map OX. metin2_map_siege_01: Non fonctionel à réparer. metin2_map_siege_02: Non fonctionel à réparer. metin2_map_siege_03: Non fonctionel à réparer. metin2_map_skipia_dungeon_01: Grotte de l'exil. metin2_map_skipia_dungeon_02: Grotte de l'exil2. metin2_map_skipia_dungeon_boss: Salle Boss Grotte de L'exil. metin2_map_spiderdungeon: Cave 1. metin2_map_spiderdungeon_02: Cave 2. metin2_map_spiderdungeon_02_1: Non foncitonnel à réparer. metin2_map_spiderdungeon_03: Cave 3. metin2_map_sungzi: Non fonctionnel à réparer. metin2_map_sungzi_desert_01: Non fonctionnel à réparer. metin2_map_sungzi_desert_hill_01; Non fonctionnel à réparer. metin2_map_sungzi_desert_hill_02: Non fonctionnel à réparer. metin2_map_sungzi_desert_hill_03: Non fonctionnel à réparer. metin2_map_sungzi_flame_hill_01: Non fonctionnel à réparer. metin2_map_sungzi_flame_hill_02: Non fonctionnel à réparer. metin2_map_sungzi_flame_hill_03: Non fonctionnel à réparer. metin2_map_sungzi_flame_pass01; Non fonctionnel à réparer. metin2_map_sungzi_flame_pass02; Non fonctionnel à réparer. metin2_map_sungzi_flame_pass03; Non fonctionnel à réparer. metin2_map_sungzi_milgyo: Non fonctionnel à réparer. metin2_map_sungzi_milgyo_pass_01: Non fonctionnel à réparer. metin2_map_sungzi_milgyo_pass_02; Non fonctionnel à réparer. metin2_map_sungzi_milgyo_pass_03: Non fonctionnel à réparer. metin2_map_sungzi_snow: Non fonctionnel à réparer. metin2_map_sungzi_snow_pass01: Non fonctionnel à réparer. metin2_map_sungzi_snow_pass02: Non fonctionnel à réparer. metin2_map_sungzi_snow_pass03: Non fonctionnel à réparer. metin2_map_t1: Map autre. metin2_map_t2: Map autre. metin2_map_t3: Map War (guild) metin2_map_t4: Map Capture de drapeau (guild) metin2_map_trent: Bois Enchantée. metin2_map_trent_a: Non fonctionnel à réparer. metin2_map_trent02: Bois Rouge. metin2_map_trent02_a: Non fonctionnel à réparer. metin2_map_wedding_01: Map Mariage. metin2_map_WL_01: Map des Maudit a cotes de l'entrée cave. Sa aidera plus d'une personne je suppose et donnerai les réparation ici même par la suite. Cordialement bd59140 (NOOB). Sa ma pris du temps mes je vous aimes alors disons que sa compense .
  21. Bonjour, Suite à la vérification de certains tutoriels j'ai pu voir que les membres notamment Sparks avait émis des idées quant à des tutoriels qui pouvaient être faits afin d'accompagner les siens. Je vous fait un petit listing, si certains sont volontaires vous pouvez les effectuer et nous vous remercions de votre investissement. Configurer son monstre (Savoir le Configurer de A à Z en expliquant à quoi correspond chaque colonne dans le mob_proto) Tutoriel sur le group,txt Tutoriel sur le group_group,txt Comprendre le regen e avec le paramètre Z Le détail des évènements independence_day et japan_regen sur le tutoriel de Galet Changer les drops de mobs & la probabilité (2013+) J'ai observé aussi que deux tutoriels pouvaient être complétés : Changer les items ATTR : Tutoriel Level MAX à config : Config modifier le lvl max Mei,
  22. Bonjour à tous, après m'être pris la tête un bon nombre d'heure sur le problème de l’écriture qui reste même après un tp (je parle bien entendu de la fameuse quête de bienvenue (give_basic_weapon.quest, il y a eu pas mal de solution sur ce forum mais aucune qui marche a 100%. Aujourd'hui je vous propose un code qui devrait fonctionner pour tout le monde et toute les quêtes rencontrant ce soucis. Pour cela, il vous faut donc depack le root de votre client, puis ouvrir le fichier uiQuest.py. Ensuite trouver la fonction : def MakeQuestion(self, n): et la modifier comme suit : def MakeQuestion(self, n): global entire_questbutton_number global entire_questpage_number global cur_questpage_number entire_questpage_number = ((n-2)/7)+1 entire_questbutton_number = n if not self.board: return self.btnAnswer = [self.MakeEachButton(i) for i in xrange (n)] import localeInfo self.prevbutton = self.MakeNextPrevPageButton() self.prevbutton.SetPosition(self.sx+self.board.GetWidth()/2-164, self.board.GetHeight()/2-16) self.prevbutton.SetText(localeInfo.UI_PREVPAGE) #self.prevbutton.SetEvent(self.PrevQuestPageEvent, 1, n) # buggy self.prevbutton.SAFE_SetEvent(self.PrevQuestPageEvent, 1, n) # unbuggy self.nextbutton = self.MakeNextPrevPageButton() self.nextbutton.SetPosition(self.sx+self.board.GetWidth()/2+112, self.board.GetHeight()/2-16) self.nextbutton.SetText(localeInfo.UI_NEXTPAGE) #self.nextbutton.SetEvent(self.NextQuestPageEvent, 1, n) # buggy self.nextbutton.SAFE_SetEvent(self.NextQuestPageEvent, 1, n) # unbuggy if cur_questpage_number != 1: cur_questpage_number = 1 N'oublier pas les tabulation bien entendu ! Voila, vous avez à présent corriger ce bug.
  23. Bonjour, Aujourd'hui, nous allons apprendre à installer un serveur Minecraft sous le système d'exploitation GNU / Linux : Debian Stretch dans sa version 9... Dans se tutoriel, je considère que vous êtes à l'aise avec l'utilisation d'une console ssh ( putty ) et sur l'utilisation d'un serveur Debian en général. 1 - Créer un utilisateur sur Debian Nous allons créer un utilisateur que l'on va nommer minecraft puis définir son mot de passe. Son répertoire d'accès sera /home/minecraft. Exécutez chaque ligne l'une après l'autre dans votre console ssh. useradd -d /home/minecraft -m -s /bin/bash minecraft passwd minecraft 2 - Préparation du système Minecraft est développé en JAVA, autant la partie client que la partie serveur, afin de faire fonctionner un serveur Minecraft, nous devons installer JAVA sur notre Debian ! La version 8 est vivement recommandée ! Exécutez chaque ligne l'une après l'autre dans votre console ssh. apt-get update && apt-get upgrade apt-get install openjdk-8-jdk Nous devons également automatiser le lancement du serveur Minecraft au démarrage de Debian. Nous utilisons le package screen qui nous permet d'émuler une console interne sur Debian. apt-get install screen Créons un script de démarrage et ajoutez-y : Explications : Nous indiquons à Debian de lancer le fichier : server.jar se situant dans /home/minecraft et de lui attribuer 1024Mo minimum et jusqu'à 4096Mo de mémoire vive pour un fonctionnement optimal de votre serveur Minecraft. nano /etc/init.d/minecraft #!/bin/bash # /etc/init.d/minecraft ### BEGIN INIT INFO # Provides: minecraft # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # Should-Start: $network # Should-Stop: $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Minecraft Server # Description: Minecraft server ### END INIT INFO cd /home/minecraft su -c "screen -mdS minecraft java -Xmx4096M -Xms1024M -jar server.jar nogui" minecraft Nous allons rendre exécutable le fichier précédemment créer, puis définir son propriétaire : minecraft. Exécutez chaque ligne l'une après l'autre dans votre console ssh. chmod 755 /etc/init.d/minecraft chmod +x /etc/init.d/minecraft update-rc.d minecraft defaults chown minecraft:minecraft /etc/init.d/minecraft 3 - Installer son serveur Minecraft Si vous souhaitez utiliser Minecraft Vanilla, vous devez télécharger l'archive sur le site officiel de Minecraft sauf si vous possédez votre archive serveur avec votre propre configuration... [Contenu Masqué] Connectez-vous sur votre serveur en ftp ou sftp avec l'utilisateur minecraft et son mot de passe, à votre connexion vous êtes déjà dans le bon répertoire. Transférez votre serveur à la racine ( votre archive ou server.jar ) précédemment téléchargé. Assurez-vous que le nom du fichier serveur pour Minecraft soit bien : server.jar. C'est à cet endroit que vous pourrez gérez votre serveur, ses maps, plugins et ses fichiers de configuration. 4 - Lancer son serveur Minecraft Pour démarrer votre serveur Minecraft fraîchement installé, il vous suffit de vous connectez à votre utilisateur minecraft depuis votre console ssh et d'exécuter cette commande. Cas particulier : Si c'est votre premier serveur, vous devez éditer le fichier eula.txt après le premier lancement pour indiquer que vous acceptez les Conditions Générales d'Utilisation de Minecraft. En absence d'une autorisation, votre serveur s'arrêtera systématiquement. NB : Pour vous connectez à votre serveur minecraft vous avez juste à renseignez l'adresse IP de votre serveur sur votre client dans la rubrique Multi-Player, l'indication du port n'est pas nécessaire si vous utilisez celui par défaut. /etc/init.d/minecraft 5 - La console Minecraft Vous pouvez vous connecter à votre console Minecraft afin d’administrer votre serveur, sauvegarder, exécuter des commandes en tant qu'utilisateur serveur ! Connectez-vous à votre console ssh avec l'utilisateur minecraft et exécutez cette commande. screen -r minecraft 6 - Fin Félicitations ! Vous venez d'installer un serveur Minecraft ! Cordialement, ASIKOO...
  24. Salut ! Encore moi, je reviens pour la suite des tutoriels RaiderZ, je posterai désormais régulièrement des tutoriels pour les manipulations basiques et indispensables à la gestion d'un serveur privé. La dernière fois nous avons vu comment implanter un PNJ/Mob cependant, pour ceux qui ont implanté un PNJ, il sert seulement de décoration pour le moment. Vous l'aurez compris aujourd'hui nous allons lui ajouté un dialogue, nous allons utilisé 3 fichiers XML pour ce tutoriel, 2 dans system et 1 dans lang/En_Us, c'est parti ! On va commencé par ouvrir system/lang/En_US/name_dialog.xml. Voici la ligne que vous devrez ajouter et modifier : <STR key="DIALOG_SAY_TEXT_TUTOFUNKY_01" string="{ani=talk1}Salut, voici le dialogue du tutoriel pour funky Emu, merci de l'avoir suivi et bonne continuation a vous !" /> DIALOG_SAY_TEXT : C'est le type de texte, vous avez 2 type, du texte affiché dans la fenêtre de dialogue ou du texte affiché dans un bouton, DIALOG_SAY_TEXT pour du texte dans la fenêtre et DIALOG_SELECT_TEXT pour du texte dans un bouton. TUTOFUNKY_01 : C'est l'ID du dialogue, prenez un ID non utilisé. ani=talk1 : C'est l'animation qui va être lancée quand vous allez parler à votre PNJ (Merci Kijaru ), {ani=talk1} : par défaut si vous désirez une autre animation libre à vous de fouillez toutes les animations existantes dans ce même fichier. Blablablablablablablablablablablablabla : Vous l'aurez compris c'est le texte que vous souhaitez ajouter au dialogue. Ensuite nous allons refaire une ligne identique mais cette fois ci pour le bouton qui va annoncé la fin du dialogue : <STR key="DIALOG_SELECT_TEXT_TUTOFUNKY_01" string="[Fin du Tutoriel]" /> Inutile de vous décrire cette ligne, vous aurez certainement compris ce que vous devez modifier. Nous en avons fini avec ce fichier vous pouvez enregistrer et fermer. Ouvrez Maintenant system/dialog.xml. Nous allons crée la structure du dialogue en elle même, ajoutez une ligne : [TAB]<DIALOG id="1091114" text="DialogueFunkyEmu"> [TAB][TAB]<SAY text="DIALOG_SAY_TEXT_TUTOFUNKY_01"> [TAB][TAB][TAB]<SELECT text="DIALOG_SELECT_TEXT_TUTOFUNKY_01" exit="1" /> [TAB][TAB]</SAY> [TAB]</DIALOG> Première Ligne on déclare un dialogue 1091114 : ID du dialogue et DialogueFunkyEmu : le nom du dialogue (vous pouvez mettre n'importe quoi cela n'a aucune importance). Deuxième ligne on déclare du Texte avec SAY text On met ensuite l'ID du texte que nous avons crée tout à l'heure pour ma part c'est DIALOG_SAY_TEXT_TUTOFUNKY_01. Troisième ligne on déclare un Bouton avec SELECT text et on lui donne l'ID du texte de bouton que nous avons crée tout à l'heure pour ma part c'est DIALOG_SELECT_TEXT_TUTOFUNKY_01. Quatrième ligne on ferme la déclaration de Texte avec </SAY>. Dernière ligne on ferme la déclaration de dialogue avec </DIALOG>. Nous en avons fini avec ce fichier et votre dialogue et maintenant prêt a être utilisé, passons a la dernière étape. Le dialogue étant prêt, nous allons l'ajouter a notre PNJ, ouvrez system/npc.xml. Ici Vous avez seulement a mettre le paramètre dialog dans la colonne IType1 et de mettre l'ID du dialogue que vous avez choisi dans dialog.xml pour ma part c'était 1091114. Une fois fait votre dialogue est totalement implanté et vous pouvez désormais aller le voir In-Game. Petite précision npc.xml et dialog.xml doivent être édités côté serveur ET côté client tandis que name_dialog.xml ne peut être modifier que côté Client. Résultat In-Game : Merci a vous d'avoir suivi le tutoriel et j’espère qu'ils vous sera utile.
  25. Salut! Après avoir vu encore et encore le même problème, j'ai décidé de poster un mini tutoriel pour corriger vos erreurs Navicat si jamais vous n'avez pas le bon mot de passe, ou si malgré tout vous avez le bon mot de passe mais que vous n'avez quand même pas accès à la base de données. Je fais un bref copié/collé de mon message, mais c'est pour permettre aux personnes qui cherchent la solution dans les tutoriels plutôt que l'A/Q/S puissent y trouver leur bonheur facilement. Question de référencement. Si vous êtes sûrs que votre mot de passe est correct (car vous l'avez vous-même créé par exemple) mais que vous obtenez cette erreur: C'est que le blocage ne provient pas du mot de passe. Un accès refusé peut se manifester également lorsque l'adresse IP qui souhaite se connecter au serveur n'est pas explicitement autorisée dans la liste des utilisateurs. Par exemple, un utilisateur défini comme: 'root'@'%' pourra se connecter via n'importe quelle adresse IP (le '%' étant un masque d'adresse IP signifiant "toutes directions"). Essayez de créer un utilisateur via le compte mysql local: [email protected]# mysql -u mt2 -p [email protected]# [email protected]# mysql -u mt2 -p epv4minq S'il vous demande un mot de passe, essayez les deux précédents, ou alors n'entrez aucun mot de passe. Une fois connecté en local, vous avez deux options: 1) Créer un utilisateur qui acceptera toute adresse IP entrante ( avec le '%' ) 2) Créer un utilisateur pour vous seul (avec une IP entrante prédéfinie) /!\ Attention /!\ en revanche, si votre IP Hamachi change, vous perdrez l'accès car votre nouvelle IP ne sera pas acceptée avec l'option 2. Pour ce faire, une fois connecté au serveur mysql: mysql> CREATE USER 'ID'@'VOTRE_IP_HAMACHI' IDENTIFIED BY 'VOTRE_MOT_DE_PASSE'; mysql> GRANT ALL PRIVILEGES ON *.* TO 'ID'@'VOTRE_IP_HAMACHI' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES; #Juste au cas où, mais ce n'est pas obligatoire. Bien entendu, vous remplacerez "ID" par l'identifiant que vous désirez utiliser pour vous connecter à MySQL, "VOTRE_MOT_DE_PASSE" par votre mot de passe (évidemment) ainsi que "VOTRE_IP_HAMACHI" par votre IP Hamachi, et non celle finissant par '.100' !. Si vous souhaitez l'option 1, pour pouvoir vous connecter depuis n'importe quelle IP, mettez juste un % à la place de IP_HAMACHI, comme ceci par exemple: CREATE USER 'Kameyu'@'%' IDENTIFIED BY '123456789011223344'; Si ça ne marche toujours pas, c'est que vous avez mal configuré vos paramètres réseau. La bise!
×

Information importante

By using this site, you agree to our Conditions d’utilisation.