-
Compteur de contenus
1488 -
Inscription
-
Dernière visite
-
Jours gagnés
14
Type de contenu
Profils
Forums
Boutique
Calendrier
Tout ce qui a été posté par Kameyu
-
Centre de Téléchargement Télécharger ( Interne ) 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!
-
En fait l'affichage en mode édition est correct, mais pas une fois affiché en message
-
Centre de Téléchargement Télécharger ( Interne ) 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 ? )
-
[Sans réponse] Problème personnage !
Kameyu a répondu à un(e) question de Plow2506 dans Questions & Réponses
On ne diagnostique pas un problème juste en prenant pour cible une fonction au hasard (si c'en est une, déjà). Pour répondre à ta question: oui c'est possible, mais rien ne dit que ça viendrait de là, si cette fonction existe bien. D'ailleurs, tu n'as pas répondu à mes questions. Pour diagnostiquer une erreur, rien n'est plus efficace que retracer le moyen de reproduire une erreur. De plus, tu n'as pas posté le sujet dans la bonne catégorie, et pas non plus lu le topic épinglé au bon endroit, qui explique les étapes avant de poster une demande d'aide et support. Je déplace le sujet. -
[Sans réponse] Problème personnage !
Kameyu a répondu à un(e) question de Plow2506 dans Questions & Réponses
Salut! Explique-nous la situation plus concrètement, tu as fait des modifications avant ça ? Quelqu'un a accès à ta base de données à part toi ? Tout ne s'invente pas tout seul; du coup quelque chose a forcément été modifié pour que ton serveur ait ce comportement. Je penche plus pour l'idée qu'un système que tu as installé pose problème avec soit la BDD, soit l'affichage de personnages côté client. Vérifie bien que tu n'as rien touché de plus ou moins sensible avant ça. Bien cordialement; -
C'est tout con en fait c'est un simple parser qui remplace les fonctions propre à ext/mysql par ext/mysqli, mais il est précisé qu'étant donné qu'il n'y a pas de mysqli_connect, il faut en faire une nous-même.
-
Re salut ! Tu as des tools pratiques qui te permettent de migrer vers MySQLi sans retaper tous les fichiers à la main, il s'agit de... MySQL Converter. Je l'ai utilisé pour je-ne-sais-plus quel site que je possédais; du coup je te passe un lien qui t'aidera: [GIT] MySQL Converter by Philip Olson Un mini "tutoriel" sur son utilisation est fourni dans le README.md, pense à bien le lire.
-
da0 étant logiquement la partition principale, il me semblait logique que ce soit la bonne, mais visiblement c'était la partition 2 lol! Si c'est résolu, tant mieux #T/C
-
Python - Visibilité du Nombre de Yangs en Echange
Kameyu a répondu à un(e) sujet de RazorRevo dans Programmation & Développement / Codes
Ou bien sans se prendre la tête une fonction plus courte et plus simple: string_prix = "{:,}".format(prix).replace(',', '.') -
Python - Visibilité du Nombre de Yangs en Echange
Kameyu a répondu à un(e) sujet de RazorRevo dans Programmation & Développement / Codes
Toute information supplémentaire n'est pas interdite, tu peux proposer ta version je la rajouterai. -
Bonsoir, La commande "?" affiche la liste des disques disponibles. Essaie de taper cette commande: ufs:/dev/da0
-
C++ - Séparer / Équiper les Objets : Item Ring
Kameyu a répondu à un(e) sujet de Kameyu dans Programmation & Développement / Codes
Vous pouvez arrêter de spammer sur mon topic svp merci -
C++ - Séparer / Équiper les Objets : Item Ring
Kameyu a répondu à un(e) sujet de Kameyu dans Programmation & Développement / Codes
-
C++ - Séparer / Équiper les Objets : Item Ring
Kameyu a posté un sujet dans Programmation & Développement / Codes
Centre de Téléchargement Télécharger ( Interne ) 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 !- 5 réponses
-
- 14
-
-
-
-
-
-
[Résolu] Serveur Hamachi, Accès refuser via navicat
Kameyu a répondu à un(e) question de Hunk dans Questions & Réponses
Si vous êtes sûrs que votre mot de passe est correct (car vous l'avez vous-même créé par exemple, ) mais que vous obtenez cette erreur: C'est que le blocage ne provient pas du mot de passe. Un accès refusé peut se manifester également lorsque l'adresse IP qui souhaite se connecter au serveur n'est pas explicitement autorisée dans la liste des utilisateurs. Par exemple, un utilisateur défini comme: 'root'@'%' pourra se connecter via n'importe quelle adresse IP (le '%' étant un masque d'adresse IP signifiant "toutes directions"). Essayez de créer un utilisateur via le compte mysql local: root@localhost# mysql -u mt2 -p mt2!@# root@localhost# mysql -u mt2 -p epv4minq (normalement, vous avez l'un ou l'autre qui devrait marcher) Une fois connecté en local, vous avez deux options: 1) Créer un utilisateur qui acceptera toute adresse IP entrante ( avec le '%' ) 2) Créer un utilisateur pour vous seul (avec une IP entrante prédéfinie) /!\ Attention /!\ en revanche, si votre IP Hamachi change, vous perdrez l'accès car votre nouvelle IP ne sera pas acceptée avec l'option 2. Pour ce faire, une fois connecté au serveur mysql: CREATE USER 'ID'@'IP_HAMACHI' IDENTIFIED BY 'VOTRE_MOT_DE_PASSE'; GRANT ALL PRIVILEGES ON *.* TO 'ID'@'IP_HAMACHI' WITH GRANT OPTION; FLUSH PRIVILEGES; #Juste au cas où, mais ce n'est pas nécessaire. Bien entendu, vous remplacerez "ID" par l'identifiant que vous désirez utiliser pour vous connecter à MySQL, "VOTRE_MOT_DE_PASSE" par votre mot de passe (évidemment) ainsi que "IP_HAMACHI" par votre IP Hamachi. Si vous souhaitez l'option 1, pour pouvoir vous connecter depuis n'importe quelle IP, mettez juste un % à la place de IP_HAMACHI comme ceci par exemple: CREATE USER 'Kameyu'@'%' IDENTIFIED BY '123456789011223344'; Si ça ne marche toujours pas, c'est que vous avez mal configuré vos paramètres réseau. La bise! -
Mais de rien
-
C++ - Commande GM : Item Socket
Kameyu a répondu à un(e) sujet de Kameyu dans Programmation & Développement / Codes
Petite update, la gestion d'erreur est totalement fonctionnelle et simplifiée. -
Centre de Téléchargement Télécharger ( Interne ) 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.
-
Ah tiens j'avais oublié que j'avais fait ce truc.
-
Système information sur les entité
Kameyu a répondu à un(e) question de Link dans Questions & Réponses
Takuma est coincé sur ton premier post, il a pas compris. Sinon comme Saw l'a dit, vérifie les drops de ton boss, je pense que ton système n'arrive pas à les trouver. Tu dois avoir des traces des erreurs s'il y en a dans ton syserr et syslog serveur. -
Problème TP tour des démons
Kameyu a répondu à un(e) question de MacDonarty dans Questions & Réponses
Si ça marchait avant mais plus maintenant c'est que t'as forcément touché un truc, aucun bug n'est mystique. Après, ce que t'as pu toucher ça on va pas trop pouvoir t'aider. -
Tes valeurs de skilltable.txt dans locale_fr ont l'air erronées. Prends plutôt celles-ci. skilltable.txt skilltable.txt
-
Ça c'est du syserr bien rempli. Tu as pas mal d'erreurs liées à ta base de donées; comme des groups de mobs manquants, des queries invalides, et j'en passe. Mais je vois aucun problème côté serveur concernant tes skills. Envoie-moi ton syserr client.
