Rory

Member
  • Content Count

    46
  • Joined

  • Last visited

  • Days Won

    3
  • Points

    1 [ Donate ]

Rory last won the day on January 21

Rory had the most liked content!

Community Reputation

26 Apprenti

About Rory

  • Rank
    Gabier
  • Birthday 09/11/1992

Etat Civil

  • Nationality
    Canadian
  • Sexe
    Femme

Profil

  • Discord
    ...
  • Couleur
      #FFFFFF
  • Nombre
    0

Recent Profile Visitors

371 profile views
  1. Est-ce que les fonctions sont bien présentes dans ton fichier cmd_gm/general/etc ? Vérifie également que ce sont bien ces commandes qui sont appelées par ton fichier python.
  2. Montre nous ton fichier ! On pourra t'aider à localiser l'erreur !
  3. Pour un travail optimal : que tu disposes de n'importe quelle version de FreeBSD, les meilleurs sources resteront les 2014.
  4. Montre nous ce que tu as ajouté dans le fichier cmd.cpp et où. Cela signifie que tu essayes d'utiliser une commande non déclarée !
  5. Non, non et non. Quelqu'un qui a nginx ne pourra pas en profiter comme quelqu'un disposant d'Apache car ce site fonctionne avec un htacces et a donc été fait pour Apache.
  6. Je cherche d'autres idées de tutoriels, si vous en avez je suis intéressée.
  7. 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.
  8. 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.
  9. Je suis toujours bloquée sur ce problème, même en mode debug, en live debuging, aucune erreur visible, le code ne bloque sur rien, les variables semblent toutes être initialisées, je ne sais pas vraiment comment chercher l'erreur du côté serveur... Quelqu'un pourrait-il me donner une piste ?
  10. Aucune erreur, Je vais vérifier ça, il me semble l'avoir modifié... Mais une seule fois c'est vrai, je vais voir ! J'éditerais le message pour te tenir au courant... Merci ! Edit : Que je change ce nombre du côté serveur ne change rien, aucune erreur ni rien... Il y a surement une modification à faire du côté client également, mais impossible pour moi de la localiser...
  11. Bonjour. Je vous contacte car j'ai un petit soucis, j'ai essayé d'installer le système d'étoles partagé par Mei Mais j'ai un petit problème, tout marche à l'exception que les étoles soient invisibles... j'ai bien l'effet lorsque je les équipes... Je voudrais savoir si vous aviez une idée d'où peut venir ce problème ? Merci d'avance ! En postant ma demande d'aide, j'affirme avoir lu et accepté le Règlement de Funky-Emulation.
  12. D'après les commentaires précédents c'est propre... Je me laisse tentée, merci.