-
Posts
620 -
Joined
-
Last visited
-
Days Won
18 -
Feedback
100%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Posts posted by arves100
-
-
(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)
-
Amazing tutorial, thanks for sharing.
I'd say you miswrote "sql-mode" and "log-bin" file, they should go in my.cnf
-
-
On 12/18/2019 at 10:48 PM, peri200 said:
I am interested in buying a version of vanilla game that is 100% patched and working
I know it is public but the latest versions do not work well the r71 I am looking for someone who works with this game and has it patched and working
If you have an issue you should post on QA, what karbust said it's right...
-
21 hours ago, Gurgarath said:
Exactly, that's why I said "2014+" because nova added some bugfixes and a "ratio system" which is interesting but not effective because of the way the game update things. You're completley right
Now I'm interested about this ratio system
-
On 1/13/2020 at 9:46 AM, Gurgarath said:
Hello,
Quick back story, those are official from early 2014 pretty much, they contain SG sources, nova sources (2014+) and some wolfman prototype. Those are a small part of a big leak that occured in 2014. It contained Metin2 sources, Metin1 sources as well as Inferna sources. We currently have two theories that are sometimes called official theories but we can't really know who to trust. I am going to be short:
- It was either a leak made by an employee that copied the file and sold them later on.
- Or it was downloaded from their server after someone exploited a breach in it.
Ever since, we never had any more leaks, might it be core or sources like we had from 2008 to 2014. The only "leak" was an uncythonized root from 2018 because they forgot to cythonize it.
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.
- 2
-
26 minutes ago, r0bertt69 said:
can i be part of it? By the power of chucc i bless all of you
Chucc bless us all
For joining the scam crouse you need to send 2k to @PACI first
- 1
- 1
-
update
- 1
-
I'm taking online courses to scamming held by @PACI, I'm trying to learn new things but the teacher is .......
- 1
- 1
-
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.
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.
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),
- 14
- 1
- 1
- 2
- 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 ExternCopy 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 /MDdNow 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
SpoilerNow you need to rebuild all modules with the Runtime Library change that you do before
But Crypto++ need another adjustment, open config.h and change this:// synchronization: MS at VS2012 (17.00); GCC at 4.4; Clang at 3.3; Xcode 5.0; Intel 12.0; SunCC 12.4. // TODO: verify Clang and Intel versions; find __has_feature(x) extension for Clang #if (CRYPTOPP_MSC_VERSION >= 1700) # define CRYPTOPP_CXX11_SYNCHRONIZATION 1 #elif (__INTEL_COMPILER >= 1200) # define CRYPTOPP_CXX11_SYNCHRONIZATION 1 #elif (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 50000) # define CRYPTOPP_CXX11_SYNCHRONIZATION 1 #elif (CRYPTOPP_GCC_VERSION >= 40400) # define CRYPTOPP_CXX11_SYNCHRONIZATION 1 #elif (__SUNPRO_CC >= 0x5130) # define CRYPTOPP_CXX11_SYNCHRONIZATION 1 #endif // synchronization
With this:
// synchronization: MS at VS2012 (17.00); GCC at 4.4; Clang at 3.3; Xcode 5.0; Intel 12.0; SunCC 12.4. // TODO: verify Clang and Intel versions; find __has_feature(x) extension for Clang /*#if (CRYPTOPP_MSC_VERSION >= 1700) # define CRYPTOPP_CXX11_SYNCHRONIZATION 1 #elif (__INTEL_COMPILER >= 1200) # define CRYPTOPP_CXX11_SYNCHRONIZATION 1 #elif (CRYPTOPP_LLVM_CLANG_VERSION >= 30300) || (CRYPTOPP_APPLE_CLANG_VERSION >= 50000) # define CRYPTOPP_CXX11_SYNCHRONIZATION 1 #elif (CRYPTOPP_GCC_VERSION >= 40400) # define CRYPTOPP_CXX11_SYNCHRONIZATION 1 #elif (__SUNPRO_CC >= 0x5130) # define CRYPTOPP_CXX11_SYNCHRONIZATION 1 #endif*/ // synchronization #undef CRYPTOPP_CXX11_SYNCHRONIZATION
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 hackshieldCycle 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 matchWe 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.
- 1
- 3
- 9
-
So you're telling me that someone has made a quality post? Very good
- 1
-
14 hours ago, Darkness said:
uhm, if i delete the system, i can compile 100% with no problem. so...... !!
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.
- 1
-
3 hours ago, Darkness said:
Hi. i have the same problem, but now with libjpeg-MT.lib, can't compile not the same compilator?..
This problem is related to your library, not the discord-rcp
-
2 minutes ago, Darkness said:
Hi! im using Microsoft Visual C++ 2019
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:
- 114
- 1
- 1
- 1
- 2
- 1
- 2
- 34
- 3
- 71
-
3 minutes ago, Darkness said:
When compiling: fatal error C1900: Il mismatch between 'P1' version '20080116' and 'P2' version '20070207
that looks like some fucked up compiler, what ver. of vstudio are you using?
-
1 minute ago, Mali61 said:
I don't know Game SDK or ban.
I am not responsible for what might happen.
I'll wait some pservers to test it
- 2
-
On 1/17/2020 at 11:07 PM, Mali61 said:
Yes we can make a lot of things, this is so basic example.
Also we can use visualizer:
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?
- 1
-
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.
- 1
- 22
-
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
- 1
- 2
-
-
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)
- 3
- 1
- 1
- 3
-
...
Please compile your game with "-g" first
-
You have the define for one reason, use it!
Stop hardcoding.
if (iValueLen >= QUEST_STATE_MAX_LEN)
char szValue[QUEST_STATE_MAX_LEN + 1];
- 1
[Work in Progress] QuantumCore
in Metin2
Posted
Ooooo finally Chucc's Metin3 server got leaked