.::: 一路问情 :::.'s Archiver

偶的岁月 发表于 2007-3-30 01:46

如何制作装物品的袋子

  相信不少MOD中都有大量的可压缩物品,即不用保存属性的物品,想神符、宝石之类的东西。虽然这些东西每个的长度仅为14BYTE,但是多了也占据不少空间、占用的服务器资源、还有宝贵的箱子资源。所以用一个属性记录有什么可压缩物品以及他的数量,那么就可以大量的节省资源。下面的

//make the client to show the item in the itemstat. //让显示物品袋子储存的东西,增加使用28号显示。 //enter point //ebp ; + XX [to] [ebp] //[esp+2c] ; ~~~~ 6FAF24BE 83F8 1C cmp eax,1C ;改上限

6FAF3158 E0 C5 B6 6F 增加索引地址

;28号显示

6FB6C5E0 8B0424 mov eax,dword ptr ss:[esp] 6FB6C5E3 50 push eax 6FB6C5E4 E8 A3E9FFFF call 6FB6C5E9 8B88 F4000000 mov ecx,dword ptr ds:[eax+F4] 6FB6C5EF E8 E@#服7FFFF call 6FB6C5F4 896C24 20 mov dword ptr ss:[esp+20],ebp 6FB6C5F8 8BE8 mov ebp,eax 6FB6C5FA B9 12110000 mov ecx,1112 6FB6C5FF E8 D@#服7FFFF call 6FB6C604 894424 2C mov dword ptr ss:[esp+2C],eax 6FB6C608 8B4C24 0C mov ecx,dword ptr ss:[esp+C] 6FB6C60C 81E9 37010000 sub ecx,137;itemstatcost id - 30 6FB6C612 80F9 39 cmp cl,39 6FB6C615 7E 03 jle short d2client.6FB6C61A 6FB6C617 80C1 07 add cl,7 6FB6C61A 66:8948 08 mov word ptr ds:[eax+8],cx 6FB6C61E ^ E9 D769F8FF jmp d2client.6FAF2FFA 8B 04 24 50 E8 A3 E9 FF FF 8B 88 F4 00 00 00 E8 E4 F7 FF FF 89 6C 24 20 8B E8 B9 12 11 00 00 E8 D4 F7 FF FF 89 44 24 2C 8B 4C 24 0C 81 E9 37 01 00 00 80 F9 39 7E 03 80 C1 07 66 89 48 08 E9 D7 69 F8 FF



;put an item into the packet ;放东西到物品袋子 6FC46E64 . /E9 97000E00 jmp D2Game.6FD26F00 6FC46E69 > |90 nop

6FD26F00 > \8B46 04 mov eax,dword ptr ds:[esi+4] 6FD26F03 . 3D 08020000 cmp eax,208 ;packet 's id of main item table 6FD26F08 . 74 0B je short D2Game.6FD26F15 6FD26F0A > 56 push esi 6FD26F0B . E8 E448FFFF call 6FD26F10 .^ E9 5@#服FF1FF jmp D2Game.6FC46E69 6FD26F15 > 8B47 04 mov eax,dword ptr ds:[edi+4] 6FD26F18 . 50 push eax 6FD26F19 . E8 1048FFFF call 6FD26F1E . 80B8 43010000 01 cmp byte ptr ds:[eax+143],1 6FD26F25 .^ 75 E3 jnz short D2Game.6FD26F0A 6FD26F27 . 6A 40 push 40 6FD26F29 . 56 push esi 6FD26F2A . E8 CD@#服FFFF call 6FD26F2F . 53 push ebx 6FD26F30 . 8BD8 mov ebx,eax 6FD26F32 . 8B47 04 mov eax,dword ptr ds:[edi+4] 6FD26F35 . 50 push eax 6FD26F36 . 53 push ebx 6FD26F37 . E8 56FEFFFF call D2Game.6FD26D92 6FD26F3C . 85C0 test eax,eax 6FD26F3E . 75 12 jnz short D2Game.6FD26F52 6FD26F40 . 68 01000000 push 1 6FD26F45 . 53 push ebx 6FD26F46 . E8 47FEFFFF call D2Game.6FD26D92 6FD26F4B . 85C0 test eax,eax 6FD26F4D . 75 03 jnz short D2Game.6FD26F52 6FD26F@#服 . 5B pop ebx 6FD26F50 .^ EB B8 jmp short D2Game.6FD26F0A 6FD26F52 8B@#服 04 mov ecx,dword ptr ds:[edi+4] 6FD26F55 50 push eax 6FD26F56 51 push ecx 6FD26F57 8B45 14 mov eax,dword ptr ss:[ebp+14] 6FD26F5A 8B88 9C000000 mov ecx,dword ptr ds:[eax+9C] 6FD26F60 8BD5 mov edx,ebp 6FD26F62 8B4424 08 mov eax,dword ptr ss:[esp+8] 6FD26F66 51 push ecx 6FD26F67 56 push esi 6FD26F68 50 push eax 6FD26F69 57 push edi 6FD26F6A E8 F@#服DFFFF call D2Game.6FD26D63 6FD26F6F 85C0 test eax,eax 6FD26F71 75 04 jnz short D2Game.6FD26F77 6FD26F73 59 pop ecx 6FD26F74 58 pop eax 6FD26F75 ^ EB D8 jmp short D2Game.6FD26F@#服 6FD26F77 53 push ebx 6FD26F78 6A 01 push 1 6FD26F7A E8 41FEFFFF call D2Game.6FD26DC0 6FD26F7F 5B pop ebx 6FD26F80 ^ E9 5C02F2FF jmp D2Game.6FC471E1

