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

Kameyu

Développeur
  • Compteur de contenus

    1488
  • Inscription

  • Dernière visite

  • Jours gagnés

    14

Tout ce qui a été posté par Kameyu

  1. C'est aussi question d'adressage mémoire. Si je ne dis pas de bêtises, la taille de la séparation correspond sûrement à la taille max d'une valeur stockant les skills dans la BDD, et les zéros qui suivent doivent être remplis par un memset(). Enfin, ce serait la réponse la plus logique en tout cas.
  2. C'est pas le tuto qui n'est pas fonctionnel... Chez moi il marche.
  3. Bonjour/soir à toutes et à tous. Beaucoup se sont certainement demandés à quoi sert exactement la colonne `skill_level` et même plus encore: comment est-ce qu'elle fonctionne ? Je crée ce sujet pour vous l'expliquer. C'est parti ! Un BLOB ? ¿Ma qué? Commençons par la base: Un BLOB qu'est-ce que c'est ? Ça signifie tout bêtement Binary Large OBject, c'est un type de donnée très maniable qui permet de stocker des données en brut (hexadécimal, pour être précis), et ce, en permettant de changer de taille de manière totalement libre. Il existe 4 types de BLOBs: tinyblob blob mediumblob longblob Contrairement aux données de texte (varchar, text, etc) , les BLOBs sont lus en tant que données binaires, et non de Texte, bien que l'éditeur hexadécimal permette d'afficher le dump (on verra ça plus tard) ASCII de ces données. Ok magique, mais comment on voit ces données ? Vous avez deux solutions: Exporter la donnée sous forme de fichier binaire pour la visualiser avec un éditeur Hexadécimal comme HexEdit Lire la donnée directement depuis l'outil de Navicat (ou autre logiciel de gestion s'il le permet) Dans notre cas, on va utiliser Navicat, c'est plus rapide, et plus pratique que d'exporter les données à chaque fois. Surtout qu'en exportant la donnée, on ne pourra pas Copier-Coller les modifications. Alors comment se fait-ce ? (il a dit fesse lol) Dans votre table `player`.`player`, il vous suffit de cliquer sur votre BLOB, puis sur le menu contextuel (la flèche ▼) à côté du bouton "Mémo" comme suit: Puis sélectionner "Hex" comme sur l'image. Une fois fait, une petite fenêtre va apparaître avec tout un tas de zéros incompréhensibles (alors que vous êtes plein de skills...). Et forcément, vous l'aurez compris, le but du tutoriel c'est que vous sortiez d'ici en sachant expliquer comment ça marche ! Bon maintenant qu'on a notre beau panneau Hex et nos données affichées (enfin, avec plein de zéros, "données" hein...), on va pouvoir comprendre comment ça marche; et pour ça je vous ai facilité la tâche, je me suis mis tous les skills en P. J'ai bien dit TOUS les skills, même ceux qui ne sont pas de ma classe ! (je vous préviens, on pourra pas utiliser aura sur une shaman) Du coup, voici à quoi ça ressemble maintenant: Ooook mais j'ai toujours rien compris. Par contre y'a pas que des zéros là ! Bien vu l'aveugle (dit-il en se parlant à lui-même) ! Bon du coup, si vous ne comprenez rien à l'Hexadécimal, je ne vais pas pouvoir vous aider plus que ça, je ne peux pas vous faire un cours d'Hexa donc si vous ne savez pas compter en Hexa... Vous pouvez prendre la porte, sauf si vous estimez comprendre les choses assez vite, vous pourrez continuer le tutoriel. Bon, du coup c'est bien beau tout ça mais ça ne nous fait pas plus comprendre comment ça marche... Eh bien à moi de vous expliquer ça. Un octet correspond à deux zéros: 00. Car en Hexa, on travaille sur 4 bits (base 16, donc forcément). Avoir deux zéros, ça nous donne un octet car 4 bits collés à 4 bits nous donnent 8 bits (quel génie fais-je), et donc 8 bits équivalent à un octet. Ce qu'il faut savoir, c'est que les 6 premiers octets (6 x 2 zéros = 12 premiers zéros) ne sont pas utilisés. D'ailleurs je n'ai pour l'instant pas encore trouvé à quoi ils peuvent bien servir. Si quelqu'un sait, je le rajouterai dans le tutoriel. Voilà, enfin un peu de lourd, on s'faisait chier avec ta théorie là ! Du calme, du calme, j'y viens ! Maintenant qu'on sait tout ça, on tombe sur notre premier code hexadécimal: 0328 0000 Pourquoi j'ai rajouté les 4 zéros ? Car ils concernent le premier skill. Comme c'est un condensé de données, il faut pouvoir différencier les autres skills donc on les sépare avec 2 octets de données chacun. Et à votre avis, on voit combien de fois ce code hexadécimal en tout sur les premières lignes ? 6 fois, comme pour 6 skills. Assez dingue non ? Je trouve aussi, la nature est bien faite, vous ne trouvez pas ? Du coup, voilà pour la séparation des données: En rouge, les 4 octets de séparation: Maintenant qu'on sait comment les skills sont séparés, il faut savoir les différencier ! Eh bien là encore une fois c'est pas plus compliqué, ils sont inscrits dans un ordre précis que vous connaissez peut-être déjà grâce à la SkillTable.txt: Ils sont dans l'ordre ! Les 03 28 que vous voyez correspondent tous à un skill en P (je viendrai plus tard sur pourquoi 03 et 28). Du coup maintenant on sait où sont nos skills, et là on a 3 lignes de skills, mais à quoi correspondent-ils ? En fait, ils sont comme je le disais, dans l'ordre décimal croissant de votre SkillTable, mais aussi dans l'ordre des classes. On aura donc à chaque ligne les sorts d'une classe différente, dans l'ordre qui suit: Guerrier Corps-à-Corps Guerrier Mental Ninja Assassin Ninja Archer Sura Armes Magiques Sura Magie Noire Shaman Dragon Shaman Soin Là on connaît l'ordre, donc sur notre screenshot suivant, on voit les séparations en rouge, ainsi que la ligne du Guerrier Corps-à-Corps en vert: La deuxième ligne commence à partir de l'offset 0x060 et se termine à l'offset 0x07F, la troisième ligne commence à partir de l'offset 0x0BA et se termine à l'offset 0x0D9. /!\ ATTENTION ! Si vous n'avez que 5 skills en G Mental, l'offset ne se terminera pas à 0x07F mais 0x079 /!\ Vient ensuite la séparation des classes de skills. Elles sont toutes séparées par 58 octets ! Pourquoi ? Je vous avoue que j'en ai aucune idée. Je planche encore dessus, je précise que je fais ce tutoriel à partir d'aucune source, seulement des données hexadécimales ! Notre séparation de "classes de skills" ressemble donc à ça: Du coup bingo, on connaît l'ordre des classes, on sait par combien d'octets ils sont séparés, on peut maintenant passer à la suite ! Yes ! J'attends toujours que tu m'expliques pourquoi 03 28, c'est le nouveau numéro de la sécu ? Qu'est-ce qu'on se marre sur ce topic, j'vous jure ! En fait c'est très simple vous allez vite comprendre. 03 et 28 sont séparés pour une bonne raison en fait. Les deux premiers octets correspondent au rang du skill, c'est à dire son grade. Il y a 4 possibilités: 00 = Niveau 1 à 19 01 = M1 à M10 02 = G1 à G10 03 = P "Ah ouais malynx le lynx ! C'est pour ça que tous tes sorts P possèdent 03 en premier !", me direz-vous. Eh bien oui, c'est tout con. Pour ce qui est du deuxième octet, ça correspond en fait au niveau réel du skill. Le niveau qu'on a quand on tape la fameuse commande /setsk 1 40 pour avoir Triple Lacération en P. Bah en fait, si vous regardez bien, convertissez 40 en Hexadécimal et on obtient... 28 ! D'où le 28, et pas niveau 28 ! Car si je le veux en M8, je convertis 27 en Hexadécimal... 1D ! /!\ ATTENTION ENCORE ! Si vous mettez 03 pour P et niveau 27 (1D en Hexa), le serveur ne comprendra pas les données que vous avez, et vous répondra que vous n'avez pas appris le skill /!\ Du coup, si je veux un skill en M8, je vais devoir faire 01 pour rang M, et 1D pour le niveau 27 (M8). On n'aura donc pas 03 28 Mais 01 1D à la place :). É-NO-RME ! Attends attends... Et pour les autres skills ? Commandement, Combo, etc... ?? Je savais que vous alliez poser la question (évidemment c'est moi qui les écris) ! Eh bien en fait ils se situent tout en bas ! Comme dit plus haut, on a Shaman Soin en dernier. On ajoute notre séparateur de 58 octets et on a notre premier skill à 0x2D7: Le commandement ! Pourquoi commandement ? Parce que c'est le prochain skill après le dernier skill du Shaman Soin ! 111 SHAMAN Attaque renforcée 121 SUPPORT Commandement Faites attention par contre, certains skills comme la pêche ne possèdent pas de niveau, de ce fait il y aura des zéro à la place ! 121 SUPPORT Commandement Aptitude à mener vos partenaires. 122 SUPPORT Combo Augmenter une attaque combo. 123 SUPPORT Pêche Capacité à pêcher du poisson. 124 SUPPORT Extraction Capacité à extraire du minerai. 125 SUPPORT Création d objet Créer un objet. 126 SUPPORT Langue Shinsoo Vous comprenez le Shinsoo. 127 SUPPORT Langue Chunjo Vous comprenez le Chunjo. 128 SUPPORT Langue Jinno Vous comprenez le Jinno. Les skills comme la Pêche ne peuvent pas avoir de niveau. Si on a tout en P, on aura donc: Commandement Combo (ici en P, même si c'est inutile d'avoir plus de 2) (Pêche, pas utilisable donc 0) Extraction Création d'Objet Langue Shinsoo Langue Chunjo Langue Jinno Polymorphie Équitation Appel Cheval (spacer) (spacer) (spacer) (spacer) (spacer) Combat Équestre Charge à Cheval Vague de Pouvoir Grêle de Flèches Et là vous avez tout... Ou presque ! On en fait quoi des skills 7 et 8 ? Eh bien je vais vous laisser mettre ça en pratique, qu'est-ce que vous en dites ? Comme ça si vous avez pigé le tutoriel, vous pouvez modifier vos skills depuis la BDD. Ça peut servir selon certains cas, tout comme ça peut ne pas servir. Mais au moins, vous savez comment ça fonctionne et surtout à quoi ça correspond ! Si vous avez tenu jusqu'ici, c'est déjà un bel effort (je vous en parle pas à quel point c'était long d'écrire tout ça), alors ne gâchez pas cet élan et profitez-en pour commencer le "mini TP". Pour la petite partie TP, je vais juste vous donner l'adresse de départ des skills 7 et 8, et à vous d'essayer ! Les premiers skills 7 et 8 se trouvent à l'offset 0x52F et se terminent à l'offset 0x5B9. Trouvez les skills correspondants et rajoutez vos propres skills 7 et 8 ! Voilà, c'est la fin de ce (très) long tutoriel, j'espère que vous aurez compris tout ça, parce que ça fait beaucoup à avaler, comme dans un Bukkake. Mais l'important, c'est de piger des trucs que les gens ne comprennent pas ! Sur ce... À vous de jouer ! Cordialement, Kameyu
  4. Tu peux faire un Oldschool avec n'importe quelles files. T'as juste à retirer les systèmes que t'aimes pas, c'est tout. Y'a pas de miracle.
  5. Parfait, je classe le sujet alors :).
  6. C'est pas très malin d'utiliser un client 2013 avec un lanceur 2014... Je me demande ce que vous avez tous avec les vieilles versions ? Genre, vous aimez les vieux trucs plus utilisés ? J'pige pas, passez aux dernières files en date, non ? C'est celles qui possèdent le maximum de support et les plus "faciles" d'utilisation. La prise en main est pas évidente pour tout le monde certes mais c'est mieux une fois qu'on a pigé le truc, et on peut en faire ce qu'on veut. Alors arrêtez avec vos files obsolètes, vous êtes du genre à construire une maison avec un simple marteau à disposition ou bien ?
  7. Kameyu

    Bug texture Sol

    Tu ne dois pas remplacer la bonne texture au bon endroit, celle que tu as remplacée n'est probablement pas celle utilisée. J'ai souvent remarqué des doublons dans les textures et fichiers de configuration du client. Vérifie que tu aies remplacé les bonnes textures.
  8. Salut, C'est bizarre, j'en fais moi pourtant: Edit: C'est parce que ta compétence est en P. Mets-la en M1 et ça marchera. Comme je te l'ai expliqué plus haut, le niveau max de ta compétence à cheval, c'est (en principe) 20. Je peux faire des dégâts jusqu'à M10 mais au-delà (G1+) je n'en fais plus.
  9. Kameyu

    Serveur no ip

    Le sujet n'ayant pas eu de réponse depuis lors, je classe.
  10. Le sujet n'ayant pas eu de retour depuis le 25 Juin, je classe dans Résolu ou sans réponse.
  11. Kameyu

    Système de projection

    Attention au double post par contre, tu peux éditer ton dernier message, autant utiliser cette fonction ;). Je ferme le post.
  12. Il me semble que le sujet est déjà résolu ?
  13. Tu as la réponse dans ton propre message. Ton fichier se situe ici: C:\Win\Metin2\Sources\novaline\Srcs\Extern\lib\cryptlib.lib T'as juste à le remplacer dans les libs de ton client en lui donnant le même nom: cryptlib-5.6.1MT. (et un d à la fin si t'es en debug)
  14. J'ai trouvé d'où venait le problème. En fait c'est même pas dans le fichier SkillTable.txt mais dans SkillDesc.txt. Le problème vient du fait que le client attend une expression pour une variable "TargetCount". PythonSkill.cpp:459: if (TokenVector.size() > DESC_TOKEN_TYPE_TARGET_COUNT_FORMULA) rSkillData.strTargetCountFormula = TokenVector[DESC_TOKEN_TYPE_TARGET_COUNT_FORMULA].c_str(); Il s'attend à recevoir soit un chiffre, soit une variable (k, atk, lv, matk, etc...) sauf qu'il reçoit... Un espace. Il suffit d'enlever l'espace à ces skills et ça marchera: Une fois fait, ça donnerait ça: Je vous file les ligne si jamais vous avez peur de vous louper: 137 HORSE Combat equestre Capacité d'attaquer depuis votre monture. (niv. 50+) Aptitude de cavalier ATTACK_SKILL|HORSE_SKILL|MOVING_SKILL|WEAPON_LIMITATION SWORD|TWO_HANDED|DAGGER|DOUBLE_SWORD|FAN|BELL wildattack 121 1 138 HORSE Charge à cheval Piétiner tous les ennemis à proximité. (niv. 52+) Aptitude de cavalier ATTACK_SKILL|HORSE_SKILL|SEARCH_TARGET|CHARGE_ATTACK charge 122 1 139 HORSE Vague de Pouvoir Attaquer tous les ennemis depuis votre cheval. (niv55+) Aptitude de cavalier ATTACK_SKILL|HORSE_SKILL|WEAPON_LIMITATION SWORD|TWO_HANDED|DAGGER|DOUBLE_SWORD|BOW|FAN|BELL splash 123 1 (il est important de laisser le 5 sur le skill 140, c'est le nombre max de cibles qu'on peut toucher, mais à vous de voir si vous voulez augmenter ou diminuer le chiffre; je n'ai pas touché à la ligne 140 du coup) Voilà tout :).
  15. Le sujet étant résolu, je classe.
  16. Kameyu

    Projection : Armure

    Yes, comme je l'ai dit, dans sa condition pour qu'il ait une erreur il faut que les items soient différents. Or c'est pas ce qu'il veut faire.
  17. Surtout des erreurs chez ASIKOO (avec des str != int)
  18. Kameyu

    Projection : Armure

    Dans sa condition, il vérifie si l'un des deux items est null. D'où le "!" : si c'est NULL, l'opérateur NOT renverra true donc la condition est respectée. Notre condition en gros donne: "Si l'item0 n'existe pas, ou que l'item1 n'existe pas, ou alors que ce sont deux items différents, alors 'erreur' " Du coup il faudrait que ce soit deux items identiques pour que la transmutation marche. C'est bien ce que tu voulais ?
  19. Oui ;). Si quelqu'un veut se pencher sur mon idée, il le fera. Personnellement ce système d'effet ne m'intéresse pas, je ne regarderai pas plus loin :p. Sinon je l'aurais fait volontiers :).
  20. Bien, le dernier message répondant à la question principale, je classe le sujet! Si jamais tu souhaites que le sujet soit réouvert, tu peux me demander par MP @MeehmetYeeah.
  21. Drôle de comparaison... Dans tous les cas, il a répondu à ta question ;). Tu dois avoir dans ton client des effets de brillance (des fichiers avec extension ".mse") À toi de trouver les fichiers qui t'intéressent et de modifier la valeur de la vitesse de propagation de l'effet sur ton équipement.

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.