Jump to content


Popular Content

Showing content with the highest reputation on 01/27/2020 in all areas

  1. 8 points
    Hi community, I hope you're all right. The staff needs your opinion today! We've been thinking about a system that could make the forum more lively. Do you know the houses in Harry-Potter? We want to do the same here but with Jinno, Chunjo and Shinsoo. Each member selects the empire they want when they register. To change empire, you will have to pay a "Color of Empires" with yangs. Each member makes his empire earn points by participating in the forum, sharing releases, winning contests organized by the staff, etc ... At the end of each month, the members of the winning empire earn yangs or a yang boost. The counters are thus reset to 0, which starts a new month. With this system, we will be able to develop a lot of things around! Of course, before setting it up, it is important that we have your opinion, so that we don't get into unnecessary development. To your keyboards! The staff
  2. 2 points
    Dear M2Dev Community, How do I get a Rank ? STAFF Administrator The administrators manage the forum. They manage the administrative and technical part. We keep the forum running ! Recruitments are organized under the decision of the administrators. In case of problems with the forum do not hesitate to contact the administrators. Bot Our wonderful bot finds its place ! It's only accessible to bots and not to humans ! Hi @M2Dev ! Moderator They are there to enforce the rules of the forum. They have permissions to manage posts and members. They can also put a warning or ban a member. In case of problems with the member do not hesitate to contact the moderators. Recruitments are organized under the decision of the administrators. Engineer They are specialists, they make sure that the releases and shares are of high quality ! The Engineers are recruited in order to develop, animate and clean up the forum. They were chosen based on their skills. They have permissions to manage posts. Recruitments are organized under the decision of the administrators. Wiki Team They manage the M2Dev Wiki. They have no permissions on the forum. Recruitments are organized under the decision of the administrators. MEMBER Guest These are people who are not yet registered on the forum ! Banned Nobody would want to get this rank ! Member These are the members of the M2Dev community ! Mapper - Developer - Designer - 3D Artist These ranks are a mark of recognition. It highlights members with skills. The criteria for obtaining these ranks will depend on your investment on the forum and are based on the domain in which you excel. The team can promote you if we believe you are worthy of obtaining it. Partner Our partners. Honorable Member This rank is a mark of recognition. It highlights senior members whom are known for the quality of their content on the forum. The team can promote you if we think you are worthy of it. Former Staff They are the old staff, they are no longer active ! They still keep privileges on the forum to thank them for their work. VIP The VIP Rank is a paid rank, it grants you the access to our secret section of the forum. You have some advantages on the forum. They help pay for our infrastructure. Sincerly, ASIKOO
  3. 1 point
    Hi everyone! So, after serveral days of searching a tool that could change the texture path of a .gr2 file, I found the tool(probably all of you know it, the texture changer by marv). After that I tried to change the texture paths of some gr2 models of a weapon, and guess what, it didn't work. I'm gonna reupload the file, because I didn't seen it on metin2dev, and I'm gonna teach you how to use it. First of all, I don't know about others, but for me it didn't work to change anything with this (I'm running windows 7 x64 bit). Some of guys told me that this "texture changer" works only on windows 7 x86 bit, so I reinstalled my windows(I really needed that tool), of course, it didn't work either way. So, go in Start and search cmd, and run it. After the cmd started you'll see a path right there C:\Users\Name (Instead of Name you'll have your username of computer administrator, or the account you're logged in), now that's the path where we can work with the tool. PAY ATTENTION!!! IF YOU START THE TOOL IN OTHER FOLDER INSTEAD OF C:\Users\Name THE TOOL WILL NOT WORK, AND YOU WILL NOT BE ABLE TO SAVE THE NEW MODEL. Exctract all the files from the archive(I'll post it below), and start Metin2TextureChanger.exe. Now click "Load" to choose a gr2 file you want to change texture path, BUT, the model name can't have spaces in name(devil sword.gr2 for example, it's wrong, the tool won't read it, and you'll not be able to save your new gr2 model), so if you want to change for example devil sword.gr2 you need to rename it into devil_sword.gr2 or devilsword.gr2 or any other name without spaces betwen. Where is "Neuer Texturpfad" we will chose the new path for texture, for example d:\ymir work\test\devil_sword_blue.dds , there you can choose any other path, but you can't modify "d:\ymir work" or you won't be able to see the weapon/armour in-game. Now we save the file wherever we want, it doesn't matter, this way must work for everybody. AGAIN, THIS TOOL WASN'T MADE BY ME. And I made this post because I've searched many days a tool that would work, but neither didn't work, and this tool didn't work for me either just when I used this method. So, this post is for guys who had the same problem like me (they had the tool, but couldn't save the new model) that's why I wanted to help them, and any other people who weren't been able to use it. And about the other tool I've found on this forum, the tool "made" by thunder-core, I didn't find that tool satisfying, it worked, but after the new model was made, I wasn't been able to import it in 3d max, or to convert the model from file format revision 7 to 6. So you were basicaly forced to upgrade your client to granny 2.9, and I found that inconvenient, because, I don't know about others, but I don't use source for binary, and because of that it's imposible to see the model in-game. And of course, the new model you've created, with the tool in attachement, is revision 7, so you need the new granny if you want to see it in-game, but you can use the converter from archive to convert from revision 7, to revision 6 (old), and you'll be able to see it in-game. If you already see it in-game, you don't need to use the converter. If you found this post helpful I'm glad I could help you. Metin2TextureChanger.rar Metin2TextureChanger.rar
  4. 1 point
    EterNexus File Archiver View File File archiver for Metin2 with GUI made by Crysus Technologies. Please note, you will need Microsoft Visual C++ 2010 Redistributable Package installed to use this software. 32-bit download: http://www.microsoft.com/en-us/download/details.aspx?id=5555 64-bit download: http://www.microsoft.com/en-us/download/details.aspx?id=14632 Screenshots: EterNexus_1.0.3.1a.rar Submitter Rumor Submitted 02/03/14 Category Tools
  5. 1 point
    Hey, I will share a function (Set Atlas Scale) that you can set your own scale in your Atlas Window. As you can see in the Preview the Atlas is bigger than the default. You need to have good quality of Map Image, I think you can use World Editor for this. Preview: Download: SET_ATLAS_SCALE.rar
  6. 1 point
    I also finished the Shinsoo Kingdom!
  7. 1 point
    Oh you, I indeed love puns... https://www.wikiwand.com/en/Salt_(cryptography) https://www.wikiwand.com/en/Pepper_(cryptography) It might be easier to understand for people who doesn't know about these now, thanks for pointing it out
  8. 1 point
  9. 1 point
    thanks, useful. i managed to play around with this and it's what i need. i would still need the tutorial for animated weapons (.mde) if possible..
  10. 1 point
    You need that, check official uiscript or locale and copy-paste
  11. 1 point
    Your question makes sense. But at the same times it doesnt. Let me explain you the point. It can be hard for a behinner but I will try my best to explain it. This sentence is wrong, really wrong. When it comes to encryption, there isn't a way to do it. There are bilions and bilions. The fact that no one should make a tutorial about it is that it won't help anyone to protect their client but on the contrary it will ruin the solution for good. That's why it exists barely no tutorials at all. You can easily break something that is open source, at least, more easily (open source is great though). Also, make sure that no matter how strong is your security (it depends on the level of course) it can get unpacked. Back then, we had Rubinuum with the nec plus ultra of the security at that time being FoxFS (based on what the community said, not based on facts). They got unpacked anyway because of reverse engineering and the lack of uniqueness in their encryption and compression. Now, FoxFS is open source, but no one is using it, either because they don't know how, or simply because they know that it is not effective anymore. Instead of giving away how you can secure it, I will simply give you some hint, teach a man how to fish as we commonly say: Change LZO to something better, no matter which one you choose. Despite being small and fast, TEA is somehow depreciated, some newer versions exists, but consider changing it as well. AES, SHA256, SHA512, well, we have a bunch. The usage of keys is good but once you got them (trust me it's easy) you got the masterkey to unpack everything. Change the system, obfuscate them, change the way it works. There are tons of ways to deal with it. The current pack system is working using index and packs, you can change that as well, you can merge them, you can delete them, thousands of methods as well. You can add a bit of salt and pepper to your system, here in France we like when it's perfectly seasoned. You can as well use type4 and type 5. i.e a key sent by the server to your client that decrypt the files. Those are nice, the only problem official had was a backdoor and the lack of overall security, you sniff the keys and you ruin these methods whole career. You can use a brand new method as well. Base yourself upon other protections, you are not forced to use eterpack at all. Make also sure that you use more than two of the things listed above. What official did with type6 was simply an encrypted snappy, which is funny because that's what I did that for the first pack method I made in late 2014.
  12. 1 point
  13. 1 point
    @IGNEEL @martysama0134
  14. 1 point
    The idea is good, but the code is bugged and unreadable, here're the bugs: text = '1kks' ValueError: invalid literal for int() with base 10: '1000000s' text = '1kk500' 1000000500 text = '1abcd' '1abcd' If I'm the one who do this, i would do it more extendable and using a proficient way. [hide] import re def __ConvertMoneyText(self, text, powers=dict(k=10**3, m=10**6, b=10**9)): """ Format string value in thousands, millions or billions. '1k' = 1.000 '100kk' = 100.000.000 '100m' = 100.000.000 '1b' = '1kmb' = 1.000 (can't use multiple suffixes types) :param text: string :return: int :date: 10.01.2020 :author: Vegas """ match = re.search(r'(\d+)({:s}+)?'.format('+|'.join(powers.keys())), text, re.I) if match: moneyValue, suffixName = match.groups() moneyValue = int(moneyValue) if not suffixName: return moneyValue return moneyValue * (powers[suffixName[0]] ** len(suffixName)) return 0 def OnAccept(self): text = self.pickValueEditLine.GetText() if text: moneyValue = min(self.__ConvertMoneyText(text), self.maxValue) if moneyValue: if self.eventAccept: self.eventAccept(moneyValue) self.Close() [/hide] At least, keep the copyright.
  15. 1 point
    Hey, Today i will share how can you change the Whitemark in Minimap with a new one. I saw that there is a topic in Questions & Answers but seems not complete so. Minimap Whitemark - New Download: Minimap Whitemark.rar
  16. 1 point
    [hide] Github repository: https://github.com/Vegas007/Metin2-Extended-Modules-For-Script-Window [/hide]
  17. 1 point
    The idea isn't so bad, but the code has too many useless lines, here's what you can do to improve it. [hide] To: To: To: [/hide]
  18. 1 point
  19. 1 point
    Screenshot Serverside - C++ [*]packet.h: search for HEADER_CG_ITEM_DROP2 = 20, & paste HEADER_CG_ITEM_DESTROY = 21, under it. [*]packet.h: search for typedef struct command_item_drop2 { [...] } TPacketCGItemDrop2; & paste typedef struct command_item_destroy { BYTE header; TItemPos Cell; } TPacketCGItemDestroy; under it. [*]packet_info.cpp: search for Set(HEADER_CG_ITEM_DROP2, sizeof(TPacketCGItemDrop2), "ItemDrop2", true); & paste Set(HEADER_CG_ITEM_DESTROY, sizeof(TPacketCGItemDestroy), "ItemDestroy", true); under it. [*]input_main.cpp: search for void CInputMain::ItemDrop2(LPCHARACTER ch, const char * data) { [...] } & paste void CInputMain::ItemDestroy(LPCHARACTER ch, const char * data) { struct command_item_destroy * pinfo = (struct command_item_destroy *) data; if (ch) ch->DestroyItem(pinfo->Cell); } under it. [*]input_main.cpp: search for case HEADER_CG_ITEM_DROP2: [...] break; & paste case HEADER_CG_ITEM_DESTROY: if (!ch->IsObserverMode()) ItemDestroy(ch, c_pData); break; under it. [*]char_item.cpp: search for bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount) & paste 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("Du hast %s zerstoert."), item->GetName()); return true; } above it. [*]char.h: search for bool DropItem(TItemPos Cell, BYTE bCount=0); & paste bool DestroyItem(TItemPos Cell); above it. [*]input.h: search for void ItemDrop2(LPCHARACTER ch, const char * data); & paste void ItemDestroy(LPCHARACTER ch, const char * data); under it. Clientside - C++ [*]packet.h: search for HEADER_CG_ITEM_DROP2 = 20, & paste HEADER_CG_ITEM_DESTROY = 21, ein. [*]packet.h: search for typedef struct command_item_drop2 { [...] } TPacketCGItemDrop2; & paste typedef struct command_item_destroy { BYTE header; TItemPos pos; } TPacketCGItemDestroy; under it. [*]PythonNetworkStreamPhaseGameItem.cpp: search for bool CPythonNetworkStream::SendItemDropPacketNew(TItemPos pos, DWORD elk, DWORD count) { [...] } & paste 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(); } under it. [*]PythonNetworkStreamModule.cpp: search for PyObject* netSendItemDropPacket(PyObject* poSelf, PyObject* poArgs) { [...] } & paste 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(); } under it. [*]PythonNetworkStreamModule.cpp: search for { "SendItemDropPacketNew", netSendItemDropPacketNew, METH_VARARGS }, & paste { "SendItemDestroyPacket", netSendItemDestroyPacket, METH_VARARGS }, under it. [*]PythonNetworkStream.h: search for bool SendItemDropPacketNew(TItemPos pos, DWORD elk, DWORD count); & paste bool SendItemDestroyPacket(TItemPos pos); under it. Clientside - Python [*]uiCommon.py: search for class QuestionDialog(ui.ScriptWindow): [...] & paste 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 under it. [*]uiScript/questiondialogitem.py: download it & pack it in your pack/uiscript. [*]game.py: search in definition __DropItem for the first itemDropQuestionDialog = uiCommon.QuestionDialog() & replace it with itemDropQuestionDialog = uiCommon.QuestionDialogItem() [*]game.py: a few lines under it you can find itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg)) & paste itemDropQuestionDialog.SetDestroyEvent(lambda arg=TRUE: self.RequestDestroyItem(arg)) under it. [*]game.py: search for def RequestDropItem(self, answer): [...] & paste 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_DROP_QUESTION_DIALOG_STATUS(0) under it. [*]game.py: search for def __SendDropItemPacket(self, itemVNum, itemCount, itemInvenType = player.INVENTORY): [...] & paste 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) under it. [*]locale/xx/locale_interface.txt: add there somewhere DESTROY Destroy release_avenue.rar
  20. 1 point
    Open SphereLib/spherepack.h, search for inline void LostChild(SpherePack *pack); and delete the keyword "inline" void LostChild(SpherePack *pack);
  21. 1 point
    Webzen started to code new functions for everything. (They're refreshing the stuff slowly too). Today I'll give an update about SendQuestInputStringPacket. This packet is often used by r34083 to make new systems with communication. This function is only work when the string size is big than 64. New function; net.SendQuestInputLongStringPacket I explained everything in the rar file (NewFunction.rar) Kind Regards ~ Ken
  22. 0 points
    https://github.com/blackdragonx61/Metin2-Discord-Rich-Presence Create app at here:https://discordapp.com/developers/applications/ Copy CLIENT ID Then change Discord.h/DiscordClientID Add images at here: example my image's name is image1 You can also use smallImageKey and smallImageText
  23. 0 points
    wtf? I shared it for free, and you want to pay for implementation. what a nice forum
  24. 0 points
    Is something happening, buddy? Since October he has not responded to me regarding updates.
  25. 0 points
    I'm not sure if I understood you 100%, But here is a really helpfull tutorial about adding new items (armors, costumes, haircuts ). It's in French but with google page translate you will have no problem reading it. Link: here Google translated page: here
  26. 0 points
    Lol, best asnwer is in this small line.
  27. 0 points
    Hello everyone, - Server seems to be working smoothly right now; - Server crashs are not happening anymore, major and minor bugs have been fixed; - We are finally working on client crashs and we expect to have it fix between today and tomorrow; - We already did some changes and we can verify that clients are not crashing so many times right now (You can run patcher if you don't have the last version); - Paypal has been removed for some hours, tomorrow will be back online. Thank you all for your patient, we will keep working hard. Best regards, Nexus2 Team
  28. 0 points
    In root/npclist.txt you write the vnum of mob + folder name In mob_proto you create the vnum for the pet In quest of pet_system you add the vnum of item and vnum of mob. For weapons you have to create vnum in item_proto (database and client), and in locale/language/itemlist.txt you add the vnum and weapon location. To see an example search for 469 vnum.
  29. 0 points
  30. 0 points
  31. 0 points
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.