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

Classement

Contenu populaire

Affichage du contenu avec la meilleure réputation le 07/05/23 dans toutes les zones

  1. Download Metin2 Download
    1 point
  2. Download Metin2 Download
    1 point
  3. Download Metin2 Download Item Vnum in Tooltip Tools Mass Import Script
    1 point
  4. F Download Center Télécharger ( Interne ) Bonjour à tous, Je viens vous partagé ce petit système qui es sympathique mais il faut installé RenderTarget pour qu'il soit totalement fonctionnelle. [Hidden Content] Lien de téléchargement : Clique ici
    1 point
  5. F Download Center Télécharger ( Interne ) Bonjour, J'ai décidé de refaire ce tutoriel Aujourd'hui je vais vous expliquer comment ajouté l'option "détruire" lorsque vous voulez jeter un item. Ca va être assez long, mais facile si vous suivez bien le tutoriel. Commençons ______________________________________________________________________ PRÉREQUIS ______________________________________________________________________ 1.Des source Serveur 2.Des sources Client 3.Un client ______________________________________________________________________ 1.SOURCE SERVEUR ______________________________________________________________________ Ouvrez votre "packet.h" et recherchez: HEADER_CG_ITEM_DROP2 = 20, Ajoutez ceci juste en dessous: HEADER_CG_ITEM_DESTROY = 21, Recherchez maintenant: typedef struct command_item_drop2 { BYTE header; TItemPos Cell; DWORD gold; BYTE count; } TPacketCGItemDrop2; Ajoutez ceci juste en dessous: typedef struct command_item_destroy { BYTE header; TItemPos Cell; } TPacketCGItemDestroy; Ouvrez maintenant le fichier packet_info.cpp et recherchez: Set(HEADER_CG_ITEM_DROP2, sizeof(TPacketCGItemDrop2), "ItemDrop2", true); Ajoutez ceci juste en dessous: Set(HEADER_CG_ITEM_DESTROY, sizeof(TPacketCGItemDestroy), "ItemDestroy", true); Ouvrez maintenant le fichier input_main.cpp et recherchez la fonction: void CInputMain::ItemDrop2(LPCHARACTER ch, const char * data) Ajoutez cette fonction juste après: void CInputMain::ItemDestroy(LPCHARACTER ch, const char * data) { struct command_item_destroy * pinfo = (struct command_item_destroy *) data; if (ch) ch->DestroyItem(pinfo->Cell); } Cherchez maintenant ceci: case HEADER_CG_ITEM_DROP2: if (!ch->IsObserverMode()) ItemDrop2(ch, c_pData); break; Et ajoutez: case HEADER_CG_ITEM_DESTROY: if (!ch->IsObserverMode()) ItemDestroy(ch, c_pData); break; Ouvrez maintenant le fichier char_item.cpp et recherchez la fonction: bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount) Ajoutez cette fonction juste au-dessus: bool CHARACTER::DestroyItem(TItemPos Cell) { LPITEM item = NULL; if (!CanHandleItem()) { if (NULL != DragonSoul_RefineWindow_GetOpener()) ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°*È*âÀ» ¿¬ »óÅ¿¡¼*´Â ¾ÆÀÌÅÛÀ» ¿Å±æ ¼ö ¾ø½À´Ï´Ù.")); return false; } if (IsDead()) return false; if (!IsValidItemPosition(Cell) || !(item = GetItem(Cell))) return false; if (item->IsExchanging()) return false; if (true == item->isLocked()) return false; if (quest::CQuestManager::instance().GetPCForce(GetPlayerID())->IsRunning() == true) return false; if (item->GetCount() <= 0) return false; SyncQuickslot(QUICKSLOT_TYPE_ITEM, Cell.cell, 255); ITEM_MANAGER::instance().RemoveItem(item); ChatPacket(CHAT_TYPE_INFO, LC_TEXT("L'item %s est desormais detruit."), item->GetName()); return true; } Ouvrez maintenant le fichier char.h et recherchez: bool DropItem(TItemPos Cell, BYTE bCount=0); Ajoutez ceci juste au-dessus: bool DestroyItem(TItemPos Cell); Ouvrez maintenant le fichier input.h et recherchez: void ItemDrop2(LPCHARACTER ch, const char * data); Ajoutez ceci juste en dessous: void ItemDestroy(LPCHARACTER ch, const char * data); ______________________________________________________________________ 2. SOURCE CLIENT ______________________________________________________________________ Ouvrez le fichier packet.h et recherchez: HEADER_CG_ITEM_DROP2 = 20, Ajoutez ceci juste en dessous: HEADER_CG_ITEM_DESTROY = 21, Recherchez maintenant: typedef struct command_item_drop2 { BYTE header; TItemPos pos; DWORD gold; BYTE count; } TPacketCGItemDrop2; Ajoutez ceci juste en dessous: typedef struct command_item_destroy { BYTE header; TItemPos pos; }TPacketCGItemDestroy; Ouvrez maintenant le fichier PythonNetworkStreamPhaseGameItem.cpp et recherchez la fonction: bool CPythonNetworkStream::SendItemDropPacketNew(TItemPos pos, DWORD elk, DWORD count) Ajoutez cette fonction juste en dessous: bool CPythonNetworkStream::SendItemDestroyPacket(TItemPos pos) { if (!__CanActMainInstance()) return true; TPacketCGItemDestroy itemDestroyPacket; itemDestroyPacket.header = HEADER_CG_ITEM_DESTROY; itemDestroyPacket.pos = pos; if (!Send(sizeof(itemDestroyPacket), &itemDestroyPacket)) { Tracen("SendItemDestroyPacket Error"); return false; } return SendSequence(); } Ouvrez maintenant le fichier PythonNetworkStreamModule.cpp et recherchez la fonction: PyObject* netSendItemDropPacket(PyObject* poSelf, PyObject* poArgs) Ajoutez cette fonction juste en dessous: PyObject* netSendItemDestroyPacket(PyObject* poSelf, PyObject* poArgs) { TItemPos Cell; if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell)) return Py_BuildException(); CPythonNetworkStream& rkNetStream = CPythonNetworkStream::Instance(); rkNetStream.SendItemDestroyPacket(Cell); return Py_BuildNone(); } Recherchez maintenant: { "SendItemDropPacketNew", netSendItemDropPacketNew, METH_VARARGS }, Ajoutez ceci juste après: { "SendItemDestroyPacket", netSendItemDestroyPacket, METH_VARARGS }, Ouvrez maintenant le fichier PythonNetworkStream.h et recherchez la fonction: bool SendItemDropPacketNew(TItemPos pos, DWORD elk, DWORD count); Ajoutez ceci juste après: bool SendItemDestroyPacket(TItemPos pos); ______________________________________________________________________ 3. PYTHON CLIENT ______________________________________________________________________ Ouvrez le fichier uicommon.py du pack root et recherchez la class: class QuestionDialog(ui.ScriptWindow): Juste après celle class, ajoutez la class suivante: class QuestionDialogItem(ui.ScriptWindow): def __init__(self): ui.ScriptWindow.__init__(self) self.__CreateDialog() def __del__(self): ui.ScriptWindow.__del__(self) def __CreateDialog(self): pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "uiscript/questiondialogitem.py") self.board = self.GetChild("board") self.textLine = self.GetChild("message") self.acceptButton = self.GetChild("accept") self.destroyButton = self.GetChild("destroy") self.cancelButton = self.GetChild("cancel") def Open(self): self.SetCenterPosition() self.SetTop() self.Show() def Close(self): self.Hide() def SetWidth(self, width): height = self.GetHeight() self.SetSize(width, height) self.board.SetSize(width, height) self.SetCenterPosition() self.UpdateRect() def SAFE_SetAcceptEvent(self, event): self.acceptButton.SAFE_SetEvent(event) def SAFE_SetCancelEvent(self, event): self.cancelButton.SAFE_SetEvent(event) def SetAcceptEvent(self, event): self.acceptButton.SetEvent(event) def SetDestroyEvent(self, event): self.destroyButton.SetEvent(event) def SetCancelEvent(self, event): self.cancelButton.SetEvent(event) def SetText(self, text): self.textLine.SetText(text) def SetAcceptText(self, text): self.acceptButton.SetText(text) def SetCancelText(self, text): self.cancelButton.SetText(text) def OnPressEscapeKey(self): self.Close() return True Ouvrez maintenant le fichier game.py et cherchez la def suivante: def __DropItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount): Recherchez ce bout de code dans la fonction (2x): itemDropQuestionDialog = uiCommon.QuestionDialog() Remplacez par: itemDropQuestionDialog = uiCommon.QuestionDialogItem() Toujours dans la même fonction, recherchez: itemDropQuestionDialog.SetAcceptEvent(lambda arg=True: self.RequestDropItem(arg)) Ajoutez ceci juste après: itemDropQuestionDialog.SetDestroyEvent(lambda arg=True: self.RequestDestroyItem(arg)) Recherchez maintenant la fonction: def RequestDropItem(self, answer): Ajoutez cette fonction juste après: def RequestDestroyItem(self, answer): if not self.itemDropQuestionDialog: return if answer: dropType = self.itemDropQuestionDialog.dropType dropNumber = self.itemDropQuestionDialog.dropNumber if player.SLOT_TYPE_INVENTORY == dropType: if dropNumber == player.ITEM_MONEY: return else: self.__SendDestroyItemPacket(dropNumber) self.itemDropQuestionDialog.Close() self.itemDropQuestionDialog = None constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0) Recherchez ensuite la fonction: def __SendDropItemPacket(self, itemVNum, itemCount, itemInvenType = player.INVENTORY): Et ajoutez celle-ci juste après: def __SendDestroyItemPacket(self, itemVNum, itemInvenType = player.INVENTORY): if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) return net.SendItemDestroyPacket(itemVNum) Ouvrez maintenant le fichier locale_interface.txt et ajoutez ceci: DESTROY Destroy Placez le fichier questiondialogitem.py dans votre pack uiscript ! Screen du système: [Hidden Content] Voilà c'est fini ! Source du totoriel : .Avenue™ de Metin2Dev Traduction: moi Cordialement, #Saw.
    1 point

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.