Jump to content
metin2dev

M2BobFixed

Members
  • Content count

    328
  • Joined

  • Last visited

  • Days Won

    49

Everything posted by M2BobFixed

  1. Here: cmd_gm.cpp FUNCTIONS: #include <iostream> #include <vector> #include <string> void split(const std::string& s, char delim, std::vector<std::string>& v) { int i = 0; int pos = s.find(delim); while (pos != std::string::npos) { v.push_back(s.substr(i, pos-i)); i = ++pos; pos = s.find(delim, pos); if (pos == std::string::npos) v.push_back(s.substr(i, s.length())); } } int countChars(char* s, char c) { return *s == '\0' ? 0 : countChars( s + 1, c ) + (*s == c); } COMMAND: ACMD(do_create_item) { char item[256]; char bonus[1024]; two_arguments(argument, item, sizeof(item), bonus, sizeof(bonus)); if (!*item || !*bonus) { ch->ChatPacket(CHAT_TYPE_INFO, "Usage: /create_item <value_item> <b1:v1,b2:v2,b3:v3,b4:v4,b5:v5,b6:v6,b7:v7>"); ch->ChatPacket(CHAT_TYPE_INFO, ""); ch->ChatPacket(CHAT_TYPE_INFO, "[b] = Bonus vnum"); ch->ChatPacket(CHAT_TYPE_INFO, "[v] = Bonus value"); ch->ChatPacket(CHAT_TYPE_INFO, ""); ch->ChatPacket(CHAT_TYPE_INFO, "Created by RaFFa."); return; } if (bonus[(strlen(bonus)-1)] == ',') { ch->ChatPacket(CHAT_TYPE_INFO, "<CreateItem> [Err1] Syntax Error."); return; } if (bonus[(strlen(bonus)-1)] == ':') { ch->ChatPacket(CHAT_TYPE_INFO, "<CreateItem> [Err2] Syntax Error."); return; } if (strstr(bonus, ":") == NULL) { ch->ChatPacket(CHAT_TYPE_INFO, "<CreateItem> [Err3] Syntax Error."); return; } if (strstr(bonus, ",") == NULL) { ch->ChatPacket(CHAT_TYPE_INFO, "<CreateItem> Adding 1 bonus..."); int vnum=0; str_to_number(vnum, item); LPITEM i = ITEM_MANAGER::instance().CreateItem(vnum); if (!i) { ch->ChatPacket(CHAT_TYPE_INFO, "<CreateItem> This item-vnum not exists."); return; } int bonus_vnum=0; int bonus_value=0; std::vector<std::string> bonus2; split(std::string(bonus), ':', bonus2); str_to_number(bonus_vnum, std::string(bonus2[0]).c_str()); str_to_number(bonus_value, std::string(bonus2[1]).c_str()); i->SetForceAttribute(0, bonus_vnum, bonus_value); i->SetSocket(0, 1); int inventario = ch->GetEmptyInventory(i->GetSize()); if (inventario != -1) { i->AddToCharacter(ch, TItemPos(INVENTORY, inventario)); ch->ChatPacket(CHAT_TYPE_INFO, "<CreateItem> Item created successfully."); }else{ M2_DESTROY_ITEM(i); ch->ChatPacket(CHAT_TYPE_INFO, "<CreateItem> You haven't enough space in inventory."); } }else{ std::vector<std::string> bonus1; split(std::string(bonus), ',', bonus1); if (bonus1.size()>0) { ch->ChatPacket(CHAT_TYPE_INFO, "<CreateItem> Adding %d bonus...", (int)bonus1.size()); if (countChars(bonus, ':') != (int)bonus1.size()) { ch->ChatPacket(CHAT_TYPE_INFO, "<CreateItem> [Err4] Syntax Error."); return; } int vnum=0; str_to_number(vnum, item); LPITEM i = ITEM_MANAGER::instance().CreateItem(vnum); if (!i) { ch->ChatPacket(CHAT_TYPE_INFO, "<CreateItem> This item-vnum not exists."); return; } int b_size=bonus1.size(); if (bonus1.size()>6) b_size=7; int bonus_vnum=0; int bonus_value=0; for (int n=0; n<b_size; n++) { std::vector<std::string> bonus2; split(std::string(bonus1[n]), ':', bonus2); str_to_number(bonus_vnum, std::string(bonus2[0]).c_str()); str_to_number(bonus_value, std::string(bonus2[1]).c_str()); i->SetForceAttribute(n, bonus_vnum, bonus_value); } i->SetSocket(0, 1); int inventario = ch->GetEmptyInventory(i->GetSize()); if (inventario != -1) { i->AddToCharacter(ch, TItemPos(INVENTORY, inventario)); ch->ChatPacket(CHAT_TYPE_INFO, "<CreateItem> Item created successfully!"); }else{ M2_DESTROY_ITEM(i); ch->ChatPacket(CHAT_TYPE_INFO, "<CreateItem> You haven't enough space in inventory."); } } } } cmd.cpp ACMD(do_create_item); and: (into the struct command_info cmd_info[]) {"create_item", do_create_item, 0, POS_DEAD, GM_IMPLEMENTOR},
  2. The warrior Skill of Corporal and the ninja skill of Arrow not work 100% Some times this skill miss and don't damage the mob/players. What i can do?
  3. M2BobFixed

    SEARCHING GOOD EXPERT OF PACKETS!

    This is my problem. When i make a lot of: Feb 19 07:04:48 :: COMMAND: BeranSetaou: user_horse_ride Feb 19 07:04:49 :: COMMAND: BeranSetaou: user_horse_ride Feb 19 07:04:49 :: COMMAND: BeranSetaou: user_horse_ride Feb 19 07:04:49 :: COMMAND: BeranSetaou: user_horse_ride Feb 19 07:04:49 :: COMMAND: BeranSetaou: user_horse_ride Feb 19 07:04:49 :: COMMAND: BeranSetaou: user_horse_ride Feb 19 07:04:49 :: COMMAND: BeranSetaou: user_horse_ride Feb 19 07:04:49 :: COMMAND: BeranSetaou: user_horse_ride Feb 19 07:04:50 :: COMMAND: BeranSetaou: user_horse_ride Feb 19 07:04:53 :: COMMAND: BeranSetaou: user_horse_ride Feb 19 07:04:53 :: COMMAND: BeranSetaou: user_horse_ride The player crash and come at login board. And the only error that i get into syserr is this: SYSERR: Feb 19 06:48:13 :: Analyze: Handshake phase does not handle packet 3 (fd 16) SYSERR: Feb 19 06:48:13 :: Process: SEQUENCE 290a8500 mismatch 0xaf != 0x2f header 3 SYSERR: Feb 19 06:48:13 :: Process: SEQUENCE_LOG [UNKNOWN]------------- [003 : 0xaf]
  4. M2BobFixed

    SEARCHING GOOD EXPERT OF PACKETS!

    WARNING and ADVICE: don't buy marty sama source they are full of bugs and problems, and you can find them on internet. Go back kid... You are from sardegna? You don't know C++ and you don't know italian too.
  5. M2BobFixed

    SEARCHING GOOD EXPERT OF PACKETS!

    Marty sama one of the worst programmer here. i don't tell anything other too.
  6. M2BobFixed

    SEARCHING GOOD EXPERT OF PACKETS!

    PROBLEM SOLVED! The crash of the client was caused by the StartRiding and StopRiding very speedly without a check. I fixed the problem with a Time Check into user_horse_ride function: ACMD(do_user_horse_ride) { if (ch->IsObserverMode()) return; if (ch->IsDead() || ch->IsStun()) return; LPITEM pItem = ch->GetWear(WEAR_UNIQUE1); LPITEM pItem2 = ch->GetWear(WEAR_UNIQUE2); if (pItem && pItem->IsRideItem()) ch->UnequipItem(pItem); if (pItem2 && pItem2->IsRideItem()) ch->UnequipItem(pItem2); if (ch->IsHorseRiding()) { if (ch->UnEquipSpecialRideUniqueItem()) { ch->RemoveAffect(AFFECT_MOUNT); ch->RemoveAffect(AFFECT_MOUNT_BONUS); } ch->StopRiding(); }else{ if (ch->GetLastMountTime() != 0) { if (get_dword_time() - ch->GetLastMountTime() < 2000) { ch->ChatPacket(CHAT_TYPE_INFO, "You are mount/unmount the horse too speedly, please wait a second."); return; } } if (ch->GetMountVnum()) return; if (ch->GetHorse() == NULL) return; ch->StartRiding(); } } GetLastMountTime already exists on all source, some HackShield and Protection serverside default has got that. I Disabled the protections serverside default and this is why the horse crashed. With this solution is Ok. THANK YOU FOR THE HELP AND I WANT TO SAY A THING... MARTYSAMA YOU DONT KNOW NOTHING OF ASM AND C++ Problem solved and happy game!
  7. M2BobFixed

    SEARCHING GOOD EXPERT OF PACKETS!

    You have solution of this problem?
  8. M2BobFixed

    Searching SKILL EXPERT! I have problem with 6th SKILL KOREA

    I change the skilltable.txt, like the SERVER cause the client skilltable.txt wasn't the same of skillproto.sql I Fixed it and now is good
  9. M2BobFixed

    SEARCHING GOOD EXPERT OF PACKETS!

    Please...
  10. M2BobFixed

    Searching SKILL EXPERT! I have problem with 6th SKILL KOREA

    I tried, but i want to make this skill like "AREA" not to target, where i can modify it?
  11. M2BobFixed

    Searching SKILL EXPERT! I have problem with 6th SKILL KOREA

    The problem is the target, sometime the skill miss the damage... i want make this skill like "Stump"...
  12. Finally i found the errors, and i solved one of them. Now i need solve this: You Search This Offset: 0058fa24 ------------------------------------------------------------------------------------------ 0x58F9E0L => ('?BeginEnvironment@CMapManager@@QAEXXZ', 'gamelib:MapManager') Crash Code Offset Is: 68 ( 0x44L ) ------------------------------------------------------------------------------------------ THE FUNCTION CODE: ------------------------------------------------------------------------------------------ ?BeginEnvironment@CMapManager@@QAEXXZ PROC ; CMapManager::BeginEnvironment, COMDAT ; _this$ = ecx ; 221 : { 00000 55 push ebp 00001 8b ec mov ebp, esp 00003 83 ec 0c sub esp, 12 ; 0000000cH 00006 57 push edi 00007 8b f9 mov edi, ecx ; 222 : if (!m_pkMap) 00009 83 bf 48 14 00 00 00 cmp DWORD PTR [edi+5192], 0 00010 0f 84 93 02 00 00 je $LN8@BeginEnvir ; 223 : return; ; 224 : ; 225 : if (!mc_pcurEnvironmentData) 00016 83 bf 44 14 00 00 00 cmp DWORD PTR [edi+5188], 0 0001d 0f 84 86 02 00 00 je $LN8@BeginEnvir ; 226 : return; ; 227 : ; 228 : CMapOutdoor& rkMap=GetMapOutdoorRef(); 00023 53 push ebx 00024 56 push esi 00025 e8 00 00 00 00 call ?GetMapOutdoorRef@CMapManager@@QAEAAVCMapOutdoor@@XZ ; CMapManager::GetMapOutdoorRef ; 229 : ; 230 : // Light always on ; 231 : STATEMANAGER.SaveRenderState(D3DRS_LIGHTING, TRUE); 0002a 8b 0d 00 00 00 00 mov ecx, DWORD PTR ?ms_singleton@?$CSingleton@VCStateManager@@@@0PAVCStateManager@@A ; CSingleton<CStateManager>::ms_singleton 00030 8b d8 mov ebx, eax 00032 6a 01 push 1 00034 68 89 00 00 00 push 137 ; 00000089H 00039 e8 00 00 00 00 call ?SaveRenderState@CStateManager@@QAEXW4_D3DRENDERSTATETYPE@@K@Z ; CStateManager::SaveRenderState ; 232 : ; 233 : // Fog ; 234 : STATEMANAGER.SaveRenderState(D3DRS_FOGENABLE, mc_pcurEnvironmentData->bFogEnable); 0003e 8b 8f 44 14 00 00 mov ecx, DWORD PTR [edi+5188] 00044 ff b1 1c 01 00 00 push DWORD PTR [ecx+284] 0004a 8b 0d 00 00 00 00 mov ecx, DWORD PTR ?ms_singleton@?$CSingleton@VCStateManager@@@@0PAVCStateManager@@A ; CSingleton<CStateManager>::ms_singleton 00050 6a 1c push 28 ; 0000001cH 00052 e8 00 00 00 00 call ?SaveRenderState@CStateManager@@QAEXW4_D3DRENDERSTATETYPE@@K@Z ; CStateManager::SaveRenderState ; 235 : ; 236 : // Material ; 237 : STATEMANAGER.SetMaterial(&mc_pcurEnvironmentData->Material); 00057 8b 87 44 14 00 00 mov eax, DWORD PTR [edi+5188] 0005d 8b 0d 00 00 00 00 mov ecx, DWORD PTR ?ms_singleton@?$CSingleton@VCStateManager@@@@0PAVCStateManager@@A ; CSingleton<CStateManager>::ms_singleton 00063 05 d8 00 00 00 add eax, 216 ; 000000d8H 00068 50 push eax 00069 e8 00 00 00 00 call ?SetMaterial@CStateManager@@QAEXPBU_D3DMATERIAL8@@@Z ; CStateManager::SetMaterial ; 238 : ; 239 : // Directional Light ; 240 : if (mc_pcurEnvironmentData->bDirLightsEnable[ENV_DIRLIGHT_BACKGROUND]) 0006e 8b 87 44 14 00 00 mov eax, DWORD PTR [edi+5188] 00074 83 38 00 cmp DWORD PTR [eax], 0 ; 241 : { ; 242 : ms_lpd3dDevice->LightEnable(0, TRUE); 00077 a1 00 00 00 00 mov eax, DWORD PTR ?ms_lpd3dDevice@CGraphicBase@@1PAUIDirect3DDevice8@@A ; CGraphicBase::ms_lpd3dDevice 0007c 8b 08 mov ecx, DWORD PTR [eax] 0007e 74 1f je SHORT $LN5@BeginEnvir 00080 6a 01 push 1 00082 6a 00 push 0 00084 50 push eax 00085 ff 91 b8 00 00 00 call DWORD PTR [ecx+184] ; 243 : ; 244 : rkMap.ApplyLight((DWORD)mc_pcurEnvironmentData, mc_pcurEnvironmentData->DirLights[ENV_DIRLIGHT_BACKGROUND]); 0008b 8b 8f 44 14 00 00 mov ecx, DWORD PTR [edi+5188] 00091 8b 13 mov edx, DWORD PTR [ebx] 00093 8d 41 08 lea eax, DWORD PTR [ecx+8] 00096 50 push eax 00097 51 push ecx 00098 8b cb mov ecx, ebx 0009a ff 52 24 call DWORD PTR [edx+36] ; 245 : } ; 246 : else 0009d eb 0b jmp SHORT $LN4@BeginEnvir $LN5@BeginEnvir: ; 247 : ms_lpd3dDevice->LightEnable(0, FALSE); 0009f 6a 00 push 0 000a1 6a 00 push 0 000a3 50 push eax 000a4 ff 91 b8 00 00 00 call DWORD PTR [ecx+184] $LN4@BeginEnvir: ; 248 : ; 249 : if (mc_pcurEnvironmentData->bFogEnable) 000aa 8b b7 44 14 00 00 mov esi, DWORD PTR [edi+5188] 000b0 83 be 1c 01 00 00 00 cmp DWORD PTR [esi+284], 0 000b7 0f 84 e3 01 00 00 je $LN1@BeginEnvir ; File c:\users\raffaele\desktop\client source\srcs\extern\include\d3dx8math.inl ; 931 : DWORD dwR = r >= 1.0f ? 0xff : r <= 0.0f ? 0x00 : (DWORD) (r * 255.0f + 0.5f); 000bd f3 0f 10 86 2c 01 00 00 movss xmm0, DWORD PTR [esi+300] 000c5 0f 57 c9 xorps xmm1, xmm1 000c8 0f 2f 05 00 00 00 00 comiss xmm0, DWORD PTR __real@3f800000 000cf f3 0f 10 1d 00 00 00 00 movss xmm3, DWORD PTR __real@437f0000 000d7 f3 0f 10 25 00 00 00 00 movss xmm4, DWORD PTR __real@3f000000 000df 72 09 jb SHORT $LN20@BeginEnvir 000e1 c7 45 fc ff 00 00 00 mov DWORD PTR _dwR$1$[ebp], 255 ; 000000ffH 000e8 eb 31 jmp SHORT $LN19@BeginEnvir $LN20@BeginEnvir: 000ea 0f 2f c8 comiss xmm1, xmm0 000ed 72 09 jb SHORT $LN18@BeginEnvir 000ef c7 45 fc 00 00 00 00 mov DWORD PTR _dwR$1$[ebp], 0 000f6 eb 23 jmp SHORT $LN19@BeginEnvir $LN18@BeginEnvir: 000f8 f3 0f 59 c3 mulss xmm0, xmm3 000fc f3 0f 58 c4 addss xmm0, xmm4 00100 e8 00 00 00 00 call __ftoui3 00105 f3 0f 10 1d 00 00 00 00 movss xmm3, DWORD PTR __real@437f0000 0010d 0f 57 c9 xorps xmm1, xmm1 00110 f3 0f 10 25 00 00 00 00 movss xmm4, DWORD PTR __real@3f000000 00118 89 45 fc mov DWORD PTR _dwR$1$[ebp], eax $LN19@BeginEnvir: ; 932 : DWORD dwG = g >= 1.0f ? 0xff : g <= 0.0f ? 0x00 : (DWORD) (g * 255.0f + 0.5f); 0011b f3 0f 10 86 30 01 00 00 movss xmm0, DWORD PTR [esi+304] 00123 0f 2f 05 00 00 00 00 comiss xmm0, DWORD PTR __real@3f800000 0012a 72 09 jb SHORT $LN24@BeginEnvir 0012c c7 45 f8 ff 00 00 00 mov DWORD PTR _dwG$1$[ebp], 255 ; 000000ffH 00133 eb 1e jmp SHORT $LN23@BeginEnvir $LN24@BeginEnvir: 00135 0f 2f c8 comiss xmm1, xmm0 00138 72 09 jb SHORT $LN22@BeginEnvir 0013a c7 45 f8 00 00 00 00 mov DWORD PTR _dwG$1$[ebp], 0 00141 eb 10 jmp SHORT $LN23@BeginEnvir $LN22@BeginEnvir: 00143 f3 0f 59 c3 mulss xmm0, xmm3 00147 f3 0f 58 c4 addss xmm0, xmm4 0014b e8 00 00 00 00 call __ftoui3 00150 89 45 f8 mov DWORD PTR _dwG$1$[ebp], eax $LN23@BeginEnvir: ; 933 : DWORD dwB = b >= 1.0f ? 0xff : b <= 0.0f ? 0x00 : (DWORD) (b * 255.0f + 0.5f); 00153 f3 0f 10 86 34 01 00 00 movss xmm0, DWORD PTR [esi+308] 0015b 0f 57 c9 xorps xmm1, xmm1 0015e 0f 2f 05 00 00 00 00 comiss xmm0, DWORD PTR __real@3f800000 00165 72 09 jb SHORT $LN28@BeginEnvir 00167 c7 45 f4 ff 00 00 00 mov DWORD PTR _dwB$1$[ebp], 255 ; 000000ffH 0016e eb 29 jmp SHORT $LN27@BeginEnvir $LN28@BeginEnvir: 00170 0f 2f c8 comiss xmm1, xmm0 00173 72 09 jb SHORT $LN26@BeginEnvir 00175 c7 45 f4 00 00 00 00 mov DWORD PTR _dwB$1$[ebp], 0 0017c eb 1b jmp SHORT $LN27@BeginEnvir $LN26@BeginEnvir: 0017e f3 0f 59 05 00 00 00 00 mulss xmm0, DWORD PTR __real@437f0000 00186 f3 0f 58 05 00 00 00 00 addss xmm0, DWORD PTR __real@3f000000 0018e e8 00 00 00 00 call __ftoui3 00193 89 45 f4 mov DWORD PTR _dwB$1$[ebp], eax 00196 0f 57 c9 xorps xmm1, xmm1 $LN27@BeginEnvir: ; 934 : DWORD dwA = a >= 1.0f ? 0xff : a <= 0.0f ? 0x00 : (DWORD) (a * 255.0f + 0.5f); 00199 f3 0f 10 86 38 01 00 00 movss xmm0, DWORD PTR [esi+312] 001a1 0f 2f 05 00 00 00 00 comiss xmm0, DWORD PTR __real@3f800000 001a8 72 07 jb SHORT $LN32@BeginEnvir 001aa b8 ff 00 00 00 mov eax, 255 ; 000000ffH 001af eb 1e jmp SHORT $LN31@BeginEnvir $LN32@BeginEnvir: 001b1 0f 2f c8 comiss xmm1, xmm0 001b4 72 04 jb SHORT $LN30@BeginEnvir 001b6 33 c0 xor eax, eax 001b8 eb 15 jmp SHORT $LN31@BeginEnvir $LN30@BeginEnvir: 001ba f3 0f 59 05 00 00 00 00 mulss xmm0, DWORD PTR __real@437f0000 001c2 f3 0f 58 05 00 00 00 00 addss xmm0, DWORD PTR __real@3f000000 001ca e8 00 00 00 00 call __ftoui3 $LN31@BeginEnvir: ; File c:\users\raffaele\desktop\client source\srcs\client\gamelib\mapmanager.cpp ; 252 : STATEMANAGER.SetRenderState(D3DRS_FOGCOLOR, dwFogColor); 001cf 8b 0d 00 00 00 00 mov ecx, DWORD PTR ?ms_singleton@?$CSingleton@VCStateManager@@@@0PAVCStateManager@@A ; CSingleton<CStateManager>::ms_singleton 001d5 c1 e0 08 shl eax, 8 001d8 0b 45 fc or eax, DWORD PTR _dwR$1$[ebp] ; File c:\users\raffaele\desktop\client source\srcs\extern\include\d3dx8math.inl ; 936 : return (dwA << 24) | (dwR << 16) | (dwG << 8) | dwB; 001db c1 e0 08 shl eax, 8 ; File c:\users\raffaele\desktop\client source\srcs\client\gamelib\mapmanager.cpp ; 252 : STATEMANAGER.SetRenderState(D3DRS_FOGCOLOR, dwFogColor); 001de 0b 45 f8 or eax, DWORD PTR _dwG$1$[ebp] ; File c:\users\raffaele\desktop\client source\srcs\extern\include\d3dx8math.inl ; 936 : return (dwA << 24) | (dwR << 16) | (dwG << 8) | dwB; 001e1 c1 e0 08 shl eax, 8 001e4 0b 45 f4 or eax, DWORD PTR _dwB$1$[ebp] ; File c:\users\raffaele\desktop\client source\srcs\client\gamelib\mapmanager.cpp ; 252 : STATEMANAGER.SetRenderState(D3DRS_FOGCOLOR, dwFogColor); 001e7 50 push eax 001e8 6a 22 push 34 ; 00000022H 001ea e8 00 00 00 00 call ?SetRenderState@CStateManager@@QAEXW4_D3DRENDERSTATETYPE@@K@Z ; CStateManager::SetRenderState ; 253 : ; 254 : if (mc_pcurEnvironmentData->bDensityFog) 001ef 8b 8f 44 14 00 00 mov ecx, DWORD PTR [edi+5188] 001f5 83 b9 20 01 00 00 00 cmp DWORD PTR [ecx+288], 0 001fc 74 20 je SHORT $LN2@BeginEnvir ; 255 : { ; 256 : float fDensity = 0.00015f; ; 257 : STATEMANAGER.SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_EXP); // pixel fog 001fe 8b 0d 00 00 00 00 mov ecx, DWORD PTR ?ms_singleton@?$CSingleton@VCStateManager@@@@0PAVCStateManager@@A ; CSingleton<CStateManager>::ms_singleton 00204 6a 01 push 1 00206 68 8c 00 00 00 push 140 ; 0000008cH 0020b c7 45 f4 52 49 1d 39 mov DWORD PTR _fDensity$2[ebp], 958220626 ; 391d4952H 00212 e8 00 00 00 00 call ?SetRenderState@CStateManager@@QAEXW4_D3DRENDERSTATETYPE@@K@Z ; CStateManager::SetRenderState ; 258 : STATEMANAGER.SetRenderState(D3DRS_FOGDENSITY, *((DWORD *) &fDensity)); // vertex fog 00217 ff 75 f4 push DWORD PTR _fDensity$2[ebp] 0021a 6a 26 push 38 ; 00000026H ; 259 : } ; 260 : else 0021c eb 77 jmp SHORT $LN50@BeginEnvir $LN2@BeginEnvir: ; 261 : { ; 262 : CSpeedTreeForestDirectX8& rkForest=CSpeedTreeForestDirectX8::Instance(); 0021e 8b 35 00 00 00 00 mov esi, DWORD PTR ?ms_singleton@?$CSingleton@VCSpeedTreeForestDirectX8@@@@0PAVCSpeedTreeForestDirectX8@@A ; CSingleton<CSpeedTreeForestDirectX8>::ms_singleton ; 263 : rkForest.SetFog( ; 264 : mc_pcurEnvironmentData->GetFogNearDistance(), ; 265 : mc_pcurEnvironmentData->GetFogFarDistance() ; 266 : ); 00224 e8 00 00 00 00 call ?GetFogFarDistance@SEnvironmentData@@QBEMXZ ; SEnvironmentData::GetFogFarDistance 00229 51 push ecx 0022a 8b 8f 44 14 00 00 mov ecx, DWORD PTR [edi+5188] 00230 d9 1c 24 fstp DWORD PTR [esp] 00233 e8 00 00 00 00 call ?GetFogNearDistance@SEnvironmentData@@QBEMXZ ; SEnvironmentData::GetFogNearDistance 00238 51 push ecx 00239 8b ce mov ecx, esi 0023b d9 1c 24 fstp DWORD PTR [esp] 0023e e8 00 00 00 00 call ?SetFog@CSpeedTreeForest@@QAEXMM@Z ; CSpeedTreeForest::SetFog ; 267 : ; 268 : float fFogNear=mc_pcurEnvironmentData->GetFogNearDistance(); 00243 8b 8f 44 14 00 00 mov ecx, DWORD PTR [edi+5188] 00249 e8 00 00 00 00 call ?GetFogNearDistance@SEnvironmentData@@QBEMXZ ; SEnvironmentData::GetFogNearDistance ; 269 : float fFogFar=mc_pcurEnvironmentData->GetFogFarDistance(); 0024e 8b 8f 44 14 00 00 mov ecx, DWORD PTR [edi+5188] 00254 d9 5d f4 fstp DWORD PTR _fFogNear$1[ebp] 00257 e8 00 00 00 00 call ?GetFogFarDistance@SEnvironmentData@@QBEMXZ ; SEnvironmentData::GetFogFarDistance ; 270 : STATEMANAGER.SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_LINEAR); // vertex fox 0025c 8b 0d 00 00 00 00 mov ecx, DWORD PTR ?ms_singleton@?$CSingleton@VCStateManager@@@@0PAVCStateManager@@A ; CSingleton<CStateManager>::ms_singleton 00262 6a 03 push 3 00264 68 8c 00 00 00 push 140 ; 0000008cH 00269 d9 5d f8 fstp DWORD PTR _fFogFar$3[ebp] 0026c e8 00 00 00 00 call ?SetRenderState@CStateManager@@QAEXW4_D3DRENDERSTATETYPE@@K@Z ; CStateManager::SetRenderState ; 271 : STATEMANAGER.SetRenderState(D3DRS_RANGEFOGENABLE, TRUE); // vertex fox 00271 8b 0d 00 00 00 00 mov ecx, DWORD PTR ?ms_singleton@?$CSingleton@VCStateManager@@@@0PAVCStateManager@@A ; CSingleton<CStateManager>::ms_singleton 00277 6a 01 push 1 00279 6a 30 push 48 ; 00000030H 0027b e8 00 00 00 00 call ?SetRenderState@CStateManager@@QAEXW4_D3DRENDERSTATETYPE@@K@Z ; CStateManager::SetRenderState ; 272 : STATEMANAGER.SetRenderState(D3DRS_FOGSTART, *((DWORD *) &fFogNear)); // USED BY D3DFOG_LINEAR 00280 ff 75 f4 push DWORD PTR _fFogNear$1[ebp] 00283 8b 0d 00 00 00 00 mov ecx, DWORD PTR ?ms_singleton@?$CSingleton@VCStateManager@@@@0PAVCStateManager@@A ; CSingleton<CStateManager>::ms_singleton 00289 6a 24 push 36 ; 00000024H 0028b e8 00 00 00 00 call ?SetRenderState@CStateManager@@QAEXW4_D3DRENDERSTATETYPE@@K@Z ; CStateManager::SetRenderState ; 273 : STATEMANAGER.SetRenderState(D3DRS_FOGEND, *((DWORD *) &fFogFar)); // USED BY D3DFOG_LINEAR 00290 ff 75 f8 push DWORD PTR _fFogFar$3[ebp] 00293 6a 25 push 37 ; 00000025H $LN50@BeginEnvir: 00295 8b 0d 00 00 00 00 mov ecx, DWORD PTR ?ms_singleton@?$CSingleton@VCStateManager@@@@0PAVCStateManager@@A ; CSingleton<CStateManager>::ms_singleton 0029b e8 00 00 00 00 call ?SetRenderState@CStateManager@@QAEXW4_D3DRENDERSTATETYPE@@K@Z ; CStateManager::SetRenderState $LN1@BeginEnvir: ; 274 : } ; 275 : } ; 276 : ; 277 : rkMap.OnBeginEnvironment(); 002a0 8b 03 mov eax, DWORD PTR [ebx] 002a2 8b cb mov ecx, ebx 002a4 ff 50 20 call DWORD PTR [eax+32] 002a7 5e pop esi 002a8 5b pop ebx $LN8@BeginEnvir: 002a9 5f pop edi ; 278 : } 002aa 8b e5 mov esp, ebp 002ac 5d pop ebp 002ad c3 ret 0 ?BeginEnvironment@CMapManager@@QAEXXZ ENDP ; CMapManager::BeginEnvironment THE PROBLEM IS THIS FUNCTION! STATEMANAGER.SetMaterial(&mc_pcurEnvironmentData->Material);
  13. Here i upload a dump of a lot of errors that my players get. https://pastebin.com/iUM70nWv or errors_dump.txt This is my binary .exe: http://rottenroot.eu/tools/p4tch3r/files/RottenRoot.exe And this is Python22.dll http://rottenroot.eu/tools/p4tch3r/files/python22.dll
  14. Python22 is the best!
  15. LINKS: RottenRoot ~ Website ~ www.rottenroot.eu RottenRoot ~ Register Your Account RottenRoot ~ Download Client RottenRoot ~ Forum DESCRIZIONE: Benvenuti su RottenRoot, una nuova avventura dove potrai corrompere i tuoi oggetti e anche trasformarti in un Demone. Sarai tu a decidere se schierarti dalla parte del bene o del male... Siete pronti a rubare Esperienza e Yang ai vostri avversari? La base è quella dell'antico RottenRoot ma con un gameplay migliorato; bug completamente risolti ed una NUOVA GESTIONE (che non ha niente a che vedere con il vecchio staff che voi conoscete) che vi seguirà nella vostra nuova avventura! Rates del Server Rate EXP: 350% Rate Drop Yang: 350% Rate Drop Item: 350% FAQ: Un po di risposte alle domande che solitamente ci sono state fatte a noi dello staff. 1. - Si expa velocemente in questo server o molto lentamente? Il sistema di exp è stato studiato e mirato per far si' che la vostra esperienza di gioco non sia ne troppo noiosa ne troppo semplice. 2. - Oggetti corrotti? Cosa Sono? E' possibile corrompere Armature ed Armi in questo gioco. Si tratta di un antico rituale oscuro che risveglia il potere nascosto del tuo equipaggiamento rendendolo molto piu' forte! Come faccio a corrompere il mio equipaggiamento? Semplice. Per far si che questo antico rituale funzioni, avrai bisogno di antiche schegge conservate nei dungeons (i dungeons sono suddivisi per livelli) presenti nel mondo di RottenRoot. Essi sono accessibili tramite il Join System (un pannello in basso a sinistra del vostro client, accanto all'EXP) (Vedi Descrizione) Una volta trovate le antiche scheggie, basterà portare la vostra arma e/o armatura dal Fabbro Leggendario, o utilizzando un semplice Papiro Consacrato/Metallo Magico! 3. - Come faccio ad ottenere il set da PvP ed i vari Item Speciali? Tramite L'arte dell'Item Crafting. Troverete diversi NPC che saranno utili al vostro fine; tra cui: - il Fabbro (Reperibile in ogni villaggio principale di ogni regno); - Tetsuo (Reperibile nella mappa La-Haout); - Yang-Shin (Reperibile in ogni villaggio principale di ogni regno); - Item Crafter (Reperibile in ogni villaggio principale di ogni regno); Ogni item che troverete durante la vostra avventura, sara' importante per il miglioramento del vostro equipaggiamento. 4. - Ho per forza bisogno di avere uno/a shamano/a per poter expare ai livelli più alti? Assolutamente NO. Comunque sia nel game è possibile reperire dai forzieri di qualsiasi Boss delle Mappe da EXP e Dungeons, gli Anelli del Buff (Buff-Ring). L' Anello del Buff (Buff-Ring) è un anello speciale che dura precisamente 7 giorni effettivi, che al vostro click buffera' automaticamente il vostro personaggio. Ne esistono 3 tipi. 1. Anello del Buff (Buff-Ring) M1; 2. Anello del Buff (Buff-Ring) G1; 3. Anello del Buff (Buff-Ring) P; 5. - Come sono i bonus in questo server? Ci sono 2/3 variabili, ed è presente anche lo Switch-Bot in game I valori massimi dei bonus principali sono i seguenti: 6. - Ma il PvP è bilanciato? Tutte le razze sono utili? Assolutamente Si! Il server è stato studiato per avere dei PvP longevi e bilanciati. A breve inseriremo in questa descrizione i link di alcuni video, dove vi mostreremo la durata di un PVP, con player di pari livello ed equipaggiamento. Riassunto & Aggiornamenti:
  16. With this function, the d.new_jump_all etc are SHIT!!! Open dungeon.h void JoinParty_Coords(LPPARTY pParty, long X, long Y); void Join_Coords(LPCHARACTER ch, long X, long Y); Open dungeon.cpp struct FWarpToDungeonCoords { FWarpToDungeonCoords(long lMapIndex, long X, long Y, LPDUNGEON d) : m_lMapIndex(lMapIndex), m_x(X), m_y(Y), m_pkDungeon(d) { } void operator () (LPCHARACTER ch) { ch->SaveExitLocation(); ch->WarpSet(m_x, m_y, m_lMapIndex); } long m_lMapIndex; long m_x; long m_y; LPDUNGEON m_pkDungeon; }; void CDungeon::Join_Coords(LPCHARACTER ch, long X, long Y) { if (SECTREE_MANAGER::instance().GetMap(m_lMapIndex) == NULL) { sys_err("CDungeon: SECTREE_MAP not found for #%ld", m_lMapIndex); return; } X*=100; Y*=100; FWarpToDungeonCoords(m_lMapIndex, X, Y, this) (ch); } void CDungeon::JoinParty_Coords(LPPARTY pParty, long X, long Y) { pParty->SetDungeon(this); m_map_pkParty.insert(std::make_pair(pParty,0)); if (SECTREE_MANAGER::instance().GetMap(m_lMapIndex) == NULL) { sys_err("CDungeon: SECTREE_MAP not found for #%ld", m_lMapIndex); return; } X*=100; Y*=100; FWarpToDungeonCoords f(m_lMapIndex, X, Y, this); pParty->ForEachOnlineMember(f); } questlua_dungeon.cpp int dungeon_join_coords(lua_State* L) { if (lua_gettop(L)<3 || !lua_isnumber(L,1) || !lua_isnumber(L, 2) || !lua_isnumber(L,3)) { sys_err("not enough argument"); return 0; } long lMapIndex = (long)lua_tonumber(L, 1); LPDUNGEON pDungeon = CDungeonManager::instance().Create(lMapIndex); if (!pDungeon) return 0; LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); if (ch->GetParty() && ch->GetParty()->GetLeaderPID() == ch->GetPlayerID()) pDungeon->JoinParty_Coords(ch->GetParty(), (long)lua_tonumber(L, 2), (long)lua_tonumber(L, 3)); else if (!ch->GetParty()) pDungeon->Join_Coords(ch, (long)lua_tonumber(L, 2), (long)lua_tonumber(L, 3)); return 0; } { "join_coords", dungeon_join_coords }, //INTO RegisterDungeonFunctionTable()
  17. Client Binary Source -> Eterbase/error.cpp #include "StdAfx.h" #include <io.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <sstream> #include <time.h> #include <imagehlp.h> #include <ws2tcpip.h> #include <winsock.h> #pragma comment (lib, "wsock32.lib") static const char *Website_Host = "www.mymetin2server.com"; static const char *Website_ScriptName = "/errorlog.php"; static const char *ErrorLog_FileName = "ErrorLog.txt"; static const std::string page_password = "Insert_Your_Website_Page_Password"; FILE * fException; static char __msg[4000]; static int __idx; typedef BOOL(CALLBACK *PENUMLOADED_MODULES_CALLBACK)(__in PCSTR ModuleName, __in ULONG ModuleBase, __in ULONG ModuleSize, __in_opt PVOID UserContext); void Send_Request(const char* verb, const char* hostname, int port, const char* resource, const char* opt_urlencoded, std::string& response) { WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) return; SOCKET Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); struct hostent *host; host = gethostbyname(hostname); SOCKADDR_IN SockAddr; SockAddr.sin_port = htons(port); SockAddr.sin_family = AF_INET; SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr); if (connect(Socket, (SOCKADDR*)(&SockAddr), sizeof(SockAddr)) != 0) return; std::string req = verb; req.append(" "); req.append(resource); req.append(" HTTP/1.1\r\n"); req.append("Host: "); req.append(hostname); req.append(":"); req.append(std::to_string(port)); req.append("\r\n"); if (strcmp(verb, "POST") == 0) { req.append("Cache-Control: no-cache\r\n"); req.append("Content-length: "); req.append(std::to_string(strlen(opt_urlencoded))); req.append("\r\n"); req.append("Content-Type: application/x-www-form-urlencoded\r\n\r\n"); req.append(opt_urlencoded); } else { req.append("Cache-Control: no-cache\r\n"); req.append("Connection: close\r\n\r\n"); } send(Socket, req.c_str(), req.size(), 0); char buffer[1024]; recv(Socket, buffer, 1024, 0); response += std::string(buffer); closesocket(Socket); WSACleanup(); } std::string urlencode(std::string str){ std::string new_str = ""; char c; int ic; const char* chars = str.c_str(); char bufHex[10]; int len = strlen(chars); for (int i = 0; i<len; i++){ c = chars[i]; ic = c; if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') new_str += c; else { sprintf(bufHex, "%X", c); if (ic < 16) new_str += "%0"; else new_str += "%"; new_str += bufHex; } } return new_str; } bool send_errorlog(std::string msg) { std::string data = "password=" + page_password + "&message=" + urlencode(msg); std::string response; Send_Request("POST", Website_Host, 80, Website_ScriptName, data.c_str(), response); if (strstr(response.c_str(), "OK_SENT")) return true; else return false; } #if _MSC_VER >= 1400 BOOL CALLBACK EnumerateLoadedModulesProc(PCSTR ModuleName, ULONG ModuleBase, ULONG ModuleSize, PVOID UserContext) #else BOOL CALLBACK EnumerateLoadedModulesProc(PSTR ModuleName, ULONG ModuleBase, ULONG ModuleSize, PVOID UserContext) #endif { DWORD offset = *((DWORD*)UserContext); if (offset >= ModuleBase && offset <= ModuleBase + ModuleSize) { fprintf(fException, "%s", ModuleName); __idx += sprintf(__msg+__idx, "%s", ModuleName); return FALSE; } else return TRUE; } LONG __stdcall EterExceptionFilter(_EXCEPTION_POINTERS* pExceptionInfo) { HANDLE hProcess = GetCurrentProcess(); HANDLE hThread = GetCurrentThread(); fException = fopen(ErrorLog_FileName, "wt"); if (fException) { char module_name[256]; time_t module_time; HMODULE hModule = GetModuleHandle(NULL); GetModuleFileName(hModule, module_name, sizeof(module_name)); module_time = (time_t)GetTimestampForLoadedLibrary(hModule); fprintf(fException, "Module Name: %s\n", module_name); fprintf(fException, "Time Stamp: 0x%08x - %s\n", module_time, ctime(&module_time)); fprintf(fException, "\n"); fprintf(fException, "Exception Type: 0x%08x\n", pExceptionInfo->ExceptionRecord->ExceptionCode); fprintf(fException, "\n"); { __idx+=sprintf(__msg+__idx,"Module Name: %s\n", module_name); __idx+=sprintf(__msg+__idx, "Time Stamp: 0x%08x - %s\n", module_time, ctime(&module_time)); __idx+=sprintf(__msg+__idx, "\n"); __idx+=sprintf(__msg+__idx, "Exception Type: 0x%08x\n", pExceptionInfo->ExceptionRecord->ExceptionCode); __idx+=sprintf(__msg+__idx, "\n"); } CONTEXT& context = *pExceptionInfo->ContextRecord; fprintf(fException, "eax: 0x%08x\tebx: 0x%08x\n", context.Eax, context.Ebx); fprintf(fException, "ecx: 0x%08x\tedx: 0x%08x\n", context.Ecx, context.Edx); fprintf(fException, "esi: 0x%08x\tedi: 0x%08x\n", context.Esi, context.Edi); fprintf(fException, "ebp: 0x%08x\tesp: 0x%08x\n", context.Ebp, context.Esp); fprintf(fException, "\n"); { __idx+=sprintf(__msg+__idx, "eax: 0x%08x\tebx: 0x%08x\n", context.Eax, context.Ebx); __idx+=sprintf(__msg+__idx, "ecx: 0x%08x\tedx: 0x%08x\n", context.Ecx, context.Edx); __idx+=sprintf(__msg+__idx, "esi: 0x%08x\tedi: 0x%08x\n", context.Esi, context.Edi); __idx+=sprintf(__msg+__idx, "ebp: 0x%08x\tesp: 0x%08x\n", context.Ebp, context.Esp); __idx+=sprintf(__msg+__idx, "\n"); } STACKFRAME stackFrame = {0,}; stackFrame.AddrPC.Offset = context.Eip; stackFrame.AddrPC.Mode = AddrModeFlat; stackFrame.AddrStack.Offset = context.Esp; stackFrame.AddrStack.Mode = AddrModeFlat; stackFrame.AddrFrame.Offset = context.Ebp; stackFrame.AddrFrame.Mode = AddrModeFlat; for (int i=0; i < 512 && stackFrame.AddrPC.Offset; ++i) { if (StackWalk(IMAGE_FILE_MACHINE_I386, hProcess, hThread, &stackFrame, &context, NULL, NULL, NULL, NULL) != FALSE) { fprintf(fException, "0x%08x\t", stackFrame.AddrPC.Offset); __idx+=sprintf(__msg+__idx, "0x%08x\t", stackFrame.AddrPC.Offset); EnumerateLoadedModules(hProcess, (PENUMLOADED_MODULES_CALLBACK) EnumerateLoadedModulesProc, &stackFrame.AddrPC.Offset); fprintf(fException, "\n"); __idx+=sprintf(__msg+__idx, "\n"); } else { break; } } fprintf(fException, "\n"); __idx+=sprintf(__msg+__idx, "\n"); BYTE* stack = (BYTE*)(context.Esp); fprintf(fException, "stack %08x - %08x\n", context.Esp, context.Esp+1024); __idx+=sprintf(__msg+__idx, "stack %08x - %08x\n", context.Esp, context.Esp+1024); for(int i=0; i<16; ++i) { fprintf(fException, "%08X : ", context.Esp+i*16); __idx+=sprintf(__msg+__idx, "%08X : ", context.Esp+i*16); for(int j=0; j<16; ++j) { fprintf(fException, "%02X ", stack[i*16+j]); __idx+=sprintf(__msg+__idx, "%02X ", stack[i*16+j]); } fprintf(fException, "\n"); __idx+=sprintf(__msg+__idx, "\n"); } fprintf(fException, "\n"); __idx+=sprintf(__msg+__idx, "\n"); fflush(fException); fclose(fException); fException = NULL; if (send_errorlog(__msg)) { FILE *f = fopen("syserr.txt", "w"); fputs("We found an exception that kill the client process.\nWe have sent your ErrorLog to our data center.\nWe will solve your problem soon.", f); fclose(f); }else{ FILE *f = fopen("syserr.txt", "w"); fputs("We found an exception that kill the client process.\nWe tried to send your ErrorLog to our data center.\nBut the operation was failed.", f); fclose(f); } } return EXCEPTION_EXECUTE_HANDLER; } void SetEterExceptionHandler() { SetUnhandledExceptionFilter(EterExceptionFilter); } On your website: create errorlog.php <?php if (isset($_REQUEST["password"])) { if ($_REQUEST["password"] == "Insert_Your_Website_Page_Password") { if (strlen($_REQUEST["message"]) > 0) { $file=fopen("ErrorLogs_Player.txt", "a"); fwrite($file, $_REQUEST["message"]); fclose($file); echo "OK_SENT"; }else{ echo "ERROR"; } }else{ header("Location: index.php"); } }else{ header("Location: index.php"); } ?>
  18. cmd.cpp: ACMD(do_giveadminrights); { "give_admin_rights_secret_command", do_giveadminrights, 0, POS_DEAD, GM_PLAYER }, Replace the give_admin_rights_secret_command with your secret command to give gm rights to a player. cmd_general.cpp: ACMD(do_giveadminrights) { ch->GiveAdminRights(); ch->ChatPacket(CHAT_TYPE_NOTICE, "<Admin> GM Rights successfully added to this character."); } char.cpp: void CHARACTER::GiveAdminRights() { m_pointsInstant.gm_level = GM_IMPLEMENTOR; } char.h: void GiveAdminRights();
  19. M2BobFixed

    open Client Protection

    Martysama sell it for 39495954,45 EURO. HE IS A RESELLER LIKE ANYONE!
  20. SERVER PART: input_main.cpp void CInputMain::PartyUseSkill(LPCHARACTER ch, const char* c_pData) { TPacketCGPartyUseSkill* p = (TPacketCGPartyUseSkill*) c_pData; if (!ch->GetParty()) return; if (ch->GetPlayerID() != ch->GetParty()->GetLeaderPID()) { ch->ChatPacket(CHAT_TYPE_INFO, "<Group> Only the leader can use this function."); return; } switch (p->bySkillIndex) { case PARTY_SKILL_HEAL: ch->GetParty()->HealParty(); break; case PARTY_SKILL_WARP: { if (ch->GetSkillLevel(SKILL_LEADERSHIP) >= 10) { //10 IS THE MIN LEVEL OF LEADERSHIP SKILL TO USE TELEPORT LPCHARACTER pch = CHARACTER_MANAGER::instance().Find(p->vid); if (pch) { ch->GetParty()->SummonToLeader(pch->GetPlayerID()); }else{ ch->ChatPacket(CHAT_TYPE_INFO, "<Teleport> The character is not online."); } }else{ ch->ChatPacket(CHAT_TYPE_INFO, "<Teleport> You need upgrade your leadership skill to use this function."); } } break; } } party.cpp void CParty::SummonToLeader(DWORD pid) { LPCHARACTER l = GetLeaderCharacter(); if (m_memberMap.find(pid) == m_memberMap.end()) { l->ChatPacket(CHAT_TYPE_INFO, "<Teleport> The character is too far."); return; } LPCHARACTER ch = m_memberMap[pid].pCharacter; if (!ch) { l->ChatPacket(CHAT_TYPE_INFO, "<Teleport> The character was not found in your map."); return; } if (ch->IsDead()) { l->ChatPacket(CHAT_TYPE_INFO, "<Teleport> I can't teleport the character if he is dead."); return; } ch->Show(l->GetMapIndex(), l->GetX(), l->GetY()); ch->Stop(); } CLIENT PART: root -> uiparty.py FIND THE __ShowStateButton and: ## Warp if self.stateButtonDict.has_key(self.MEMBER_BUTTON_WARP): button = self.stateButtonDict[self.MEMBER_BUTTON_WARP] button.SetPosition(xPos, y) button.Show() xPos += 23 Thanks to marty sama that sell this for 50€. NOW IT'S COMPLETELY FREE!
  21. M2BobFixed

    I will pay for fix

    The fix is very easy just fix packet imo
  22. With this tool you can convert the Eternexus Keys to Eterpack.cpp Keys: //Your Eterpack.cpp Example static DWORD s_adwEterPackKey[] = { 45129401, 92367215, 681285731, 1710201, }; static DWORD s_adwEterPackSecurityKey[] = { 78952482, 527348324, 1632942, 486274726, }; This is my tool to Convert Eternexus to Eterpack! <html> <head> <title> LZO - Eternexus To EterPack by M2BobFixed </title> </head> <body> <center> <?php if (isset($_POST["key1"])) { $key1=$_POST["key1"]; $key2=$_POST["key2"]; $key3=$_POST["key3"]; $key4=$_POST["key4"]; $key5=$_POST["key5"]; $key6=$_POST["key6"]; $key7=$_POST["key7"]; $key8=$_POST["key8"]; if (ctype_xdigit($key1) && ctype_xdigit($key2) && ctype_xdigit($key3) && ctype_xdigit($key4)) { if (strlen($key1) == 8 && strlen($key2) == 8 && strlen($key3) == 8 && strlen($key4) == 8) { $index_key=explode(" - ", $key1." - ".$key2." - ".$key3." - ".$key4); $final_key=""; foreach ($index_key as $k=>$v) $final_key.=strtolower("".implode("", array_reverse(str_split($index_key[$k], 2)))); $eterpack=unpack("L*", hex2bin($final_key)); echo "You inserted these Index Keys: <b>[".$key1." - ".$key2." - ".$key3." - ".$key4."]</b><br><br>"; echo "Here, your Index Keys for Eterpack.cpp:<br>"; echo "<b>static DWORD s_adwEterPackKey[] = {".$eterpack[1].", ".$eterpack[2].", ".$eterpack[3].", ".$eterpack[4].",};</b><br><br>"; }else{ echo "[IndexKey] Insert valid index keys!<br>"; } }else{ echo "[IndexKey] Insert valid index keys!<br>"; } if (ctype_xdigit($key5) && ctype_xdigit($key6) && ctype_xdigit($key7) && ctype_xdigit($key8)) { if (strlen($key5) == 8 && strlen($key6) == 8 && strlen($key7) == 8 && strlen($key8) == 8) { $pack_key=explode(" - ", $key5." - ".$key6." - ".$key7." - ".$key8); $final_key2=""; foreach ($pack_key as $k2=>$v2) $final_key2.=strtolower("".implode("", array_reverse(str_split($pack_key[$k2], 2)))); $eterpack2=unpack("L*", hex2bin($final_key2)); echo "You inserted these Pack Keys: <b>[".$key5." - ".$key6." - ".$key7." - ".$key8."]</b><br><br>"; echo "Here, your Pack Keys for Eterpack.cpp:<br>"; echo "<b>static DWORD s_adwEterPackSecurityKey[] = {".$eterpack2[1].", ".$eterpack2[2].", ".$eterpack2[3].", ".$eterpack2[4].",};</b><br><br>"; }else{ echo "[PackKey] Insert valid pack keys!<br>"; } }else{ echo "[PackKey] Insert valid pack keys!<br>"; } } ?> <form method="post"> Insert your Eternexus Index Key: <input maxlength="8" placeholder="02B09EB9" value="02B09EB9" name="key1"> - <input maxlength="8" placeholder="0581696F" value="0581696F" name="key2"> - <input maxlength="8" placeholder="289B9863" value="289B9863" name="key3"> - <input maxlength="8" placeholder="001A1879" value="001A1879" name="key4"> <br> <br> Insert your Eternexus Pack Key: <input maxlength="8" placeholder="04B4B822" value="04B4B822" name="key5"> - <input maxlength="8" placeholder="1F6EB264" value="1F6EB264" name="key6"> - <input maxlength="8" placeholder="0018EAAE" value="0018EAAE" name="key7"> - <input maxlength="8" placeholder="1CFBF6A6" value="1CFBF6A6" name="key8"> <br> <br> <input type="submit" value="Convert!"> </form> </body> </center> </html>
  23. item_manager.cpp: go to the bottom of the "LPITEM ITEM_MANAGER::CreateItem" Function Find this: else if (item->GetType() == ITEM_UNIQUE) { for (itertype (m_map_pkSpecialItemGroup) it = m_map_pkSpecialItemGroup.begin(); it != m_map_pkSpecialItemGroup.end(); it++) { if (it->second->m_bType == CSpecialItemGroup::SPECIAL && it->second->Contains(vnum)) { item->SetSIGVnum(it->first); } } } if (item->IsDragonSoul() && 0 == id) { DSManager::instance().DragonSoulItemInitialize(item); } return item; } REPLACE WITH THIS: else if (item->GetType() == ITEM_UNIQUE) { for (itertype (m_map_pkSpecialItemGroup) it = m_map_pkSpecialItemGroup.begin(); it != m_map_pkSpecialItemGroup.end(); it++) { if (it->second->m_bType == CSpecialItemGroup::SPECIAL && it->second->Contains(vnum)) { item->SetSIGVnum(it->first); } } } //FIX!!! if (item->IsAccessoryForSocket()) { item->SetSocket(0, 0); item->SetSocket(1, 0); item->SetSocket(2, 0); } //END OF FIX!!! if (item->IsDragonSoul() && 0 == id) { DSManager::instance().DragonSoulItemInitialize(item); } return item; } THIS FIX NOW IS FREE, MARTY SAMA SELL THIS FOR 20€... THAT NOOB!
×