Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 01/18/20 in all areas

  1. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) Create app at here:[Hidden Content] Copy CLIENT ID Then change Discord.h/DiscordClientID Add images at here: example my image's name is image1 You can also use smallImageKey and smallImageText
    5 points
  2. Such a small system for extracting stones.
    5 points
  3. 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.
    5 points
  4. Download Metin2 Download Hi, I did not find a share with the Sources of Metin2... I share the sources with you today ! Kraizy sources with all branches of development. External Link : Mega or Go Sincerly, ASIKOO
    1 point
  5. 1- 2- 3- I saved Australia :$ , next i will save the world from Global Warming
    1 point
  6. 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.
    1 point
  7. 1 point
  8. M2 Download Center Download Here ( Internal ) So after 5 years I finally decided to make a map from scratch, which became the new map 1 for romanian players in WoM2: the Deunsang Citadel. I am also releasing most of the trees and shrubs I used, these are from Oblivion and I did already release them before (and many people used them in their maps) but I reworked both the lighting and the textures, especially of the trees, and fixed a couple that were not working before. [Hidden Content]
    1 point
  9. The link: [Hidden Content] The contect of pack:
    1 point
  10. Ty vm Vanilla that help me allot i was stuck with the part of cheking the mob but now i got it ty ?
    0 points
  11. It's working fine Right out the box with your libs. Thanks
    0 points
  12. Thank you very much!!! I did like this and it seems it is works perfectly, with full inventory i receive the item with drop owership, otherwise it goes to a new slot if (prob <= prt->prob) { LPITEM pkNewItem = ITEM_MANAGER::instance().CreateItem(result_vnum, 1, 0, false); int pos = GetEmptyInventory(item->GetSize()); if (pkNewItem) { ITEM_MANAGER::CopyAllAttrTo(item, pkNewItem); LogManager::instance().ItemLog(this, pkNewItem, "REFINE SUCCESS", pkNewItem->GetName()); //BYTE bCell = item->GetCell(); // DETAIL_REFINE_LOG NotifyRefineSuccess(this, item, IsRefineThroughGuild() ? "GUILD" : "POWER"); DBManager::instance().SendMoneyLog(MONEY_LOG_REFINE, item->GetVnum(), -cost); item->SetCount(item->GetCount() - 1); //ITEM_MANAGER::instance().RemoveItem(item, "REMOVE (REFINE SUCCESS)"); // END_OF_DETAIL_REFINE_LOG //pkNewItem->AddToCharacter(this, TItemPos(INVENTORY, bCell)); if ((pos = GetEmptyInventory(item->GetSize())) != -1) { pkNewItem->AddToCharacter(this, TItemPos(INVENTORY, pos)); ITEM_MANAGER::instance().FlushDelayedSave(pkNewItem); } else { PIXEL_POSITION pos = GetXYZ(); LPITEM pkNewItem = ITEM_MANAGER::instance().CreateItem(result_vnum, 1, 0, false); ITEM_MANAGER::instance().FlushDelayedSave(pkNewItem); pkNewItem->AddToGround(GetMapIndex(), pos); pkNewItem->SetOwnership(this); pkNewItem->StartDestroyEvent(); pos.x += number(-7, 7) * 20; pos.y += number(-7, 7) * 20; } sys_log(0, "Refine Success %d", cost); pkNewItem->AttrLog(); //PointChange(POINT_GOLD, -cost); sys_log(0, "PayPee %d", cost); PayRefineFee(cost); sys_log(0, "PayPee End %d", cost); } }
    0 points
  13. No need to pay for a system.. But thanks for advertising your services in a question thread, that will definitely help users. You have many ways of doing it. Some of these may include using lua to code a quest that does the job for you. You can either trigger it yourself or - if you have some stuff like the vanilla source (even old releases should have this) you can even trigger a server_timer to fire off once the boss should spawn. But this is just more convenient, you can also just login or let the quest trigger once a gm/player logs in for the first time. There are many ways to do this. As soon as you trigger spawn you can just re-use the timer. Next you need to check if the mob already exists (not killed, so we won't spawn to instances of the mob). You can just do it via event flag for example but this is prone to err if your server crashes for some reason. So make sure you clear the event flag at the beginning of the quest so it doesn't get stuck. As soon as a player kills the boss, you can change the flag back and thus making it able to respawn it. It's just one of many approaches to do it. Source work should do the magic too, but most people don't know how to do it so maybe lua is the easierst and safest way to go.
    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.