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

Metin2 Dev

Robot
  • Compteur de contenus

    3211
  • Inscription

  • Dernière visite

    jamais
  • Jours gagnés

    9

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

  1. Metin2 Dev

    Detruire item

    je te laisse l'ajouter alors
  2. Metin2 Dev

    Detruire item

    C'est pas cette fonction là que je te demande... def __DropItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount): # PRIVATESHOP_DISABLE_ITEM_DROP - 개인상점 열고 있는 동안 아이템 버림 방지 if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) return # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP if player.SLOT_TYPE_INVENTORY == attachedType and player.IsEquipmentSlot(attachedItemSlotPos): self.stream.popupWindow.Close() self.stream.popupWindow.Open(localeInfo.DROP_ITEM_FAILURE_EQUIP_ITEM, 0, localeInfo.UI_OK) else: if player.SLOT_TYPE_INVENTORY == attachedType: dropItemIndex = player.GetItemIndex(attachedItemSlotPos) item.SelectItem(dropItemIndex) dropItemName = item.GetItemName() ## Question Text questionText = localeInfo.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount) ## Dialog itemDropQuestionDialog = uiCommon.QuestionDialog() itemDropQuestionDialog.SetText(questionText) itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg)) itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg)) itemDropQuestionDialog.Open() itemDropQuestionDialog.dropType = attachedType itemDropQuestionDialog.dropNumber = attachedItemSlotPos itemDropQuestionDialog.dropCount = attachedItemCount self.itemDropQuestionDialog = itemDropQuestionDialog constInfo.SET_ITEM_DROP_QUESTION_DIALOG_STATUS(1) elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType: dropItemIndex = player.GetItemIndex(player.DRAGON_SOUL_INVENTORY, attachedItemSlotPos) item.SelectItem(dropItemIndex) dropItemName = item.GetItemName() ## Question Text questionText = localeInfo.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount) ## Dialog itemDropQuestionDialog = uiCommon.QuestionDialog() itemDropQuestionDialog.SetText(questionText) itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg)) itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg)) itemDropQuestionDialog.Open() itemDropQuestionDialog.dropType = attachedType itemDropQuestionDialog.dropNumber = attachedItemSlotPos itemDropQuestionDialog.dropCount = attachedItemCount self.itemDropQuestionDialog = itemDropQuestionDialog constInfo.SET_ITEM_DROP_QUESTION_DIALOG_STATUS(1)
  3. Metin2 Dev

    Detruire item

    Hum, tu peux me monter ta fonction __DropItem (game.py) ? Enfin si tu l'as pour le coup....
  4. Metin2 Dev

    Detruire item

    Salut ! File "game.py", line 1536, in __PutItem Montre nous ce bout de code, visiblement tu essayes d'accéder à quelque chose qui n'existe pas.
  5. C'est normal que tu ne vois pas ton mot de passe, il ne s'affiche pas quand le tape. Tape le mot de passe désiré (fais attention que ton clavier ne soit pas en qwerty), et appuie sur la toucher entrée.
  6. Tu peux nous screen ta configuration ? Normalement tu devrais avoir une IP locale, si c'est pas le cas, il faut qu'on revoie les paramètres réseaux côté FreeBSD...
  7. Si tu veux faire un local (je ne connais pas les configurations pour Hamachi) tu as bien entré ta carte réseau avec l'accès par pont etc dans les paramètres ?
  8. Salut ! Tu as bien configuré ta carte réseaux ? Généralement, ça arrive quand les DNS ne marchent pas, je suppose donc que ta carte graphique à un problème (si elle est configurée). Si elle est bien configurée, essaye de ping quelque chose pour voir ?
  9. Heeeeeeu.... Comment te dire ? Tu dois obligatoirement passer par SQL. Il faut que tu mettes à jour ta base de données. Cependant aucun cache il me semble n'est appliqué à la colonne "cash". Tu n'as pas besoin de passer par le c++, mais tu peux. Pour cela, il faudrait que tu fasses une fonction qui va exécuter la queries : "UPDATE account.account SET cash=cash+50 WHERE id = 1;" par exemple. Tu peux cependant le faire en lua en activant la fonction qui permet de le faire. Tu peux par exemple créer une fonction comme celle-ci : bool AddCash(LPCHARACTER ch, const int * c_cash) { DBManager::instance().DirectQuery("UPDATE account.account SET cash = cash + %d WHERE id = %d", XXXX, c_cash); return true; } // header : bool AddCash(PCHARACTER ch, const int* c_cash); Remplace le XXX par la récupération de l'id, je l'ai plus de tête... Désolé des imperfections de l'écriture, j'écris actuellement avec ma tablette, c'est pas des plus pratique... En espérant t'avoir aider.
  10. Salut. Essaye d'ajouter une valeur par défaut à la colonne "money2" en fonction de son type, et dis nous si c'était ça le problème. Je n'ai même pas cette colonne... Elle doit correspondre à un système particulier. Pense à prendre au maximum les bases de données correspondantes aux files que tu utilises.
  11. Lis le tutoriel entièrement. Ceci n'est qu'un exemple de comment exploiter la fonction importée... A d'ajouter les deux trois conditions et la fonction nécessaire à l'envoie de l'item dans l'entrepôt. Ce n'est pas spécialement compliqué. Cherche par toi même.
  12. root et metin2 sont deux utilisateurs différents. L'utilisateur metin2 n'est normalement accessible que par la machine elle-même. Fais attention aux permissions. Tu peux gérer les utilisateurs et les mots de passes dans la base de données mysql. Effectivement access denied... j'aurai dû m'en douter... Drei.
  13. ... Son problème vient de Navicat qui ne prend pas en compte les modifications... De plus utiliser directement la fonction restart est plus judicieux.
  14. Essaye peut être de lancer navicat en mode administrateur pour voir si c'est pas un problème de droit sur l'édition des fichiers. Il me semble que si tu retires ta carte réseau de la configuration, tu redémarres ta VM, et que tu la remets, cela change... Je ne connais pas les vraies méthodes désolé. Sinon chose qui marche à coup sûr : tu supprimes la VM de ta liste (sans supprimer le .vdi ! ! !) et tu la recrées.
  15. Effectivement, c'est louche. Si tu utilises la fonction pur tester la connexion directement dans le menu de paramétrage (si ce n'est pas déjà ce que tu fais), ça ne t'entre toujours pas la bonne ip ?
  16. Pourrais-tu s'il te plaît, nous screen la page de ta configuration Navicat, et de ce que tu obtiens quand tu tapes ifconfig dans la console ?
  17. Niveau requis : Intermédiaire Temps estimé : Entre 5 et 10 minutes Le nécessaire : Pour réaliser ce tutoriel et l'expérimenter vous même, vous allez avoir besoin de sources serveur (game) compilables et utilisables. Pour la compréhension du tutoriel, vous aurez juste besoin de votre cerveau, et pour ceux qui n'en ont pas sous la main, essayez quand même ! Nous allons ensemble créer la fonction metin (utilisable grâce à un joueur qui enverrait dans le chat "/metin") qui aura pour rôle de nous renvoyer un message contenant notre pseudo, par exemple. I. Déclarer notre fonction : Pour commencer, nous allons devoir déclarer notre fonction, c'est à dire le protocole qui sera exécuté lorsque notre commande sera envoyée par le joueur. Pour cela, rendez-vous dans le fichier cmd.cpp, vous y trouverez dès le début du fichier quelques lignes comme celle-ci : ACMD(do_[...]); Nous allons suivre cette syntaxe, et déclarer notre fonction pour la commande, tapons : ACMD(do_metin); Notes : N'oubliez pas le point virgule pour marquer la fin de notre déclaration; Ne vous souciez pas des arguments que prendra notre fonction. II. Définir notre fonction : Maintenant que notre fonction est déclarée, il nous faut maintenant la définir. Pour cela, le fichier n'est pas fixe, selon la commande, vous utiliserez un fichier différent parmi : cmd_general.cpp; cmd_emotions.cpp; etc... Ici, notre commande sera accessible à tous et n'est pas relative à certaines conditions, nous allons donc la placer dans le fichier cmd_general.cpp. Nous allons comme toute définition reprendre la déclaration et l'étendre : ACMD(do_metin) { // Content } Maintenant, pour savoir quoi mettre, nous allons revenir à notre objectif principal : envoyer un message. Pour cela, nous allons utiliser la fonction ChatPacket. Elle prend deux paramètres, la type de message, puis le message en lui même. Pour cela une seule ligne suffit : ch->ChatPacket(); (ch, abréviation de character, sert à désigner le joueur qui envoie la commande) Nous utiliserons le canal habituel pour les retour de commande : CHAT_TYPE_INFO. Un problème persiste encore : Comment récupérer le pseudo du joueur ? Vous vous souvenez de notre ch ? Il va nous servir, grâce à la fonction getName(), qui n'attend pas d'argument. Nous utiliserons ensuite le format habituel pour la concaténation en C++, et notre ChatPacket(), pour obtenir cette fonction : ACMD(do_metin) { ch->ChatPacket(CHAT_TYPE_INFO, "Votre nom est %s", ch->Getname()); } Notez que vous pouvez très bien utiliser la fonction LC_TEXT(), qui vous permettra d'obtenir le texte correspondant dans votre locale_string.txt ! III. Déclarer notre commande : Il reste une toute dernière étape : déclarer notre fonction. Il suffit d'ajouter une ligne à notre fichier cmd.cpp : Visitez un peu le fichier, et vous trouverez une liste avec tout un tas de ligne comme celle que nous allons ajouter : { "metin", do_metin, 0, POS_DEAD, GM_PLAYER }, Notez que : La première information est le nom de la commande en jeu; La deuxième est la fonction à laquelle la commande est liée; La dernière est le grade minimum pour avoir accès à cette fonction. Vous pouvez maintenant compiler vos sources et admirer votre magnifique commande. Pour continuer: Pour compléter ce tutoriel et ne pas laisser cette ligne vide, je vous propose de changer notre fonction pour que je vous apprendre à utiliser des commandes à arguments. Nous allons par exemple demande à l'utilisateur de renseigner son nom, et nous n'utiliserons plus le ch->GetName(). Les changements s'effectueront exclusivement dans la définition de la fonction. Créons pour commencer une variable pour stocker l'argument : char arg1[256]; Nous allons devoir stocker notre argument de dans, nous utiliserons la fonction : one_argument() : one_argument(argument, arg1, sizeof(arg1)); Cependant, cela ne suffit pas, cette ligne ne vérifie pas l'existence de l'argument. Nous allons donc ajouter après une condition vérifiant son intégrité ou non : if (!*arg1) { ch->ChatPacket(CHAT_TYPE_INFO, "Usage: /metin <name>"); return; } Si l'argument n'existe pas, nous renvoyons directement à l'utilisateur l'usage de la commande. Nous allons maintenant pouvoir retaper notre fonction pour envoyer un message, mais ne plus utiliser notre ch->GetName(), mais notre arg1. ACMD(do_metin) { char arg1[256]; one_argument(argument, arg1, sizeof(arg1)); if (!*arg1) { ch->ChatPacket(CHAT_TYPE_INFO, "Usage: /metin <name>"); return; } ch->ChatPacket(CHAT_TYPE_INFO, "Votre nom est %s", arg1); } Vous pouvez de nouveau compiler vos sources et tester. Notez que la fonction change en fonction du nombre d'argument, par exemple : two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2)); Merci de m'avoir lu, en espérant que ce modeste tutoriel puisse être utile à quelques personnes. Drei.
  18. 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.
  19. Montre nous ton fichier ! On pourra t'aider à localiser l'erreur !
  20. Pour un travail optimal : que tu disposes de n'importe quelle version de FreeBSD, les meilleurs sources resteront les 2014.
  21. 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 !
  22. Metin2 Dev

    Armures

    Centre de Téléchargement Télécharger ( Interne ) Bonjour à tous, Voici un petit partage de textures que j'ai faite lors de mes débuts dans le texturing... Téléchargement : ICI M12 Source : Jinx
  23. Centre de Téléchargement Télécharger ( Interne ) Bonjour à tous, Voici un petit partage de textures d'armures de Ninjas et de guerriers... Téléchargement : ICI M13 Source : Mei
  24. Centre de Téléchargement Télécharger ( Interne ) Bonjour à tous, Voici un partage composé uniquement d'armures 66 re-texturisées. Je vous propose un aperçu, à savoir que toutes les textures ne sont pas présentes sur les screens, c'est pour cela qu'une liste détaillée sera présente à la fin du partage afin de vous dire tout ce que vous trouverez. Ce partage vous donne donc la possibilité d'avoir 58 textures d'armures 66 différentes, les textures originales ainsi que les icônes originaux sont présents dans les fichiers au cas ou vous voudriez les remettre d'origine. La liste détaillée des textures unicolore : La liste détaillée des textures bicolore : Téléchargement : ICI Source : Mei Au plaisir,
  25. Centre de Téléchargement Télécharger ( Interne ) Bonjour, Je viens vous remettre en partage ces textures que j'avais faite déjà il y a un temps, elles ne sont pas parfaites mais bon je compte les refaire tantôt ! Téléchargement : ICI Source : Mei Cordialement,

Information importante

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