|
|
转载3 ?9 d. y; v% n/ U6 C2 u( X! Y8 i) ?
BY SJ
" m: E2 N- R W* b/ S; a. r首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
( ?2 {! A3 G! F& b. D
# k4 Y. h8 n; s! e4 b9 x% g$ ~ ]D2Gfx::D2DrawImage-10041$ [$ `0 b/ a$ {# \0 S6 J9 a0 l
1、修复技能的背景(不需要可以不要)
! o8 |9 |! S' q* M$ Z3 q' _offset = D2Client::GetAddress(0x77AA8);
+ Y4 s* m3 ^; g# d4 ~Memory::SetCursor(offset);
# K5 h _9 M" k7 [( Z( ~7 jMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);; Z' a p8 g0 _ C$ s5 b: N$ G
g3 G0 X2 S( n7 Ivoid __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
7 Z+ D: u9 Q. y{
+ s0 M( U0 E- r. c4 m" b' q //Init data for print image
8 Q) y. s0 g, _6 _) P# p; H& b sDrawImageInfo data;" W) j; C1 I9 l+ s- a% i: |
ZeroMemory(&data, sizeof(data));
* }. T! z9 l3 Z# C) m, O# o: H, O0 Y* G: n1 l) v+ M+ c& O
//print background
5 ~+ A( e5 i5 {: h: I setImage(&data, spellBackgroundImages);' R' T4 D! G' e( A8 F& A
setFrame(&data, 0);* v8 r+ y, ~% ?3 p: r9 l: P
int fixx = 511;2 Z5 S" v: [* r! v0 O# I
int fixy = 9;, `$ K& {7 n- A6 e; `
D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);5 h8 j! U1 A1 _) a
setFrame(&data, 1);5 d6 D4 R. J0 J$ r- _& y
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
% o4 k" }! C/ p* K2 s% O& f/ { setFrame(&data, 2);
# m4 {( G7 i9 b7 W D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//4323 x" o4 d0 V1 X
setFrame(&data, 3);
; F4 f; Y9 O8 V& z D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
" D) D! j0 u+ i- _}
. T% e* V' Z, a) _' k& m& y__declspec(naked) void caller_SpellBackGroundFix()/ Q8 r& I# u3 a3 {# N- d
{
- A2 {% ~; c y( F# X __asm+ V( g8 m- }; M0 ^) Z; i
{
# Z- b$ m2 ^/ ?2 i9 }8 h0 [& r PUSHAD2 F3 G. P$ V- \; o" t$ c3 X0 D
lea eax, dword ptr ss : [esp + 0x38]3 H1 a5 U4 f0 x# z! v/ J
push eax; Q& X0 C% x/ t* |9 D
push dword ptr ss : [esp + 0x38]: m; n' _& J: W2 I" }0 @
push dword ptr ss : [esp + 0x38]. t1 l( n8 y8 ^ }
lea eax, dword ptr ss : [esp + 0x38]8 |* F0 s+ |) f6 Z2 q
push eax9 t b6 _7 ?2 M) a6 ]& p
lea eax, dword ptr ss : [esp + 0x38]6 X* Z% v, a; I. D6 ~" r* ~; `
push eax7 Z0 l1 K# x% `/ g X
push dword ptr ss : [esp + 0x38]3 i: A2 p1 k- d$ Y! p/ W" b
call m_NewStatShow_SpellBackGroundFix
( M1 e9 _( U: p% q. X. [4 j POPAD
7 C8 k, `* C' r/ S( S JMP D2Gfx::D2DrawImage) w" m D: z, w, _: L `
}9 N6 z' G; D- B* d/ V1 j/ p
}) y B4 J( y' o- v3 `+ q) z
. H2 g$ M/ Z, K- O& Z2、我们如法炮制小站的背景& L4 x* L7 p7 I8 b
; u, t9 a/ G& b7 C' l6 coffset = D2Client::GetAddress(0xAB010);
( p: f0 I. Q; _. _Memory::SetCursor(offset);
5 A" V- g2 y$ y8 P4 tMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);5 a" }9 x* e0 T0 i8 }; L' i1 M
: B9 e5 G) n. w; m) } L( S
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
; X0 n+ Z- J s1 Q0 U% j1 T( Q3 @2 M{
2 a1 L0 ?' _" ~4 W) S //Init data for print image$ y* `/ m8 d z! v; {2 N
sDrawImageInfo data; F- ^/ }: x- ^" e* h# Q8 M
ZeroMemory(&data, sizeof(data));
; b" v& ]8 P* w N! j6 R7 a5 w/ v X4 Z F9 f
//print background9 J2 Q* t+ j6 ]. w8 u
setImage(&data, waypointBackgroundImages);
. K$ @9 J5 u5 d* Q: k" D setFrame(&data, 0);
# z) G! `5 A0 p4 Z7 b" U' n int fixx = 0;
/ [3 c% n" L3 j7 p8 G int fixy = 9;
9 C% [7 B6 d% m @2 M D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);
( \% ~, r& s& D6 Y1 ]4 |8 @ setFrame(&data, 1);* ?7 W, W& o k" n. {4 F7 Y9 n/ w
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256, N3 E, M2 a t0 t9 p* X
setFrame(&data, 2);
! f* E4 `/ P. Q; | D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
& `6 r9 W4 O4 u8 p y+ n setFrame(&data, 3);
5 R }) h R4 M+ H D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);. k; x C8 h4 O& }2 e: A
. j' Z$ n: x6 [& ]9 B7 T" P
}
+ a: ^, N1 K) Y$ I$ ^__declspec(naked) void caller_WayPointBackGroundFix()
" p- R k: n* e{* S5 g* Z% |# h- p `2 Z3 J
__asm
1 ~- y/ \& j1 C! o3 z+ u {* t" n( F- Y3 `9 H4 ]
PUSHAD+ r: N( Q% q' m {
lea eax, dword ptr ss : [esp + 0x38]
. k2 D. F8 F. B- W2 F2 @6 N" y E push eax
! h- D. B6 d4 H, Q7 |: G push dword ptr ss : [esp + 0x38]
% J8 P. Q: \8 n3 Y j push dword ptr ss : [esp + 0x38]0 |8 B, t* F( B% Y$ }; J1 d. O
lea eax, dword ptr ss : [esp + 0x38]
8 h) I6 B! |4 A6 H push eax+ a" }1 N- y% \
lea eax, dword ptr ss : [esp + 0x38]
' g, o0 D4 R% |5 ?# O9 e' Y push eax
1 q# w( J$ {# U$ ^ push dword ptr ss : [esp + 0x38]/ l" e# ]9 J e5 ^1 @5 H# `
call m_NewStatShow_WayPointBackGroundFix
* Y4 J" U1 A; ?# B0 q4 I POPAD& ~$ f3 x- _0 G$ J. b s
JMP D2Gfx::D2DrawImage3 |8 @" \& d4 L0 }9 B4 r; G
}5 {) Y# E+ i) G3 U
}
4 D/ z' V+ T6 N$ V0 T& S; U* {
f( v s4 |! T2 C" W+ I* o3、以下可以搞16*16超级箱子-腾出我们需要的边缘3 h3 @: t: \; g2 f- G0 K; @
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)* }2 |6 g( {) c5 D
{
c1 R1 ^1 ~; Z8 o' j: ]3 x$ v+ ^, o class D2MultiRes : public Library<D2MultiRes>
/ R4 E- E; l, K% U$ C; r4 m {
6 @8 T( y3 T7 V4 _ public:
8 ?9 i S7 q1 w9 o& E static void Init()
& G0 ~7 a* u/ e! e {
4 U0 \4 n0 c+ \' M Name = "D2MultiRes.dll";
% \2 y6 f! g2 J: T Offset = LoadDiabloLibrary();3 I4 [) I1 X1 x( X9 V/ H! p+ y' G
}
/ u" W2 a) @7 g; G# C3 ^( ` };. _; {# V$ L6 K7 Q% B
D2MultiRes::Init();# Q$ G+ y( A/ V9 \) z' a0 v
D2MultiRes::HookLibrary();- O& b# M6 T" H1 U8 r# D& _' k" m1 a
5 W* \- {8 b. u
: C, ]% j- }. L' A* s; a$ f- | MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
" E" M! i+ k& y0 o/ _ Memory::SetCursor(MiscFunctionsOffset);
m1 [, A% C" V0 B+ M! ]4 ~; s( R( f Memory::ChangeDword(0x1b0, 0x200);
k A8 P- Y, R, x1 T" [; @5 ^. ~( x1 E2 ~; d
% o' m& X2 |# e0 I* W" Z MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
8 @2 s3 g V6 b" C0 D' M, _8 C" T Memory::SetCursor(MiscFunctionsOffset);
# ^/ a7 {) D. E Memory::ChangeDword(0x140, 0x200);$ J/ n) [, W" ?) Q) C1 C% t
9 z, \: k8 t3 R1 @+ A0 p. v
/ u3 Y \- _9 c, C8 g4 {5 k
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);3 p x7 v# o+ u% \7 V) N4 X
Memory::SetCursor(MiscFunctionsOffset);+ |8 d6 O2 F4 r
Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块/ S* m0 L: D- N3 G% B2 ^+ k7 D
8 S' `( \4 U2 i$ U: M: S MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
/ a0 I5 P) k7 R6 m5 @! I1 X$ s0 L Memory::SetCursor(MiscFunctionsOffset);& x; c1 l# K; _% T! g! F4 k
Memory::ChangeDword(0x200,0x299);//下边缘 299最大
% ]+ X$ N+ g1 D3 t" N; b- \, ~
% b D! T$ S: ?4 Y. g: d MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
, h2 O7 _' T) x' g Memory::SetCursor(MiscFunctionsOffset);
3 m' ~8 \) Y$ ]( b; X9 O& P9 w Memory::ChangeDword(-0x280, -0x400);//这个不要动
- a/ @" w. E+ q& u6 R/ o }
$ G1 ~. V1 Q% [. E6 y8 k" a7 M4 [& A' `! q
4、快完成了,是不是发现金币啥的位置不对??9 j+ G9 D+ J- w- x+ g
/ w* D! C/ ~, s2 T) }# Z//这里修正我们的装备栏1 X" l' D, m. u3 J5 @8 f
offset = D2Client::GetAddress(0x99B6C);9 h' Y/ l6 z1 R
Memory::SetCursor(offset);
* @' b; T9 x3 u& I6 W: B0 m Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);# E( c0 ^! m& T# z9 Y- H/ k% ]
; j+ ?$ i/ {- ?% Z5 p- U! S offset = D2Client::GetAddress(0x99BA7);, Y k+ {/ a$ L
Memory::SetCursor(offset);
; L2 u u# t f Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
+ x9 _* s8 O8 j( z V* X1 D: v% V* c) h2 b. M
offset = D2Client::GetAddress(0x99BE2);+ \' H( C5 }4 V5 A
Memory::SetCursor(offset);7 K4 _) g2 C( p! t+ M0 d8 V' x; V
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);6 X; Y4 S6 a: T. U' J5 X
* f2 c, \- T# I7 n+ r4 Y2 h
offset = D2Client::GetAddress(0x99C1C);3 d9 d$ h) r3 V( }0 L ~- Q
Memory::SetCursor(offset);
- R9 N% s1 k" A( X+ b+ m Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
% u: y" U+ c+ N& w9 d4 E: J0 q6 ~/ P. M3 J& P! b6 u
//取消两个popup,偷偷懒不过分$ b5 i3 |4 _1 Q
offset = D2Client::GetAddress(0x9386d);
0 n5 x4 h" R9 @. A4 G; h; h! K& s Memory::SetCursor(offset);
; V W9 O0 p0 I7 w* {9 u Memory::ChangeByte(0x8b, 0x33);: ]8 U. P/ P: X+ Q
Memory::ChangeByte(0xc8, 0xC9);9 p/ _6 S* q6 z
offset = D2Client::GetAddress(0x9390b);) B' U# G6 ^2 O. m0 H8 W' I
Memory::SetCursor(offset);
$ C2 E; c: g9 h( O: L- O8 ?9 F Memory::ChangeByte(0x8b, 0x33);5 ]0 }: H5 J- ^7 B
Memory::ChangeByte(0xc8, 0xC9);
- B/ m; }+ w v( w6 g$ t1 H) p( ^/ w+ D1 `- [, a* l Y
//修正提取金币& b' A% S3 P6 d& m* T' N4 ^
offset = D2Client::GetAddress(0x8D3E5);) Q! f! |( o9 M# k) D
Memory::SetCursor(offset);
8 W' ]8 i8 u* W+ g, q Memory::ChangeByte(0xA1, 0xE9);$ f4 a6 b; w2 B. p4 P
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);7 p6 ~: r3 X0 t. H% W* ~
2 ?! \, O) a: y v$ k& G4 B; z b
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
# z, G: q; O, q( I6 s Memory::SetCursor(offset);
$ l" R0 b% {5 _9 t$ Y Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
" i7 l; f" n3 |6 E3 U) ?
4 v" H2 m! L- h% V. Q3 b offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);* r% ?- O) i2 l, k( l( m) P
Memory::SetCursor(offset);- J* `6 Y% W Y' }8 h0 C
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
! R. n& o+ k$ p4 @3 z5 S: I9 Y8 T$ \% {( }
//修正关闭按钮$ k: m: Z9 _. T
offset = D2Client::GetAddress(0x8BD90);- b' }& K/ `( [* {4 X' G
Memory::SetCursor(offset);, ^1 I W# F" H
Memory::ChangeByte(0xA1, 0xE9);& w3 Q; s" F; i6 O1 t
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
7 g, O! q4 N( b A; o$ T
! \9 g& l) C: a: Y2 D$ F offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
" v8 j, F2 Q% I& Q Memory::SetCursor(offset);
* A0 q- X) @* z/ w( k) G6 L Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
: o! G5 L* m7 ]2 f
5 E; u2 _7 p: r. T- }4 J# B' ^: E$ s% e- z' ]
//以下是细节
% {9 e4 F0 \* R8 w1 G0 f#define getXGoldCoinFixBtn() RX(0x2d0)
& o; a, h7 D I. H6 ^6 R1 l( d#define getLGoldCoinFixBtn() 325 I/ q8 m B- b% Y5 @* h; A& a
#define getYGoldCoinFixBtn() RY(-0x59)% }* B3 n- W3 w+ J
#define getHGoldCoinFixBtn() 328 D/ o- y& A# d. |, u3 {& k
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
. H+ D* i" U8 U$ ]' t0 K
. O9 U H: G9 h5 ^#define getXInvCloseFixBtn() RX(0x3db)
9 G+ M' v8 r/ u8 q+ [#define getLInvCloseFixBtn() 32
5 B7 |0 j C' t: x#define getYInvCloseFixBtn() RY(-0x63), M% L& Q. s) ]8 U0 o2 X
#define getHInvCloseFixBtn() 32( g/ P4 A3 U8 D/ h9 Z W2 F
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
9 L% H7 n% ~7 N; F* R g/ E1 A" Q) O% Z6 h, b% ^
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)2 K: l& l( J1 a/ n
{3 R4 e, M: |9 i+ A/ h
DWORD mx = *D2Client::ptMouseX;
( f9 N) X3 I# j# ^* G" l DWORD my = *D2Client::ptMouseY;: n0 q( W4 t8 W7 [+ o* R$ X
if(isOnGoldCoinFixBtn(mx, my))
) J0 \* x) t+ x- c' D$ I return TRUE;* |% Y, C) ]; F* M7 |
return FALSE;3 t/ M4 S1 K. }1 d! p
}- O, d* r5 F( u2 q* j* f: g# B) }# Y
__declspec(naked) void caller_goldcoin()
2 C! Z8 Z4 ]$ A0 e( v* H) C8 P9 H{
" n8 i; X3 [5 y9 K0 M6 V9 v3 r __asm
$ {5 g8 r7 {- ` {( A/ a3 L' _6 g: @% R
push ebx
/ m+ x6 ]9 A& J5 r7 D mov ecx, esi; M6 k, B6 H$ e# i
mov edx, edi- b& c6 S" I4 d( p9 y
call m_NewStatShow_goldcoin3 ^& _+ V/ L$ j/ C% O) h5 O
pop ebx# f; ]! e8 M: f3 V
pop esi
" J: _/ M/ Y" a% W# c7 `( V; x5 y: q retn
/ c8 n' @; |: _# y7 j/ ^ }0 |# z g9 `/ d5 ]3 Z
}
7 N/ | Y( K/ m9 r5 n2 m3 Y1 K- cvoid __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])% k6 s: Y$ s: B2 x! [1 O( I( W: l
{
8 C. Z. G: |6 A! O$ M( e7 Z if (*nXpos > D2Client::ptScreenSize->x / 2)4 W- S! }! r5 v7 n
{
; i8 h% A; Y% ]# L *nXpos = getXGoldCoinFixBtn();9 {# O1 w. \( S" m0 W
*nYpos = getYGoldCoinFixBtn();
( o/ e% D; m+ P }
. ]; V& I4 r/ d- {}6 M% I% I# \. `7 b8 Y& o
__declspec(naked) void caller_goldcoinimg()
7 Y( Y8 Y6 R, @1 i8 O" p6 f{' s& C7 u1 G* z# r* K! q
__asm
; c. ]( ]" H* m( I7 Z {: z" X+ P, ]9 M, c3 ~; b
PUSHAD
' B9 g; V: A5 Z1 C/ y) r! l lea eax, dword ptr ss : [esp + 0x38]
9 X) ~- `8 N. r8 Q$ Y push eax
3 a; [1 X3 H1 `" z' r6 \ push dword ptr ss : [esp + 0x38]( P3 x9 _" T. H5 f9 _ Q, I* N
push dword ptr ss : [esp + 0x38]
+ N1 a- ?& N; K! f! C/ f lea eax, dword ptr ss : [esp + 0x38]8 Z; A& J1 p8 q4 a6 p0 U$ ^0 L
push eax
h3 @7 J. t* @6 T- A/ W3 Y7 V lea eax, dword ptr ss : [esp + 0x38]
0 K# [1 M% N a" H( k, J, s g push eax- Q" p4 Y7 @- ?* J
push dword ptr ss : [esp + 0x38]
[( ]0 s- C! Q* D5 U$ ^ call m_NewStatShow_goldcoinimg% W( j. [9 u: G- b
POPAD, C3 c; V: K& M; D- {3 E1 O
JMP D2Gfx::D2DrawImage; u9 d& R# a; F {) @) X" |( x" Z
}
/ v8 l6 ^4 }; e# e5 j}
. F5 q1 z! ~, t$ H- W VDWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标* C3 j9 u9 J8 r- P2 I* s. }, O
{" y8 \+ b( I, f. I4 m: P
if (x > D2Client::ptScreenSize->x / 2)
, I: Z/ f/ I. l8 ^) q {
6 H1 r: a% j$ ^/ o* R *y = getYGoldCoinFixBtn();
! ?1 t! _! I' \# E. ~. Y( E1 f& Z return getXGoldCoinFixBtn() + 32;
4 m9 V8 }0 P3 }9 j0 O; `# q }3 g J$ P$ }( X! e/ l Z; b) C- V
return x;
& ?4 R0 e# a. h% z) Y}
; k% C4 B: }" M) C1 r__declspec(naked) void caller_goldcointext()1 m; B# D0 E# \ Q' J, M
{4 O" Q0 y: f% m% e, l' C$ H: m# `
__asm3 Z0 X1 t0 r- H' D1 b# i
{
" G1 b/ t# S B5 k9 A PUSH ECX% ]' h# b3 \0 l( d8 X& e
PUSH EDI6 E8 F$ @3 Q$ B" Q: F0 J( Z
PUSH ESI
- @0 E0 n' Z6 V6 T PUSH EAX1 k8 Z7 ]+ S' s
MOV ECX, EDX
" x2 p2 d, U& I LEA EDX,[ESP+0X4+0X10]
) L! W: y6 P- V) O) h6 t2 w CALL m_NewStatShow_goldcointext
: L* b. N: B; a! o* P! W% f MOV EDX,EAX; T0 n+ {! N$ V. l
POP EAX1 j# v0 C/ J9 C9 E% h: ^1 v
POP ESI
8 H) Y8 U9 [, R" B" g2 t9 W+ j POP EDI: T2 `% |9 V7 `% E7 w, a
POP ECX% I8 g6 n) j3 l5 }& y) q
jmp D2Win::D2PrintString;- `6 J1 ]& u1 E- z A2 N8 W
}% h2 b7 F5 a J _9 x `
}: m' b* m0 v3 u8 B
5 \5 K% T2 ]: B) N5 ^/ P) U4 ?: FBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y). N' Z1 n* O. N+ ]5 o2 B- \
{* ~2 }. L4 z& f2 a/ U. F" p+ n
DWORD mx = *D2Client::ptMouseX;
1 f4 M' M; d' L4 b9 N; A DWORD my = *D2Client::ptMouseY;! U3 x# _& u* V8 Y
if (isOnInvCloseFixBtn(mx, my))
3 F$ \& U% ], @1 W, p' Z I8 Q return TRUE;
. {4 ~8 |$ ^3 C return FALSE;5 P f0 A4 {$ T1 v2 D$ B
}
& w, o3 D5 ^2 J__declspec(naked) void caller_close()* [) o( D* {1 J. d+ G+ [
{
3 S6 W- a* Q4 [1 J }- ], i2 a4 B __asm
7 i5 X* u( n4 E ]& e1 l {
5 R$ I1 p q" C# y PUSH ESI
& f8 S5 B' k H6 W push ebx
: h7 J. F& f% b) m call m_NewStatShow_close
% B1 ?2 @, R7 j/ P% ^4 a pop ebx
$ z" }( k6 W( `, n pop esi
H t0 e% Y1 d# S retn
# l1 N4 l' a d( I6 {6 O; T }
* o( V$ x; t7 U/ Q}: N0 U/ q" [# i; \. i
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])7 b2 W" I- ?- Q6 E# z( f% B
{
) [9 t3 l6 e" B* g7 V *nXpos = getXInvCloseFixBtn();+ ]$ E3 J p* c. v
*nYpos = getYInvCloseFixBtn();3 b/ A4 p+ u. C% K) a1 e6 _- X6 g
}) ~* O2 s6 s& Y! r+ ], t
__declspec(naked) void caller_closeimg()
) U0 W- }! m8 P5 r{- s5 s; u( t: n$ T1 n7 }
__asm
6 ^& ~5 D1 a2 \: g {- q7 ^; R5 Z! p
PUSHAD3 b5 R" i5 ^& X
lea eax, dword ptr ss : [esp + 0x38]
) Z6 F: V* q! p- v' H push eax
4 y7 T9 J5 \& O# }9 e! Z push dword ptr ss : [esp + 0x38]+ g" }- W: ~( k: Z/ y' m
push dword ptr ss : [esp + 0x38]
' L+ @5 o1 e/ Q% z2 ]0 m4 p lea eax, dword ptr ss : [esp + 0x38]
* T7 u$ a% A; h5 Q/ O push eax
- r0 i. ^& U% ^" A+ J! K5 Z lea eax, dword ptr ss : [esp + 0x38]
' H5 E' k) _! l8 G/ d push eax2 P0 `6 v& G/ t' \! ]. Z
push dword ptr ss : [esp + 0x38]& O" a1 ^; B6 w
call m_NewStatShow_closeimg( _& T, z0 \3 t Z
POPAD
$ X V4 j8 z2 V JMP D2Gfx::D2DrawImage! ~9 h" q; _7 A# J( |2 u
}* p( ^2 |# Y T, B& }
}
# J& `0 M6 \4 T1 ?( m) f$ c/ t& I6 k, |& N: S
( J" i `4 u6 ^; j- B; M; s |
|