Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 04/24/21 in all areas

  1. M2 Download Center Download Here ( Internal ) Hello since i was looking for this system and it was "hard" to find it because Sanii's page is gone, i had to put it together taking bits of code from here and there. It is full with all the fixes and working with armor and weapon costumes. With this system you can assign an .mse file to a Vnum via 1 single .txt file It is a nice system so everyone should be able to use it. Only thing left is to adapt it for Sash's/Wing's if someone want's to do that i can post it here. Have fun.
    3 points
  2. This tutorial is going to teach you how to compile, run and configure a server on Windows. I needed something like this a few days ago and since it doesn't exist, I decided to make it There is no addition or modification in the source or client (except for small bonuses). 0. Beginning At the end of the topic there will be two links where you will need to download: Client + Server + Source MySQL The client is based on the Metin2 Client fur r40250, I just edited it to have the classic format. Regardless the Server and Client source. 1. The files We will need to download the following files: Visual Studio Community 2019 - In order to compile both the server and the binary, we're going to need this MySQL - Connect and create the database 2. Installing The installation is easy enough for me to consider that I don't need to spend much time on this, however I hope this two pictures will facilitate (more) on what you need to do: Visual Studio Community Note: You actually just need the MSVC v142, C++ CMake, C++ ATL, C++ MFC and C++/CLI for this to work MySQL: Warning: In this tutorial we're going to use Mysql Server 5.7.33 X64 but you can (must) upgrade it to 8.0 2.1 Installing Server / Client / Database Here you need to pay attention because there's a limitation: Warning: You must unzip the file "dev" on C:\ If you don't want, follow the Mali61's topic and you need to create manually the symlinks for each core on the server. This is how it should be. Client: There isn't much to say, in pack/ you already have root and locale_de unpacked but since this is going to be localhost only, you don't need to change nothing on the serverinfo.py Bonus: I translated the client to English, just because Database: 1) Windows Key + R and write services.msc 2) Search for MySQL57 (or the version you installed) and click on Stop Since Im portuguese, yeah 3) Go to directory C:\ProgramData\MySQL 4) In the folder MySQL Server 5.7 (or the version you installed) and in the folder Data, paste the files you previously downloaded and unziped from mysql_dev.rar 5) On services.msc, start the MySQL process Back it again with the portuguese Server: These images are referenced in each core's CONFIG and conf.txt, respectively where the location is on directory C:\dev\2. Server. Warning: Don't forget to change the MySQL's user password! You need to put the same password you had when installing the MySQL. 3. Compile Server / Client Source There is nothing introductory since it is something very simple that you will be able to. Server: It's quite simple, to build the server source, we just need to open the file dev_server.sln which is located in C:\dev\1. Svn\Server\build You can build all at once or separately. Bonus: I linked the files to go to the directory C:\dev\2. Server\share\ so you don't need to c&p multiple times. Client: Same as before, open the dev_solution.sln which is located in C:\dev\1. Svn\Client Since I have a good computer, I enabled the multi-processor compilation option. If your computer is very slow while you are compiling, I suggest you deactivate by going to Properties in all the builds. 4. Starting the Server On the main directory of the server (C:\dev\2. Server) you'll have 2 bat files: start.bat* - As the name says, it will start the server clear.bat - It will clear all the server's logs * I forgot the make it dynamic so if you don't want to have on the C:\dev, you'll need to change the directory. Execute start.bat and it will show up first the db.exe, then auth's game.exe and last channel1's game.exe And there you have it, your server is now online! 5. Debug You can debug by going to Debug -> Start New Instance Bonus: I linked everything so you don't have to worry about anything 5. Credits I like to say that I don't know anything about anything and as such, everything here has its credits. @Mali61 - Client/Server compilable with VS2019 (Server & Client) @Karbust - If it wasn't for him, I couldn't have done this ThatGuyPT - The base was from his Windows Serverfiles 6. FAQ Q: Why didn't you use xampp instead of MySQL? A: At the moment I use MySQL a lot even outside of Metin2, so it makes more sense to me that it be this way. However, it is exactly the same, especially on localhost. Q: Can I migrate the source to FreeBSD? A: Yes, you can! As long as you have cmake configured, you can distribute to FreeBSD and use it there. Q: What is the id and password to enter the game? (I put this question because I know there will be someone asking this) A: You can create an account in the database, but you can use id: admin pw: 123 7. Links dev - mysql_dev All In One (Internal) If you have any questions that I can answer, feel free to write a post here.
    2 points
  3. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) [Hidden Content]
    2 points
  4. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) [Hidden Content]
    1 point
  5. M2 Download Center Download Here ( Internal ) By default, the GM mark in the envelope only appears when the GM writes to us or writes back. This modification will improve this and add a new special envelope. The solution comes from KoYGeR, a user of this forum. ///SERVER 1. Open cmd.cpp and add (intuitively, among other acmd lines): ACMD(do_get_gmlist); Find this: { "\n", NULL, 0, POS_DEAD, GM_IMPLEMENTOR } And add above: { "get_gmlist", do_get_gmlist, 0, POS_DEAD, GM_PLAYER }, 2. Open cmd_gm.cpp and at the end of the file add: ACMD(do_get_gmlist) { std::auto_ptr<SQLMsg> pmsg(DBManager::instance().DirectQuery("SELECT `mName` FROM `common`.`gmlist`")); if (pmsg->Get()->uiNumRows > 0) { for (int i = 0; i < pmsg->Get()->uiNumRows; i++) { MYSQL_ROW row = mysql_fetch_row(pmsg->Get()->pSQLResult); ch->ChatPacket(CHAT_TYPE_COMMAND, "AddGameMaster %s", row[0]); } } else { ch->ChatPacket(CHAT_TYPE_INFO, "Nie znaleziono..."); } } ///CLIENT GAME 3. Open constinfo.py and add (intuitively, without much meaning where): GM_LIST = [] 4. Open game.py and find this: net.SendEnterGamePacket() And add below: net.SendChatPacket("/get_gmlist") Find this: "PlayMusic" : self.__PlayMusic, # END_OF_WEDDING And add below: "AddGameMaster" : self.AddGameMaster, At the end of the file add: def AddGameMaster(self, gmName): constInfo.GM_LIST.append(gmName) 5. Open interfacemodule.py and find this: def __MakeWhisperButton(self, name): whisperButton = uiWhisper.WhisperButton() whisperButton.SetUpVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub") whisperButton.SetOverVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub") whisperButton.SetDownVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub") if self.IsGameMasterName(name): whisperButton.SetToolTipTextWithColor(name, 0xffffa200) else: whisperButton.SetToolTipText(name) And change to this: def __MakeWhisperButton(self, name): whisperButton = uiWhisper.WhisperButton() if name in constInfo.GM_LIST: whisperButton.SetUpVisual("d:/ymir work/ui/mail_gm_closed.tga") whisperButton.SetOverVisual("d:/ymir work/ui/mail_gm_open.tga") whisperButton.SetDownVisual("d:/ymir work/ui/mail_gm_open.tga") whisperButton.SetToolTipTextWithColor(name, 0xffffa200) else: whisperButton.SetUpVisual("d:/ymir work/ui/mail_normal_closed.tga") whisperButton.SetOverVisual("d:/ymir work/ui/mail_normal_opend.tga") whisperButton.SetDownVisual("d:/ymir work/ui/mail_normal_opend.tga") whisperButton.SetToolTipText(name) 6. Open uiwhisper.py and add (intuitively, among other imports): import constInfo Find this: def AcceptTarget(self): And at the end of the function add: if name in constInfo.GM_LIST: self.SetGameMasterLook() Find this: def OpenWithTarget(self, targetName): And at the end of the function add: if targetName in constInfo.GM_LIST: self.SetGameMasterLook() 7. Download the envelope and put in your game (etc\ymir work\ui): [Hidden Content]
    1 point
  6. M2 Download Center Download Here ( Internal ) hello people i wanted to publish something small. You can see icons that I modded at the end of 2013. The idea is or was that skills jump directly from m1 to G1 through a soul book. it was intended for an oldschool server. I think the icons are very beautiful and that's why I'm happy to share them with you. If you want to create a quest for it, you are welcome to do it. I'll adjust these later and add them here. Have fun with it Kind regards Ace Bookindow Download
    1 point
  7. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) [Hidden Content]
    1 point
  8. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) Python-Code-Translator-2-to-3 Is a Python program that reads Python 2.x source code and applies a series of fixers to transform it into valid Python 3.x code that works on all versions (py2.x - py3.x). The standard library contains a rich set of fixers that will handle almost all code. A flexible and generic library, so it is possible to write your own fixers based on your purposes. Warning: This tool purpose wasn't for doing the transition to python3, is just for the IDE purpose. INSTALLATION [Hidden Content] USING Add your .py scripts to the modules folder. Run main.bat Take the output files and move them into your application. FIXERS print Converts the print statement to the print() function. Matching multiple formats, comments, and more. Exception handling Convert except to except BaseException, since BaseException is the base class for all built-in exceptions. Converts except X, T to except X as T. xrange Renames xrange() to range() and wraps existing range() calls with list. has_key Changed dict.has_key(key) to dict..contains__(key) dict Fixes dictionary iteration methods. dict.iteritems() is converted to dict.items(), dict.iterkeys() to dict.keys(), and dict.itervalues() to dict.values(). Similarly, dict.viewitems(), dict.viewkeys() and dict.viewvalues() are converted respectively to dict.items(), dict.keys() and dict.values(). It also wraps existing usages of dict.items(), dict.keys(), and dict.values() in a call to list. exec - TODO Converts the exec statement to the exec() function. apply - TODO Removes usage of apply(). For example apply(function, *args, **kwargs) is converted to function(*args, **kwargs). raise - TODO Converts raise E, V to raise E(V), and raise E, V, T to raise E(V).with_traceback(T). If E is a tuple, the translation will be incorrect because substituting tuples for exceptions has been removed in 3.0. You can use it together with Skeleton of Python modules for IDE, from @Takuma. Download: [hide][Hidden Content]]
    1 point
  9. link: [Hidden Content] Vt: [Hidden Content] Server name : Metin2 Mega
    1 point
  10. too much noise for little things...
    1 point
  11. void CInputLogin::Entergame(LPDESC d, const char* data) { ... for (const auto& it : g_map_GM) ch->ChatPacket(CHAT_TYPE_COMMAND, "AddGameMaster %s", it.first.c_str()); }
    1 point
  12. ~~ YEIII 3 YEAR CELEBRATION... OH wait nvm still v4
    0 points
  13. Continuation of the warriorcart haha
    0 points
  14. 0 points
  15. The images have a humorous purpose, please do not take this seriously.
    0 points
  16. Hi, this tutorial will solve thist error : [Hidden Content] First of all, the bug happens when the DB tries to set the locale char set, so let's start. Open path_to_your_source/db/src/ClientManager.cpp (in my case /usr/src/mainline_released/Srcs/Sever/db/src and search your country, if you use locale/germany search germany, locale/romania search romania, locale/spain search spain,.. And look for g_stLocale = "latin2";. in my case is latin2 because i use romania, you musn't forgot your charset during the tutorial. Now open main.cpp, and edit: std::string g_stLocale = "euckr"; with your charset, in my case: std::string g_stLocale = "latin2"; Save and exit. Now open, path_to_your_source/libsql/AsyncSQL.cpp ( libsql no libmysql be careful) At line 180 edit: m_stLocale = c_pszLocale; with: m_stLocale = "latin2"; ( in my case latin2, you need to put your charset) And at the end of the file edit: void CAsyncSQL2::SetLocale(const std::string & stLocale) { m_stLocale = stLocale; QueryLocaleSet(); } with: void CAsyncSQL2::SetLocale(const std::string & stLocale) { if(m_stLocale != stLocale) { m_stLocale = stLocale; QueryLocaleSet(); } } Now, compile. In putty or virtualbox put the next commands: cd /path_to_your_source/libsql in my case cd /usr/src/mainline_released/Srcs/Sever/libsql gmake clean gmake After that : cd /path_to_your_source/db/src gmake clean After the clean, open the folder .obj and verify if is empty, if isn't empy, empty it delete all files. After that gmake Now the last step, open navicat connect to your server and on the databases account, common, player, hotbackup and log, right-click->Database properties. Set your character set: latin1, latin2, latin5 And collation: I use general but if you fin your country you can put it. That was all, and sorry for my english.
    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.