Aller au contenu

Rechercher dans la communauté

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



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
    • Discussions Générales
    • Commerce
    • Espace Gaming
    • Réseaux Sociaux
    • Espace Premium
    • International
    • PROJET NARGOTH
  • Emulation de jeux
    • Roblox
    • RaiderZ
    • Aura Kingdom
    • Metin 2
    • Dofus
    • GTA V Online
    • Minecraft
    • World of Warcraft
    • Aion
    • Habbo
    • Wakfu
    • GTA San Andreas
    • Jeux .IO
    • Autres jeux
  • Espace divers
    • Programmation
    • Arts
    • Discord
    • Mobile
    • Divers
  • International
    • Community
    • Games Emulation
    • Others
  • Archives

Blogs

Il n’y a aucun résultat à afficher.

Il n’y a aucun résultat à afficher.


Nationalité


Sexe

953 résultats trouvés

  1. partage Item Shop in Game

    Plop, Je vous partage l'item shop in game de shang dans sa dernière version v1.3.1 fonctionne parfaitement avec quelques petites retouches sur les files FE 2016 Presentation : Contenu Masqué Dl : Contenu Masqué Pour les problèmes et les bugs c'est dans l'A/Q/S Source : Shang
  2. c++ do_item_purge (commande /ip )

    Salut à tous ! Vous en avez marre de perdre tout votre stuff quand vous voulez supprimer juste votre inventaire, ou alors vous souhaitez supprimer une fenêtre d'équipement/inventaire précise ? Pas de panique, je suis là pour vous aider! Voici la commande à remplacer dans "cmd_gm.cpp": ACMD(do_item_purge) { char arg1[256], arg2[256]; two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2)); if (!*arg1) { ch->ChatPacket(CHAT_TYPE_INFO, "Usage: /ipurge (a)ll | (b)elt | (c)ostume | (d)ragonsoul [(e)quip | (i)nventory] | (e)quipment | (i)nventory"); return; } #ifdef NEW_PET_SYSTEM if (ch->GetNewPetSystem()->IsActivePet()) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("pet_cant_cleanup_while_pet_active")); return ; } #endif int i; LPITEM item; arg1[0] = tolower(arg1[0]); arg2[0] = tolower(arg2[0]); if (*arg1 == 'b' || *arg1 == 'a') { for (i = BELT_INVENTORY_SLOT_START; i < BELT_INVENTORY_SLOT_END; ++i) { if ((item = ch->GetInventoryItem(i))) { ITEM_MANAGER::instance().RemoveItem(item, "PURGE"); ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, i, 255); } } } if (*arg1 == 'c' || *arg1 == 'a') { for (i = INVENTORY_MAX_NUM; i < INVENTORY_AND_EQUIP_SLOT_MAX; ++i) { if ((item = ch->GetInventoryItem(i)) && item->GetType() == ITEM_COSTUME) { ITEM_MANAGER::instance().RemoveItem(item, "PURGE"); ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, i, 255); } } ch->SetPart(PART_HAIR, 0); ch->SetPart(PART_MAIN, ch->GetWear(WEAR_BODY)->GetVnum()); ch->SetPart(PART_WEAPON, ch->GetWear(WEAR_WEAPON)->GetVnum()); ch->SetPart(PART_ACCE, 0); ch->UpdatePacket(); } if (*arg1 == 'd' || *arg1 == 'a') { if (*arg2 == 'e' || !*arg2) { for (i = DRAGON_SOUL_EQUIP_SLOT_START; i < DRAGON_SOUL_EQUIP_SLOT_END; ++i) { if ((item = ch->GetInventoryItem(i))) ITEM_MANAGER::instance().RemoveItem(item, "PURGE"); } } if (*arg2 == 'i' || !*arg2) { for (i = 0; i < DRAGON_SOUL_INVENTORY_MAX_NUM; ++i) { if ((item = ch->GetItem(TItemPos(DRAGON_SOUL_INVENTORY, i )))) ITEM_MANAGER::instance().RemoveItem(item, "PURGE"); } } } if (*arg1 == 'e' || *arg1 == 'a') { for (i = INVENTORY_MAX_NUM; i < INVENTORY_AND_EQUIP_SLOT_MAX; ++i) { if ((item = ch->GetInventoryItem(i))) { ITEM_MANAGER::instance().RemoveItem(item, "PURGE"); ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, i, 255); } } } if (*arg1 == 'i' || *arg1 == 'a') { for (i = 0; i < INVENTORY_MAX_NUM; ++i) { if ((item = ch->GetInventoryItem(i))) { ITEM_MANAGER::instance().RemoveItem(item, "PURGE"); ch->SyncQuickslot(QUICKSLOT_TYPE_ITEM, i, 255); } } } } Utilisation: /ip(urge) <window> <sub window> Exemples: /ip belt /ip b -> Supprime votre inventaire ceinture /ip costume /ip c -> Supprime vos costumes uniquement /ip dragonsoul /ip d -> Supprime l'inventaire et les decks DragonSoul /ip dragonsoul equipement /ip d e -> Supprime les decks Dragon Soul /ip dragonsoul inventory /ip d i -> Supprime l'inventaire Dragon Soul /ip equipement /ip e -> Supprime tout l'équipement (costume compris) /ip inventory /ip i -> Supprime votre inventaire /ip all /ip a -> Supprime tous les inventaires et équipements (inventaire, équipement, ceinture, inventaire DS, decks DS, costumes) La bise!
  3. partage Nouvelle item_scale by Gin

    Salut à tous, Aujourd'hui je viens vous partager mon item_scale que j'ai retravaillé de A a Z niveau positions et taille. Les grosses étoles pas adaptés aux personnages me convenait pas, c'est pour cette raison que j'ai décidé de les refaire une à une. Voici quelques images du rendu: Contenu Masqué Contenu Masqué Contenu Masqué Contenu Masqué Lien de mon item_scale.txt: Cliquer-ici !
  4. quête Give_basic_weapon fait maison

    Salut à tous, J'viens vous partager un petit give_basic_weapon fait maison que j'estime beaucoup plus propre et optimisé que celui qu'on nous file bien souvent par défaut. C'est rien de spectaculaire, mais si ça intéresse quelqu'un, alors pourquoi pas. quest give_basic_weapon begin state start begin when login begin if pc.getqf("first_step") == 0 then pc.setqf("first_step", 1) local items = { [0] = { 19, 3009, 11209, 12206}, -- Guerrier [1] = { 19, 1009, 11409, 12346}, -- Ninja [2] = { 19, 0, 11609, 12486}, -- Sura [3] = {7009, 5009, 11809, 12626}} -- Shaman local item2 = { {50053, 1}, -- Livre équit. militaire {72727, 1}, -- Élixir de la lune (P) {72723, 1}, -- Élixir du soleil (P) {15006, 1}, -- Chaussures de cuir+6 {50187, 1}, -- Coffre d\'apprenti I {13006, 1}, -- Bouclier de bataille+6 {14006, 1}, -- Bracelet de bois+6 {16006, 1}, -- Collier de bois+6 {17006, 1}} -- Boucles oreilles bois+6 for i = 1,4 do pc.give_item2(items[pc.job][i]) -- Équipement pour chaque race end for i = 1,table.getn(item2) do pc.give_item2(item2[i][1], item2[i][2]) -- Équipement supplémentaire end repeat horse.advance() until horse.get_level() > 20 pc.set_skill_level(131, 10) pc.change_gold(200000) horse.summon() horse.ride() end end end end À placer dans le dossier /usr/metin2/share/locale/france/quest. Enjoy. (Ok le thread manque de peps mais juré je me rattraperai :'( )
  5. c++ ITEM_RING et Buffs

    Eeeeeet bonsoir ! Bon, je viens de m'amuser à faire un truc cool, c'est de pouvoir séparer tous les items un peu abusés de la boutique (oui, oui) et d'en faire des types ITEM_RING pour permettre aux joueurs de garder leur anneau d'expérience en plus de profiter des buffs des items boutique dans le genre Médaille du Héros, Anneau de la joie, Sucette de la force, et j'en passe: Vous l'avez bien compris, CES items abusés. Enfin bref. En gros, le but de ce "tutoriel" va vous permettre d'équiper ces objets dans les "nouveaux slots" pour anneaux (type CItemData::ITEM_RING). Avant toute chose, vérifiez que vous possédez bien le système d'anneaux et le type ITEM_RING, c'est une manœuvre importante pour que ça marche. Commençons sans plus tarder. En premier lieu, on va vérifier le type de nos items dans l'item_proto.txt; avec un tableur de notre choix: ITEM_VNUM ITEM_NAME(K) ITEM_TYPE SUB_TYPE SIZE ANTI_FLAG FLAG ITEM_WEAR IMMUNE GOLD SHOP_BUY_PRICE REFINE REFINESET MAGIC_PCT LIMIT_TYPE0 LIMIT_VALUE0 LIMIT_TYPE1 LIMIT_VALUE1 ADDON_TYPE0 ADDON_VALUE0 ADDON_TYPE1 ADDON_VALUE1 ADDON_TYPE2 ADDON_VALUE2 VALUE0 VALUE1 VALUE2 VALUE3 VALUE4 VALUE5 Specular SOCKET ATTU_ADDON CATEGORY SUBCATEGORY 71135 Ãʽ´ÞÀÇ ¹ÝÁö ITEM_RING 0 1 ANTI_DROP | ANTI_SELL | ANTI_STACK NONE NONE NONE 0 0 0 0 0 REAL_TIME 86400 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 0 0 0 0 0 0 0 0 0 0 71136 ÇÒ·ÎÀ© »çÅÁ ITEM_RING 0 1 ANTI_DROP | ANTI_SELL | ANTI_STACK NONE NONE NONE 0 0 0 0 0 REAL_TIME 86400 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 0 0 0 0 0 0 0 0 0 0 71143 ÇູÀÇ ¹ÝÁö ITEM_RING 0 1 ANTI_DROP | ANTI_SELL | ANTI_STACK NONE NONE NONE 0 0 0 0 0 REAL_TIME 86400 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 0 0 0 0 0 0 0 0 0 0 71145 ¿µ¿øÇÑ »ç¶ûÀÇ ÆÒ´øÆ® ITEM_RING 0 1 ANTI_DROP | ANTI_SELL | ANTI_STACK NONE NONE NONE 0 0 0 0 0 REAL_TIME 86400 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 0 0 0 0 0 0 0 0 0 0 71148 ±Ù¼ºÀÇ ¹ÝÁö ITEM_RING 0 1 ANTI_DROP | ANTI_SELL | ANTI_STACK NONE NONE NONE 0 0 0 0 0 REAL_TIME 86400 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 0 0 0 0 0 0 0 0 0 0 71149 ¸¶¼ºÀÇ ¹ÝÁö ITEM_RING 0 1 ANTI_DROP | ANTI_SELL | ANTI_STACK NONE NONE NONE 0 0 0 0 0 REAL_TIME 86400 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 0 0 0 0 0 0 0 0 0 0 71158 ¿µ¿õÀÇ ÁõÇ¥ ITEM_RING 0 1 ANTI_DROP | ANTI_SELL | ANTI_STACK NONE NONE NONE 0 0 0 0 0 REAL_TIME 86400 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 0 0 0 0 0 0 0 0 0 0 Une fois que tout est bon, vous allez vérifier que votre item se glissera bien dans la case WEAR_RING1 ou 2. Tout ça se trouve dans item.cpp, recherchez: int CItem::FindEquipCell else if (GetType() == ITEM_RING) { if (ch->GetWear(WEAR_RING1)) return WEAR_RING2; else return WEAR_RING1; } Vérifiez que ce bloc de texte existe déjà, si non, collez-le après ceci: else if (GetSubType() == COSTUME_MOUNT) return WEAR_COSTUME_MOUNT; } Ensuite il faut rajouter une condition pour éviter que l'utilisateur équipe deux objets qui donnent le même set de buffs. Ça se passe ici, à la fin de la fonction: bool CHARACTER::CanEquipNow(const LPITEM item, const TItemPos& srcCell, const TItemPos& destCell) dans le fichier char_item.cpp: if (item->GetType() & ITEM_RING) { if ((GetWear(WEAR_RING1) && GetWear(WEAR_RING1)->IsSameSpecialGroup(item)) || (GetWear(WEAR_RING2) && GetWear(WEAR_RING2)->IsSameSpecialGroup(item))) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Vous ne pouvez pas equiper deux anneaux identiques a la fois.")); return false; } } return true; } Cela empêchera les joueurs d'équiper un objet possédant le même SpecialGroup(). Ensuite, les SpecialGroup à rajouter, il faut aller dans /usr/metin2/share/locale/country/special_item_group.txt: Group 스폐셜 { Vnum 10050 type SPECIAL 1 71148 100000 1 2 71149 100001 1 3 71158 100002 1 4 71135 100003 1 5 71136 100003 1 6 71143 100004 1 7 71145 100005 1 } Group 속성 { Vnum 100000 type ATTR 1 66 30 2 78 20 3 79 20 4 63 30 5 69 10 6 70 10 effect "d:\ymir work\effect\etc\buff\buff_item5.mse" } Group 속성2 { Vnum 100001 type ATTR 1 66 30 2 80 20 3 81 20 4 63 30 5 69 10 6 70 10 effect "d:\ymir work\effect\etc\buff\buff_item5.mse" } Group 속성3 { Vnum 100002 type ATTR 1 66 50 2 7 20 3 9 20 4 64 30 5 69 10 6 70 10 7 84 5 effect "d:\ymir work\effect\etc\buff\buff_symbol1.mse" } Group 속성4 { Vnum 100003 type ATTR 1 66 50 2 7 20 3 9 20 4 64 30 5 69 10 6 70 10 7 84 5 } Group 속성5 { Vnum 100004 type ATTR 1 66 50 2 7 20 3 9 20 4 63 30 5 69 10 6 70 10 7 84 5 } Group 속성6 { Vnum 100005 type ATTR 1 66 30 2 7 10 3 9 10 4 63 10 5 69 5 6 70 5 7 84 5 } Bien entendu, vérifiez que vous ne les avez pas déjà. Et enfin, le plus gros du travail, il faut rajouter la fonction qui permettra d'appliquer les buffs du special_item_group. Tout ça se trouve dans item.cpp, à la fin de la fonction void CItem::ModifyPoints(bool bAdd), juste après le break; rajoutez: case ITEM_RING: { if (0 != GetSpecialGroup()) { const CSpecialItemGroup* pItemGroup = ITEM_MANAGER::instance().GetSpecialItemGroup(GetSpecialGroup()); if (pItemGroup == NULL) break; DWORD dwAttrVnum = pItemGroup->GetAttrVnum(GetVnum()); const CSpecialAttrGroup* pAttrGroup = ITEM_MANAGER::instance().GetSpecialAttrGroup(dwAttrVnum); if (pAttrGroup == NULL) break; for (itertype(pAttrGroup->m_vecAttrs) it = pAttrGroup->m_vecAttrs.begin(); it != pAttrGroup->m_vecAttrs.end(); it++) m_pOwner->ApplyPoint(it->apply_type, bAdd ? it->apply_value : -it->apply_value); } } break; Voilà tout ! Compilez, relancez, testez ! Si , vous voulez me faire part de bugs ou oublis de ma part faites-moi-le savoir sur ce sujet, et si vous avez des questions: direction A/Q/S !
  6. partage [C++] Commande GM: item_socket

    Bonjour, bonsoir; N'ayant rien à faire, je vous partage une fonction que j'ai créée pour, à la base, faire des tests sur un truc que j'ai développé. La commande est simple, elle permet de créer un item en y attribuant 3 valeurs de socket. Si une des valeurs est incorrecte, le socket vaudra automatiquement 0. /* cmd_gm.cpp*/ ACMD(do_item_socket) { DWORD dwVnum; /* vnum socket0 socket1 socket2 */ char arg0[256], arg1[256], arg2[256], arg3[256]; two_arguments(two_arguments(argument, arg0, sizeof(arg0), arg1, sizeof(arg1)), arg2, sizeof(arg2), arg3, sizeof(arg3)); if (!*arg0) { ch->ChatPacket(CHAT_TYPE_INFO, "Usage: item_socket <vnum> <socket0> <socket1> <socket2>"); return; } if (!str_to_number(dwVnum, arg0)) { ch->ChatPacket(CHAT_TYPE_INFO, "Item #%u does not exist by that vnum.", dwVnum); return; } int socket[3] = {0, 0, 0}; if (!str_to_number(socket[0], arg1)) ch->ChatPacket(CHAT_TYPE_INFO, "Item #%d: can't set socket0. Setting default value 0.", dwVnum); if (!str_to_number(socket[1], arg2)) ch->ChatPacket(CHAT_TYPE_INFO, "Item #%d: can't set socket1. Setting default value 0.", dwVnum); if (!str_to_number(socket[2], arg3)) ch->ChatPacket(CHAT_TYPE_INFO, "Item #%d: can't set socket2. Setting default value 0.", dwVnum); if (LPITEM item = ch->AutoGiveItem(dwVnum)) { for (int i = 0; i < 3; i++) item->SetSocket(i, socket[i]); } else ch->ChatPacket(CHAT_TYPE_INFO, "Cannot create item #%d.", dwVnum); } /* cmd.cpp */ ACMD(do_item_socket); /* dans le tableau cmd_info: */ { "item_socket", do_item_socket, 0, POS_DEAD, GM_LOW_WIZARD }, Des bisous.
  7. partage Set d'armes & Armures

    Bonjour, N'ayant pas été actif pendant pas mal de temps, j'ai décider de faire le ménage sur le pc j'ai retrouver des fichiers que je ne me serais jamais servis. Voici quelques screens des deux premiers Set d'armes Puis après d'autre recherche j'ai trouver 3 set de stuff complet Espérant que ceci vous soit utile. Link - Mot de passe : Litchy Source : epvp Litchy,
  8. Bonjour à tous, Je viens vous partager les dernières armures venues sur le FR, les Zodiaques et les Kyanites. Dans les fichiers vous trouverez : Les icons Les modèles Les textures L'item_proto => Téléchargez ceci (Lien Gurgarath) L'item_names Item_list Exemple de MSM pour les armures Lien de téléchargement : Cliquez ici ! Source : Client DE/EN Enjoy
  9. partage [Partage]Potions XXL

    Bonjour à tous. J'ai remarqué grâce à un screen de l'officiel posté par @ASIKOO sur le Discord que l'officiel avait implanté de nouvelles potions lors de la nouvelle mise à jour 18.0. Ces potions sont des Potions Bleues et Rouges de taille XXL qui restaurent respectivement 2400 PV et 800 PM. Donc après un peu de fouille dans le client de l'officiel ainsi qu'à une extraction de protos et à une rapide création de query, voici les potions XXL. Le pack contient la partie client & serveur ainsi que la partie base de donnée. Cependant, vous devrez packer vous même votre "item_proto". Vidéo de présentation : Rapide tutoriel d'implantation : Dépackez votre pack "icon" et glissez y le dossier "icon" présent dans "ymir work/icon" de ce pack. Il faut que Windows vous demande si vous souhaitez fusionner les dossiers. Faites oui et repackez icon. Rendez-vous côté serveur, ouvrez votre "item_names.txt" et votre "item_proto.txt " et rajoutez le contenu des fichiers"item_names.txt" et "item_proto.txt" présent dans le dossier "files_db" du pack. Dépackez "locale_fr", ouvrez le fichier "locale" présent dans ce pack et rajoutez le contenu du fichier "item_list.txt" dans le fichier "item_list.txt" du pack "locale_fr" que vous venez de dépacker. La même manipulation est requise pour le fichier "itemdesc.txt". Une fois ceci fait, packez les protos serveur avec les potions rajoutées. Placez le nouvel "item_proto" dans votre pack "locale". Vous pouvez repacker "locale_fr" une fois ces trois fichiers à jour. Ouvrez Navicat, ouvrez la base de donnée "player", puis copiez le contenu de "shop_item.sql" présent dans le dossier "sql_db_player" du pack. Puis, dans Navicat, appuyez sur F6 en ayant la base de donnée "player" sélectionnée et collez le contenu du fichier "shop_item.sql" précédement copié. Appuyez sur votre touche "Entrée" pour valider la query. Une fois les étapes-ci dessus effectuées, lancez votre serveur. Les potions seront disponibles à l'achat à la marchande. Lien du pack : Contenu Masqué (Futures ?) Mises à jours : La version actuelle est la version 0.1, elle contient les potions identiques à l'officiel (22/04/2018) ainsi que leur présence à la Marchande. Je mettrai le pack à jour si l'officiel fait une mise à jour (je pense notamment au modèle 3D lorsque dropées au sol qui n'existe pas pour ces potions (vous pouvez utiliser celui des autres potions, l'officiel n'en n'utilise pas)). Je peux aussi mettre ce pack à jour si quelqu'un me fait part de plus d'info : Est-ce que ces potions se droppent et si oui, où, à partir de quel level etc. Le pack sera à jour au fil des informations que vous me donnerez. Libre à vous de vous même effectuer ces modifications et de les partager (ou pas, selon vous) ici. PS : Selon le patchnote, la Potion Rouge (XL) existe, cependant je n'ai pas regardé les shops, mais il me semble que cette dernière n'est pas répertoriée. Si jamais vous avez des infos, n'hésitez pas ! Bonne implantation et journée
  10. partage [FIX]Bug string quête

    Bonjour à tous, Sur la plupart des files ce bug est présent à la création du perso voilà une solution pour régler ce problème, Tout d'abord ajouter cette quête : quest fix_bug begin state start begin when login begin setskin(NOWINDOW) say_title(" ") return end end end Ensuite dans votre quête de départ modifier là comme ceci when login with pc.get_level() >= 1 begin timer("give_basic_weapon", 2) end et ensuite : when give_basic_weapon.timer begin [CONTENU DE VOTRE QUETE] end Au plaisir
  11. partage Nouvelles étoles

    Bonjour, Je vous propose en partage les nouvelles étoles, dans le fichier se trouve, les icons, l'item_scale (peut-être quelques adaptations à faire), l'item_desc et les modèles. Lien de téléchargement : Cliquez ici Source : Mt2dev Bien à vous,
  12. partage Système d'étoles sous scale

    Bonjour à tous, Je viens vous faire parvenir un partage/tutoriel pour obtenir le système d'étoles avec le l'item_scale.txt. J'ai traduit le tutoriel provenant de TurkMMO. J'ai ajouté les fichiers manquant et apporté quelques indications. N'hésitez pas à me faire parvenir des choses dont je n'aurais pas vu (il est 3h du mat' je vois trouble) A savoir qu'il n'y a pas les nouvelles étoles, je les partagerai tantôt si il le faut. Qu'est-ce que vous avez à faire pour l'installer ? -Copiez les codes correctement, donc bien lire les consignes et mon petit fichier A LIRE. -Ajoutez les fichiers dans les bons emplacements. -Ne pas rager si ça ne fonctionne pas, réessayez sinon go AQS. -Buvez un café ou deux, parce que je vous avoue j'en ai chié pour le faire fonctionner. -Remontez moi les soucis, pour voir si je peux éventuellement les corriger, mais si ça fonctionne chez moi, ça fonctionne aussi chez vous ! Quelles sont les différences entre le système présent sur les files de la Team FE et ce système ? C'est purement esthétique, il y a juste de la brillance par rapport à la lumière, une brillance pour les étoles ayant un taux supérieur d'absorption à 18% et les slots qui brillent quand vous faites une fusion. Voici le lien de téléchargement : Cliquez ici Source officielle : TurkMMO Bien à vous
  13. partage Armes/armures 120

    Salut, je viens vous partager le set d'armes/armures 120 officiel. Je ne l'ai pas testé et je ne sais pas trop ce qu'il y a dedans. Pour les icônes, je vous invite à aller les chercher sur le client de l'officiel Contenu Masqué Sources : Metin2dev
  14. partage Brillance armure 115

    Salut, je viens vous partager la brillance des armures 115. Je ne l'ai pas testé, mais j'espère que ça va marcher. Bon, passons au lien : Contenu Masqué Sources : Online Game
  15. partage Protéger un peu son client

    Bonjour. On dit toujours que la protection ne doit pas être exclusive... Elle l'est souvent. Je n'ai pas des grosses connaissances en ce sujet, je ne joue pas souvent à Metin2, j'ai juste regardé une après midi les sources et comment est fait le client, pour essayer de faire une protection basique, dont le contenu est compréhensible par tout le monde afin de faire progresser les personnes avec des connaissances assez modestes comme les miennes. Je suis pas codeuse, je ne travaille pas là de dans, mon code n'est peut-être pas très optimisé, si vous faites mieux allez-y, ça me fera plaisir de voir comment j'aurai pu faire autrement Avant n'importe quelle manipulation se trouvant dans ce tutoriel, vous devez faire une sauvegarde. Ne vous dites pas "je vais suivre à la lettre c'est bon". Je n'ai pas du tout envie que vous soyez obligé de recommencer quelques choses car je me suis mal exprimée. L'avertissement étant donné, nous pouvons commencer. Vérification de certains fichiers par les sources client : Nous allons ici utiliser l'encodage MD5. Je sais que des collisions sont possibles, et que je devrais utiliser le sha-256. Mais je considère que le risque de collision entre deux fichiers sachant qu'un doit avoir plus de contenu tout en restant fonctionnel... Je considère que la probabilité est nulle. Bien, commencer, vous allez devoir ajouter un fichier dans votre UserInterface, pour cela vous avez plusieurs méthodes, la plus simple reste encore (à mon goût) celle-ci : Vous allez ensuite nommé ce fichier comme bon vous semble, mais je vous conseil de l'appelé mh5.h comme ça, pas de confusion possible. Vous allez ensuite copier l'intégralité de ceci dans le fichier : Contenu Masqué Vous pouvez ensuite sauvegarder votre fichier. Ouvrez ensuite votre Locale_inc.h : Ajoutez en dehors de toute boucle : #define ENABLE_CHECK_FILES_MD5 Je vous explique ceci à la fin, c'est très simple à comprendre vous allez voir, je vous mettrai une petite note explicative. Ensuite, rendez-vous dans votre UserInterface.cpp : Ajoutez avec les autres includes : #ifdef ENABLE_CHECK_FILES_MD5 #include md5.h #include windows.h #endif Ici, nous ajoutons des fichiers nécessaire au script. On inclue les données de ce fichier dans UserInterface.cpp. Cherchez ensuite : static const char * sc_apszPythonLibraryFilenames[] = Vous trouverez normalement une liste qui ressemble à celle-ci : static const char * sc_apszPythonLibraryFilenames[] = { "UserDict.pyc", "__future__.pyc", "copy_reg.pyc", "linecache.pyc", "ntpath.pyc", "os.pyc", "site.pyc", "stat.pyc", "string.pyc", "traceback.pyc", "types.pyc", "\n", }; Vous allez ajouter en bas : #ifdef ENABLE_CHECK_FILES_MD5 #define MAX_ROWS_MD5 21 static char * ar_szMD5FileNames[MAX_ROWS_MD5][2] = { { "lib/__future__.pyc", "d2505c6e64dc44a1745dda0905f4e787" }, { "lib/copy_reg.pyc", "5e996d35b598676b253dd25fa3809ef2" }, { "miles/mssdsp.flt", "cb71b1791009eca618e9b1ad4baa4fa9" }, { "miles/msssoft.m3d", "bdc9ad58ade17dbd939522eee447416f" }, { "miles/mssa3d.m3d", "e089ce52b0617a6530069f22e0bdba2a" }, { "miles/mss32.dll", "6400e224b8b44ece59a992e6d8233719" }, { "pack/uiscript.eix", "d211c0a83ff2c771946d73554916bd9a" }, { "python27.dll", "d219c0a8aff2c771946d73554916bd9a" } }; #endif Vous allez ici devoir ici déjà : Mettre les fichiers que vous désirez, Ajouter une virgule à toutes les lignes sauf à la dernière Changer les hash md5 "d2505c6e64dc44a1745dda0905f4e787" selon vos fichiers. Faites bien attention à ajouter la destination dans le nom de fichier, par exemple pour les packs vous voyez bien que j'ai ajouté pack/uiscript.eix car mes packs se trouvent dans le dossier packs. Pour hash vos fichiers, je ne vous laisse pas dans la nature, voici un petit programme que j'ai recodé de façon à pouvoir vos permettre de : Voir le MD5 de vos fichiers Changer le hash md5. En voici donc une release : Contenu Masqué Vous allez ensuite chercher : bool __IsLocaleVersion(LPSTR lpCmdLine) { return (strcmp(lpCmdLine, "--perforce-revision") == 0); } Puis ajouter en dessous : #ifdef ENABLE_CHECK_FILES_MD5 void CheckMD5Filenames() { MD5 md5; for (int it = 0; it < _countof(ar_szMD5FileNames); it++) { if (strcmp(md5.digestFile(ar_szMD5FileNames[it][0]), ar_szMD5FileNames[it][1])) { char szBuf[512 + 1]; snprintf(szBuf, sizeof(szBuf), "Le fichier %s est corrumpu.", ar_szMD5FileNames[it][0]); MessageBoxA(NULL, szBuf, "#Metin2", NULL); exit(0); } } } #endif Enfin, cherchez : if (strstr(lpCmdLine, "--hackshield") != 0) return 0; Ajoutez après : #ifdef ENABLE_CHECK_FILES_MD5 CheckMD5Filenames(); #endif Félicitations ! Vous n'avez plus qu'à compiler vos sources à nouveau. Petite explication sur le code : Nous allons maintenant voir comment exécuter un scripte de sécurité en Python. Trois problèmes se posent à nous : Que faire ? Comment le faire ? Où le faire ? Nous allons commençons par le plus simple "Où ?" : Et bien, sachant qu'en Python, le premier fichier chargé est le system.py cependant... Il ne dispose pas encore à ce stade de toutes les fonctions dont nous allons avoir besoin, nous allons par conséquence prendre le deuxième fichier : prototype.py Vous allez donc mettre en toute première ligne de ce fichier : import akihira Note : Remplacez akihira par ce que vous voulez. Vous allez ensuite créer un fichier du même nom que celui que vous avez importer dans notre root, par exemple ici, akihira.py. Bien, commençons à éditer notre fichier. Vous allez commençons par ajouter ces imports : import os import thread import time import app import dbg os : Il va nous permettre de nous balader dans les destinations et d'utiliser les fichiers. thread : Il va nous permettre quant à lui de créer des instances, et donc de faire plusieurs choses en même temps. time : Il va bien falloir donner une fréquence à la répétition de la vérification, la voici. app : C'est un module généré par C++ dans les sources client. Nous allons ici nous en servir pour "faire planter" le client. dbg : DialogBoxGenerator, il me semble... Il permet de créer des boites de dialogue, ici il nous servira pour des fenêtres d'erreur. Bien, nous allons d'abord créer une liste, dans celle-ci, nous allons écrire la liste des programmes "parasites". C'est à dire ceux que nous ne voulons pas. Pour créer une liste en python, rien de plus simple ! Nous allons aimer ça syntaxe simple : black_list = [] Votre liste est crée... Je vous l'accorde, il faut la remplir ! Pour cela nous allons ajouter le nom des programmes en tant que chaine de caractère, donc entre guillemet(/apostrophe) et les séparer entre eux par une virgule. Voici un exemple : black_List = ["injector.exe","cheatengine-x86_64.exe"] Bien, je vous laisserai remplir la liste comme vous le souhaitez, de toute façon, nous allons adapter notre code pour qu'il s'adapte à n'importe quelle liste. Nous allons ensuite devoir dire à notre programme : Pour chaque membre de la liste (que l'on va nommé "membre") : Récupère la liste des programmes. Si un deux est le même que 'membre' Tu fermes le client Sinon : Tu recommences Nous n'allons en fait pas exactement respecter cette architecture, nous allons mettre exactement : Répète à l'infini : Pour chaque processus 'p' du gestionnaire de tâche : Pour chaque membre de la liste Si dans le processus tu trouves "membre": On arrête le processus On attend 5 secondes Bon est bien... On a du pain sur la planche ! Pour répéter à l'infini, nous allons utiliser une évidence. Mais d'abord, nous allons contenir tout ça dans une fonction afin de pouvoir la démarrer en tant qu'instance (thread) : def __process(): pass Bien, je vous ai parlé d'une évidence, vous vous demandez peut être ce que c'est, et bien... si je vous dis que 1 est égale à 1, vous me dit quoi ? "Bah oui" Et bien voilà, on va dire à Python : "Le temps que 1 = 1 :" Nous utilisons pour ça la structure while. Cela donne : def __process(): while 1 ==1: pass Bien... Continuons ! '¨pour chaque processus... Vous ne pouvez pas deviner ceci si vous débutez, je vous le donne : def __process(): while 1 == 1: for p in os.popen("tasklist"): Bien, ensuite "Pour chaque membre de la liste : def __process(): while 1 == 1: for p in os.popen("tasklist"): for Member in black_List: "Si tu trouves de dans "Member" : def __process(): while 1 == 1: for p in os.popen("tasklist"): for Member in black_List: if process.find(Member) !=1: Nous allons ensuite écrire ceci, je vous explique après : def __process(): try: while 1 == 1: for p in os.popen("tasklist"): for Member in black_List: if process.find(Member) !=1: p = process.slip() os.popen("taskkill /im %s /f" %p[0]) time.sleep(5) except: time.sleep(5) "MAIS T'AS TOUT CHANGÉ ÇA VA PAS DANS TA TÊTE ?" Mais nous, résumons, qu'est-ce que j'ai fais ? j'ai entouré le code de : try: Traduction : Essaye de... except : Traduction : Si tu n'y arrives pas : S'il n'y arrive pas, je lui ai dis ici d'attendre 5 secondes. J'ai ensuite rajouté le fait de lancer une commande pour "tuer"/arrêter le processus, puis attendre 5 secondes. Bien, il ne nous reste plus qu'une chose à faire ! Lancer la fonction grâce à une instance(thread), pour cela je vous donne la façon de faire : thread.start_new_thread(__process, ()) Mettez ceci à la fin de votre fichier, sans aucune tabulation. Félicitations ! Vous avez maintenant une boucle qui scanne les processus en permanence ! Vous devenez un champion ! Bien, maintenant nous allons faire la même chose pour chaque fichier du client avec des extensions et une liste, vous avez compris le principe, je peux vous donner directement la boucle : BanExt = [".m3d", ".py", ".fld", ".mix", ".asi"] Dest = os.listdir('.') Dest.sort() for Member in BanExt: for File in Dest: if File.find(Member) != -1: dbg.LogBox("Une erreur est survenue: " + str(File) + "") try: os.remove(File) except: dbg.LogBox("Erreur !") dbg.LogBox("Fichier: " + str(File)) app.Abort() A vous de choisir, si vous voulez refaire une boucle avec une évidence et une instance, pour lancer ce scan en permanence. Nous repassons du côté de vos sources clients pour la suite, ne vous faites pas avoir ! Bien, nous allons maintenant ajouter une protection très simple, le principe est aussi très simple : Quand un joueur attaque : Si il n'attaque pas (c'est assez contradictoire je sais) On annule l'action. Pour cela, nous allons juste ajouter deux minables lignes dans le PythonNetworkStreamPhaseGame.cpp Cherchez : TPacketCGAttack kPacketAtk; Ajoutez juste en dessous : if (!__IsPlayerAttacking()) return true; Nous vérifions ici que le joueur est bien entrain d'attaquer. Cette modification est réservée aux personnes ayant un minimum de connaissance en Python. Nous allons maintenant changer le premier fichier Python chargé afin de pouvoir gérer au maximum les erreurs en cas de besoin : Rendez-vous dans UserInterface.cpp : if (!pyLauncher.RunFile("system.py")) Changez comme vous le souhaitez le nom, et vous pouvez commencer à taper des scripts avant de lancer véritablement le client. Vous pouvez dans le même fichier changer le premier pack chargé afin de perturber les nouveaux apprentis pirates : Toujours dans UserInterface.cpp : CEterPackManager::Instance().RegisterRootPack((stFolder + std::string("root")).c_str()); Modifier vos clés de compressions : Cette manipulation s'adresse aux personnes n'ayant pas changer leur compression et fonctionnant toujours sous LZO. Dans vos sources clients, rendez-vous dans Eterpack.cpp : Vous trouverez : static DWORD s_adwEterPackKey[] = { 45129401, 92367215, 681285731, 1710201, }; static DWORD s_adwEterPackSecurityKey[] = { 78952482, 527348324, 1632942, 486274726, }; Vous pourrez ensuite les modifications comme bon vous sembles le temps que vous pouvez les convertir en hexadécimal grâce à un petit script python disponible ici : import struct print "Exemple de clé: b99eb0026f69810563989b2879181a00\n" string=raw_input("Clé héxadécimal: ") lista=struct.unpack("LLLL", string.decode('hex')) n=0 print "\nGenerateur: \n" for i in lista: n+=1 i=str(i) i=i.replace("L", "") print "A" + str(n) + " = " + i Vous devrez ensuite entrées ces valeurs dans votre packer afin de l'adapté. Vous devrez ensuite repacker tout vos packs avec la nouvelle compression ! Changer les extensions de vos packs : Vous pouvez effectivement changer les extensions de vos packs grâce à une méthode très simple. Rendez vous dans Eterpack.cpp : strncpy(m_indexFileName, dbname, MAX_PATH); strcat(m_indexFileName, ".eix"); m_stDataFileName = dbname; m_stDataFileName += ".epk"; Changez comme bon vous semble en conservant 3 caractères après le point. Vous devrez ensuite changer l'option sur votre packer, puis utiliser ceci (IF) pour changer les extensions de vos packs : main @echo OFF @echo Modifiez l'extension @echo de vos fichiers :rename set EIX= set /P EIX=Choisissez l'extension de vos futurs fichiers EIX: %=% @ren *.eix *.%EIX% @echo Succès .%EIX% if "%EIX%" == "" GOTO errore set EPK= set /P EPK=Choisissez l'extension de vos futurs fichiers EPK: : %=% if "%EPK%" == "" GOTO errore @ren *.epk *.%EPK% @echo Succès .%EPK% @echo --- GOTO fine :errore @echo Erreur ! @echo L'extension n'est pas valide ! @echo --- GOTO esciprogramma :fine @echo Le changement est terminé ! Quittez le programme. :esciprogramma @pause :rename set EIX= set /P EIX=Choisissez l'extension de vos futurs fichiers EIX: %=% @ren *.eix *.%EIX% @echo Succès .%EIX% if "%EIX%" == "" GOTO errore set EPK= set /P EPK=Choisissez l'extension de vos futurs fichiers EPK: : %=% if "%EPK%" == "" GOTO errore @ren *.epk *.%EPK% @echo Succès .%EPK% @echo --- GOTO fine :errore @echo Erreur ! @echo L'extension n'est pas valide ! @echo --- GOTO esciprogramma :fine @echo Le changement est terminé ! Quittez le programme. :esciprogramma @pause Bien, je pense qu'on peut s'arrêter là, j'ai plus de temps... Et je n'ai plus vraiment d'idée je vais compléter plus tard si nécessaire. je suis consciente que des tutoriels ont déjà été publiés sur ce sujet, mais il fallait bien les regrouper au lieu d'en faire 9000 partout, si quelqu'un à donc d'autre proposition je suis preneuse. Je suis pas forcément limitée au niveau de la programmation surtout au niveau C++, donc n'hésitez pas si vous avez besoin, je connais mal le jeu, je ne sais pas quels sont les plus gros cheats, comment ils fonctionnent etc... Bonne soirée ! On ne doit pas avoir accès aux box d'alertes, c'est dommage, ça m'a cassé toute ma mise en page...
  16. Bonjour, bonsoir, Aujourd'hui, je vais vous présenter une fonction qui peut avoir plus ou moins d’intérêt pour tout un chacun ! En effet, cette fonction permet au jeu de savoir quand est-ce que la fenêtre d'entrepôt s'ouvre ou se ferme. À première vue, il y a peu d'utilité, mais dès lors que vous savez quoi en faire, cette fonction peut sévère immensément utile ! (Voir vidéo ci-bas) Avant de commencer, quelques précisions : Je ne suis pas l'auteur de cette fonction ! VegaS en est l'auteur et le code que je vous présente est le même code que celui qu'il a partagé, il est tel-quel ! Je ne fais que traduire le tutoriel. Effectuez une sauvegarde préventive de vos fichiers ! Si jamais vous faites une erreur, toujours garder des fichiers antérieurs à la modification. Cette fonction peut rendre vos scripts voire des scripts déjà existants plus spécifiques ! L'utilisation que vous ferez de cette fonction peut varier d'une personne à l'autre selon ses idées et ses compétences. C'est parti ! Voilà pour le tutoriel ! Pour les curieux, voici une vidéo tournée ce soir même pour vous montrer un des usages possible de cette fonction ! Merci de votre lecture et bonne journée / soirée !
  17. partage Armures Zodiac

    Bonjour Je n'est pas vu ce partage nulle part sur le forum, alors je me permet de partager le nouveau Set Zodiac de GameForge. Le pack est complet. - Icon - Gr2 Lien du téléchargement : Contenu Masqué Bonne journée
  18. partage [C++] Système d'effet

    Bonjour ! Je vien aujourd'hui vous partager un système d'effet qui vous permettra d'ajouter des effets à n'importe quel armures ou costumes par un fichier Python. Téléchargement : Contenu Masqué Source : Freakgamer Traduction : Rhynøs Si vous avez des soucis avec ce système, je vous demande de poster votre problèmes dans la section Aide / Questions / Support.
  19. partage [C++] Bar & Decimal Target HP

    Bonjour Je vous partage un système qui vous permettra de voir une barre de vie sur les joueurs. Efficace pour les duel pour voir la vie en temps réel des joueurs ainsi de voir la vie des mobs,metin,boss. Téléchargement : Contenu Masqué Source : Freakgamer Traduction : Rhynøs Si vous avez des soucis avec ce système, je vous demande de poster votre problèmes dans la section Aide / Questions / Support.
  20. partage [C++] Anti Exp

    Bonjour Je vais vous partager quelque bout de code, qui vous permettrons de bloquer votre expérience ingame via la source et d'un item. Allez ses partie ! Ouvrez Char.cpp Chercher : if (gPlayerMaxLevel <= GetLevel()) return; Ajouter en dessous : if (block_exp && amount > 0) { return; } Ont n'a terminer avec le char.ccp, on ouvre maintenant le char.h Chercher : void SetExp(DWORD exp) { m_points.exp = exp; } Ajouter en dessous : bool block_exp; Enregistrer et fermer le char.h, passons maintenant au Questlua_pc.cpp Rechercher : { "give_award_socket", pc_give_award_socket }, Ajouter en dessous : { "block_exp", _block_exp }, //Bloque votre expérience { "unblock_exp", _unblock_exp }, //Débloque votre expérience -Rechercher : (toujours dans le même fichier) void RegisterPCFunctionTable() Ajouter en dessous : int _block_exp(lua_State* L) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); ch->block_exp = true; return 0; } int _unblock_exp(lua_State* L) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); ch->block_exp = false; return 0; } Ensuite : input_login.cpp Rechercher : if (g_bCheckClientVersion) { Ajouter en dessous de la ( ch->block_exp = false; Comme sa : if (g_bCheckClientVersion) { ch->block_exp = false; int version = atoi(g_stClientVersion.c_str()); int date = atoi(d->GetClientVersion()); - FIX GUILD : Gurgarath Ouvrez guild.cpp Dans la fonction bool CGuild::OfferExp(LPCHARACTER ch, int amount) Ajouter : if (ch->block_exp == true) return false; Vous pouvez maintenant compiler votre game. Ensuite Ajouter ceci dans votre quest_function pc.block_exp pc.unblock_exp Et voici ma quêtes : quest blocage_experience begin state start begin when login begin if pc.getqf("antiexp") == 1 then pc.block_exp() chat("Rappel : Vérifier si votre anneau est bien bloquer ou débloquer.") end end when 40004.use begin if pc.getqf("antiexp") == 0 then pc.block_exp() pc.setqf("antiexp", 1) chat("Le blocage d'expérience à été activer") elseif pc.getqf("antiexp") == 1 then pc.unblock_exp() pc.setqf("antiexp", 0) chat("Le blocage d'expérience à été désactiver.") end end end end Source : J4M. Quêtes : Moi FIX GUILD : Gurgarath Il existe des quêtes qui bloquent l'exp, mais je n'aime pas trop le concepts, Celui ci bloque directement l'exp via la sources et non via une quêtes! L'anneau ce désactive pas à chaque téléportations, un rappel s'effectue à chaque changement de maps, pour avertir le joueurs en cas.
  21. partage Source EterNexus

    Salut ! Je les ai pas vu, donc je les partages vite fait : Contenu Masqué Je crois qu'il faut QT, mais bon, faut mieux demander à des personnes plus compétentes en C++ que moi :XX Y'a pas grand chose d'autre à écrire Ploush ploush
  22. partage Scripts python officiels - 05/02/2018

    Bonjour la communauté ! J'arrive ici avec une bonne nouvelle pour tous les programmeurs et bidouilleurs ! En effet, il semblerait que lors de la publication de la dernière mise à jour, les développeurs aient oublié de crypter le contenu du pack root. Son contenu est donc accessible facilement sans compétences particulières ! J'ai donc décidé de vous partager ce fameux pack root ainsi que le pack uiscript daté du 05/02/2018 ! À savoir aujourd'hui même. Ces deux packs sont issus du client Français du jeu, bien que ça ne change rien au code. Forcément, je ne possède pas la partie sources du travail effectué, mais vous pouvez déjà prendre certaines choses si vous savez comment faire et comment vous en servir. J'ai personnellement extrait la nouvelle interface de l'officiel ainsi que quelques corrections apportées au scripts python grâce aux packs leakés de début 2016 / fin 2015. Mais avec ceux là vous aurez accès à bien d'autres choses comme : Diverses corrections de scripts à apporter à votre client Attention ! Certaines corrections possèdent une partie source, je pense notamment à la correction du temps de rechargement d'un skill. Diverses modifications d'interface ne nécessitant pas spécialement de modifications avancées côté client Barre de "Fortune" déportée, modifications de l'UI etc. Partie client officielle de nombreux systèmes (réservée aux développeurs et bidouilleurs prêts à faire la partie source de ces systèmes) Étoles, Gaya, Transmutation, Échange de livre, Recherche de groupe etc. Quelques autres nouveautés et quelques parties de code parfois marrantes La liste est bien entendu non exhaustive. Avant de vous donner le lien, je préfère vous prévenir, même si cela semble évident : /!\ Pensez à sauvegarder chacun de vos fichiers et à noter vos modifications si vous voulez piocher dans ces packs ! Énormément de travail a été fait entre les packs de 2014 que la plupart utilisent et ceux de 2018 que je vous partage ! /!\ Voici le lien : Contenu Masqué ! Bonne journée ou soirée à tous et n'hésitez pas à parler de vos avancements et de vos découvertes sur ce topic !
  23. partage Convertisseur clé LZO héxa

    Salut ! Je viens de retrouver un vieux scripts Python que j'avais fais pour convertir les clés de sécurités LZO en hexa, je vous le partage ici : import struct print("Exemple de clé: b99eb0026f69810563989b2879181a00\n") string=input("Clé héxadécimal: ") lista=struct.unpack("LLLL", string.decode('hex')) n=0 print("\nGenerateur: \n") for i in lista: n+=1 i=str(i) i=i.replace("L", "") print("A"+ str(n) + " = " + i) Bien cordialement.
  24. partage Quelques nouvelles maps

    J'ai fait quelques maps il y a un moment maintenant, je n'ai malheureusement jamais eu l'occasion de les tester. (D'ailleurs si quelqu'un en implante, je serais intéressé de pouvoir réaliser quelques tests dessus, notamment pour corriger d'éventuelles erreurs ou apporter des modifications). Liste des maps : - Map feu complètement refaite - Map 1 inter-empires + place centrale - Map pour combats de groupes (18 si je me souviens bien) - Essai de map "thème peur" - Arène n°1 - Arène n°2 Voilà tout, Si vous voulez voir des screens de ces maps, je vous invite à vous rendre sur ce topic : ICI (Beaucoup d'images semblent avoir disparu, vous pouvez tout de même parcourir le post pour avoir un léger apperçu) Il se peut que vous rencontriez des problèmes avec des objets manquants, etc. J'ai proposé un partage il y a longtemps qui inclus l'ensemble des éléments que j'ai utilisé : ICI En espérant que ça puisse vous servir. A la prochaine !
  25. partage Partage Emulateur + Cms

    Salut je vous partage un émulateur + cms qu'on m'avais partager il y'a un bon moment je vais le partager à la communauté funky-emu. Pour commencer il s'agit ici de l'émulateur d'azote et de son cms. Il n'est en aucun cas full debug mais il comporte pas mal de debug déjà. Il s'agit d'un émulateur dérivé de Stump codé en C# donc. Je tiens à préciser que ca fait longtemps que je ne l'ai pas mit en route donc vous êtes seuls pour le faire démarrer mais ce n'est pas très compliqué, le plus dur est le cms si vous n'avez pas de base. Pour modifier cette émulateur c'est simple il vous faudra tout d'abord le télécharger ensuite il vous faudra visual studio . Bien sur Notepad aussi . Le cms L'emulateur Émulateur Azote : Contenu Masqué (1).rar Cms Azote : Contenu Masqué Je préviens a l'avance il n'est pas full debug et pas facile a mettre en place, je vous laisse découvrir bonne continuation.
×

Information importante

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