Jump to content

Leaderboard

Popular Content

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

  1. M2 Download Center Download Here ( Internal ) Someone asked me for cache chat messages. Here is the release constInfo.py Add: lastSentenceStack = [] lastSentencePos = 0 game.py In def Open(self): add: if len(constInfo.lastSentenceStack) > 0: constInfo.lastSentencePos = 0 uiChat.py remove: self.lastSentenceStack = [] self.lastSentencePos = 0 All: self.lastSentenceStack Replace with: constInfo.lastSentenceStack All: self.lastSentencePos Replace with: constInfo.lastSentencePos That's all, enjoy
    3 points
  2. M2 Download Center Download Here ( CN ) - Download Here ( DE ) - Download Here ( ES ) - Download Here ( KR ) Download Here ( GR ) - Download Here ( IT ) - Download Here ( NL ) - Download Here ( HU ) Download Here ( PL ) - Download Here ( RO ) - Download Here ( SG ) - Download Here ( US ) Download Here ( AE ) - Download Here ( CZ ) - Download Here ( DK ) - Download Here ( FR ) Download Here ( PA ) - Download Here ( PT ) - Download Here ( RU ) - Download Here ( TR ) Download Here ( BR ) - Download Here ( BETA ) - Download Here ( EN ) - Download Here ( MX ) Hey guys, I've stumbled upon some old Metin2 clients on an old DVD, so I thought I'd share them with you. I also included some of the already existing clients on this forum. Table of Contents: Gameforge June 2007: EN December 2008: DE, ES, FR, IT May 2010: DK, EN, ES, FR, GR, HU, NL, PL, PT, RO, TR, US August 2010: PA (Beta) March 2011: TR April 2011: DK, EN, ES, FR, GR, HU, NL, PT, RO, TR, US December 2011: AE, CZ, DE, DK, EN, ES, FR, GR, HU, IT, MX, NL, PL, PT, RO, RU, TR, US March 2012: MX March 2013: EN (13.03.2013), EN (28.03.2013) April 2013: CZ, DE, ES (16.04.2013), ES (17.04.2013), FR (16.04.2013), FR (17.04.2013), IT, PL, RU June 2013: TR September 2013: DK, GR, HU, NL, PT, RO, US, PA (Beta) July 2015: CZ, DE, DK, EN, ES, FR, GR, HU, IT, NL, PL, PT, RO, RU, TR, US Singapore (TEC) April 2012 May 2012 US (G4Box/Z8games) November 2007 April 2008 (repacked) (Original topic here) October 2008 October 2009 April 2011 September 2011 Brasil (Ongame) 2015 (v14) 2016 (v15) April 2018 (v16) July 2018 (v17) February 2019 (v18) April 2019 (v19) May 2019 (v20) August 2019 (v21) Other August 2005: CN Beta client (YMIR) (Original topic here) December 2012: KR (Webzen) (repacked) (Original topic here) 2015 (ver. 0.0.0.1): Gameforge Beta 2019 (ver. 0.0.0.2): Gameforge Beta Pictures: Download Links: Archive.org: [Hidden Content] Torrent download (also using archive.org as a webseed): [Hidden Content] GameForge direct links: Should you have other clients (installers would be great!), please leave a reply to this topic with a download link and I'll happily add them to the collection. Edits: April 20th, 2020: Added many clients from Gameforge's web download server. April 21st, 2020: Added more clients that I've discovered on GF's download server. April 21st, 2020: Added all the clients I could find on GF's server. December 30th, 2023: Reuploaded the collection on archive.org, added Metin2 SG (14.04.2012) client thanks to @ForgiveN March 20th, 2014: Added 2011 & 2012 Gameforge Mexico clients, US April 2011 client, Gameforge August 2010 beta client Cheers, Exynox.
    2 points
  3. M2 Download Center Download Here ( Internal ) Hi. This small release save our sent and received private messages till we change the character. If you close by mistake PM with somebody and after you'll open the converastion with that player the old messages will be loaded from dictionary. All changes are in root. Let's begin. constInfo.py Add: WHISPER_MESSAGES = {} game.py Replace these methods: def OnRecvWhisper(self, mode, name, line): if mode == chat.WHISPER_TYPE_GM: self.interface.RegisterGameMasterName(name) line.replace(" : ", ": ") if not self.interface.FindWhisperButton(name) and constInfo.WHISPER_MESSAGES.has_key(name) and not self.interface.whisperDialogDict.has_key(name): self.interface.RecvWhisper(mode, name, line, True) else: self.interface.RecvWhisper(mode, name, line, False) if not constInfo.WHISPER_MESSAGES.has_key(name): constInfo.WHISPER_MESSAGES.update({name : [(mode, line)]}) else: constInfo.WHISPER_MESSAGES[name].append((mode, line)) chat.AppendWhisper(mode, name, line) def OnRecvWhisperSystemMessage(self, mode, name, line): chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, line) self.interface.RecvWhisper(mode, name, line, False) def OnRecvWhisperError(self, mode, name, line): if localeInfo.WHISPER_ERROR.has_key(mode): chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, localeInfo.WHISPER_ERROR[mode](name)) else: chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, "Whisper Unknown Error(mode=%d, name=%s)" % (mode, name)) self.interface.RecvWhisper(mode, name, line, False) interfaceModule.py Replace this method: def RecvWhisper(self, mode, name, line, loadMsg): if loadMsg: for text in constInfo.WHISPER_MESSAGES[name]: chat.AppendWhisper(text[0], name, text[1]) if not self.whisperDialogDict.has_key(name): btn = self.FindWhisperButton(name) if 0 == btn: btn = self.__MakeWhisperButton(name) btn.Flash() chat.AppendChat(chat.CHAT_TYPE_NOTICE, localeInfo.RECEIVE_MESSAGE % (name)) else: btn.Flash() elif self.IsGameMasterName(name): dlg = self.whisperDialogDict[name] dlg.SetGameMasterLook() introSelect.py In def Open(self): add: WHISPER_MESSAGES = {} uiWhisper.py Add: import constInfo Replace this method: def OpenWithTarget(self, targetName="", loadMessages=False): chat.CreateWhisper(targetName) chat.SetWhisperBoxSize(targetName, self.GetWidth() - 60, self.GetHeight() - 90) self.chatLine.SetFocus() self.titleName.SetText(targetName) self.targetName = targetName self.textRenderer.SetTargetName(targetName) self.titleNameEdit.Hide() self.ignoreButton.Hide() if app.IsDevStage(): self.reportViolentWhisperButton.Show() else: self.reportViolentWhisperButton.Hide() self.acceptButton.Hide() self.gamemasterMark.Hide() self.minimizeButton.Show() if loadMessages: if constInfo.WHISPER_MESSAGES.has_key(targetName): for text in constInfo.WHISPER_MESSAGES[targetName]: chat.AppendWhisper(text[0], targetName, text[1]) in def AcceptTarget(self): at botton add: if constInfo.WHISPER_MESSAGES.has_key(name): for text in constInfo.WHISPER_MESSAGES[name]: chat.AppendWhisper(text[0], name, text[1]) And replace this method: def SendWhisper(self): text = self.chatLine.GetText() textLength = len(text) if textLength > 0: if net.IsInsultIn(text): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.CHAT_INSULT_STRING) return net.SendWhisperPacket(self.targetName, text) self.chatLine.SetText("") if not constInfo.WHISPER_MESSAGES.has_key(self.targetName): constInfo.WHISPER_MESSAGES.update({self.targetName : [(1, ("{}: {}".format(player.GetName(), text)))]}) else: constInfo.WHISPER_MESSAGES[self.targetName].append([1, "{}: {}".format(player.GetName(), text)]) chat.AppendWhisper(chat.WHISPER_TYPE_CHAT, self.targetName, player.GetName() + ": " + text) That's all If you will find any bugs just give me some feedback.
    2 points
  4. Welcome to QuantumCore, most people always told you me you are crazy, that's a waste of time don't do that. But I don't care and still started this project, mostly as a learning process. So what is QuantumCore you ask? QuantumCore is basically a server emulator for Metin2. In comparison to what we currently mostly use this doesn't use any source code by Ymir/Webzen and is a full reimplementation of the 40k server. This project is still in work and far from being completed. So why do you already create a thread for this? First of all we need feedback from you guys of what the features are and what we could improve even more. In addition to a normal rewrite of the core this project is using more modern technology. The code base is based on C++17 and will include features of C++20 as soon as it's officially released. Also we only test 64bit builds, no more 32bit builds. In addition to this we are automated building the core against the current LLVM toolchain and automatically creating Docker images. We have started to implement Unit Testing for some core features, and we will extend this to more code we write. Also we are working on embedding AngelScript (and maybe even more languages in the future) to not only write quests but also to extend the core. The main goal is that you can create most of the new systems in AngelScript with a resonable performance instead of modifying the core source code. For example if you want to create a new command you could write the following plugin: void main() { command::RegisterCommand("test", TestCommand); } void TestCommand(game::Player@ player, string[] arguments) { if(arguments.length() < 2) { player.SendChatMessage(1, "/test [name]"); return; } player.SendChatMessage(1, "Hello from " + player.name + "(" + player.level + ") to " + arguments[1]); } We also using redis for caching fast changing fields, like player position, items etc. The source code of this project will be licensed under the GPLv3 license. So you are free to modify the source code and use it for your project. We would be also very happy if you contribute back your improvements to the core. So what is the main goal? - Providing a compatible game server to the clean 40k client - Writing a modern, stable and scalable game server - Keep the core extensible Main repository: https://gitlab.com/quantum-core/core Documentation: https://docs.quantum-core.io/index.html With best regards, QuantumCore Team @arves100, @DevChuckNorris
    2 points
  5. 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
  6. M2 Download Center Download Here ( Internal ) Hey there, I have an Halloween gift for you all. i have been working for a few hours on official like element image on target window(See screenshots below). When you click on a mob if it is defined as elemental, it will open an element image in addition to the target window. Don't forget to hit the like button! (C) Metin2 guild wars - coded by [GA]Ruin - 27/10/2017 (I create custom metin2 systems in c++/python. if you want a custom system send me a pm and we can talk over skype). Let's begin! Server Side: Open service.h, add in the end: #define ELEMENT_TARGET Open char.cpp, search for else { p.dwVID = 0; p.bHPPercent = 0; } add below: #ifdef ELEMENT_TARGET const int ELEMENT_BASE = 11; DWORD curElementBase = ELEMENT_BASE; DWORD raceFlag; if (m_pkChrTarget && m_pkChrTarget->IsMonster() && (raceFlag = m_pkChrTarget->GetMobTable().dwRaceFlag) >= RACE_FLAG_ATT_ELEC) { for (int i = RACE_FLAG_ATT_ELEC; i <= RACE_FLAG_ATT_DARK; i *= 2) { curElementBase++; int diff = raceFlag - i; if (abs(diff) <= 1024) break; } p.bElement = curElementBase - ELEMENT_BASE; } else { p.bElement = 0; } #endif open packet.h, search for: } TPacketGCTarget; add above: #ifdef ELEMENT_TARGET BYTE bElement; #endif Client side: open locale_inc.h, add in the end: #define ELEMENT_TARGET open packet.h, search for } TPacketGCTarget; add above: #ifdef ELEMENT_TARGET BYTE bElement; #endif open PythonNetworkPhaseGame.cpp, look for: else if (pInstPlayer->CanViewTargetHP(*pInstTarget)) replace below with the following: #ifdef ELEMENT_TARGET PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(iii)", TargetPacket.dwVID, TargetPacket.bHPPercent, TargetPacket.bElement)); #else PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(ii)", TargetPacket.dwVID, TargetPacket.bHPPercent)); #endif open PythonApplicationModule.cpp, look for #ifdef ENABLE_ENERGY_SYSTEM add above: #ifdef ELEMENT_TARGET PyModule_AddIntConstant(poModule, "ENABLE_VIEW_ELEMENT", 1); #else PyModule_AddIntConstant(poModule, "ENABLE_VIEW_ELEMENT", 0); #endif open game.py, look for def SetHPTargetBoard(self, vid, hpPercentage): if vid != self.targetBoard.GetTargetVID(): self.targetBoard.ResetTargetBoard() self.targetBoard.SetEnemyVID(vid) self.targetBoard.SetHP(hpPercentage) self.targetBoard.Show() replace with: if app.ENABLE_VIEW_ELEMENT: def SetHPTargetBoard(self, vid, hpPercentage,bElement): if vid != self.targetBoard.GetTargetVID(): self.targetBoard.ResetTargetBoard() self.targetBoard.SetEnemyVID(vid) self.targetBoard.SetHP(hpPercentage) self.targetBoard.SetElementImage(bElement) self.targetBoard.Show() else: def SetHPTargetBoard(self, vid, hpPercentage): if vid != self.targetBoard.GetTargetVID(): self.targetBoard.ResetTargetBoard() self.targetBoard.SetEnemyVID(vid) self.targetBoard.SetHP(hpPercentage) self.targetBoard.Show() open uitarget.py, look for import background add below: if app.ENABLE_VIEW_ELEMENT: ELEMENT_IMAGE_DIC = {1: "elect", 2: "fire", 3: "ice", 4: "wind", 5: "earth", 6 : "dark"} look for: self.isShowButton = False add below: if app.ENABLE_VIEW_ELEMENT: self.elementImage = None inside Destroy method, look for: self.__Initialize() add below: if app.ENABLE_VIEW_ELEMENT: self.elementImage = None inside ResetTargetBoard method, look for: self.hpGauge.Hide() add below: if app.ENABLE_VIEW_ELEMENT and self.elementImage: self.elementImage = None look for : def SetElementImage(self,elementId): add above: if app.ENABLE_VIEW_ELEMENT: def SetElementImage(self,elementId): try: if elementId > 0 and elementId in ELEMENT_IMAGE_DIC.keys(): self.elementImage = ui.ImageBox() self.elementImage.SetParent(self.name) self.elementImage.SetPosition(-60,-12) self.elementImage.LoadImage("d:/ymir work/ui/game/12zi/element/%s.sub" % (ELEMENT_IMAGE_DIC[elementId])) self.elementImage.Show() except: pass Compile server, client source and root pack and that's it! Enjoy! Happy halloween!
    1 point
  7. M2 Download Center Download Here ( Internal ) Here is the translation of locale_string.txt file in 14 languages Languages: cz de dk en es fr hu it nl pl pt ro ru tr Link: Download
    1 point
  8. M2 Download Center Download Here ( Internal ) Download: Forevermetin2.rar (80.92 MB) Forevermetin2 Summary Do you want to start mapping, modelling or create your own pserver? Then you can have a look at FEM2. The foundation is finished and things are being added. It is made with love, and wants to be treated with love. Before you read on I am still on it, and I will continue to run this project. Although I'm not very active, but it's a long-term project. I dedicate it to the metin2 community. If you want to release this tool somewhere else you are welcome to do so. The best thing is to mention this original thread in the credits. I myself only release it on metin2.dev as I am not active anywhere else. mostly I just keep a lookout for files that are being searched for. Interfaces or Maps Download and test it for yourself These threads were linked in Forevermetin2 FAQ Credits Kind regards Ace
    1 point
  9. M2 Download Center Download Here ( Internal ) Author : KoMaR1911 Github + source code : [Hidden Content] How to use?: 1. Inject PyRunSimpleStringFlagsDumperMetin2.dll to metin2 game process using Xenos Injector / Extreme Injector 2. Inject cheat to game 3. go to C:/dump.txt here is dumped python loaded by PyRun_SimpleStringFlags Download : [Hidden Content]/releases/download/1.0/PyRunSimpleStringFlagsDumperMetin2.dll
    1 point
  10. M2 Download Center Download Here ( Internal ) VirusTotal: [Hidden Content] Hi ! Today ThunderCore Society will offer you a special tool for Granny3D Models. Note: That tool isn't for begginers and we don't offer suport for that. We hereby inform you that we take the copyrights file and his contents because ThunderCore Society has paid to perform this work. Attention: NonCommercial — You may not use the material for commercial purposes. NoDerivatives — If you transform, or build upon the material, you may not distribute the modified material. No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. Kind Regards - Johnny White
    1 point
  11. M2 Download Center Download Here ( Internal ) Hello, Working on some new stuff I found out that current implementation of event looks a bit tricky. Due to this fact I basically deciced to re-implement it in C++11 providing up to date tech. Don`t forget to take a look at this topic before you start: [Hidden Content] So lets begin. Add include into the main.cpp: #ifdef __NEW_EVENT_HANDLER__ #include "EventFunctionHandler.h" #endif And add this into main function before: while (idle()); #ifdef __NEW_EVENT_HANDLER__ CEventFunctionHandler EventFunctionHandler; #endif Now add this at the end of idle: #ifdef __NEW_EVENT_HANDLER__ CEventFunctionHandler::instance().Process(); #endif Now search for: sys_log(0, "<shutdown> Destroying CArenaManager..."); And add before: #ifdef __NEW_EVENT_HANDLER__ sys_log(0, "<shutdown> Destroying CEventFunctionHandler..."); CEventFunctionHandler::instance().Destroy(); #endif Now open service.h and add this define: #define __NEW_EVENT_HANDLER__ That`s all. Now just download attachment and add included files to your source.
    1 point
  12. M2 Download Center Download Here ( Internal )
    1 point
  13. (information moved to main post)
    1 point
  14. Hey there, so I got very good responds due to my last video, so I made the full package Login + Select + Empire + Create. Hope you like it and for more information contact me at skype: geo.geani94 . Special thanks to: @VegaS @All of you for the feedback from the other topic.
    1 point
  15. I did some work by using The Wayback Machine and I managed to get the files from YMIR's servers. It seems, though, that they are only basic installers and the actual client would have been downloaded over a bittorrent connection. I fount the "mcs/metin2_low.wmv" video really interesting, you can see some elements of the old Metin2 UI. DOWNLOAD LINK: [Hidden Content] I think that our money is on: Manually trying download links on the Wayback Machine: [Hidden Content] Searching any filenames for old clients on [Hidden Content] Using the Wayback Machine in order to search if by any chance there are archived M2 clients. It's not that far of a stretch, given that I've been able to do that for some relatively new, yet not available anymore OnGame clients. You can search entire websites by using wildcards, for example: [Hidden Content]* . I hope that somebody can pick up a lead on the information I've got here. EDIT: bonus screenshot I found:
    1 point
  16. I want to change these buttons, I know that the last ones are found in taskbar.tga but I can't find the first two. Image:
    1 point
  17. On a side note You actually throw away pythons garbage collector by even having destructors in most cases bool PyTuple_GetWindow(PyObject* poArgs, int pos, UI::CWindow** ppRetWindow) { PyObject* iHandle; if (!PyTuple_GetObject(poArgs, pos, &iHandle)) return false; if (!iHandle) return false; if (!PyCapsule_CheckExact(iHandle)) return false; if (auto* ptr = PyCapsule_GetPointer(iHandle, nullptr); ptr) { *ppRetWindow = static_cast<UI::CWindow*>(ptr); return true; } return false; } // Usage auto win = UI::CWindowManager::Instance().RegisterXYWindow(po, szLayer); auto capsule = PyCapsule_New(win, nullptr, CapsuleDestroyer); return capsule; void CapsuleDestroyer(PyObject* capsule) { auto rawPtr = static_cast<UI::CWindow*>(PyCapsule_GetPointer(capsule, nullptr)); UI::CWindowManager::instance().DestroyWindow(rawPtr); }
    1 point
  18. Thanks, i have compile converter, but i cant convert txt to json with .bat
    1 point
  19. M2 Download Center Download Here ( Internal ) 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.
    1 point
  20. Here you are @alondark @K3zX:
    1 point
  21. M2 Download Center Download Here ( Internal ) Hello There. I publish here this system i hope that this help you a bit with this you can hide your costume if you dont like it (if I forgot something just say it ) (this system is not complete yet you can hide only your costume no hairstyle,sash,weapon) (This system is not mine! i just found the source function and made the python codes and quest)
    1 point
  22. thanks to all for your help, do you know where exactly? ****linesrcsservergamesrcstart_position.cpp for start position DWORD g_start_position[4][2] = { { 0, 0 }, // reserved { 469300, 964200 }, // ½Å¼ö±¹ { 55700, 157900 }, // õÁ¶±¹ { 969600, 278400 } // Áø³ë±¹ }; for new character DWORD g_create_position[4][2] = { { 0, 0 }, { 459800, 953900 }, { 52070, 166600 }, { 957300, 255200 }, }; I dont rly now the difference.. But I think with a little testing it should work
    1 point
  23. DROP TABLE IF EXISTS `string`; CREATE TABLE `string` ( `name` varchar(64) NOT NULL DEFAULT '', `text` text, PRIMARY KEY (`name`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    1 point
×
×
  • 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.