Jump to content

arves100

Former Staff
  • Posts

    620
  • Joined

  • Last visited

  • Days Won

    18
  • Feedback

    100%

Everything posted by arves100

  1. Ooooo finally Chucc's Metin3 server got leaked
  2. (Sorry for bumping just to clear up what this tool is) Version 2.9 of Gr2 animation studio was currently in preview, so not really stable to use. This tool was created by RAD to animate using nodes, basically it allows to deform and move bones. This tool requires using RAD's gperf (or something similar) SDK that IS NOT SUPPORTED IN METIN2. This tool should not support gr2 normal animations, and as it was a beta, it should not even be used in a game. (Unless you get the newer versions)
  3. Amazing tutorial, thanks for sharing. I'd say you miswrote "sql-mode" and "log-bin" file, they should go in my.cnf ?
  4. THE WAIT IS FINISHED GUYS! @PACI@VegaS™
  5. If you have an issue you should post on QA, what karbust said it's right...
  6. Now I'm interested about this ratio system ?
  7. From what I recall (I remember I have read this somewhere), novaline is a modified branch of a guy called Nova who was the first one to get the source in his hand. (It was forked from mainline_rls or dev I think). apart from sources, we used to have different leaks during the years, starting with 2009 server files directly leaked from RunUp.
  8. Chucc bless us all ? For joining the scam crouse you need to send 2k to @PACI first
  9. I'm taking online courses to scamming held by @PACI, I'm trying to learn new things but the teacher is .......
  10. 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),
  11. 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.
  12. So you're telling me that someone has made a quality post? Very good
  13. I'd say some incopatibility between discord rcp and libjpeg, in my opinion you should rebuild libjpeg, for example by using something better like libjpeg turbo and not ijg libjpeg, otherwise check for /MT or /MD.
  14. This problem is related to your library, not the discord-rcp
  15. Well this issue is incompatibility between compilers, if this happen with discord-rpc only then I'd say it's not compatible with it. You can grab and build Discord rpc from here: [Hidden Content]
  16. that looks like some fucked up compiler, what ver. of vstudio are you using?
  17. oh I see, this looks pretty nice. Do you know something about the Game SDK? Wouldn't also like the game get banned or so on discord by doing such thing?
  18. Hello, this is a small upgrade in order to build libserverkey for OpenSSL 1.0 or greater, it builds with OpenSSL v1.4d (Win32 build) fine. All this changes has to be made in RSACrypto.cpp Function RSACrypto::PublicKey::PublicKey Replace: BN_hex2bn(&rsa_->n, n); BN_hex2bn(&rsa_->e, e); to: #if OPENSSL_VERSION_NUMBER < 0x10100000L BN_hex2bn(&rsa_->n, n); BN_hex2bn(&rsa_->e, e); #else BIGNUM* rsa_n, * rsa_e, * rsa_d; RSA_get0_key(rsa_, (const BIGNUM**)&rsa_n, (const BIGNUM**)&rsa_e, (const BIGNUM**)&rsa_d); BN_hex2bn(&rsa_n, n); BN_hex2bn(&rsa_e, e); RSA_set0_key(rsa_, rsa_n, rsa_e, rsa_d); #endif Function RSACrypto::PublicKey::Alloc Replace: rsa->n = BN_new(); rsa->e = BN_new(); to: #if OPENSSL_VERSION_NUMBER < 0x10100000L rsa->n = BN_new(); rsa->e = BN_new(); #else BIGNUM* n = BN_new(), * e = BN_new(); RSA_set0_key(rsa, n, e, NULL); #endif Function RSACrypto::PublicKey::Copy Replace: BN_copy(to->n, from->n); BN_copy(to->e, from->e); to: #if OPENSSL_VERSION_NUMBER < 0x10100000L BN_copy(to->n, from->n); BN_copy(to->e, from->e); #else BIGNUM* to_n, * to_e,* to_d; const BIGNUM* from_n = RSA_get0_n(from), * from_e = RSA_get0_e(from); RSA_get0_key(to, (const BIGNUM**)&to_n, (const BIGNUM**)&to_e, (const BIGNUM**)&to_d); BN_copy(to_n, from_n); BN_copy(to_e, from_e); RSA_set0_key(to, to_n, to_e, to_d); #endif Function RSACrypto::PrivateKey::Alloc Replace: rsa->d = BN_new(); rsa->p = BN_new(); rsa->q = BN_new(); to: #if OPENSSL_VERSION_NUMBER < 0x10100000L rsa->d = BN_new(); rsa->p = BN_new(); rsa->q = BN_new(); #else BIGNUM* d = BN_new(), * p = BN_new(), * q = BN_new(); RSA_set0_key(rsa, NULL, NULL, d); RSA_set0_factors(rsa, p, q); #endif Function RSACrypto::PrintKey (k, n, e) Replace: char* tmp = BN_bn2hex(k->rsa_->e); to: #if OPENSSL_VERSION_NUMBER < 0x10100000L char* tmp = BN_bn2hex(k->rsa_->e); #else const BIGNUM* rsa_e = RSA_get0_e(k->rsa_); char* tmp = BN_bn2hex(rsa_e); #endif Replace: tmp = BN_bn2hex(k->rsa_->n); to: #if OPENSSL_VERSION_NUMBER < 0x10100000L tmp = BN_bn2hex(k->rsa_->n); #else const BIGNUM* rsa_n = RSA_get0_n(k->rsa_); tmp = BN_bn2hex(rsa_n); #endif Function RSACrypto::PrintKey(k, n, e, d) Replace: char* tmp = BN_bn2hex(k->rsa_->n); to: #if OPENSSL_VERSION_NUMBER < 0x10100000L char* tmp = BN_bn2hex(k->rsa_->n); #else const BIGNUM* rsa_n = RSA_get0_n(k->rsa_); char* tmp = BN_bn2hex(rsa_n); #endif Replace: tmp = BN_bn2hex(k->rsa_->e); to: #if OPENSSL_VERSION_NUMBER < 0x10100000L tmp = BN_bn2hex(k->rsa_->e); #else const BIGNUM* rsa_e = RSA_get0_e(k->rsa_); tmp = BN_bn2hex(rsa_e); #endif Replace: tmp = BN_bn2hex(k->rsa_->d); to: #if OPENSSL_VERSION_NUMBER < 0x10100000L tmp = BN_bn2hex(k->rsa_->d); #else const BIGNUM* rsa_d = RSA_get0_d(k->rsa_); tmp = BN_bn2hex(rsa_d); #endif The changes, explained: 1) the ifdefs are there for compatibility with the old openssl version. 2) OpenSSL 1.0 do not expose the "rsa_" structure, so we need to use OpenSSL own api to get the required data from it. A question that you might have at this point is what is the purpouse of libserverkey. It looks like ymir had an issue about leaking game files back in this day, this might explain why this feature was added. It bundles a RSA private and public key to your core, which verifies if the current machine should be able to use such core or not. It is not an important feature as it isn't that hard to bypass with the required knownledge and it could be removed safetly from the game. I'm thinking about covering this protection in the wiki, until then I hope I made some clarification about this library.
  19. Looks pretty cool for a basic support, I wonder what other usefull things (ie: Dueling in Channel 1) could be added. Also: Perhaps their gamesdk could provide more integration into metin2
  20. Exporters: [Hidden Content] CAD: [Hidden Content] not sure if they works
  21. 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)
  22. You have the define for one reason, use it! Stop hardcoding. if (iValueLen >= QUEST_STATE_MAX_LEN) char szValue[QUEST_STATE_MAX_LEN + 1];
×
×
  • 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.