;pspell(13),get a item out of the packet ;增加PSPELL,取物品,方法是放到箱子的左上角4X4地区,依次取1.2.3....行属性中的物品. ;6FD406F4 26 6E D2 6F ;索引 6FD26E26 53 push ebx 6FD26E27 55 push ebp 6FD26E28 56 push esi 6FD26E29 57 push edi 6FD26E2A 8BFA mov edi,edx 6FD26E2C 8BF1 mov esi,ecx 6FD26E2E 8B6C24 14 mov ebp,dword ptr ss:[esp+14] 6FD26E32 837D 00 04 cmp dword ptr ss:[ebp],4 6FD26E36 74 09 je short D2Game.6FD26E41 6FD26E38 33C0 xor eax,eax 6FD26E3A 5F pop edi 6FD26E3B 5E pop esi 6FD26E3C 5D pop ebp 6FD26E3D 5B pop ebx 6FD26E3E C2 1400 retn 14 6FD26E41 8B45 2C mov eax,dword ptr ss:[ebp+2C] 6FD26E44 8B48 0C mov ecx,dword ptr ds:[eax+C] 6FD26E47 8B40 10 mov eax,dword ptr ds:[eax+10] 6FD26E4A 83F8 04 cmp eax,4 ;Y 6FD26E4D ^ 7F E9 jg short D2Game.6FD26E38 6FD26E@#服 83F9 03 cmp ecx,3 ;X 6FD26E52 ^ 7F E4 jg short D2Game.6FD26E38 6FD26E54 C1E0 02 shl eax,2 6FD26E57 03C1 add eax,ecx 6FD26E59 8BD8 mov ebx,eax 6FD26E5B 6A 40 push 40 6FD26E5D 55 push ebp 6FD26E5E E8 9950FFFF call 6FD26E63 3A58 28 cmp bl,byte ptr ds:[eax+28] 6FD26E66 ^ 7D D0 jge short D2Game.6FD26E38 6FD26E68 53 push ebx 6FD26E69 50 push eax 6FD26E6A 8B40 24 mov eax,dword ptr ds:[eax+24] 6FD26E6D 8D1CD8 lea ebx,dword ptr ds:[eax+ebx*8] 6FD26E70 8B13 mov edx,dword ptr ds:[ebx] 6FD26E72 81E2 FFFF0000 and edx,0FFFF 6FD26E78 52 push edx 6FD26E79 81FA 01000000 cmp edx,1 6FD26E7F 74 3B je short D2Game.6FD26EBC 6FD26E81 52 push edx 6FD26E82 E8 A748FFFF call 6FD26E87 8B80 80000000 mov eax,dword ptr ds:[eax+80] 6FD26E8D 6A 01 push 1 6FD26E8F 6A 02 push 2 6FD26E91 6A 00 push 0 6FD26E93 50 push eax 6FD26E94 8BCE mov ecx,esi 6FD26E96 8BD7 mov edx,edi 6FD26E98 E8 53EFF6FF call D2Game.6FC95DF0 6FD26E9D 85C0 test eax,eax 6FD26E9F 74 1B je short D2Game.6FD26EBC 6FD26EA1 5A pop edx 6FD26EA2 5B pop ebx 6FD26EA3 59 pop ecx 6FD26EA4 41 inc ecx 6FD26EA5 8B47 14 mov eax,dword ptr ds:[edi+14] 6FD26EA8 8B80 9C000000 mov eax,dword ptr ds:[eax+9C] 6FD26EAE 51 push ecx 6FD26EAF 52 push edx 6FD26EB0 50 push eax 6FD26EB1 55 push ebp 6FD26EB2 53 push ebx 6FD26EB3 6A FF push -1 6FD26EB5 E8 06FFFFFF call D2Game.6FD26DC0 6FD26EBA EB 03 jmp short D2Game.6FD26EBF 6FD26EBC 58 pop eax 6FD26EBD 58 pop eax 6FD26EBE 58 pop eax 6FD26EBF 33C0 xor eax,eax 6FD26EC1 5F pop edi 6FD26EC2 5E pop esi 6FD26EC3 5D pop ebp 6FD26EC4 5B pop ebx 6FD26EC5 C2 1400 retn 14 53 55 56 57 8B FA 8B F1 8B 6C 24 14 83 7D 00 04 74 09 33 C0 5F 5E 5D 5B C2 14 00 8B 45 2C 8B 48 0C 8B 40 10 83 F8 04 7F E9 83 F9 03 7F E4 C1 E0 02 03 C1 8B D8 6A 40 55 E8 99 50 FF FF 3A 58 28 7D D0 53 50 8B 40 24 8D 1C D8 8B 13 81 E2 FF FF 00 00 52 81 FA 01 00 00 00 74 3B 52 E8 A7 48 FF FF 8B 80 80 00 00 00 6A 01 6A 02 6A 00 50 8B CE 8B D7 E8 53 EF F6 FF 85 C0 74 1B 5A 5B 59 41 8B 47 14 8B 80 9C 00 00 00 51 52 50 55 53 6A FF E8 06 FF FF FF EB 03 58 58 58 33 C0 5F 5E 5D 5B C2 14 00

