Jump to content

Leaderboard

Popular Content

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

  1. Hi Community, As you have noticed, all sections of Metin2 are being cleaned up. All topics with a dead link have been temporarily moved to this section. 400 topics have been removed for dead links! This means that all topics you find in the Realease section, have a download link that works. Huge thanks to @ASIKOO and @Raylee for their work and for making this possible. But that's not all! We are going to upload all files to our new download platform, which will prevent dead links. It will be the same with dead screenshots links. In addition, all topics will be re-formatted and moved to the appropriate section. We'll also be redesigning the forum tree. Are you motivated by the metin2.dev community? Do you want to get involved in the forum? Then join us! We are actively looking for motivated members to update the forum. We need : People who own the files of a dead link and would be willing to upload them again for the community. All dead links are here People to upload the release files to our download platform People to redesign some topics to make them more readable If you want to participate, post a message on this topic and we will come back to you to give you all the necessary information. Discord is necessary for us to be able to communicate easily with each other. Help us to make metin2.dev a welcoming, clean and comprehensive forum that will allow the whole Metin2 community to evolve. Who without you, metin2.dev would be nothing ... The staff
    7 points
  2. Note: This tutorial was originally written on 26-01-2017 for a pserver. Note: I don't have the SDK, I'll notify the admins if I manage to find one (it's missing on the temp forum) Note: AhnLab HackShield is deprecated, it has not received any update since 2013 or similar 1. Extern Go to Extern/include and create a new folder called hackshield (If you already have some files inside that remove all of them) Put the files from (Your HackShield SDK Zip)/Include to Extern/include/hackshield This step must be done on both Client and Server Extern Copy from (Your HackShield SDK Zip)/Lib/Win/x86/MultiThreaded to Extern/lib the following files: (Client only) HShield/HShield.lib AntiCrack/AntiCpXSvr.lib Copy (Your HackShield SDK Zip)/Developer/Lib/Win/x86/Multithreaded/HShield.lib to Extern/lib/HShield_d.lib (Yes you have to rename this) Copy from (Your HackShield SDK Zip)/Lib/FreeBSD/x86/AntiCrack/LibAntiCpXSvr_st.a to Extern/lib (Server only) Create a new file called hshieldLibLink.h in Extern/include/hackshield (Both Client and Server) and put this: #ifndef _HACKSHIELD_INCLUDE_LIBLINK_H_ #define _HACKSHIELD_INCLUDE_LIBLINK_H_ #ifdef _MSC_VER #ifdef _DEBUG #pragma comment(lib,"hshield_d.lib") #else #pragma comment(lib,"hshield.lib") #endif #pragma comment(lib,"HsUserUtil.lib") #endif #endif 2- Client source: Adding /CLR -- Speaicl note: you need to rebuild libjpeg, lzo, cryptopp with /MD and /MDd (defaults are /MT for CryptoPP, /MD for libjpeg and lzo if cmake is being used) You have to edit the VCXProjects Go to C/C++ -> All Options and find /M In Distribute/Release you have to set the "Runtime Library" value to /MD In Debug you have to set that to /MDd Now you have to go on General (In the project settings) and add "Support with Common Language Runtime" to 1 (/clr) Now go on C/C++ -> All Options and find /RTC and change that to "Default" Now go to All Options and write in command line: "/RTC:NO" --- Special note: this step was intended for an old CryptoPP version (I think v5.x?) follow this step only if you receive issues Now rebuild everything and you don't have "mutex is not supported in CLR" error 3. Client source: Adding hackshield Open UserInterface/HackShield.cpp You will find the following lines: (Or something similar at the beginning of the file) #if defined(LOCALE_SERVICE_EUROPE) #define METIN2HS_MONITORING_SERVER_ADDR "79.110.88.84" #elif #define METIN2HS_MONITORING_SERVER_ADDR "79.110.88.84" // GF #endif //#define METIN2HS_MONITORING_SERVER_ADDR "119.192.130.160" //±è¿ë¿í pc Replace all with this: #define METIN2HS_MONITORING_SERVER_ADDR "YOUR IP OF THE MONITOR SERVER" -- Extra note: the monitoring server should be a server used to monitor running instances of HackShield, I never went deeply into this, perhaps you can find some extra information on the HackShield SDK docs Ok now open UserInterface/Locale_inc.h and add this: #define USE_AHNLAB_HACKSHIELD // HackShield #define METIN2HS_INCLUDE hackshield Open HackShield.h and replace: #include "HackshieldLicense.h" with: #include "HackshieldLicense_metin2client.h" Open UserInterface/HackshieldLicense_metin2client.h and replace: #define METIN2HS_EXE_FILE_NAME "metin2client.bin" With: #define METIN2HS_EXE_FILE_NAME "NAME OF THE METIN2 CLIENT.EXTENSION" Example: #define METIN2HS_EXE_FILE_NAME "testclient_arves100.exe" Now you need to setup your project for compile and use without error Open UserInterface Properties page: When you see Common Language Runtime Support (CLR) set it to /clr (If you use anyother it wont compile\link properly) Now go on C/C++ -> Enable C++ exception (sorry for bad translate <.<) Change "Yes (/EHsc)" to "Yes with SEH exceptions (/EHa)" Extra: If you get error on "DEFAULT_HSMS_TIME_OUT not defined" you have to do this: Open Extern/include/hackshield/hshield.h and delete: DEFAULT_HSMS_TIME_OUT Add after: #ifndef _HSHIELD_H_INC #define _HSHIELD_H_INC this: // Fix for compilation error #ifndef DEFAULT_HSMS_TIME_OUT #define DEFAULT_HSMS_TIME_OUT (5 * 1000) // 5ÃÊ #endif - 3. Server Open game/src/Makefile and change this: # HackShield INCDIR += -I../../libhackshield/include LIBDIR += -L../../libhackshield/lib LIBS += -lanticpxsvr to: # HackShield *New* INCDIR += -I../../../Extern/include/hackshield LIBS += -lanticpxsvr_st Open game/src/HackShield_Impl.cpp and edit this line: handle_ = _AhnHS_CreateServerObject("metin2client.bin.hsb"); with this: handle_ = _AhnHS_CreateServerObject("data/<client file name.extension>.hsb"); Open your Auth and Game CONFIGs and add this: hackshield_enable: 1 Extra: "hackshield_first_check_time" and "hackshield_check_cycle_time" are 2 CONFIG variables First check time: it tells after what second the server should ask the first heartbeat of the hackshield Cycle time: it tells after what second the server should ask a heartbeat of the hackshield 4. Client binary You have to copy from (HackShield SDK Zip)/Bin/Win/x86/HShield to Client Binary Folder If you want to use development hackshield (raccomended for Debug or QA) you have all content from (HackShield SDK Zip)/Developer/Bin to (Client Binary Folder)/HShield Remember: Do not distribute the development file (/Developer/Bin/), always use the release (/Bin/) If you want to periodically release updates for your HackShield you have to copy all content from (HackShield SDK Zip)/Bin/Win/x86/Update to your HShield folder on Client Binary Folder 5. Configuring Hackshield We will work on (HackShield SDK Zip)/Bin/Win/x86: We must setup the AntiCrack that will check if the Client integrity is ok AntiCrack/HSBGen.exe will generate our HSB file AntiCrack/HSBHelper.exe will check if the files are ok Explanation: The Output file will be the same name as we setted in HackShield_Impl.cpp before If you had to sign your exe make sure you do that after you used HSBGenerator If you use any other packer than UPX you must have to select "Execute Packet Exe File" Now it will generate a hsb file, put this file on (Server Binary Folder)/data/ You can now check the hsb file with the client to see if everything match We need to tell hackshield witch server he uses to update our HShield files (Only if you want HSUpdate.exe) Open Util/HSUpSetEnv.exe -- Extra note: this is used for updating HackShield content from a remote server, you might want to ship it and do not use HSUpdate.exe Let me explain this application: After you save it will create a HSUpdate.env file witch you have to put on (Client Binary Folder)/HShield Extra: Configuring HSUpdate server If you want to use FTP trasfer method you have to configure a ftp server with username and password you want to use (i won't explain this) You have to copy the folder PatchSet to your webserver Normally when you update your HackShield SDK you will get the update PatchSet for updating your client's HackShield to lateset version Everytime you get an HackShield SDK Update (mine is from 2012) you have to put the new PatchSet and distribute the new client (.exe) Extra: Disabling HS Monitor HackShield.cpp, change the _AhnHS_StartMonitor function to this: #ifdef ENABLE_HACKSHIELD_MONITOR DWORD dwRet = _AhnHS_StartMonitor (HsExtError, szInterfaceFilePath); if( dwRet != ERROR_SUCCESS ) { MessageBox(NULL, MA_T("START_MONITORING_SERVICE_ERROR"), "HACK_SHIELD", MB_OK); } #endif Extra: Customizing names We see before how to customize .hsb file name for Server, Check out Server part if you miss out HSMonitor Client Name and Version can be setted in UserInterface/HackShield.cpp by editing this: strcpy(HsExtError.szGameVersion, "1.0.0.0"); //Game ë²„ì „ strcpy(HsExtError.szUserId, "Metin2User_test"); //ìœ ì € ID If you changed the locale/ folder you also have to edit this: #define PREFIX_LOCALE "locale/" If you want to edit the EhSvc.dll Name and Folder you have to edit this: #ifdef _DEBUG MA_PathMerge(szInterfaceFilePath, MA_ARRAYCOUNT(szInterfaceFilePath), szModuleDirPath, "hshield\\EHsvc.dll"); #else MA_PathMerge(szInterfaceFilePath, MA_ARRAYCOUNT(szInterfaceFilePath), szModuleDirPath, "hshield\\EHsvc.dll"); #endif If you want to change the HShield folder you have to edit this: MA_PathMerge(szFullFilePath, MA_ARRAYCOUNT(szFullFilePath), szModuleDirPath, "hshield"); I don't have any working image or anything to show, I think I can confirm that it should work fine.
    6 points
  3. Hi Community, A new platform has just been set up on metin2.dev FOR metin2.dev. This platform allows you to host your own images for your topics. This initiative aims to avoid dead links. You can find this platform in the top right menu or by clicking on this link. Image hosting on M2D Shack is now mandatory for all releases you publish on the forum. Current images will be uploaded to M2D Shack very soon. Please understand that the lifespan of the images is an important element in the survival of the forum. If you have any problems or suggestions, do not hesitate to let us know. The staff
    5 points
  4. M2 Download Center Download Here ( Internal ) Rather than having this crap die in my HDD I've decided to share them, they range around 2017-2018 utils.h optimizations (You need a c++11 compiler) utils.h //Replace: out = (long long) strtoull(in, NULL, 10); //To: out = strtoll(in, NULL, 10); //Replace: out = (unsigned long) strtoul(in, NULL, 10); //To: out = strtoul(in, NULL, 10); //Replace: out = (long) strtol(in, NULL, 10); //To: out = strtol(in, NULL, 10); //Add: inline bool str_to_number (unsigned long long& out, const char *in) { if (0==in || 0==in[0]) return false; out = strtoull(in, NULL, 10); return true; } Useless check in char.cpp //From: if(val==0 && val>0) pack.value = val; else pack.value = val; //To: pack.value = val; Random stuff: Colored console messages (Windows only - you can do a nix version by using ansii colors) - this code was made in 2017, the quality definitly shows as it could be extended or make a singular API for console (working for both nix and win) Sample usage: #include "../libthecore/include/winconsole.h" void test_console() { winconsole_set_color(CONSOLE_COLOR_GREEN); //This set the color //You can find the list of all usable color in winconsole.h printf("Test WinConsole\n"); //Print the text with the new color winconsole_resetcolor(); //Always reset color else the console will continue print the same color printf("No color\n"); //Print with default color (WHITE) } winconsole.h (libthecore/include) /* --------------------------------- ARVES100 WinConsole Required for colored console ------------------------------------ */ #ifndef _ARVES100_INCLUDE_WINCONSOLE_HEADER_C_ #define _ARVES100_INCLUDE_WINCONSOLE_HEADER_C_ #define CONSOLE_COLOR_BLACK 0 #define CONSOLE_COLOR_RED 4 #define CONSOLE_COLOR_BLUE 9 #define CONSOLE_COLOR_WHITE 15 #define CONSOLE_COLOR_GREEN 10 #define CONSOLE_COLOR_YELLOW 14 #define CONSOLE_COLOR_PURPLE 13 int winconsole_initialize(); void winconsole_resetcolor(); void winconsole_setcolor(int color); void winconsole_pause(); #endif winconsole.c (libthecore/src) /* ARVES100 COLORED CONSOLE FOR WIN32 CODED 06.01.2017 */ #include "stdafx.h" #if defined(_WIN32) || defined(WIN32) || defined(__WIN32__) #include <Windows.h> #include <stdio.h> #include <stdlib.h> #include "winconsole.h" FILE* fp = NULL; HANDLE StdOut = NULL; int winconsole_initialize() { StdOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(StdOut,CONSOLE_COLOR_WHITE); return 0; } void winconsole_resetcolor() { SetConsoleTextAttribute(StdOut, CONSOLE_COLOR_WHITE); } void winconsole_setcolor(int color) { SetConsoleTextAttribute(StdOut, color); } void winconsole_pause() { // Alternativa portatile usando scanf+printf (cstdio) printf("Press any key to continue..."); char ch; scanf("%1c",&ch); } #endif Example usage on log.c (libthecore) /********************************************************/ /* COLORED CONSOLE FOR WIN32 (PRIVATE FREE SYSTEM) */ /* CODED BY ARVES100 (06/01/2017) */ /********************************************************/ //libthecore/src/log.c #define SYSERR_FILENAME "syserr.txt" #define PTS_FILENAME "PTS.txt" #include "winconsole.h" #endif /////////////////////// #else void _sys_err(const char *func, int line, const char *format, ...) { va_list args; time_t ct = time(0); char *time_s = asctime(localtime(&ct)); char buf[1024 + 2]; // \n을 붙이기 위해.. int len; if (!log_file_err) return; winconsole_setcolor(CONSOLE_COLOR_RED); time_s[strlen(time_s) - 1] = '\0'; len = snprintf(buf, 1024, "SYSERR: %-15.15s :: %s: ", time_s + 4, func); buf[1025] = '\0'; if (len < 1024) { va_start(args, format); vsnprintf(buf + len, 1024 - len, format, args); va_end(args); } strcat(buf, "\n"); // log_file_err 에 출력 fputs(buf, log_file_err->fp); fflush(log_file_err->fp); // log_file_sys 에도 출력 fputs(buf, log_file_sys->fp); fflush(log_file_sys->fp); fputs(buf, stdout); fflush(stdout); winconsole_resetcolor(); } #endif /////////////////// void sys_log(unsigned int bit, const char *format, ...) { va_list args; if (bit != 0 && !(log_level_bits & bit)) return; #ifdef __WIN32__ winconsole_setcolor(CONSOLE_COLOR_BLUE); #endif if (log_file_sys) { time_t ct = time(0); char *time_s = asctime(localtime(&ct)); fprintf(log_file_sys->fp, sys_log_header_string); time_s[strlen(time_s) - 1] = '\0'; fprintf(log_file_sys->fp, "%-15.15s :: ", time_s + 4); va_start(args, format); vfprintf(log_file_sys->fp, format, args); va_end(args); fputc('\n', log_file_sys->fp); fflush(log_file_sys->fp); } #ifndef __WIN32__ // log_level이 1 이상일 경우에는 테스트일 경우가 많으니 stdout에도 출력한다. if (log_level_bits > 1) { #endif fprintf(stdout, sys_log_header_string); va_start(args, format); vfprintf(stdout, format, args); va_end(args); fputc('\n', stdout); fflush(stdout); #ifndef __WIN32__ } #else winconsole_resetcolor(); #endif } Teamspeak 3 python interfaces This was a leftover for an old system a pserver told me to make and then simply dropped the idea (TS3 SDK was too expensive) this is what is left to, I don't have any source code in client side and I do not provide any support for this, it's just a working python interface that needs to be finished. Pretty much the same you would achieve if you unpack the root where this system was originally going to be. [Hidden Content] XMLCreator updated Who does remember the old XML files from Tim's archive? This is an updated version for Tim's 40k archiver that was based from a version of Tim's old 2089 archiver made by some guy on epvp. [Hidden Content] You need ActionScript3 to build this. Wrong comparison on char_skill.cpp:2635 (Required for clang) from: (NULL != pkVictim && SKILL_HORSE_WILDATTACK != dwVnum) ? pkVictim->GetVID() : NULL, ComputeCooltime(iCooltime * 1000), to: (NULL != pkVictim && SKILL_HORSE_WILDATTACK != dwVnum) ? pkVictim->GetVID() : 0, ComputeCooltime(iCooltime * 1000),
    4 points
  5. M2 Download Center Download Here ( Internal )
    2 points
  6. 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
    2 points
  7. Download fixed: [Hidden Content]
    2 points
  8. After looong searching i found link on my mega But, don't use it, its terrible
    2 points
  9. ITEM_APPLY_MAX_NUM = 4, typedef struct SItemApply { WORD bType; long lValue; } TItemApply; typedef struct SItemTable { DWORD dwVnum; DWORD dwVnumRange; char szName[ITEM_NAME_MAX_LEN + 1]; char szLocaleName[ITEM_NAME_MAX_LEN + 1]; BYTE bType; BYTE bSubType; BYTE bWeight; BYTE bSize; DWORD dwAntiFlags; DWORD dwFlags; DWORD dwWearFlags; DWORD dwImmuneFlag; DWORD dwIBuyItemPrice; DWORD dwISellItemPrice; TItemLimit aLimits[ITEM_LIMIT_MAX_NUM]; TItemApply aApplies[ITEM_APPLY_MAX_NUM]; long alValues[ITEM_VALUES_MAX_NUM]; long alSockets[ITEM_SOCKET_MAX_NUM]; DWORD dwRefinedVnum; WORD wRefineSet; uint32_t dwMaterial67; BYTE bAlterToMagicItemPct; BYTE bSpecular; BYTE bGainSocketPct; uint8_t bMaskType; uint8_t bMaskSubType; } TItemTable; looks like it's working fine in this way (Note: MCSP support is required) (Note2: what is that extra byte, looks like without it nothing works) (NOTE: Thanks to penger for explaining the extra byte)
    2 points
  10. M2 Download Center Download Here ( Internal ) Download Here ( Latest Version ) This WE is a version compiled directly by me which includes infinite fixes and features. It's certain that you won't longer use the worldeditor_en! To make it simple, I wrote all the details about this feature and the common WE inside the relative config file: (called WorldEditorRemix.ini) ; Info: ; -) 100% translated ; -) granny2.11 ; -) F6 as Insert alternative ; -) many default features not present inside the worldeditor_en (probably, that binary was taken out from an SVN long time ago and resource hacked) such as Ins for all regions and skyboxes ; -) WASD UPLEFTDOWNRIGHT to move around (+asynchronous diagonally movements) ; -) UP-LEFT-DOWN-RIGHT to move around*10 (+asynchronous diagonally movements) ; -) config file for few things ; Output options by default ; few others such as default WASD movement ; whether or not Insert should let you go where you were before the press ; no MAI dump when saving atlas ; whether or not DevIL should compress and remove alpha from minimap.dds ; whether or not loading .mdatr building heights ; default textureset when creating maps ; overlapped tabs ; other stuff ; -) several bugfixes ; default title app name ; attempting to write to an empty textureset name when creating new maps ; ViewRadius doubled every load&save ; shadowmap.dds creation ; assert when saving atlas ; crash when adjusting height ; many buffer under/overflows ; *.mdc collision data saving (for game_test) ; not checking output options when loading maps ; water brush waterid bug (the id was increased until 256 each time the function was called; now it's based on the water height just like it should be) ; init texture map reload map crash and last 2px always blank ; square shape even for up/down height brushes ; add textureset texture button (+multiselection) ; remove textureset texture feature (just selecting a texture from the list and pressing DELETE) ; creation of empty textureset with index -1 (changed to 0) ; change baseposition button ; misspelled stuff ; skybox bottom image (nb: you also need a fixed launcher for this) ; removed boring CTRL requirement (to move the camera) when editing daylight/attr ; fixed refresh texture imagebox onKey pressing the down/up keys (like when onClicking them) ; fixed TextureSet file creation if not existing ; fixed new wolfman motion event handling ; fixed crash when editing animation attack bones and 00010.gr2 was missing ; fixed locale/ymir/mob_proto load (it autodetects the most common structures) and <map>/regen.txt load/save ; fixed ./group.txt load ; fixed load/save/edit <map>/regen.txt (very nice for "m" regens, untested for "g") ; load from PACK is available if pack/property is present! Be sure pack/Index exists! ; fixed multi-object selection crash ; fixed crash when previewing a missing texture ; fixed not clearing of old environment (e.g. skybox) when switching maps ; fixed not creating property folders in root tree (object tab) ; fixed object attachment in Model Tab ; fixed newly particles names in Effect Tab ; fixed crash when saving a .mse script with no mesh model ; fixed crash when inserting a lower gradient ; -) created new TextureSet field when creating new maps ; -) created new Change/Delete Texture buttons when double-clicking a texture ; -) created Background Music playback and Shadow Recalculate buttons ; -) created water height "set 0z", "+1z", "-1z" buttons ; -) server_attr generator ; -) every crash will generate a logs/WorldEditorRemix_{target}_{date}.dmp file useful for debugging ; -) implemented a "water path" mapsettings option (the launcher requires additional code) ; -) implemented a "wind strength" msenv option (the launcher requires additional code) ; -) the "encrypt data" feature does nothing (unimplemented) ; Note: ; 0) there are no regressions in this version! a bug here means it'd also be present in older WE versions too! ; 1) the shadow output option is tricky: when UpdateUI is called, shadows are hidden although the check is pressed (i implemented the shadow recalculate function for that) #fixed since v11 ; 2) the bgm player requires /miles and the fadein/out doesn't work until you load the map ; 3) the adjusting height button works only if mdatr height is detected ; 4) the Debug version is laggy when working on maps such as n_flame_dungeon and n_ice_dungeon (by default, because SphereRadius are intensively checked in SphereLib\spherepack.h) ; 5) if you load a map, the script panels (where you load .msa et similia) will have the camera perspective a little fucked up (0z instead of -32767z or 0x 0y -163,94z) ; 6) few tree objects are not movable and/or highlightable after placed on the ground and their selection is invisible (you can still delete 'em) ; trick: draw a square selecting a normal building and 'em, then move the building and you'll see all of 'em will be moved! ; 7) the server_attr generator will clean all the unused flags! attr[idx]&=~0xFFFFFFF8; ; 8) you can read files from pack/Index 'n stuff but be aware that Property will not be considered! #fixed since v15 ; 9) the MonsterAreaInfo features are laggy and buggy as fuck ; 10) even though you can select many textures at once (using ctrl+click on textureset list; for brushing or initializing a base texture), you can't delete more than one at the same time ; 11) the .mdatr height is tricky; if you move a building, the height will not be refreshed until you put a new building or whatever you want to trigger the update event ; 12) by default, the worldeditor tries to render only the first 8 terrain textures of a 32x32px region (nb: a 1x1 map is a 256x256 px region) ; 13) the minimap rendering cannot catch the buildings/trees inside the first 2x2 regions due a ymir cache fault and you need to set the camera to "see" them ; 14) when the textureset, environment, etc load fails, the old filename still remains loaded ; 15) the attr flag "3" (three) has no implementation, so don't use it! ; 16) load from PACK doesn't load texturesets from files for first (if they are already in pack/), and the object placer's object list will remain empty because it takes the list from property/ (and not from pack/property) ; 17) to save the regen.txt you press CTRL+S ; 18) if you enable the wireframe (f4) when on Attr Tab, you see the terrain all white ; 19) the water brush disappears when the camera renders the waterwheel small/big effect ; 20) the monster area info goes under ground if you're outside the relative sectree ; 21) the full skybox may be displayed only after the top picture has been added (if the other textures have already been inserted) ; 22) the slider in the Attr Tab is something like "16 photoshop layers" in which you can split your attrs; not so helpful and quite confusing sometimes ; 23) the fixed model - object attachment attaches static objects (hairs'skeleton will not mirror the playing animation) ; 24) in environment tab, if you insert lower gradients, you may end up with an out of range crash #fixed since v30 ; 25) brushes working out-of-screen/map-range may affect random terrain places ; TODO: ; A) look at more than 8 textures for region -> DONE ; B) create a shortcut to fix the #5 note -> DONE ; C) disable the radius <= GetRadius()+0.0001f check to fix the #4 note -> REJECTED ; the worldeditor_en calls this assert and, if ignored, the lag ceases to exist (this will not occur in source version) ; at least, if the release version is not a problem for you, use that in those few cases when .mse are abused and try to kill the debug one ; D) translation in more languages other than english -> REJECTED ; english should be enough! ; E) alternative path for d: -> REJECTED ; you can mount d as a subpath of c like this: ; subst d: "c:\mt2stuff" ; F) need to fix note #19 #25 -> TODO [shortcuts] ; ### SHORTCUTS ; # ESC(ape) Clean cursor ; # Canc(el|Delete) Delete stuff such as selected buildings ; # Ctrl+S Save map ; # Ins(ert) or F6 Save shadowmap|minimap.dds ; # F3 BoundGrid Show/Hide ; # F4 Render UI Show/Hide ; # F11 WireFrame Show/Hide ; # R Reload Texture ; # Z and X Decrease/Increase Texture Splat by 0.1 ; # CapsLock Show GaussianCubic effect if shadows are displayed ; # L-Shift+1-6 Show TextureCountThreshold flags (&2-7) as colors on the ground ; # L-Shift+8 Set Max Showable texture to 8 (de-fix note 12) ; # L-Shift+0 Set Max Showable texture to 255 (fix note 12) ; # H Refresh MDATR Heights (useful when you move an object) (fix note 11) ; # Y Set Perspective as default (fix note 5) ; # T Set the Camera to catch all the object on the screen (w/a note 13) then you'll be ready to press Insert/F6 ; # DO NOT HAVE AN OBJECT SELECTED WHEN USING THOSE SHORTCUTS (MW1-7) ; # MouseWheel+1 move cursor x rotation ; # MouseWheel+2 move cursor y rotation ; # MouseWheel+3 move cursor z rotation ; # MouseWheel+4 move cursor height base (1x) ; # MouseWheel+5 move cursor height base (0.5x) ; # MouseWheel+6 move cursor height base (0.05x) ; # MouseWheel+7 move cursor ambience scale (1x) ; # MouseWheel+Q move selected object height base (1x) ; # MouseWheel+9 move selected object x position (1x) (+asyncronous) ; # MouseWheel+0 move selected object y position (1x) (+asyncronous) ; # MW+RSHIFT+9|0 as above but *10x (+asyncronous) ; # MW+RCONTROL+9|0 as above but *100x (+asyncronous) ; # MouseLeft Insert Objects ; # MouseRight Move camera (it could require CTRL too) ; # SPACE Start move/selected animation in Object/Effect/Fly CB ; # ESC Stop animation in Effect/Fly CB [config] ; ### CONFIG OPTIONS VIEW_CHAR_OUTPUT_BY_DEFAULT = 1 VIEW_SHADOW_OUTPUT_BY_DEFAULT = 1 VIEW_WATER_OUTPUT_BY_DEFAULT = 1 ; WINDOW_HEIGHT_SIZE = 1080 ; WINDOW_WIDTH_SIZE = 1920 WINDOW_FOV_SIZE = 45 ; #100 = 1px (minimal px movement when pressing WASD) WASD_MINIMAL_MOVE = 100 ; came back from where you were before pressing Insert/F6 NO_GOTO_AFTER_INSERT = 1 ; disable MAI dumps when saving atlas and/or pressing Insert/F6 NOMAI_ATLAS_DUMP = 1 ; disable minimap.dds alpha saving and enable compression NOMINIMAP_RAWALPHA = 1 ; enable .mdatr height collision loading when moving on buildings or adjusting terrain DETECT_MDATR_HEIGHT = 1 ; disable fog when loading maps NOFOG_ONMAPLOAD = 1 ; refresh all checkbox configurations when loading maps 'n stuff REFRESHALL_ONUPDATEUI = 0 ; set a default mapname prefix when creating new maps ("" to disable) NEW_MAP_MAPNAME_PREFIX = "metin2_map_" ; display a default textureset when creating new maps ("" to disable) ; note: it loads the filepath if exists, otherwise it will create an empty textureset file NEWMAP_TEXTURESETLOADPATH = "textureset\metin2_a1.txt" ; create a default textureset as "textureset/{mapname}.txt" ; note: this option is not considered if NEWMAP_TEXTURESETLOADPATH is not empty. [before v24] ; note: this option is not considered if the TextureSet path input is not empty when creating a new map [since v24] NEWMAP_TEXTURESETSAVEASMAPNAME = 1 ; remove the weird attr flags from the generated server_attr SERVERATTR_REMOVE_WEIRD_FLAGS = 1 ; show diffuse lighting to object VIEW_OBJECT_LIGHTING = 1 ; path of mob_proto used for regen MOB_PROTO_PATH = "locale/ymir/mob_proto" ; select monster area info checkbox at startup VIEW_MONSTER_AREA_INFO = 0 ; brush cursor / object selection color RGB float between 0.0 to 1.0 (default: green -> 0 1 0) RENDER_CURSOR_COLOR_R = 0.0 RENDER_CURSOR_COLOR_G = 1.0 RENDER_CURSOR_COLOR_B = 0.0 Download: [Hidden Content] How To Map: This release will not cover this part. Look at CryPrime`s tutorials to understand how to do it. About the ServerAttr Generator: (since v14) This is a beta function but it should work fine. I tested it on gm_guild_build (1x1), metin2_map_a1 (4x5), metin2_map_trent (2x2), metin2_n_snowm_01 (6x6) and the result was the same as the blackyuko map editor. (I use a different lzo version and I clean deprecated and useless flags, so the size is different from this last one but the "final image" will be the same; using game_test to fix his server_attr will let mine and his perfectly equal byte per byte) I also give you the source code of my server_attr generator function. CLICK A server_attr file is based on all the attr.atr files merged into a one raw RGBA image and each one scaled from 256x256 to 512x512. After that, the image will be splitted into sectors of 128x128 px and each one compressed using lzo compression. The server_attr header is composed by the size of the map*4. (e.g. a 4x4 will have a 16x16 size with 256 sectors inside) (gj ymir CLICK) An uncompressed server_attr sector is just like this: CLICK (the sub 4 byte header is the size returned by the LzoCompress which indicates how much the compressed sector data are large) Each attr.atr is just like this: CLICK (the header is composed of 6 byte in total: 3 WORDs respectively for version, width and height; they are always 2634, 1, 1 so don't bother about it) A single attr.atr scaled from 256x256 to 512x512 will be just like this: CLICK You can use the game_test (from source) to perform few tasks like: Create a server_attr from a .mcd file (I won't suggest it) a <collision data filename> <map directory> Regenerate an old server_attr to server_attr.new using the current lzo compression and cleaning useless flag CLICK c <filename> Other stuff such as b to create a character instance or q to quit About the SkyBox Bottom pic fix: (since v21) Both metin2launch.exe and worldeditor.exe should be edited to see the bottom pic of the skybox. Ymir messed up the code wrongly flipping the bottom image. Open ./Srcs/Client/EterLib/SkyBox.cpp and replace: ////// Face 5: BOTTOM v3QuadPoints[0] = D3DXVECTOR3(1.0f, -1.0f, -1.0f); v3QuadPoints[1] = D3DXVECTOR3(1.0f, 1.0f, -1.0f); v3QuadPoints[2] = D3DXVECTOR3(-1.0f, -1.0f, -1.0f); v3QuadPoints[3] = D3DXVECTOR3(-1.0f, 1.0f, -1.0f); with: ////// Face 5: BOTTOM v3QuadPoints[0] = D3DXVECTOR3(1.0f, 1.0f, -1.0f); v3QuadPoints[1] = D3DXVECTOR3(1.0f, -1.0f, -1.0f); v3QuadPoints[2] = D3DXVECTOR3(-1.0f, 1.0f, -1.0f); v3QuadPoints[3] = D3DXVECTOR3(-1.0f, -1.0f, -1.0f); then recompile. Credits:
    1 point
  11. M2 Download Center Download Here ( Internal )
    1 point
  12. M2 Download Center Download Here ( Internal ) Hi, i looked at some old stuff what i have in my computer...I found a lot of things what i've never used.. There is one old map for santhia, i won't use it anymore, so I hope someone from you use it. In pack is map and a some new objects for your maps. For map like desert.... Property are in pack too. Download:
    1 point
  13. M2 Download Center Download Here ( Internal ) Hi, here I publish my edit of the public Render Target System. I hate it, when people earn money with public systems. Preview: [Hidden Content] DL: [Hidden Content] Original Thread [Hidden Content]
    1 point
  14. 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
  15. M2 Download Center Download Here ( Internal ) When a player or monster is poisoned, a poisoning effect will appear in the life bar. The idea belongs to Whistlee from the Turkish forum. However, in Whistlee version this system does not work for monsters and has no connection with the source code, so the effect is visible only to us. I don't know if I can give a specific place where the original comes from, so I won't do it, but I put here github Whistlee's, where you can find the original code. GITHUB: [Hidden Content] Special thanks for helping me with this code for Intern,VegaS™ and HITRON. ////////// CLIENT GAME ////////// SOURCE BIN
    1 point
  16. 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
  17. M2 Download Center Download Here ( Internal ) Hi there. While cleaning out "my closet", I found this thing I developed between 2014-2015 - maybe(?) - for my, at that moment, server. Since it's now closed, and I won't use it, I'm sharing it with you guys. Note: Didn't do the scrollbar, wasn't needed for me, so yeah. Now, let's start with opening your locale_game.txt and adding these lines: QUESTCATEGORY_0 Main Quests QUESTCATEGORY_1 Sub Quests QUESTCATEGORY_2 Collect Quests QUESTCATEGORY_3 Levelup Quests QUESTCATEGORY_4 Scroll Quests QUESTCATEGORY_5 System Quests Alright, now find your characterwindow.py (uiscript?) and you can either comment Quest_Page children or simply remove them all. Moving on to your interfaceModule.py find this line self.BINARY_RecvQuest(index, name, "file", localeInfo.GetLetterImageName()) and replace it with self.wndCharacter.questCategory.RecvQuest(self.BINARY_RecvQuest, index, name) Ok, then we are at the most, let's say, difficult part of this. Open your uiCharacter.py and just as you did in your characterwindow.py, remove or simply comment any single line related to quests. You can just search for these vars: self.questShowingStartIndex self.questScrollBar self.questSlot self.questNameList self.questLastTimeList self.questLastCountList Once you did that, you just: # Find these lines self.soloEmotionSlot = self.GetChild("SoloEmotionSlot") self.dualEmotionSlot = self.GetChild("DualEmotionSlot") self.__SetEmotionSlot() # And add the following import uiQuestCategory self.questCategory = uiQuestCategory.QuestCategoryWindow(self.pageDict["QUEST"]) # Find this def OnUpdate(self): self.__UpdateQuestClock() # Replace it with def OnUpdate(self): self.questCategory.OnUpdate() And we're done with the client-side. I attached some extra elements needed (such as the main python file (uiQuestCategory.py) and some image resources). Remember to edit the path linked to these images in that file. For the server-side... Well, screw it, uploaded it too. Too lazy to write. It has only a new quest function (q.getcurrentquestname()) and a few things to add in your questlib.lua. Btw, not sure if you have it, but if not, just add this extra function in ui.Button() (ui.py - class Button). def SetTextAlignLeft(self, text, height = 4): if not self.ButtonText: textLine = TextLine() textLine.SetParent(self) textLine.SetPosition(27, self.GetHeight()/2) textLine.SetVerticalAlignCenter() textLine.SetHorizontalAlignLeft() textLine.Show() self.ButtonText = textLine #Äù½ºÆ® ¸®½ºÆ® UI¿¡ ¸ÂÃç À§Ä¡ ÀâÀ½ self.ButtonText.SetText(text) self.ButtonText.SetPosition(27, self.GetHeight()/2) self.ButtonText.SetVerticalAlignCenter() self.ButtonText.SetHorizontalAlignLeft() Forgot the source part, fml, here it is. Add it to your questlua_quest.cpp. int quest_get_current_quest_name(lua_State* L) { CQuestManager& q = CQuestManager::instance(); PC* pPC = q.GetCurrentPC(); lua_pushstring(L, pPC->GetCurrentQuestName().c_str()); return 1; } void RegisterQuestFunctionTable() { luaL_reg quest_functions[] = { { "getcurrentquestname", quest_get_current_quest_name}, { NULL, NULL } }; CQuestManager::instance().AddLuaFunctionTable("q", quest_functions); } Now, finally, have fun and bye!
    1 point
  18. Hey, I want to share a fix about the SKILL_MUYEONG, Official fixed this before some months ago, but nobody care in such details so we still have the same issue in our servers. The SKILL_MUYEONG is still attacking while you riding but doesn't make any damage. Preview with Fixed SKILL_MUYEONG while you riding: [Hidden Content]
    1 point
  19. M2 Download Center Download Here ( Internal ) Small modification of weapons. By default, this bow does not have a shield for the archer's hand. I also changed the icon and increased the gloss of the weapon a bit. I added a new dagger for the assassin. Download: [Hidden Content]
    1 point
  20. M2 Download Center Download Here ( Internal ) Hi ! Today ThunderCore Society will offer you a special tool for 3d MAX Software. 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. There exists an "readme" file that contains some informations about how to install the script. Attention: These files are under copyright and licensed by ThunderCore Society. Any violation of the license may result in suing. Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. 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.
    1 point
  21. Link fixed [Hidden Content]
    1 point
  22. Fixed link: [Hidden Content]
    1 point
  23. Fixed link [Hidden Content]
    1 point
  24. Download link fixed [Hidden Content]
    1 point
  25. You can find the code here: [Hidden Content] Refine
    1 point
  26. You must allow the map index in some switch or array (I think). Find the ChatPacket on src and look the reason.
    1 point
  27. v20.0.6 (Metin2 Download) root & builtins are dumped protos are dumped into 2 formats, fixxed flags, extended applies I didn't do deep check into the whole packs what metin2team released, but couple of files are missing from the packs.
    1 point
  28. root & uiscript [Hidden Content] property [Hidden Content] locale_br & root & uiscript [Hidden Content] special thanks to @juniorferraz for supplying the packs for br client. Metin2 Download
    1 point
  29. A friend of mine asked me to unpack the latest official patches. I was away for a while now I don't know which ones are the latest so I unpacked all the lately modified patches. All the locales with protoes unpacked v20.0.6 patches Metin2 Download
    1 point
  30. v19.6.15 Valentine update (Metin2 Download) New pet with 2 textures New sash locales with protos In the item_proto.txt there is a false tabulator character as '\T' instead of '\t', a simple replace in file solves it. In the item_proto_my.txt there are missing from the header line the applytype3 and applyvalue3 field names. It will be solved whenever I wil have the time for that.
    1 point
  31. v19.6.12 XMas Patch msm files Metin2 Download Includes(latest modified files): New pets New mounts New costumes Locales(protos sunday [15th]) Example pictures:
    1 point
  32. v19.6.7 Includes(all last modified files): New map New pet New boss New minigame gui elements New effects for the elemental refined weapons Locales(protos below) v19.6.7 Protos: Download v19.6.8 Locale w/ protos: Download 19.6.7 : Metin2 Download 19.6.8 : Metin2 Download
    1 point
  33. V19.5.9 New pet, mount, costumes. Locales&protos: Download Metin2 Download
    1 point
  34. Ok, WTF ymir... We are in 2019 where wecan play games in 4K I've made just a little edit [Hidden Content]
    1 point
  35. M2 Download Center Download Here ( Internal ) Hey guyz, I didn't find it anywhere so coded a new one. 1. Upload the files to your site. 2. Change IP and DB login data in the PHP file 3. Upload your item_list.txt and icon folder next to the PHP file. (convert all tga to png with the converter attached) 4. Call the PHP file xy.php?name=charactername (you can use like an iframe for ranklist, whatevs) Here's a converter too: Put your icon folder next to the exe and execute it. It will convert all tga image to png without changing the folder construction.
    1 point
  36. M2 Download Center Download Here ( Internal ) hallo all thos quests are only present in my files that i sell ( NewWorld) and someone stole it from one of my clients so i will public it here ( while the last update for thos two quests have too new feature ) the system will send a leeter to any gm with high level so he can start / close any event & also rate note : it was writen too long time by me , so maybe u may not like some method note2: the other event i will upload it here < useing official 40k quests < some of them i make litile change for them note3: for adding more events , u can just add new line in the next two quests < easy to add event manger: event drop :
    1 point
  37. when i try to download this popups This webpage is not available ERR_INVALID_RESPONSE Hide details The webpage athttps://metin2dev.org/board/applications/core/interface/file/attachment.php?id=49 might be temporarily down or it may have moved permanently to a new web address.
    1 point
  38. texturechanger_thc.zip ?
    1 point
  39. Hello guys, i have this problem when i start the server,. i tried to reset pw on mysql, to change user and pw and nothing... And i tried to give all acces on this user PUBLIC_IP: 188.212.100.58 interface em0 mysql_real_connect: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (61) cannot open direct sql connection to host: localhost user: mysql db: common cannot start server while no common sql connected HOSTNAME: channel1 Edit I find this in sysser on database Thanks
    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.