|
|
转载
) Q9 Z8 F/ X2 F8 }6 YBY SJ
' K6 E+ |. T( u; ?$ M" g. Y首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)% P. Z) X9 x0 a- M& \# ^- Y" `1 e
' w' p2 }5 A! ~
D2Gfx::D2DrawImage-10041
' _9 D, c' M8 n. x0 E: G- L; R' x1、修复技能的背景(不需要可以不要)
1 k! @& v$ `& W" {) n& Foffset = D2Client::GetAddress(0x77AA8);6 u- \" F+ p. C; S2 q, E0 j- _/ I
Memory::SetCursor(offset);
( i1 q9 ?2 |" N( BMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);8 S! J- p9 ^0 [. o7 k9 A9 M
* o, ?& X: @ N- f) jvoid __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])" x" d9 s, b* ~# E; }) P( s8 r
{1 F3 L8 Z5 U* M+ N8 C
//Init data for print image& H2 C) x" ?" b* z3 b" b% }
sDrawImageInfo data;
. D: `# o) i4 Q/ X8 N. A ZeroMemory(&data, sizeof(data));) o/ k- s3 Y5 G# v/ P# e* P
# m! q! |4 l- t8 F
//print background
6 D: p) _! _9 G& P8 v9 l! } setImage(&data, spellBackgroundImages);
" A' t5 N6 Z) F+ b setFrame(&data, 0);: D7 X0 X9 W; y. M. h
int fixx = 511;
5 }0 }3 q( N0 V$ n6 f int fixy = 9;
0 {2 R2 d0 p" A D D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);/ ?$ @! Q; m9 r6 e
setFrame(&data, 1);0 ^0 p* h' ^" N5 W9 C) Z2 G
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256% c/ ?5 X% z. Q7 j% b; Z
setFrame(&data, 2);
# S& M6 N, Q2 V' _( E, [$ y D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432) n% Q& k4 ~- ], w' i: _% _9 S
setFrame(&data, 3);
' X( b7 T( p$ q1 A" j4 ^- o @ D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);( [& `; q0 f3 K) M/ D4 B: c
}% U9 l. C- a# C1 ~
__declspec(naked) void caller_SpellBackGroundFix()
7 b% N* i8 [9 [7 a6 ^& W{
h/ w0 z4 `7 Y' ]7 W; } __asm
/ i0 ~! A# s- }. @/ ^, n {
$ x, C9 F+ u6 K9 v& Y PUSHAD
0 ^) M2 V8 l! l' m6 d, [ lea eax, dword ptr ss : [esp + 0x38]# p- Z. |$ m! ^5 e3 D) f6 \
push eax& _ v. S: [3 d& l
push dword ptr ss : [esp + 0x38]
% R: ]6 f! j9 n+ } push dword ptr ss : [esp + 0x38]
3 U. p9 E& c; N0 ~4 E: p lea eax, dword ptr ss : [esp + 0x38]3 }: E9 y# W3 a( M5 C( D* z
push eax
2 ^& t- `( V0 w5 d/ m' u lea eax, dword ptr ss : [esp + 0x38]
k* `1 w u N" W" ^! n( H push eax
+ a Z. t+ b9 ~6 v, G push dword ptr ss : [esp + 0x38]
; v7 J& _$ V. W! h8 `* N call m_NewStatShow_SpellBackGroundFix
. r' f4 C) o! ~/ W7 P$ U7 W$ u POPAD' U9 a+ U3 T$ f7 y- ^
JMP D2Gfx::D2DrawImage4 i) C3 w& G3 |- N9 \$ F; }+ |
}
. p6 E+ o" A& K: u( v}
2 J! F/ G7 L/ i4 z- _" K7 m+ F4 J& r% y( N, u
2、我们如法炮制小站的背景0 y$ t8 G, W5 N. t; l5 _4 Q
+ b: n% E# W8 N6 y" g
offset = D2Client::GetAddress(0xAB010);
4 u4 c4 J: P% y4 |Memory::SetCursor(offset);
; M5 p( e4 S- y+ \$ mMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
" h e3 F' K2 |1 p+ S6 i: W
J6 c. P9 A6 I- N+ L% Lvoid __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])2 n C3 ?- `7 Z& L$ p8 @! u$ x
{
) t6 D5 b0 a/ ?, k //Init data for print image, j6 B% d6 t* G7 ]# k4 Z
sDrawImageInfo data;
6 P/ w+ O" Y" W6 M/ s8 @ ZeroMemory(&data, sizeof(data));( f8 }$ J9 T t$ P D y& c
7 c1 H4 w5 }" w2 Z/ O //print background
9 c& s, l' _- H; c) m& A setImage(&data, waypointBackgroundImages);9 p3 Z; [* X6 N
setFrame(&data, 0);: J. c$ A3 e/ y5 q5 O, ~
int fixx = 0;. {/ s' M+ s0 v- B$ B" S
int fixy = 9;! E2 j- C' `' ~% W* \$ V
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);2 |0 N/ P9 c! O$ W1 M
setFrame(&data, 1);& c5 y# w T9 G6 J/ G$ n: S
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
/ j4 u, {8 b4 H0 v( N; Y6 Q setFrame(&data, 2);8 S, L( N5 \! V
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
- f, h* m( M6 x p) N* |* n setFrame(&data, 3);
/ c8 f& u R+ J; a. H D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);! ~& d1 `1 f9 ?
8 ~. D0 v: t4 ?8 d- m: k- J5 s% {
}
( v8 A& @, w: S+ |__declspec(naked) void caller_WayPointBackGroundFix()) D2 S4 S' ?4 d' p
{
; r# ^- u9 X) \) l c) [ __asm
8 W& E8 J' e- t3 |4 { {2 |% k) @5 `* n8 q6 t* d3 j) m: \
PUSHAD; W' Z9 i/ A7 |8 h9 {. M- @* a
lea eax, dword ptr ss : [esp + 0x38]
6 r6 U5 j- C/ c9 g+ Z push eax' |9 N) q- C y M2 \% M
push dword ptr ss : [esp + 0x38]
# q! o' W! F% E) m. ~5 L push dword ptr ss : [esp + 0x38]
& |5 b6 q. Z! }0 d a e5 k lea eax, dword ptr ss : [esp + 0x38]
0 H: T, i- P. z7 j+ |0 c push eax
! M5 {8 q6 b! A: A1 F+ G P- Z% s lea eax, dword ptr ss : [esp + 0x38]
! O3 j5 ?$ `, p$ o push eax. p0 r' i" f, v+ c0 g$ ?
push dword ptr ss : [esp + 0x38]/ o- ~9 f* b4 H; m! p1 T; p9 X' ]
call m_NewStatShow_WayPointBackGroundFix) g5 w: V% }( L" E8 a( z8 a
POPAD
- w: o! F$ ~, r; R7 h( A7 F7 h JMP D2Gfx::D2DrawImage
7 \% v1 o2 }+ k/ \; Y }
) p8 K" o, H' ?8 i}
3 B. t- z) E: u7 _3 D3 l, Q. |& i: ^
3、以下可以搞16*16超级箱子-腾出我们需要的边缘
/ B% E6 ~0 X. V, ~9 \: o腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
# k* s! v0 b- L {. H' q; W$ ?$ ^6 J+ F; G- L
class D2MultiRes : public Library<D2MultiRes>
; M1 \, R7 G# R% K {0 h6 N4 p5 G7 F# H! p6 G
public:1 }5 n9 W# X- }* ^/ H1 q5 w
static void Init()
- x: L# z! l! w& c' C7 r0 T {
( |( b( h# ^+ T T" D: g% a5 l5 S Name = "D2MultiRes.dll";0 K1 P* _6 E6 b# k5 O' w; P/ S* X
Offset = LoadDiabloLibrary();* d6 X! j* ?: _# l- [
}
f0 j6 v/ g1 H5 i' H };, O; z. s, N3 a7 L {
D2MultiRes::Init(); f) j$ i% n, E% u5 o( S9 T+ u
D2MultiRes::HookLibrary();- \3 L3 [0 n- P/ K h8 _
, ^. {8 X5 n- q# p- l
) Q1 x7 v4 H' Q# r; `+ M
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);4 g+ x7 z9 k1 o, L; M
Memory::SetCursor(MiscFunctionsOffset);7 x, B+ Z. G+ c" K1 r$ I
Memory::ChangeDword(0x1b0, 0x200); o& g, s* X3 u. A* s( `6 B
6 W0 m6 u4 W, e2 |, Y5 L7 l5 @( C( R3 y6 G: }1 h+ X
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
, y, t- L) {6 R* Q4 U: f! X' D Memory::SetCursor(MiscFunctionsOffset);
: A( j8 U6 S7 \ H Memory::ChangeDword(0x140, 0x200);
' d/ [3 f1 O1 k2 u R9 s5 b
; l& P$ {# y! V
4 h: G- Z1 h# j: O' `% J MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);
' {; I& ^9 W4 a8 y- o4 } Memory::SetCursor(MiscFunctionsOffset);
# N3 E5 W+ S7 ^' ~- m; F Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块3 [+ m5 P1 a& ?9 y; O( p
1 m; @" l2 @2 e( F8 a MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);9 w0 y; ^6 f4 H, s) o. H
Memory::SetCursor(MiscFunctionsOffset);, q7 C$ i7 a. W) C+ M/ w1 r
Memory::ChangeDword(0x200,0x299);//下边缘 299最大
0 a5 r( Z, S# A$ A$ H8 t8 J
: L" k) _) C6 _6 ] MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
3 z& I) R8 _+ x. @ Memory::SetCursor(MiscFunctionsOffset);
1 W8 o- Y O& Y u Memory::ChangeDword(-0x280, -0x400);//这个不要动
3 T2 F7 c: w8 \0 i }
, L' F2 b- R1 `, f( s
( o' p8 G$ s4 u3 F2 n" \2 _4、快完成了,是不是发现金币啥的位置不对??
, l* ?0 Z# B2 Y) m- Z; j f( t4 O% n% h0 ^- \- {
//这里修正我们的装备栏
5 u) j% @8 ?) T& |$ g j) d1 [ offset = D2Client::GetAddress(0x99B6C);
" ^( b3 B! `" A+ q Memory::SetCursor(offset);
3 t Z9 M* n5 J- b Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
' R# Z% ?" T7 u, j6 h, R. l* z. Q! X ?8 v, m; w8 w' i e4 u- ]
offset = D2Client::GetAddress(0x99BA7);* a$ I& f6 T0 u/ Z( e, F& P: }; O
Memory::SetCursor(offset);
' |+ X+ v( \* k! n Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);+ x! G3 {: o# s+ b2 H
$ l ^- N, o6 ]1 q6 \: e! ^' u, o5 B offset = D2Client::GetAddress(0x99BE2);7 L0 E" N) \, q/ C$ Y t/ |
Memory::SetCursor(offset);
; V- q8 j8 r9 H& G Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);' E* M4 f* R# k6 i
7 `8 N1 b* T4 k4 ^3 p; E, B
offset = D2Client::GetAddress(0x99C1C);
5 k' f; N! M8 C8 T; G& [ Memory::SetCursor(offset);6 M. a/ N* m0 j4 r" T4 X0 v+ D3 L
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
& N) t3 i: a/ w7 o
) A9 W7 C, T: R$ |: t {8 M( S3 a6 e //取消两个popup,偷偷懒不过分8 x1 {& b/ e7 x% |; ?% C
offset = D2Client::GetAddress(0x9386d);
/ V& c* R& C, v5 n Memory::SetCursor(offset);9 j/ d/ U$ [9 L& q
Memory::ChangeByte(0x8b, 0x33);
* L7 A% d5 n5 V0 W) C( i Memory::ChangeByte(0xc8, 0xC9);' t; I2 e5 }! [, e# {- X: e* }
offset = D2Client::GetAddress(0x9390b);
$ D" F9 S7 b+ l( k! E. k Memory::SetCursor(offset);
7 G4 A& ~$ E9 @ Memory::ChangeByte(0x8b, 0x33);7 R5 M D; ]% q8 T$ m0 T \& O
Memory::ChangeByte(0xc8, 0xC9);
) h2 W9 ?( y' b) h9 V5 |) b
% [! h4 h0 P' |$ s+ C0 j, _ //修正提取金币, q1 Z9 X) |1 s9 c' g; g$ {: i
offset = D2Client::GetAddress(0x8D3E5);
( \0 p5 i. j: `1 ]; O# v/ P: y Memory::SetCursor(offset);) u. q$ L/ @" M7 q+ \. E
Memory::ChangeByte(0xA1, 0xE9);2 C1 C# H- ` \4 t4 t# K+ Z6 l
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
8 u2 `5 e& r8 L1 a/ |: [/ B' K- {0 x# X+ [8 S$ L" G% Q9 D
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);1 N4 |. O, |( {) S3 P7 Z' K
Memory::SetCursor(offset);/ k6 {% O: z6 ]8 Z
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);) j% w5 ^) t/ ?! }/ m6 h
H; y$ H6 z+ F$ Q offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
- [1 @* W# N8 _, k L$ o Memory::SetCursor(offset); k! ^, h5 M4 S$ P z
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
n6 S! a% V/ ]+ L" Q& Q2 w& |% n2 l$ k' }4 |9 T
//修正关闭按钮
" m# P7 t0 z* { X: d M offset = D2Client::GetAddress(0x8BD90);
" M8 K& }& F, R. m1 X9 _! Z- j Memory::SetCursor(offset);, }* ?& ^6 x3 l' m% s
Memory::ChangeByte(0xA1, 0xE9);
: x. @0 v* E$ {- [* S' a Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);, S- U: e( }; B' D5 Q. P
8 c* f" i% i2 M* H- c offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000); k5 ~& s8 s* p
Memory::SetCursor(offset);9 w$ Y6 s- x) N( d
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
; b0 S0 n1 i9 i' @1 m
& O/ T- a. G. J5 v$ F5 P3 } z# v0 [' C% U
//以下是细节& W- K$ {4 M! M0 K6 @% c
#define getXGoldCoinFixBtn() RX(0x2d0)
) s( I# z6 ]' d: H#define getLGoldCoinFixBtn() 32
. g: v9 P- f, f2 B5 Q#define getYGoldCoinFixBtn() RY(-0x59)
& p. T# B; k/ R$ I/ j, g#define getHGoldCoinFixBtn() 32
1 p9 Y' d% C7 b/ k# ?; r#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())/ }( A* t S7 n5 E. Q& }! d
# J( v |/ u4 v#define getXInvCloseFixBtn() RX(0x3db). @/ S9 n* V1 w
#define getLInvCloseFixBtn() 32+ t0 \* U& @. X. n0 w9 t- y* r) o
#define getYInvCloseFixBtn() RY(-0x63)
5 _, U) G% s, x7 x& k9 q1 Y#define getHInvCloseFixBtn() 32/ J* |# h* u7 }2 R
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
. K0 L# m2 v4 ^7 V) y9 Y! f; Q- ^6 D+ E- L9 n7 U/ f" p1 Q- r
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
" F- l: @4 b7 d2 a$ Q9 t9 g{
3 w6 q) k3 K- S; s DWORD mx = *D2Client::ptMouseX;
+ S& G1 ^! V0 V DWORD my = *D2Client::ptMouseY;& C0 ^' j0 h) j3 [1 ?
if(isOnGoldCoinFixBtn(mx, my))
+ @) d' e( j/ r return TRUE;
/ H/ Z' J1 N0 p( Z& r, H% J return FALSE;7 O/ |; I5 W! `- Y/ {: T" ]3 T" @% J
}
+ O3 [4 _/ m5 ]) a( r/ @2 }: i__declspec(naked) void caller_goldcoin()
3 m7 o- @, W' q4 ]* G% X% Z& K3 u{
) Q% G: w; s. S/ O5 S1 A/ h __asm7 `' r/ J, D+ t" @4 \3 F! B! q
{' X2 L; f+ Y# ]# }9 c0 z
push ebx
8 a4 D# j R0 V) v: y) U# T mov ecx, esi1 L8 V/ m4 ]6 E! h( H
mov edx, edi
- ^& I }5 ?3 f call m_NewStatShow_goldcoin
* M$ F! h4 d0 M- o) U5 h pop ebx) ]8 ]3 ?( Q( _7 `4 P4 T
pop esi
J& ~* D" x3 e retn& {9 y/ }0 M- _2 A' i6 g
}4 I( T" l2 K }- c" i
}
2 o+ A' J5 T6 x3 i% c% j- Nvoid __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])3 b8 s. y7 Q x3 h: H& y
{
% L* h2 o) @ X _6 d if (*nXpos > D2Client::ptScreenSize->x / 2)% d2 O1 K# w4 H- b( m5 A8 r( l
{
7 s# n. F5 W# I9 ~! w7 k+ C *nXpos = getXGoldCoinFixBtn();1 m) a. z7 a7 ?. y# c# R% i
*nYpos = getYGoldCoinFixBtn();* J. U. h* E1 A
}! Z2 i. N. U# I$ u& O# J1 S( j3 h
}: g4 w- `! t5 ^8 ?/ e* I8 B1 [$ I
__declspec(naked) void caller_goldcoinimg()3 t1 |, b B; v& o- y
{
; [4 ~( z9 l4 {" P! i/ D __asm9 P' \ g1 J( \1 J
{
9 s: r; L! m+ B5 n/ s( Y6 K$ ] PUSHAD+ `/ ^1 d2 J, p7 Y* f" L" F+ ~; F
lea eax, dword ptr ss : [esp + 0x38]3 V9 d/ S) a q3 t/ v" i
push eax: R4 K% p t2 ]8 u; x2 F, \! C
push dword ptr ss : [esp + 0x38]
% d# E' P2 Q" Q push dword ptr ss : [esp + 0x38]
/ ?+ I1 B* x! u; V lea eax, dword ptr ss : [esp + 0x38]
% O) o% X0 X0 h2 O; y7 T push eax7 _# q: ^% ^" X: A# e
lea eax, dword ptr ss : [esp + 0x38]
3 d4 R4 A7 u( A4 Y push eax4 T6 ` @- O) _8 x4 h& {
push dword ptr ss : [esp + 0x38]
7 B) q' J2 L" F/ Z call m_NewStatShow_goldcoinimg
5 D* I$ B; H1 A) O7 F, O POPAD
; ~! J. n0 h1 n* o JMP D2Gfx::D2DrawImage
1 N3 d* E5 r* o% t2 P8 b) \5 E5 q8 @ }9 S; o1 u' U7 H @5 v
}4 @* A# o5 R7 ~
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标! R+ `4 [- y+ |$ b
{
2 X! }" i$ o) P$ d( k/ }3 G if (x > D2Client::ptScreenSize->x / 2)
, w/ t/ y2 r6 Z, C/ j% S {1 ^! b. m* Z5 f
*y = getYGoldCoinFixBtn();, h4 T1 ~& S3 r; ~8 a1 X t
return getXGoldCoinFixBtn() + 32;0 S1 ]- h0 r0 h' S8 z
}# P8 E3 V! z% ?! A" M; [2 q
return x;% t3 ?3 s. S) y$ w, j. o3 y! {. L" m
}6 a5 `2 F- r4 _
__declspec(naked) void caller_goldcointext()
6 K- {8 @9 | o3 x, D+ ^' Y{
- ~- k% D7 ]+ M __asm0 }* |2 f* Z' u |( E6 D
{
8 m# A7 {* J2 x" a$ m PUSH ECX
" e- |' ~& M+ j" t$ z5 S: B+ q: v PUSH EDI
8 p( f! ~7 Y" i2 p9 k+ C- Y PUSH ESI
d0 b4 g# ~, } PUSH EAX
5 X2 l. q; ^, @ h7 m; U( Z7 \8 h MOV ECX, EDX& ~- f9 O' k n" P& D: v/ i
LEA EDX,[ESP+0X4+0X10]
, d! m+ ?" f( u4 | CALL m_NewStatShow_goldcointext$ |* z9 ~0 O: d6 f/ k H# s
MOV EDX,EAX' b! m3 G7 H' g6 M
POP EAX/ C# t; p. j7 y, U+ \
POP ESI
- i, u8 S. W) N1 l0 q4 d8 N- j POP EDI
) [. \/ m" p$ }: B; E* k# D POP ECX
$ ~1 c* Z0 v5 h. C jmp D2Win::D2PrintString;
5 I M# q3 H9 t0 p }8 G) a0 J3 P" R) h
}
/ c" n0 `# c4 I W! v# ]# { S; v) }/ ~4 M+ l. @, K7 |( o; R) o
BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)6 B" g! `& C& t* ]$ B
{' K& z5 Q7 c2 A' {9 q7 G
DWORD mx = *D2Client::ptMouseX;5 z3 N1 P8 g( _. j2 T2 z
DWORD my = *D2Client::ptMouseY;5 S( Y1 L% }$ B: v( ? a% s K
if (isOnInvCloseFixBtn(mx, my))
9 }" B. N9 u, k0 f( G6 X3 C return TRUE;
\6 P. r6 i+ t0 m0 {, m5 H# T. L return FALSE;8 Y: E6 w- Y7 {$ Z, Z! F; Y: h4 d
}
0 I& V) D. f0 g' ~4 |& v5 @__declspec(naked) void caller_close()! X9 p% v, V) C
{3 r7 J4 C- L; [! _& X. ]# A
__asm% L& c% t# |! g& ]. |
{7 ~* ~) A* V. w4 Q9 Z Q
PUSH ESI/ F9 `' ?! b1 I: n
push ebx
! K& G' x; w: E1 ~& q) |9 F* N/ G call m_NewStatShow_close
, O0 g8 {; T3 y( T8 W: ` pop ebx1 F; G- Y9 |! ~7 w+ k4 \' ~3 i
pop esi# q: D% U V# i* y. Y8 [* h
retn
2 ?5 y: t6 ?; H9 \& \ } p" Y3 `" a; C/ M& R
}
. p2 L! t' F' V) X0 R4 }; cvoid __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
! R G' \! _7 b{
$ u3 p2 c4 e6 j5 S$ J# B6 {" R- k0 j *nXpos = getXInvCloseFixBtn();
* r; ^5 u8 w# e/ a" Q1 V6 q *nYpos = getYInvCloseFixBtn();
# O5 [1 U$ H8 _' d- e, o C}6 G. ^# X& x6 ?0 _: ?0 a
__declspec(naked) void caller_closeimg()7 y2 o$ R6 @* b0 R! P6 l4 w7 C
{
' n) q$ _- C8 S# ]8 |$ j: m: j0 K __asm. S/ v6 Z- r3 s0 R, M5 l/ g# m
{' w) |' M, v7 ^; |
PUSHAD. }9 Y! C, T9 H8 c2 V6 c2 ?9 {
lea eax, dword ptr ss : [esp + 0x38]
) }0 A8 v4 u* s* P% o push eax
: ]8 q9 [7 k/ L1 W2 Y) Q( g% a2 n& m push dword ptr ss : [esp + 0x38]
$ l) ]9 e1 Z0 @7 P push dword ptr ss : [esp + 0x38]2 U2 g/ t; }5 W+ W5 { J" W
lea eax, dword ptr ss : [esp + 0x38]
% R" s% ]% o# {9 G# y5 `% K: ? push eax% ?% c- k1 Q% L0 Z W
lea eax, dword ptr ss : [esp + 0x38]( C8 s" K& |7 k1 T- I: ? \) W3 q, K. g/ b
push eax
~( J9 `( N P% V0 N% o- m( B push dword ptr ss : [esp + 0x38]
3 A" o/ F3 u+ `# E4 T, w- S call m_NewStatShow_closeimg
9 {: H! c! e3 |* y, z9 S POPAD0 R( E6 [+ w4 D& e2 J
JMP D2Gfx::D2DrawImage
. G8 l' j' L A; P2 [ }( G i- j; M0 N- j' L6 E
}
+ L _1 M$ v3 k) [- Y0 w' j) _
" b7 i7 I. D5 \& N/ {
G; l2 Q6 o1 I+ P& y4 r/ r |
|