;check data ,p2,p1 ;return state line ;其中用到的函数,寻找属性的行号 6FD26D92 /$ 8B4424 04 mov eax,dword ptr ss:[esp+4] 6FD26D96 |. 85C0 test eax,eax 6FD26D98 |. 75 03 jnz short D2Game.6FD26D9D 6FD26D9A |. C2 0800 retn 8 6FD26D9D |> 33D2 xor edx,edx 6FD26D9F |. 0FBF50 28 movsx edx,word ptr ds:[eax+28] 6FD26DA3 |. 8B4C24 08 mov ecx,dword ptr ss:[esp+8] 6FD26DA7 |. 8B40 24 mov eax,dword ptr ds:[eax+24] 6FD26DAA |> 4A /dec edx 6FD26DAB |. 66:3B0CD0 |cmp cx,word ptr ds:[eax+edx*8] 6FD26DAF |. 74 09 |je short D2Game.6FD26DBA 6FD26DB1 |. 85D2 |test edx,edx 6FD26DB3 |.^ 7F F5 \jg short D2Game.6FD26DAA 6FD26DB5 |. 33C0 xor eax,eax 6FD26DB7 |. C2 0800 retn 8 6FD26DBA |> 8BC2 mov eax,edx 6FD26DBC |. 40 inc eax 6FD26DBD \. C2 0800 retn 8 8B 44 24 04 85 C0 75 03 C2 08 00 33 D2 0F BF 50 28 8B 4C 24 08 8B 40 24 4A 66 3B 0C D0 74 09 85 D2 7F F5 33 C0 C2 08 00 8B C2 40 C2 08 00

;change data and sent the update data to client,p6,state line,p5,stat param (item Index),p4,pt

