Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 08/15/16 in all areas

  1. M2 Download Center Download Here ( Internal ) Features Written in c++, best performance with multithreading Beautiful GUI, inspired in Blizzard All errors and exceptions throw user friendly messages International Multilanguage Fast download files Method of Hash (CRC32) by default Banner in home (Promotion, Event, New Image, etc...) + News / Patch notes Initialize client with arguments Tool user friendly for generate serverlist hashs New config game for Metin built-in (Requirements: metin2client source) Languages Availables English (US) (Full language correctly) Espanhol (ES) (Translate by : Jesús ) Portuguese (BR) (Full language correctly) Romanian (RO) (Translate by: Abel (Tiger) ) German (DE) (Translate by : Core | Simplex2 ) Turkish (TR) (Need review) Czech (Translate by : Joseph Lochy ) If your language needs review, or you want to help translate the language of their country to add to the list, you can contact me by skype and help correct . Some Community version limitations - News/PatchNotes maximum 255 characters - Without support for client initialize with arguments - Without change Icon Application - Without change Logo (Metin2 logo default) - Without change Background - Without custom Layout - Without possibility of choose hash method - Receive updates direct in Topic/forum - Without support Skype - Binarie name default for initialize: metin2client.exe INSTALL PART SERVER Rev: 140816 : [Hidden Content] [ChangeLog 090816.1] - Fix Application crash when all files updated. [ChangeLog 090816.2] - Removed limit bandwith of Community Version: because failing to download multiple files/ buffer fail. [ChangeLog 140816] - Added Language Czech (translate by : Joseph Lochy ) - Update Language Spanish ( translate by : Jesús ) - Update Language Romanian ( translate by: Abel (Tiger) ) VirusScan : [Hidden Content] 1. In his HOST, upload the files from the "Host Files" 2. Open GameLauncher_Manager.exe select "TAB" Server Hash. 3. Select the client directory and generate the Hash 4. Put the new "serverlist.data" in /gamelauncher/conf/ Structure [patch.notes] = Here you put an text (news/patch notes) [serverlist.data] = Responsible for client hash [slide1.png] = Banner image. The extension must be .png and same size . 5. Put the client files in the folder "/gamelauncher/data/" (host) INSTALL PART CLIENT Structure [ldata] = Folder that stores settings (This folder is the one that does not create automatic. It must exist for GameLauncher work.) [gameconfig.ini] = Metin2 client config [LauncherConfig.ini] = Launcher Config [serverconf.data] = Host configs 1. Open GameLauncher_Manager.exe and select "TAB" Config for GameLauncher Fill in the fields Homepage: Here you put the link to your website. This link must be prefixed with http:// URL Hosting: Here you put the link from the main folder where you will create the folder "gamelauncher" e.g. metin2server.net (public_html) 2. Click in "Save". Will generate a file "serverconf.data".Place in the "ldata" folder within the client. INSTALL PART CLIENT SOURCE 1. In "PythonSystem.cpp", put in header //Boost #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/ini_parser.hpp> #include <boost/lexical_cast.hpp> #define ENABLE_NEWGAMECONFIG 2. In "PythonSystem.cpp" search function "LoadConfig()" And replace with : bool CPythonSystem::LoadConfig() { #ifdef ENABLE_NEWGAMECONFIG boost::property_tree::ptree r_pt; /** * File exists? */ try { boost::property_tree::ini_parser::read_ini("ldata/gameconfig.ini", r_pt); //resolution m_Config.width = r_pt.get<DWORD>("Metin2.WIDTH"); m_Config.height = r_pt.get<DWORD>("Metin2.HEIGHT"); //frequency m_Config.frequency = r_pt.get<DWORD>("Metin2.FREQUENCY"); //gamma m_Config.gamma = r_pt.get<int>("Metin2.GAMMA"); //windowmode //fullscreen m_Config.bWindowed = r_pt.get<bool>("Metin2.WINDOW_MODE"); //software cursor m_Config.is_software_cursor = r_pt.get<bool>("Metin2.SOFTWARE_CURSOR"); //Sound Music m_Config.music_volume = r_pt.get<float>("Metin2.MUSIC", 0.0f); //Sound Effects m_Config.voice_volume = (char)r_pt.get<int>("Metin2.EFFECTS"); //fog m_Config.iDistance = r_pt.get<int>("Metin2.VISIBILITY"); //tln m_Config.bSoftwareTiling = (r_pt.get<std::string>("Metin2.SOFTWARE_TILING").length() > 1 ? 0 : r_pt.get<int>("Metin2.SOFTWARE_TILING")); //INT in byte //shadow m_Config.iShadowLevel = r_pt.get<int>("Metin2.SHADOW"); //IME GAME m_Config.bUseDefaultIME = r_pt.get<bool>("Metin2.GAME_IME"); //IME Extern m_Config.bUseDefaultIME = r_pt.get<bool>("Metin2.EXTERN_IME"); //Others m_Config.bDecompressDDS = r_pt.get<bool>("Metin2.DECOMPRESSED_TEXTURE"); m_Config.bViewChat = r_pt.get<bool>("Metin2.VIEW_CHAT"); m_Config.bAlwaysShowName = r_pt.get<bool>("Metin2.ALWAYS_VIEW_NAME"); m_Config.bShowDamage = r_pt.get<bool>("Metin2.SHOW_DAMAGE"); m_Config.bShowSalesText = r_pt.get<bool>("Metin2.SHOW_SALESTEXT"); m_Config.bNoSoundCard = false; if (m_Config.bWindowed) { unsigned screen_width = GetSystemMetrics(SM_CXFULLSCREEN); unsigned screen_height = GetSystemMetrics(SM_CYFULLSCREEN); if (m_Config.width >= screen_width) { m_Config.width = screen_width; } if (m_Config.height >= screen_height) { m_Config.height = screen_height; } } m_OldConfig = m_Config; } catch (boost::property_tree::ini_parser_error &e) { fprintf(stderr, "Game Config Error: %s\n", e.message().c_str()); } catch(const boost::property_tree::ptree_error &e) { fprintf(stderr, "Game Config Error: %s\n", e.what()); } return true; #else FILE * fp = NULL; if (NULL == (fp = fopen("metin2.cfg", "rt"))) return false; char buf[256]; char command[256]; char value[256]; while (fgets(buf, 256, fp)) { if (sscanf(buf, " %s %s\n", command, value) == EOF) break; if (!stricmp(command, "WIDTH")) m_Config.width = atoi(value); else if (!stricmp(command, "HEIGHT")) m_Config.height = atoi(value); else if (!stricmp(command, "BPP")) m_Config.bpp = atoi(value); else if (!stricmp(command, "FREQUENCY")) m_Config.frequency = atoi(value); else if (!stricmp(command, "SOFTWARE_CURSOR")) m_Config.is_software_cursor = atoi(value) ? true : false; else if (!stricmp(command, "OBJECT_CULLING")) m_Config.is_object_culling = atoi(value) ? true : false; else if (!stricmp(command, "VISIBILITY")) m_Config.iDistance = atoi(value); else if (!stricmp(command, "MUSIC_VOLUME")) { if(strchr(value, '.') == 0) { // Old compatiability m_Config.music_volume = pow(10.0f, (-1.0f + (((float) atoi(value)) / 5.0f))); if(atoi(value) == 0) m_Config.music_volume = 0.0f; } else m_Config.music_volume = atof(value); } else if (!stricmp(command, "VOICE_VOLUME")) m_Config.voice_volume = (char) atoi(value); else if (!stricmp(command, "GAMMA")) m_Config.gamma = atoi(value); else if (!stricmp(command, "IS_SAVE_ID")) m_Config.isSaveID = atoi(value); else if (!stricmp(command, "SAVE_ID")) strncpy(m_Config.SaveID, value, 20); else if (!stricmp(command, "PRE_LOADING_DELAY_TIME")) g_iLoadingDelayTime = atoi(value); else if (!stricmp(command, "WINDOWED")) { m_Config.bWindowed = atoi(value) == 1 ? true : false; } else if (!stricmp(command, "USE_DEFAULT_IME")) m_Config.bUseDefaultIME = atoi(value) == 1 ? true : false; else if (!stricmp(command, "SOFTWARE_TILING")) m_Config.bSoftwareTiling = atoi(value); else if (!stricmp(command, "SHADOW_LEVEL")) m_Config.iShadowLevel = atoi(value); else if (!stricmp(command, "DECOMPRESSED_TEXTURE")) m_Config.bDecompressDDS = atoi(value) == 1 ? true : false; else if (!stricmp(command, "NO_SOUND_CARD")) m_Config.bNoSoundCard = atoi(value) == 1 ? true : false; else if (!stricmp(command, "VIEW_CHAT")) m_Config.bViewChat = atoi(value) == 1 ? true : false; else if (!stricmp(command, "ALWAYS_VIEW_NAME")) m_Config.bAlwaysShowName = atoi(value) == 1 ? true : false; else if (!stricmp(command, "SHOW_DAMAGE")) m_Config.bShowDamage = atoi(value) == 1 ? true : false; else if (!stricmp(command, "SHOW_SALESTEXT")) m_Config.bShowSalesText = atoi(value) == 1 ? true : false; } if (m_Config.bWindowed) { unsigned screen_width = GetSystemMetrics(SM_CXFULLSCREEN); unsigned screen_height = GetSystemMetrics(SM_CYFULLSCREEN); if (m_Config.width >= screen_width) { m_Config.width = screen_width; } if (m_Config.height >= screen_height) { m_Config.height = screen_height; } } m_OldConfig = m_Config; fclose(fp); // Tracef("LoadConfig: Resolution: %dx%d %dBPP %dHZ Software Cursor: %d, Music/Voice Volume: %d/%d Gamma: %d\n", // m_Config.width, // m_Config.height, // m_Config.bpp, // m_Config.frequency, // m_Config.is_software_cursor, // m_Config.music_volume, // m_Config.voice_volume, // m_Config.gamma); return true; #endif // ENABLE_NEWGAMECONFIG } 3. Search function "SaveConfig()" and replace with: bool CPythonSystem::SaveConfig() { #ifdef ENABLE_NEWGAMECONFIG boost::property_tree::ptree pt; pt.put("Metin2.WIDTH", m_Config.width); pt.put("Metin2.HEIGHT", m_Config.height); pt.put("Metin2.FREQUENCY", m_Config.frequency); pt.put("Metin2.GAMMA", m_Config.gamma); pt.put("Metin2.WINDOW_MODE", (m_Config.bWindowed == 1 ? 1 : 0)); pt.put("Metin2.FULLSCREEN", (m_Config.bWindowed == 1 ? 0 : 1)); pt.put("Metin2.SOFTWARE_CURSOR", boost::lexical_cast<std::string>(m_Config.is_software_cursor)); pt.put("Metin2.MUSIC", m_Config.music_volume); pt.put("Metin2.EFFECTS", m_Config.voice_volume); pt.put("Metin2.VISIBILITY", m_Config.iDistance); pt.put("Metin2.SOFTWARE_TILING", m_Config.bSoftwareTiling); //tln pt.put("Metin2.SHADOW", m_Config.iShadowLevel); pt.put("Metin2.GAME_IME", (m_Config.bUseDefaultIME == true ? 0 : 1)); pt.put("Metin2.EXTERN_IME", (m_Config.bUseDefaultIME == true ? 1 : 0)); //Game Config Others pt.put("Metin2.DECOMPRESSED_TEXTURE", (m_Config.bDecompressDDS == true ? 1 : 0)); pt.put("Metin2.VIEW_CHAT", (m_Config.bViewChat == true ? 1 : 0)); pt.put("Metin2.ALWAYS_VIEW_NAME", (m_Config.bAlwaysShowName == true ? 1 : 0)); pt.put("Metin2.SHOW_DAMAGE", (m_Config.bShowDamage == true ? 1 : 0)); pt.put("Metin2.SHOW_SALESTEXT", (m_Config.bShowSalesText == true ? 1 : 0)); try { boost::property_tree::ini_parser::write_ini("ldata/gameconfig.ini", pt); } catch (boost::property_tree::ini_parser_error &e) { fprintf(stderr, "Game Config Error: %s\n", e.message().c_str()); } catch(const boost::property_tree::ptree_error &e) { fprintf(stderr, "Game Config Error: %s\n", e.what()); } return true; #else FILE *fp; if (NULL == (fp = fopen("metin2.cfg", "wt"))) return false; fprintf(fp, "WIDTH %d\n" "HEIGHT %d\n" "BPP %d\n" "FREQUENCY %d\n" "SOFTWARE_CURSOR %d\n" "OBJECT_CULLING %d\n" "VISIBILITY %d\n" "MUSIC_VOLUME %.3f\n" "VOICE_VOLUME %d\n" "GAMMA %d\n" "IS_SAVE_ID %d\n" "SAVE_ID %s\n" "PRE_LOADING_DELAY_TIME %d\n" "DECOMPRESSED_TEXTURE %d\n", m_Config.width, m_Config.height, m_Config.bpp, m_Config.frequency, m_Config.is_software_cursor, m_Config.is_object_culling, m_Config.iDistance, m_Config.music_volume, m_Config.voice_volume, m_Config.gamma, m_Config.isSaveID, m_Config.SaveID, g_iLoadingDelayTime, m_Config.bDecompressDDS); if (m_Config.bWindowed == 1) fprintf(fp, "WINDOWED %d\n", m_Config.bWindowed); if (m_Config.bViewChat == 0) fprintf(fp, "VIEW_CHAT %d\n", m_Config.bViewChat); if (m_Config.bAlwaysShowName != DEFAULT_VALUE_ALWAYS_SHOW_NAME) fprintf(fp, "ALWAYS_VIEW_NAME %d\n", m_Config.bAlwaysShowName); if (m_Config.bShowDamage == 0) fprintf(fp, "SHOW_DAMAGE %d\n", m_Config.bShowDamage); if (m_Config.bShowSalesText == 0) fprintf(fp, "SHOW_SALESTEXT %d\n", m_Config.bShowSalesText); fprintf(fp, "USE_DEFAULT_IME %d\n", m_Config.bUseDefaultIME); fprintf(fp, "SOFTWARE_TILING %d\n", m_Config.bSoftwareTiling); fprintf(fp, "SHADOW_LEVEL %d\n", m_Config.iShadowLevel); fprintf(fp, "\n"); fclose(fp); return true; #endif // ENABLE_NEWGAMECONFIG } Notes: Any doubt or mistake you can ask here on the topic. To more details about the PRO version, you can contact me by skype. Request in my profile or PM
    1 point
  2. M2 Download Center Download Here ( Internal ) A collision or crash is an event in which two or more bodies exert forces on each other for a relatively short time. Although the most common colloquial use of the word "collision" refers to incidents in which two or more objects collide, the scientific use of the word "collision" implies nothing about the magnitude of the force. Some examples of physical interactions that scientists would consider collisions: An insect touches its antenna to the leaf of a plant. The antenna is said to collide with leaf. A cat walks delicately through the grass. Each contact that its paws make with the ground is a collision. Each brush of its fur against a blade of grass is a collision. I will come back with a video tonight [File: src/Client/Source/GameLib/ActorInstanceCollisionDetection.cpp] //1.) Search: #include "../eterLib/GrpMath.h" //2.) Add bellow: #include "../UserInterface/PythonBackground.h" #include "../UserInterface/Locale_inc.h" //3.) Search: BOOL CActorInstance::TestActorCollision(CActorInstance & rVictim) { //4.) Add bellow: #ifdef ENABLE_STOP_COLISSION_GLOBAL /********************************************************************* * date : 2016.02.16 * function : Stop Colission * developer : VegaS * skype : sacadatt.amazon * description : Checks if the victim is one of the examples below you can easily configure. If the victim was found success as vnum site / breed ve you could go through it no longer block. */ /************ * The first value is the minimum value and the second value is the maximum value of pet vnum (mob_proto) - change 34051 with your max vnum of pet */ int pListPet[2] = {34001, 34051}; /************ * You can add whatever you like vnum of npc or monster (mob_proto) */ int pListGlobal[] = {9001, 9002, 9003, 9004, 9005, 9006, 20011, 20091, 20092, 20093, 20094, 20095, 30000}; /************ * You can add what mapname you want for enable this stop collission global like pet / npc */ const char* strMapListGlobal[] = {"metin2_map_a1", "metin2_map_a3", "metin2_map_b1", "metin2_map_b3", "metin2_map_c1", "metin2_map_c3", "season2/metin2_map_skipia_dungeon_01", "season2/metin2_map_skipia_dungeon_02", "metin2_map_duel"}; /************ * Location name of the map where the event takes place ox */ const char* strMapEventOx = "season1/metin2_map_oxevent"; std::string stringName = CPythonBackground::Instance().GetWarpMapName(); for (int i = 0; i < _countof(strMapListGlobal); i++) { #ifdef ENABLE_STOP_COLLISION_PLAYER_OX if (strMapEventOx == stringName) // Check if u are place in map ox { if (0 <= rVictim.GetRace() && rVictim.GetRace() <= 7) // Check if the victim through which pass over a player (change 7 with 8 if u have wolfman) return FALSE; // Stop collission for player --> You can go through players now successfully without lock yourself } #endif if (strMapListGlobal[i] == stringName) // Check if you are in one of the maps listed in the global list { for (int i = 0; i < _countof(pListGlobal); i++) { if (rVictim.GetRace() == pListGlobal[i] || pListPet[0] <= rVictim.GetRace() && rVictim.GetRace() <= pListPet[1]) // Verify that the victim is npc vnum listed above, or if a pet. return FALSE; // Stop collission for global vnum like a pet or npc } } } #endif [File: src/Client/Source/UserInterface/Locale_inc.h] //1.) Search: #define ENABLE_COSTUME_SYSTEM //2.) Add bellow: #ifndef ENABLE_STOP_COLISSION_GLOBAL #define ENABLE_STOP_COLISSION_GLOBAL #define ENABLE_STOP_COLLISION_PLAYER_OX #endif
    1 point
  3. M2 Download Center Download Here ( Internal ) Hi. I wanted to improve my lua skills, so I thought I could create a useful software, something that I would use, and I'm here to post it if someone wants it too. A friend asked me if I could add a sql option, so I added it. Since it's not a "thing from another world", just run the *.bat file with your item_proto_dump.xml on the same folder. Then wait until the process is finished, and go to output folder and take what you wanted. Download: MEGA. Source v1.5: Pastebin. Changelog: Hope it's useful to anyone.
    1 point
  4. Hello dear dev's, this thread is created just to suite one specific topic: The vanilla core. I'd like to announce that the new version will be released very soon (this time open source). Meanwhile I'd like you to take part in it! I have some few suggestions that I'd like to commit. But not only this - I want to read your suggestions. What do you think could be part of the new vanilla core versions? The topic is also meant for the future, so when I release the core it's thread is only for troubleshooting and feedback. Features etc. can be discussed here then to give you a better overview about the project. Also I want to note one small thing: I do not recommend anyone to use the older vanilla core distributions! This has one simple reason: They're outdated. New security breaches were discovered and they are not fixed in those binaries. If you're using the source you can fix them by yourself. But I recommend you to wait for the new version. At first I'd like to say that there will be 3 different versions. All have their own codenames and have a different set of features: - STABLE: This branch is only focused on the main goal of the vanilla core - a core that is smooth, stable and fast along with many, many CONFIG-options to choose from so you can suit the core by yourself. Feature changes will be delayed until they're approved by testing on a different branch. Security fixes will be tested directly and pushed to this branch as soon as possible to ensure a secure experience. - BETA: This branch is focused on testing feature changes. They could be unstable, but of course the aim is not to be. It's not recommended to use this on production servers, only for testing purposes. New features will be pushed directly to this branch and a core along with it's source code will be released as soon as possible. - SANDBOX: Yep, I want to create a sandbox. This way I can re-develop features I would've released with my project (damn the HDD crash). In this branch you can suggest features that may not suit everyone. It's mainly for releasing working features and concepts and play a bit with the source. One side note: I won't use git nor svn. I'll develop locally and upload the core along with it's sources accordingly. Everyone is free to implement their own code and send it to me. After I've reviewed it chances are it'll get into the next vanilla version. So, there are the first few things I'd like to ask you. 1.) What do you think about the option to have another compression algorithm? (I'll also release the client part along with an archiver). My choice would be lz4hc instead of lzo and I'd like to give you the option to switch between those two compressions. Of course standard would be lzo to ensure compatibility. 2.) What do you think about new ways of encryption when not defining the advanced security macro? Normally this would lead into a pong being sent and xtea being used for encryption. I'd change xtea with something else - my choice would be AES-256. 3.) What would you think about a new client config? Of course it'd be open source. Let me hear your opinions and please feel free to give me every suggestion you may have.
    1 point
  5. Reupload: Fully untouched 34083 server files & DB.7z
    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.