-
Compteur de contenus
3211 -
Inscription
-
Dernière visite
jamais -
Jours gagnés
9
Type de contenu
Profils
Forums
Boutique
Calendrier
Tout ce qui a été posté par Metin2 Dev
-
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,
-
Compiler & Utiliser un DumpProto Metin2
Metin2 Dev a posté un sujet dans Programmation & Développement / Codes
Niveau requis : Intermédiaire Temps estimé : Entre 15 & 30 minutes Bonjour à tous, Réécriture by Xayah 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). Information. Il faut savoir qu'un dumpproto est 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 . Pré-requis: Visual Studio 2013 Des sources dump I. Compiler son DumpProto II. Utiliser son DumpProto Pour continuer: Si vous souhaitez en savoir plus sur les flags & compagnie je vous renvoie vers ce tutoriel : Configurer ses items Si vous avez un problème n'hésitez pas à poster un sujet dans la section AQS ! -
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.
-
Centre de Téléchargement Télécharger ( Interne ) Bonjour à tous, Vous souhaitez ajouter un peu de beauté à vos monstres et à vos pnj ? Alors suivez ce tutoriel qui vous expliquera comment mettre en place de la brillance dessus ! Pré-requis: Les sources clients Photoshop avec le plugin DDS Votre client Notepadd++ I. Activer la brillance dans les sources II. Modifier la partie MSM de votre monstre/PNJ/Metin III. Ajout du Canal Alpha sur Photoshop Pour continuer : Pour obtenir Photoshop avec le plugin DDS je vous invite à lire ce tutoriel : Installer le plugin DDS sur Photoshop Si vous voulez agrandir le nombre de textures dans une déclaration MSM (pratique uniquement pour ceux qui ont plus de 2 textures par monstres) : Augmenter le nombre de sourceskin dans les MSM Si vous ne savez pas comment compiler votre client je vous invite à lire ce tutoriel : Compiler le client binary Si vous avez un problème n'hésitez pas à le poster dans l'AQS !
-
Niveau requis : Débutant Temps estimé : Entre 5 et 10 minutes Salut à tous ! Ce tutoriel va vous expliquer comment modifier certaines descriptions de votre serveur Metin2 (description des royaumes, des skills, etc ...) Pré-requis: Il vous faut un serveur Metin2 avec un client. Savoir depack / repack les fichiers de votre client. Voici un tutoriel explicatif Avoir un éditeur de fichier pratique. Je vous conseille vivement Sublime Text I. Modifier la description des royaumes II. Modifier la description des races III. Modifier la description des objets IV. Modifier la description des compétences 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 !
- 1 réponse
-
- 10
-
-
-
-
[Question] Bouton inventaire
Metin2 Dev a répondu à un(e) question de Link dans Questions & Réponses
Parfait, Essaie ceci : import uiScriptLocale import item EQUIPMENT_START_INDEX = 180 window = { "name" : "InventoryWindow", ## 600 - (width + ????? ?? ??? 24 px) "x" : SCREEN_WIDTH - 176, "y" : SCREEN_HEIGHT - 37 - 565, "style" : ("movable", "float",), "width" : 176, "height" : 585, "children" : ( ## Inventory, Equipment Slots { "name" : "board", "type" : "board", "style" : ("attach",), "x" : 0, "y" : 0, "width" : 176, "height" : 585, "children" : ( ## Title { "name" : "TitleBar", "type" : "titlebar", "style" : ("attach",), "x" : 8, "y" : 7, "width" : 161, "color" : "yellow", "children" : ( { "name":"TitleName", "type":"text", "x":77, "y":3, "text":uiScriptLocale.INVENTORY_TITLE, "text_horizontal_align":"center" }, ), }, ## Equipment Slot { "name" : "Equipment_Base", "type" : "image", "x" : 10, "y" : 33, "image" : "d:/ymir work/ui/equipment_bg_without_ring.tga", "children" : ( { "name" : "EquipmentSlot", "type" : "slot", "x" : 3, "y" : 3, "width" : 150, "height" : 182, "slot" : ( {"index":EQUIPMENT_START_INDEX+0, "x":39, "y":37, "width":32, "height":64}, {"index":EQUIPMENT_START_INDEX+1, "x":39, "y":2, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+2, "x":39, "y":145, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+3, "x":75, "y":67, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+4, "x":3, "y":3, "width":32, "height":96}, {"index":EQUIPMENT_START_INDEX+5, "x":114, "y":67, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+6, "x":114, "y":35, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+7, "x":2, "y":145, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+8, "x":75, "y":145, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+9, "x":114, "y":2, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+10, "x":75, "y":35, "width":32, "height":32}, ## ? ??1 ##{"index":item.EQUIPMENT_RING1, "x":2, "y":106, "width":32, "height":32}, ## ? ??2 ##{"index":item.EQUIPMENT_RING2, "x":75, "y":106, "width":32, "height":32}, ## ? ?? {"index":item.EQUIPMENT_BELT, "x":39, "y":106, "width":32, "height":32}, ), }, ## Dragon Soul Button { "name" : "DSSButton", "type" : "button", "x" : 114, "y" : 107, "tooltip_text" : uiScriptLocale.TASKBAR_DRAGON_SOUL, "default_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_01.tga", "over_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_02.tga", "down_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_03.tga", }, ## MallButton { "name" : "MallButton", "type" : "button", "x" : 118, "y" : 148, "tooltip_text" : uiScriptLocale.MALL_TITLE, "default_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_01.tga", "over_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_02.tga", "down_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_03.tga", }, ## CostumeButton { "name" : "CostumeButton", "type" : "button", "x" : 78, "y" : 5, "tooltip_text" : uiScriptLocale.COSTUME_TITLE, "default_image" : "d:/ymir work/ui/game/taskbar/costume_Button_01.tga", "over_image" : "d:/ymir work/ui/game/taskbar/costume_Button_02.tga", "down_image" : "d:/ymir work/ui/game/taskbar/costume_Button_03.tga", }, { "name" : "Equipment_Tab_01", "type" : "radio_button", "x" : 86, "y" : 161, "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub", "children" : ( { "name" : "Equipment_Tab_01_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "I", }, ), }, { "name" : "Equipment_Tab_02", "type" : "radio_button", "x" : 86 + 32, "y" : 161, "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub", "children" : ( { "name" : "Equipment_Tab_02_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "II", }, ), }, ), }, { "name" : "Inventory_Tab_01", "type" : "radio_button", "x" : 10, "y" : 33 + 191, "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_03.sub", "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_1, "children" : ( { "name" : "Inventory_Tab_01_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "I", }, ), }, { "name" : "Inventory_Tab_02", "type" : "radio_button", #"x" : 10 + 78, "x" : 10 + 39, "y" : 33 + 191, "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_03.sub", "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_2, "children" : ( { "name" : "Inventory_Tab_02_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "II", }, ), }, { "name" : "Inventory_Tab_03", "type" : "radio_button", "x" : 10 + 39 + 39, "y" : 33 + 191, "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_03.sub", "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_3, "children" : ( { "name" : "Inventory_Tab_03_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "III", }, ), }, { "name" : "Inventory_Tab_04", "type" : "radio_button", "x" : 10 + 39 + 39 + 39, "y" : 33 + 191, "default_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_large_half_03.sub", "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_4, "children" : ( { "name" : "Inventory_Tab_04_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "IV", }, ), }, ## Item Slot { "name" : "ItemSlot", "type" : "grid_table", "x" : 8, "y" : 264, "start_index" : 0, "x_count" : 5, "y_count" : 9, "x_step" : 32, "y_step" : 32, "image" : "d:/ymir work/ui/public/Slot_Base.sub" }, ## Print { "name":"Money_Slot", "type":"button", "x":8, "y":28, "horizontal_align":"center", "vertical_align":"bottom", "default_image" : "d:/ymir work/ui/public/parameter_slot_05.sub", "over_image" : "d:/ymir work/ui/public/parameter_slot_05.sub", "down_image" : "d:/ymir work/ui/public/parameter_slot_05.sub", "children" : ( { "name":"Money_Icon", "type":"image", "x":-18, "y":2, "image":"d:/ymir work/ui/game/windows/money_icon.sub", }, { "name" : "Money", "type" : "text", "x" : 3, "y" : 3, "horizontal_align" : "right", "text_horizontal_align" : "right", "text" : "123456789", }, ), }, ), }, ), } -
[Question] Bouton inventaire
Metin2 Dev a répondu à un(e) question de Link dans Questions & Réponses
Tu peut nous mettre ton inventorywindows.py ici? Sinon nous dire la ligne : 213? -
Je cherche d'autres idées de tutoriels, si vous en avez je suis intéressée.
-
Ce n'est pas réellement une erreur dans le sens où je voulais donner une écriture générale à la fin. method devait prendre la forme du nom de la fonction Python comme indiqué plus haut. J'ajoute la précision, merci de ta contribution. Désolée de m'être mal exprimée.
-
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.
-
Centre de Téléchargement Télécharger ( Interne ) Bonjour, Set Royal Set Magma Set Lunaire Set Dorée Téléchargement : ICI Cordialement,
- 2 réponses
-
- 35
-
-
-
-
Tu as bien dump item_name et item_proto? ensuite mis le nouveau item_proto dans locale ainsi repacker celui-ci ?
-
Bienvenue sur Funky !
-
Bienvenue à toi ! Tu es graphiste ? Tu as des œuvres à nous faire voir ? (pas obligé hein)
-
Justement pour le moment nous avons mis cet index comme ça car nous n'avions pas d'autres moyens de mettre les sections internationales en avant (pour les étrangers) On a essayé le système de tags, échec, une section internationale pour tout mettre dedans avec des redirections ? Echec. Pour le moment seule cette solution fonctionne car nous n'avons pas de DEVS QUI GÈRE IPS sous la main. Donc nous faisons ce que nous pouvons. Donc certes on fait comme EPVP mais c'est la seule solution pour le moment et cela restera ainsi
-
Contre & Non. ?
-
Pas de source = Pas de lanceur.exe Pas de lanceur = Pas d'ouverture client ?
-
Salut, J'ai fait de petit recherche et je suis tomber sur ceci chez metin2dev Je n'est pas tester le code 2. char.h 2. char_affect.cpp Après : Avant :
-
[Jeux]J'aime, j'adopte, je tue !
Metin2 Dev a répondu à un(e) sujet de AkliSelim dans Vie des Royaumes
J'aime séquestrer, j'adopte violer et je tue tuer vivre sans internet, vivre sans téléphone, vivre sans pc -
VDI FILES 2016 FE BY SAW
Metin2 Dev a répondu à un(e) question de zyadfares dans Questions & Réponses
Il faut que tu compiles ton game désormais cd /usr/src/mainline/Srcs/Server/game/src gmake clean && gmake -j20 Et il faut attendre le Linking ... Une fois ceci effectué retourne dans le dossier src/mainline/Srcs/Server/game et prends ton game, place le dans ton fichier metin2/share -
Plop, Bienvenue à toi (au futur) et pour répondre à ton message de fin, nous avons voulu être plus stricte quant à la sélection des nouveaux membres (cause trop de leechers) donc ça sert un peu de passoire
-
[Jeux]J'aime, j'adopte, je tue !
Metin2 Dev a répondu à un(e) sujet de AkliSelim dans Vie des Royaumes
J'aime faire des choses coquines avec un arbre J'adopte faire des choses coquines avec une mémé (mais je vois pas la différence entre une mémé et un mort vivant) Et je tue faire des choses coquines avec un mort-vivant Habiter chez Kameyu, Manger un œuf centenaire, Boire un litre de lait périmé -
VDI FILES 2016 FE BY SAW
Metin2 Dev a répondu à un(e) question de zyadfares dans Questions & Réponses
AH ! ? -
VDI FILES 2016 FE BY SAW
Metin2 Dev a répondu à un(e) question de zyadfares dans Questions & Réponses
Hi, Try to use the eggs for baby monkey or baby razador (New Pet System) and for the other you must to create a quest like the mount quest -
Tu as touché à tes CONFIG notamment dans auth ?