client,p3,pt item,p2,ptstate,p1,qlt(+,-1). ;return NULL ;其中用到的函数,修改对应行号的属性,并更新CLIENT端 6FD26DC0 8B4424 08 mov eax,dword ptr ss:[esp+8] 6FD26DC4 8B40 24 mov eax,dword ptr ds:[eax+24] 6FD26DC7 8B5424 18 mov edx,dword ptr ss:[esp+18] 6FD26DCB 8D44D0 F8 lea eax,dword ptr ds:[eax+edx*8-8] 6FD26DCF 8B5424 04 mov edx,dword ptr ss:[esp+4] 6FD26DD3 66:8B08 mov cx,word ptr ds:[eax] 6FD26DD6 66:81F9 0100 cmp cx,1 6FD26DDB 75 02 jnz short D2Game.6FD26DDF 6FD26DDD 33D2 xor edx,edx 6FD26DDF 36:8B48 04 mov ecx,dword ptr ss:[eax+4] 6FD26DE3 03D1 add edx,ecx 6FD26DE5 8B4C24 14 mov ecx,dword ptr ss:[esp+14] 6FD26DE9 85D2 test edx,edx 6FD26DEB 75 05 jnz short D2Game.6FD26DF2 6FD26DED 66:B9 0100 mov cx,1 6FD26DF1 42 inc edx 6FD26DF2 66:8908 mov word ptr ds:[eax],cx 6FD26DF5 8950 04 mov dword ptr ds:[eax+4],edx 6FD26DF8 81E1 FFFF0000 and ecx,0FFFF 6FD26DFE 81E2 FFFF0000 and edx,0FFFF 6FD26E04 51 push ecx 6FD26E05 52 push edx 6FD26E06 8B5424 20 mov edx,dword ptr ss:[esp+20] 6FD26E0A 81C2 66010000 add edx,166 6FD26E10 52 push edx 6FD26E11 6A 01 push 1 6FD26E13 8B4C24 20 mov ecx,dword ptr ss:[esp+20] 6FD26E17 8B5424 1C mov edx,dword ptr ss:[esp+1C] 6FD26E1B E8 007EF1FF call D2Game.6FC3EC20 6FD26E20 C2 1800 retn 18 8B 44 24 08 8B 40 24 8B 54 24 18 8D 44 D0 F8 8B 54 24 04 66 8B 08 66 81 F9 01 00 75 02 33 D2 36 8B 48 04 03 D1 8B 4C 24 14 85 D2 75 05 66 B9 01 00 42 66 89 08 89 50 04 81 E1 FF FF 00 00 81 E2 FF FF 00 00 51 52 8B 54 24 20 81 C2 66 01 00 00 52 6A 01 8B 4C 24 20 8B 54 24 1C E8 00 7E F1 FF C2 18 00

;make the client modify the data of a item ;修改D2CLIENT.DLL使接受到更新数据后进行更新. 6FB2E79E 81FD CC000000 cmp ebp,0CC

6FB2E79E /E9 5DE60300 jmp d2client.6FB6CE00 6FB2E7A3 |90 nop E9 5D E6 03 00 90

6FB6CE00 81FD CC000000 cmp ebp,0CC 6FB6CE06 ^ 0F84 9A19FCFF je d2client.6FB2E7A6 6FB6CE0C 8B4424 1c mov eax,dword ptr ss:[esp+1c] 6FB6CE10 85C0 test eax,eax 6FB6CE12 ^ 0F84 D619FCFF je d2client.6FB2E7EE 6FB6CE18 6A 40 push 40 6FB6CE1A 56 push esi 6FB6CE1B E8 82E6FFFF call 6FB6CE20 8B7C24 1C mov edi,dword ptr ss:[esp+1C] 6FB6CE24 8B4C24 18 mov ecx,dword ptr ss:[esp+18] 6FB6CE28 33D2 xor edx,edx 6FB6CE2A 8A50 28 mov dl,byte ptr ds:[eax+28] 6FB6CE2D 8B40 24 mov eax,dword ptr ds:[eax+24] 6FB6CE30 4A dec edx 6FB6CE31 66:3B6CD0 02 cmp bp,word ptr ds:[eax+edx*8+2] 6FB6CE36 74 09 je short d2client.6FB6CE41 6FB6CE38 85D2 test edx,edx 6FB6CE3A ^ 7F F4 jg short d2client.6FB6CE30 6FB6CE3C ^ E9 A619FCFF jmp d2client.6FB2E7E7 6FB6CE41 66:893CD0 mov word ptr ds:[eax+edx*8],di 6FB6CE45 894CD0 04 mov dword ptr ds:[eax+edx*8+4],ecx 6FB6CE49 ^ EB F1 jmp short d2client.6FB6CE3C 81 FD CC 00 00 00 0F 84 9A 19 FC FF 8B 44 24 1C 85 C0 0F 84 D6 19 FC FF 6A 40 56 E8 82 E6 FF FF 8B 7C 24 1C 8B 4C 24 18 33 D2 8A 50 28 8B 40 24 4A 66 3B 6C D0 02 74 09 85 D2 7F F4 E9 A6 19 FC FF 66 89 3C D0 89 4C D0 04 EB F1

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.