Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 06/06/20 in all areas

  1. M2 Download Center Download ( Latest Version ) THIS FILES ARE FOR METIN1 (METIN.CO.KR) NOT METIN2!!!!!! Downloaded from a Chinese forum/website. Year: 2008 They might contain unauthorized program, virus or anything, expect stuff. https://mega.nz/file/55tj1Y4Z#XkCW6oxtDWVEhg-TOFya40ENWTy84JYmU39sZfQjqXk Password: gkr40g3grgk)$j 小窗口登录 -> Windowed 全屏登录 -> Fullscreen Read 安装教程_文字.
    2 points
  2. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) [Hidden Content] Some old quests don't have (lua/quest) files. They have only object files. If you use make.sh, they will disappear. Other reason, I don't like use make.sh every time for one quest. Maybe someone wants to use it. Put qdel to game/share/locale/xx Set permissions to 777 ./qdel questname
    2 points
  3. I can recommend @VegaS™ , he already did that long time ago and soon I think he will release it on his website, a lot of features rewrote, everything loaded in runtime, removed playersettingsmodule, everything written in C++, much clean, optimized etc. No loading anymore >_<
    2 points
  4. M2 Download Center Download Here ( Internal )
    2 points
  5. M2 Download Center Download Here ( Internal ) The archive contains: The icons The models Textures Before after
    1 point
  6. M2 Download Center Download Here ( Internal 2.9 ) Download Here ( Last Release ) This is an archiver I've created, and it looks quite stable so far. The PackMakerLite (PML) supports type 0-1-2-3-4-5-6. As a summarize, the metin2 types are handled like this: Type 0 - only storage (no encryption/compression; it can be read fully from the .epk) Type 1 - compressed - lzo(file) Type 2 - compressed and encrypted - xtea(lzo(file)) Type 3 - encrypted with Panama - you must save an .iv key server-side in the panama/ folder. (content readable only after auth phase) The official used it only for patch2. Type 4 - encrypted with a mix of ciphers (cshybridcrypt) - you must save a .dat key server-side in the package/ folder. (content readable only after auth phase) Practically all the metin2_patch files. Type 5 - like type 4, but a server-side map/<map_name> is also provided. (content readable only after accessing the <map_name> map as a player) The official used it only for the catacomb data. Type 6 - compressed and encrypted - xtea(snappy(file)) Usage: Its settings (xtea keys, extensions, pack types to use) can be changed inside PackMakerLite.json: You can actually integrate the tool in the menu context (running the .reg files) for packing folders and unpacking .eix files: Remove "--nolog" from the .bat files if you want to see the logs again. Command-line options get overwritten by JSON config options. Last but not least: since the client handles all the filenames in lowercase, this tools automatically converts them as well. Thanks also to: blackdragonx61 / Mali - type4-5 extract code / type 6 compress code metin2team - type6 extract code By martysama0134
    1 point
  7. M2 Download Center Download Here ( Advance Refine Systems ) Download Here ( Cheque System ) Download Here ( Soul Bind System ) Hello everyone ! I've been away from metin2 for about 6 months and i've get back from less then a month and made thoes systems , i've start selling them but i didn't sell it to anyone and i got bored from metin2 again so i'm going to release it and go off from metin2 for ever . about the Advance Refine System here some info: so download and have fun [Hidden Content]
    1 point
  8. Hello Today I want to share with all of you a little thing. All times when you are trying to open your safebox, it's requesting the password, isn't it? But for what? I modified to limit these requests to one input per login. Of course if you warp or change character, you need to retype your password again. But with extra modifications you can do it to store the password until you close the client, but I don't recommend this. So, first go to the uiSafeBox.py file and paste this line into the __init__ method of the PasswordDialog class, with taking care of the tabulators: self.lastPassword = "" This variable will store your last entered password. Then replace the Accept method of the same class with this: (take a look for the syntax, modulename, and true/false!) def OnAccept(self): self.lastPassword = str(self.passwordValue.GetText()) m2net.SendChatPacket(self.sendMessage + self.lastPassword) self.CloseDialog() return True When you accept the password input dialog, the entered password will be saved, if it's correct if it isn't as well. Don't worry about it, it will be reset if you entered wrong password. The next step is that to paste these new functions into the same class. def InitSafeboxPassword(self): self.lastPassword = "" def GetSafeboxPwd(self): return self.lastPassword As you can see, here is a function which will reset the entered password . With this, the file is done. Open interfaceModule.py and serach this line: ## Safebox then paste this function below: def InitSafeboxPassword(self): self.dlgPassword.InitSafeboxPassword() Then replace the AskSafeboxPassword and AskMallPassword functions with these: def AskSafeboxPassword(self): if self.wndSafebox.IsShow(): return if self.dlgPassword.IsShow(): self.dlgPassword.CloseDialog() return self.dlgPassword.SetSendMessage("/safebox_password ") if self.dlgPassword.GetSafeboxPwd() != "": self.dlgPassword.OnAccept() return self.dlgPassword.SetTitle(localeInfo.PASSWORD_TITLE) self.dlgPassword.ShowDialog() def AskMallPassword(self): if self.wndMall.IsShow(): return if self.dlgPassword.IsShow(): self.dlgPassword.CloseDialog() return self.dlgPassword.SetSendMessage("/mall_password ") if self.dlgPassword.GetSafeboxPwd() != "": self.dlgPassword.OnAccept() return self.dlgPassword.SetTitle(localeInfo.MALL_PASSWORD_TITLE) self.dlgPassword.ShowDialog() With these functions, if the last entered password is correct, the storages will open automatically with the last entered password. The file is done. Next, open your game.py and search this function: OnSafeBoxError and extend it with this line: self.interface.InitSafeboxPassword() So, as you can see this is the answer from the server to entered wrong password and this function will reset the last entered password as well . That's all, I hope you like it, and have fun. Edit.: Fix for change password. game/src/input_db.cpp void CInputDB::SafeboxChangePasswordAnswer(LPDESC d, const char* c_pData) { //[...] d->GetCharacter()->ChatPacket(CHAT_TYPE_COMMAND, "safebox_change_passwd %d", p->flag); // to the bottom of the function } client/UserInterface/PythonNetworkStreamCommand.cpp void CPythonNetworkStream::ServerCommand(char * c_szCommand) { // [...] const char * szCmd = TokenVector[0].c_str(); if (!strcmpi(szCmd, "quit")) { // [...] } else if (!strcmpi(szCmd, "BettingMoney")) { // [...] } //Add between the "else if" cases: else if (!strcmpi(szCmd, "safebox_change_passwd")) { if (2 != TokenVector.size()) { TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %d", c_szCommand, TokenVector.size()); return; } const int iFlag = atoi(TokenVector[1].c_str()); PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "RecvSafeboxPasswordChangeAnswer", Py_BuildValue("(i)", iFlag)); } else if (!strcmpi(szCmd, "gift")) { // [...] } // [...] } client/root/game.py # below of CommandCloseSafebox function add: def RecvSafeboxPasswordChangeAnswer(self, flag): self.interface.RecvSafeboxPasswordChangeAnswer(flag) client/root/interfaceModule.py # Below of CommandCloseSafebox function add: def RecvSafeboxPasswordChangeAnswer(self, flag): if flag: self.dlgPassword.SetSafeboxPwd(str(self.wndSafebox.dlgChangePassword.GetNewPasswordText())) client/root/uiSafeBox.py # change the OnAccept function of the PasswordDialog class with this: def OnAccept(self): if self.lastPassword == "" and "" != str(self.passwordValue.GetText()): self.lastPassword = str(self.passwordValue.GetText()) net.SendChatPacket(self.sendMessage + self.lastPassword) self.CloseDialog() return True # add this new function to the PasswordDialog class: def SetSafeboxPwd(self, pwd): self.lastPassword=pwd # add this line into the ChangePasswordDialog.__init__ function: self.__newPassword = "" # add this line into the ChangePasswordDialog.Open function: self.__newPassword = "" # add this function to the ChangePasswordDialog class: def GetNewPasswordText(self): return self.__newPassword # add the following line into the ChangePasswordDialog.OnAccept function (between the password check and the SendChatPacket): # return True self.__newPassword = newPasswordText #m2net.SendChatPacket("/safebox_change_password %s %s" % (oldPasswordText, newPasswordText)) Edit: fix of flooding: moving the saving method of the password from the OnAccept function to a separated one and calling it when the Safebox opens, this will be enough I guess. client/root/uiSafeBox.py # add the following function to the PasswordDialog class: def SavePassword(self): if self.lastPassword == "" and "" != str(self.passwordValue.GetText()): self.lastPassword = str(self.passwordValue.GetText()) # make the changes on the function in the PasswordDialog class def OnAccept(self): net.SendChatPacket(self.sendMessage + (self.lastPassword if self.lastPassword != "" else self.passwordValue.GetText())) self.CloseDialog() return True client/root/interfaceModule.py # add the following line into the beginning of the OpenSafeboxWindow and the OpenMallWindow function self.dlgPassword.SavePassword()
    1 point
  9. M2 Download Center Download Here ( Internal ) Introduction Hey, since I'm often asked if I can make an example for this or that in Python, I just post some of these examples in this thread from time to time. Usually they just end up in my trash (that's why the collection is small for now) but maybe it will help some of you to learn something. You are also welcome to post examples here and I will add them to the startpost. You have a wish for a certain example? Then write it in here. PS: These examples are designed very simple, so that they can be understood. Examples ui.ComoBox() ui.ScrollBar() with text ui.AniImageBox() as loading bar ui.ListBox() ui.ToggleButton() ui.RadioButtonGroup() ui.DragButton() ui.Bar(), ui.Box(), ui.Line() ui.Gauge(), ui.SliderBar() ui.TextLine(), ui.EditLine() Pagination Tabs DropDown Tree Category Navigation ListBox Search TextLineScrollable Class Collapsible window
    1 point
  10. M2 Download Center Download Here ( Internal ) Password: metin2.dev It's a regen creator, link and image updated. Download: [Hidden Content] Image (old): Image (new):
    1 point
  11. bool DragonSoulTable::ReadVnumMapper() { std::string stName; // Group VnumMapper Reading. CGroupNode* pGroupNode = m_pLoader->GetGroup("vnummapper"); if (NULL == pGroupNode) { sys_err ("dragon_soul_table.txt need VnumMapper."); return false; } sys_log(0, "LoadLocaleFile: DragonSoulTable: %s", szDragonSoulTableFileName); if (!DSManager::instance().ReadDragonSoulTableFile(szDragonSoulTableFileName)) { sys_err("cannot load DragonSoulTable: %s", szDragonSoulTableFileName); thecore_shutdown(); return; }
    1 point
  12. This topic has already been treated in the past, I forward you to it and to my opinion about it! For me, it was just a way for them to secure the transactions in game and to "counter" the over-inflation that happened in the game (I still have on my account yangs I farmed in 2008, imagine the amount of yangs that piled up with milions of players including bots and hardcore players in various servers during 13 years).
    1 point
  13. Solucion: Char.cpp > WORD CHARACTER::GetOriginalPart(BYTE bPartPos) const In that function look for this > case PART_WEAPON: return GetPart(PART_WEAPON); i just add like this #if defined(CHANGELOOK_SYSTEM) && !defined(WEAPON_COSTUME_SYSTEM) case PART_WEAPON: return GetPart(PART_WEAPON); #endif This item.cpp part made by @MrQuin thanks to him item.cpp search for > case ITEM_WEAPON: { if (0 != m_pOwner->GetWear(WEAR_COSTUME_WEAPON)) break; if (bAdd) { above add : if (m_wCell == INVENTORY_MAX_NUM + WEAR_WEAPON) {
    1 point
  14. the best in town
    1 point
  15. +One mention: Since Ymir never overwrited the files as i mentioned, the Index file in your pack folder is very important. If an older file is in the top of your index file, that can cause problems. So when you compare your client with a working one, check the Index file too. Your problem is height, so either the objects itself (+mdatr) or mapname/0x/attr.atr will be the problem. But the best way is checking a working client and copy+paste everything related with skipia. (map folder, property, zone, season-x)
    1 point
  16. (information moved to main post)
    1 point
  17. Thx, but check this [Hidden Content] and scroll?
    1 point
  18. There you go, uiCharacter.py and characterwindow.py for you to compare with yours. characterwindow.py uicharacter.py
    1 point
  19. M2 Download Center Download Here ( Internal ) Story: This map was used in the first ever Metin2 Closed Beta Test (Korea) in 2004. They probably didn't have the kingdoms created yet at the time, every player was in this map. Luckily they kept this map in the released client in Outdoor.eix-epk named as "metin2_map". Work done: -Misplaced objects corrected (especially a lot of fences) -Trees placed (All the trees were missing for some reason) -Some object placed where i felt empty -Made serverside with npcs and regens like map1 Installation: Video: Download1: [Hidden Content] Download2: [Hidden Content] Download3: [Hidden Content] Download4: [Hidden Content]
    0 points
  20. Make your offer I pay any person that is able to create a functon that loads all the gr2 equipment (including costumes) at the first client loading.
    0 points
  21. ChuCk core confirmed!
    0 points
  22. New version! 1. Choose 3 search mode (Name/Content/Name&Content) 2. Choose original file is oldest or newest. DOWNLOAD ver. 1.0.0.1
    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.