Jump to content

guytis

Members
  • Posts

    194
  • Credits

  • Joined

  • Last visited

  • Days Won

    4
  • Feedback

    0%

Everything posted by guytis

  1. Hi, here is the 100% decompiled CItem::EnchantItem function Config::ExceptionMailing: it is never false L2Server.exe C4 In case anyone needs it. bool CItem::EnchantItem(CItem *scroll, CItem *pItem, User* pUser) { pUser_ = pUser; pItem_ = pItem; scroll_ = scroll; if ( !pItem_ ) { return false; } pSID = pItem_->d.pSID; nEnchantLevel = pSID->nEnchantLevel; SlotType = (pSID->nSlotType >> 15) & 1; if ( !(pItem_->vtable->base.Config::ExceptionMailing)) { if ( nEnchantLevel < 3 ) goto SUCCESS; if ( nEnchantLevel >= 20 ) { prob = 0.0; } else { if ( SlotType ) chance = WeaponEnchantTable[nEnchantLevel] * 100.0; else chance = ArmorEnchantTable[nEnchantLevel] * 100.0; prob = 100.0 - chance; } if ( nEnchantLevel >= 15 ) prob = prob * 0.5; random = rand(); dice = 100.0 - 0.0; if ( nEnchantLevel < 20 && prob >= random / 32767.0 * (100.0 - 0.0) + 0.0 ) { CLog::Add(&g_winlog, LOG_REQUEST, L"armor enchant success, prev enchanted[%d], dice[%f], prob[%f]", nEnchantLevel, random / 32767.0 * dice + 0.0, prob); goto SUCCESS; } CLog::Add(&g_winlog, LOG_REQUEST, L"armor enchant fail, prev enchanted[%d], dice[%f], prob[%f]", nEnchantLevel, random / 32767.0 * dice + 0.0, prob); goto FAIL; } pII = pItem_->d.pII; if ( pII->nCrystalType < CrystalC || !LOBYTE(pII->magicWeapon) ) { prob_1 = 70.0; if ( nEnchantLevel < 3 ) goto SUCCESS; if ( nEnchantLevel >= 15 ) prob_1 = 35.0; random_1 = rand(); if ( prob_1 >= random_1 / 32767.0 * (100.0 - 0.0) + 0.0 ) { CLog::Add(&g_winlog, LOG_REQUEST, L"weapon enchant success, prev enchanted[%d], dice[%f], prob[%f]", nEnchantLevel, random_1 / 32767.0 * (100.0 - 0.0) + 0.0, prob_1); goto SUCCESS; } CLog::Add(&g_winlog, LOG_REQUEST, L"weapon enchant fail, prev enchanted[%d], dice[%f], prob[%f]", nEnchantLevel, random_1 / 32767.0 * (100.0 - 0.0) + 0.0, prob_1); goto FAIL; } prob_2 = 40.0; if ( nEnchantLevel >= 3 ) { if ( nEnchantLevel >= 15 ) prob_2 = 20.0; random_2 = rand(); if ( prob_2 >= random_2 / 32767.0 * (100.0 - 0.0) + 0.0 ) { CLog::Add(&g_winlog, LOG_REQUEST, L"magic weapon enchant success, prev enchanted[%d], dice[%f], prob[%f]", nEnchantLevel, random_2 / 32767.0 * (100.0 - 0.0) + 0.0, prob_2); goto SUCCESS; } CLog::Add(&g_winlog, LOG_REQUEST, L"magic weapon enchant fail, prev enchanted[%d], dice[%f], prob[%f]", nEnchantLevel, random_2 / 32767.0 * (100.0 - 0.0) + 0.0, prob_2); FAIL: etcType = scroll_->d.pII->etcType; if ( etcType == EtcItemBlessedScrollEnchantWeapon || etcType == EtcItemBlessedScrollEnchantArmor ) { User::SendSystemMessage(pUser_->socket, id_1517__Fallo_en_el_encantamiento_blessed_El_valor_del_encantamiento_del_item_se_convirtio_a_0); CDB::RequestEnchantItem(&g_CDB, scroll_, pItem_, 0, pUser_); } else { CSocket::Send(pUser_->socket, "cdddddd", 100i64); CDB::RequestEnchantItemFail(&g_CDB, scroll_, pItem_, pUser_); } goto END; } SUCCESS: if ( nEnchantLevel ) { CSocket::Send(pUser_->socket, "cdddddd", 100i64); } else { v25 = 3; v24 = 1; CSocket::Send(pUser_->socket, "cdddd", 100i64, 62i64, v24, v25, pItem_->d.pSID->nItemID); } CDB::RequestEnchantItem(&g_CDB, scroll_, pItem_, nEnchantLevel + 1, pUser_); END: return false; } WeaponEnchantTable dq 0 ; DATA XREF: CItem__EnchantItem+27B↑r .rdata:0000000000A06B88 align 20h .rdata:0000000000A06BA0 dq 0.3333333333333333 .rdata:0000000000A06BA8 dq 0.6666666666666666 .rdata:0000000000A06BB0 dq 0.75 .rdata:0000000000A06BB8 dq 0.8 .rdata:0000000000A06BC0 dq 0.8333333333333334 .rdata:0000000000A06BC8 dq 0.8571428571428571 .rdata:0000000000A06BD0 dq 0.875 .rdata:0000000000A06BD8 dq 0.8888888888888888 .rdata:0000000000A06BE0 dq 0.9 .rdata:0000000000A06BE8 dq 0.9090909090909091 .rdata:0000000000A06BF0 dq 0.9166666666666666 .rdata:0000000000A06BF8 dq 0.9230769230769231 .rdata:0000000000A06C00 dq 0.9285714285714286 .rdata:0000000000A06C08 dq 0.9333333333333333 .rdata:0000000000A06C10 dq 0.9375 .rdata:0000000000A06C18 dq 0.9411764705882353 .rdata:0000000000A06AE0 ArmorEnchantTable dq 0 ; DATA XREF: CItem__EnchantItem:loc_628E83↑r .rdata:0000000000A06AE8 dq 0 .rdata:0000000000A06AF0 dq 0 .rdata:0000000000A06AF8 dq 0.3333333333333333 .rdata:0000000000A06B00 dq 0.6666666666666666 .rdata:0000000000A06B08 dq 0.75 .rdata:0000000000A06B10 dq 0.8 .rdata:0000000000A06B18 dq 0.8333333333333334 .rdata:0000000000A06B20 dq 0.8571428571428571 .rdata:0000000000A06B28 dq 0.875 .rdata:0000000000A06B30 dq 0.8888888888888888 .rdata:0000000000A06B38 dq 0.9 .rdata:0000000000A06B40 dq 0.9090909090909091 .rdata:0000000000A06B48 dq 0.9166666666666666 .rdata:0000000000A06B50 dq 0.9230769230769231 .rdata:0000000000A06B58 dq 0.9285714285714286 .rdata:0000000000A06B60 dq 0.9333333333333333 .rdata:0000000000A06B68 dq 0.9375 .rdata:0000000000A06B70 dq 0.9411764705882353 .rdata:0000000000A06B78 dq 0.9444444444444444
  2. I read them and they disgust me ... xD
  3. exelent, close all servers :P
  4. Tell me who help?
  5. I never helped anyone
  6. hahaha wants to earn money getting everything for free haha .. my god.
  7. you have to have fun too, it's not just work and work hehe
  8. Hayy Ulises Ulises y de bueno no tenes nada jaja, no seas taradito que me hablas de una web imbecil,, jajaj lo que vos hiciste en una web yo lo extendi en una dll y las subs las metes por npc xD, ningun retrasado aca en argentina todabia lo hiso.. y vos no vas a ser el segundo!! veni a visitar a emi cuando quieras, cada uno es libre de hacer lo que quiere! por lo menos demostrar tu grado de ignorancia que tenes que amenazar a una persona invisible en internet porque no tenes recursos para defenderte con palabras... anda a seguir limpiando baños negro mugriento :D avisame cuando vengas que te voy a ver, MO-GO-LI-CO
  9. JAJAJ LOS QUE LEEN SE QUEDAN CON LA DUDA, PERO LO MAS IMPORTANTE ES QUE YO LO SE! SOS UN MOGOLICO JAJJA, YO DARLE ESCRITORIO A ALGUIEN? PEDIR AYUDA'? JAJJA... SI RE GORDITO SOY JAJA.. SOS UN POBRE INFELIZ... SABELO... JAMAS VAS A HACER LA PLATA QUE HICIMOS! XD SEGUI PARTICIPANDO, BUSCANDO POR ESTE FORO A VER QUE GILADA PODES ENCONTRAR JAJJA Y TE ACLARO, NO ES TAN IMPORTANTE SABER CUANTO ES 1+1 SINO, SABER CUANTO ES LA MITAD DE 2+2 SALUDOS FRACASADO, HABLA CON EMILIANO! Y VENI A CHUPARME LA PIJA SI TE DEJAN PASAR, FRACASADO!!! TODO GRACIAS A LAS DONAS!!, JAJAJ VOS QUE TE COMPRASTE? UNA BICICLETA? JAJJAJA
  10. jajajja das risa niño rata seguro que sos un mogolico que se la cree, vos no le podes robar ni 5 pesos a tu mama y me vas a robar files a mi? jjaaj sos un burro, GIL, HIJO DE MIL PUTA, Y A TU VIEJA ME LA COJO CUANDO QUIERAS!! , ANDA A CHUPARLE LA PIJA A EMILIANO Y QUE TE DIGA DONDE ENCONTRARME JAJAJ MOGOLICO! SEGURO TUS VIEJOS SE DROGABAN MIENTRAS TE GESTARON, NO HYA OTRA EXPLICACION! PELOTUDO.
  11. So you publish things you don't even know what they are? This is rubbish that is useless ...
  12. This is called: I want to make some bills. I don't know anything at all. jeje
  13. i say int A =10; int Z = inval(A / 3 ); int U = Z x 3; //U === 9 If you think I'm wrong, grab a book first. Donkey
  14. its logic 3 * 3 not 10 its sarcasm...
  15. intval(10 / 3) reverse 3*3 = 10 good
  16. only delete crest for cached function deletePledgeCrest($pledgeId){ $buf = pack("cV", 0x19, $pledgeId); return $this->Send($buf); }
  17. Thanks to all these people, L2 died. Congratulations keep helping hehe The person is asking them to set up a free business and help. how deluded they are ...
  18. yes yes int ItemListFix(PCHAR buf, int bufLen, CItem *pItem, WORD ItemType, DWORD ObjectID, DWORD ItemID, DWORD Count, WORD ItemType2, WORD CustomType1, WORD IsEquiped, DWORD BodyPart, WORD EnchantLevel, WORD CustomType2) { //Old FMT: "hdddhhhdhh" const char *format = "hdddhhhdhhdd"; //New IL Format DWORD AugmentationID = 0; DWORD Mana = 0; // DWORD itemId = 0; // DWORD SlotType = 0; if(pItem->IsValidItem()) { AugmentationID = pItem->nAugmentationID; Mana = pItem->nManaLeft / 60; // SlotType = pItem->pSID->nSlotType; // itemId = pItem->pSID->nItemID; // g_Log.Add(CLog::Error, "---------ItemListFix------"); // g_Log.Add(CLog::Error, "nItemId: [%d] nItemType[%d]",itemId,SlotType ); // g_Log.Add(CLog::Error, "ItemType: [%d] ItemType2[%d] CustomType1[%d] BodyPart[%d] CustomType2[%d]",ItemType,ItemType2,CustomType1,BodyPart,CustomType2 ); // g_Log.Add(CLog::Error, "---------------------------"); if (BodyPart ==1) BodyPart = 262144; } return Assemble(buf, bufLen, format, ItemType, ObjectID, ItemID, Count, ItemType2 ,CustomType1, IsEquiped, BodyPart, EnchantLevel, CustomType2, AugmentationID, Mana); }
  19. fix #include "StdAfx.h" #include "Packets.h" int InventoryUpdateFix(PCHAR buf, int bufLen, CItem *pItem, WORD UpdateType, WORD ItemType, DWORD ObjectID, DWORD ItemID, DWORD Count, WORD ItemType2, WORD CustomType1, WORD IsEquiped, DWORD BodyPart, WORD EnchantLevel, WORD CustomType2) { // Old FMT: "hhdddhhhdhh" const char *format = "hhdddhhhdhhdd"; //New IL Format DWORD AugmentationID = 0; DWORD Mana = 0; // DWORD itemId = 0; // DWORD SlotType = 0; if(pItem->IsValidItem()) { AugmentationID = pItem->nAugmentationID; Mana = pItem->nManaLeft/60; // SlotType = pItem->pSID->nSlotType; // itemId = pItem->pSID->nItemID; // g_Log.Add(CLog::Error, "----InventoryUpdateFix----"); // g_Log.Add(CLog::Error, "nItemId: [%d] nItemType[%d]",itemId,SlotType ); // g_Log.Add(CLog::Error, "UpdateType: [%d] ItemType2[%d] CustomType1[%d] BodyPart[%d] CustomType2[%d]",UpdateType,ItemType2,CustomType1,BodyPart,CustomType2 ); // g_Log.Add(CLog::Error, "--------------------------"); + if (BodyPart ==1) + BodyPart = 262144; } return Assemble(buf, bufLen, format, UpdateType, ItemType, ObjectID, ItemID, Count, ItemType2 ,CustomType1, IsEquiped, BodyPart, EnchantLevel, CustomType2, AugmentationID, Mana); }
  20. These are the commands that can be used with setparam if ( wcsicmp(v4, L"level") ) { if ( wcsicmp(v4, L"str") ) { if ( wcsicmp(v4, L"dex") ) { if ( wcsicmp(v4, L"con") ) { if ( wcsicmp(v4, L"int") ) { if ( wcsicmp(v4, L"men") ) { if ( wcsicmp(v4, L"wit") ) { if ( wcsicmp(v4, L"undying") ) { if ( wcsicmp(v4, L"exp") ) { if ( wcsicmp(v4, L"sp") ) { if ( wcsicmp(v4, L"org_hp") ) { if ( wcsicmp(v4, L"org_mp") ) { if ( wcsicmp(v4, L"org_hp_regen") ) { if ( wcsicmp(v4, L"org_speed") ) { if ( wcsicmp(v4, L"noise") ) { if ( wcsicmp(v4, L"base_physical_attack") ) { if ( wcsicmp(v4, L"base_attack_speed") ) { if ( wcsicmp(v4, L"base_critical") ) { if ( wcsicmp(v4, L"magic_attack") ) { if ( wcsicmp(v4, L"magic_defend") ) { if ( wcsicmp(v4, L"pk_counter") ) { v13 = v35; if ( !wcsicmp(v4, L"social") ) v13 = 25i64; }
  21. I think so since sub_424B90 calls something from CWorld. I guess so.
  22. I have this in case it helps you. pSD = this_->base.d.pSD; nRace = pSD->nRace; nSex = pSD->nSex; nClass = pSD->nClass; nLevel = pSD->nLevel; nExp = pSD->nExp; if ( LOBYTE(this_->base.d.f_height_damage) && !dword_C6B880 ) { if ( BYTE5(this_->base.d.shieldDefenceRate) && (v70 = v80, v71 = v81, v72 = v82, (v28 = sub_424B90(&unk_C476F0, &v70, 11)) != 0) ) { ExpP1 = GetExpDiePenalty(this_->base.d.pSD->nLevel) * *(v28 + 432); this_->base.d.unk_BA0 = ExpP1; nExp = User::ExpDown(this_, ExpP1); v66 = *(v28 + 440); } else if ( v14 ) { if ( v16 ) { this_->base.d.unk_BA0 = 0; } else { ExpP2 = GetExpDiePenalty(this_->base.d.pSD->nLevel) * 0.25; this_->base.d.unk_BA0 = ExpP2; nExp = User::ExpDown(this_, ExpP2); if ( pEnemy_ ) { pEnemyUser = (pEnemy_->vtable->base.base.MemoryObject__CastUser)(pEnemy_); if ( pEnemyUser ) { pledge = User::GetPledge(pEnemyUser); pledge2 = User::GetPledge(this_); if ( pledge || pledge2 ) CPledge::UpdateSiegeKillDeathPoint(pledge, pledge2); } } } } else { v34 = GetExpDiePenalty(this_->base.d.pSD->nLevel); this_->base.d.unk_BA0 = v34; nExp = User::ExpDown(this_, v34); } }
  23. In C4 exe.... 0x545280 double __fastcall GetExpDiePenalty(int level) { double levelFactor; // xmm2_8 levelFactor = 10.0 - (double)(level - 1) * 0.125; if ( levelFactor <= 4.0 ) levelFactor = 4.0; return 0.0 - (double)(g_expPenalty[level] - g_expPenalty[level - 1]) * (levelFactor / 100.0); }
×
×
  • Create New...