arves100

Wiki Team
  • Content Count

    569
  • Joined

  • Last visited

  • Days Won

    9

arves100 last won the day on July 24 2018

arves100 had the most liked content!

Community Reputation

185 Rampage

6 Followers

About arves100

  • Rank
    Chivalric

Profile Information

  • Gender
    Male
  • Location
    Italy

Contact Methods

  • Discord
    Arves100#7113

Recent Profile Visitors

2,520 profile views
  1. arves100

    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.
  2. arves100

    This problem is related to your library, not the discord-rcp
  3. arves100

    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: https://github.com/discordapp/discord-rpc
  4. arves100

    that looks like some fucked up compiler, what ver. of vstudio are you using?
  5. arves100

    I'll wait some pservers to test it
  6. arves100

    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?
  7. 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.
  8. arves100

    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
  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)
  10. arves100

    THANK YOU FOR THE TUTORIAL, I WASN'T ABLE TO OPEN TO INSTALL THE CRACK.
  11. arves100

    open

    ... Please compile your game with "-g" first
  12. arves100

    solved

    You have the define for one reason, use it! Stop hardcoding. if (iValueLen >= QUEST_STATE_MAX_LEN) char szValue[QUEST_STATE_MAX_LEN + 1];
  13. arves100

    Be aware of @DevChuckNorris if you're over the age of 60 and you're a woman o.o Accurate way to answer:
  14. arves100

    "Is Desync a bug? Nah Ymir added it, so skilled players can predict when it happens, this makes the game more difficult and thus adding an ability."
  15. 1 or 2 fix in and here for some defines but that's really all. Also updating the projects. for the client it's just an upgrade of the projects.