|
转载
, l: R; c4 ^: u1 m; |( uBY SJ
+ W( L: ~, r" k& m首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的). E: w# E( f* r5 Y, R O
9 B- Y# j/ c- T& mD2Gfx::D2DrawImage-10041 U; X# t5 E7 A% ?
1、修复技能的背景(不需要可以不要)* b0 Y; c I2 C& i# T% h7 Q5 ?
offset = D2Client::GetAddress(0x77AA8);1 @8 W2 g# n% c7 b- C6 j
Memory::SetCursor(offset);
+ S' U/ V9 ]0 _3 D/ FMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
5 x' t2 a+ h' |1 Z5 b. D, U/ m6 i8 f* ~2 n* w0 }$ h$ l8 p
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])" f P. Y8 [0 |1 q# o; L- U X
{
+ r0 y7 Q7 j% ]/ h/ r/ ^' ^9 ^ //Init data for print image
i3 w' f; }% @- K \ sDrawImageInfo data;0 R7 g( M( ]( [7 i
ZeroMemory(&data, sizeof(data));1 C) x1 W) }; r3 H$ d; {4 v
: ]# A/ J$ P w+ i$ } //print background& z# P( E- _ }! U" w6 O
setImage(&data, spellBackgroundImages);
2 U" p5 V! h, K4 W0 w setFrame(&data, 0); X4 S* E# i6 N( m/ b" v
int fixx = 511;
6 t2 m4 h. x: e int fixy = 9;
0 l6 s3 p2 t8 E7 m/ q1 ^$ y D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);6 l3 p3 J- |$ V
setFrame(&data, 1);) P6 r9 ~4 Y+ P. w% [' A
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256( t8 T7 N; @3 ~
setFrame(&data, 2);
/ _+ Z. p2 C6 S, l8 A D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432/ r- B0 i4 V& [2 o
setFrame(&data, 3);
! |, |" ^( E* F7 f) w/ c# @2 _1 @ D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);" e3 @. }# I; n- R* U2 x
}3 w* i( Q+ p8 a; p) w* {, K
__declspec(naked) void caller_SpellBackGroundFix()
' c# t; Y/ s7 G' y% }{
- B" e6 W3 Z1 c% w1 O' a __asm! d: g! j- \9 b$ `; T5 V
{
5 L! I- F6 n: |* f O' ^ PUSHAD6 ]# ]6 Z: @& i4 t/ v4 |+ g
lea eax, dword ptr ss : [esp + 0x38]' V0 Y% V- ^( ^* m/ a# ^- X1 c' |) k
push eax1 L1 k6 o$ u8 K+ ^# A
push dword ptr ss : [esp + 0x38]- S' p% s7 y$ Q, o
push dword ptr ss : [esp + 0x38]
, b2 m O6 o: b' E- m5 A% C0 O lea eax, dword ptr ss : [esp + 0x38]) W* W: L! r! E6 [( k& `( j: ^
push eax
/ E- n7 K: ~" Q, O6 h lea eax, dword ptr ss : [esp + 0x38]9 G/ s a- \: \! ~9 m
push eax
' t$ ]* O4 A/ h; V, L1 K push dword ptr ss : [esp + 0x38]% w% c' \! t9 K
call m_NewStatShow_SpellBackGroundFix
" n, b2 ~) I3 a( @0 ^ F POPAD+ X1 g, S8 y* a \
JMP D2Gfx::D2DrawImage( u% B* Q5 K6 T6 s
}
2 i8 F A2 B* o1 l; C4 n: q8 B}
( W$ L- w9 e% S9 Y0 ^! \& U9 g4 x0 \' _" \2 p& o/ _+ _7 P
2、我们如法炮制小站的背景' @% e9 U% @5 I7 s% E/ H* w; W
, L' s/ G$ s6 K$ B9 y+ y! Boffset = D2Client::GetAddress(0xAB010);
8 |$ I3 e$ m' DMemory::SetCursor(offset);1 v2 l. r$ B0 _8 b( b& d
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
7 b2 N" v/ o& ^1 u2 m9 @
5 |: G2 [, I! n5 l/ |, l3 n5 ivoid __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
! \3 F' r- ~8 h" O8 m7 J{
1 g# J9 W J; W //Init data for print image
7 h3 N, N& B& F* J sDrawImageInfo data;
$ Z$ t. T [9 k ZeroMemory(&data, sizeof(data));
1 r; q! M) n: I D7 G
7 Y$ Q% I/ Q4 }: o8 c& q //print background
) P! n0 i* z5 S6 U8 }+ i3 O' e setImage(&data, waypointBackgroundImages);
$ {9 k" K* |# f8 N2 \ setFrame(&data, 0);/ _/ ~' i8 T* C
int fixx = 0;5 P, w- t& m* q' {; x
int fixy = 9;
) `9 r) y0 y% n2 U6 c4 S( ` V D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);- r/ G x1 A- O" Q2 T: |
setFrame(&data, 1);
; a- k' c: ^, u$ q! V7 a: u: { D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//2566 l0 H( F& B2 w& p& v, H+ k6 Z+ y7 V
setFrame(&data, 2);
! W* z6 \+ y# u2 _, o, `0 U D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432- e1 H# V! ?! B% I2 H
setFrame(&data, 3);% J* E3 ~/ r; }- b' }9 g
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
: D# s; r8 ]; ?1 d& D
8 V' B5 I* g8 p5 R4 Y}
) a3 G# s; [8 q2 \- m) R__declspec(naked) void caller_WayPointBackGroundFix()
Y$ ^* O% ^* q4 y+ N+ u{+ e. F6 v" z( D! G
__asm
4 m: E4 i, t4 C% U& Q {
# m. |9 c$ U9 Q PUSHAD
6 c) I' l* G g H: K lea eax, dword ptr ss : [esp + 0x38]
# k& O- Y+ v8 Q8 G% q9 H- |; [& D push eax; F6 h+ C5 ?. Q6 f) P" G
push dword ptr ss : [esp + 0x38]7 [( }& k+ L# @2 }8 f8 o9 O& Q
push dword ptr ss : [esp + 0x38]8 Q5 |' J# ] U5 r! B
lea eax, dword ptr ss : [esp + 0x38]
! f- D/ z4 h, u5 j a; e8 ^0 m push eax+ O! u4 U7 M; V
lea eax, dword ptr ss : [esp + 0x38]
4 v! {1 Z& n( |, M/ b5 T M8 _3 N2 f5 [ push eax3 h5 i3 |9 W0 g
push dword ptr ss : [esp + 0x38]2 x: M# f! V& S# S/ J5 G: C% |4 D9 [, `
call m_NewStatShow_WayPointBackGroundFix
6 }& [& N; v1 ~$ e% w* b2 I POPAD% \2 C$ ~& ^7 f, A
JMP D2Gfx::D2DrawImage
+ x7 C: A1 m% s9 Y }
W; I7 S- ~( Z! P) J- y}
7 E2 f) g! Y9 i9 h: _5 E7 o- [. f( T) S; |0 k5 B0 G3 H
3、以下可以搞16*16超级箱子-腾出我们需要的边缘: p- W* D y) e. w5 \
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
0 B# P% Z" b* [/ M( R% \ {9 M5 p$ f& e" X+ H, S# G8 a/ [
class D2MultiRes : public Library<D2MultiRes>
4 J1 G$ T1 }% z( l$ K+ B, x {: i7 H6 |" w: J0 a9 X4 F9 ~
public:7 ]2 c8 K6 X/ w7 T f
static void Init()
, \* R$ D8 H, ^5 T! k: { {. h. R! ?8 q' ^& {' M
Name = "D2MultiRes.dll";
9 t# [" y9 F/ `9 d Offset = LoadDiabloLibrary();5 g/ N2 f: `% R6 {1 o: Q5 t: S
}
3 y6 M. h6 v$ q- V# ~) l };
4 V' x: H, n+ _; X' ], G2 u/ m D2MultiRes::Init();
: b) `- \8 ~# n! ^0 V D2MultiRes::HookLibrary();
0 t9 H) Y' t( k' N: N0 b6 Z; S8 [5 ^0 c }% N; t2 y5 ?
$ ?, b' N. I2 |2 u& s
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
# s$ R/ u6 n5 h, f$ D Memory::SetCursor(MiscFunctionsOffset); v% y. Q6 X5 w" q
Memory::ChangeDword(0x1b0, 0x200);
4 w6 [0 a2 U! ~) B# \
& b, N9 J" z q* \2 e& ^9 W! k7 ?3 P( f- S$ J0 P$ \
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);, I& _( ^% \+ `( K+ X+ O$ f) J
Memory::SetCursor(MiscFunctionsOffset);
- w- Q1 c# c, z1 C Memory::ChangeDword(0x140, 0x200);
% Z' M$ E# a7 i; u8 Z* g. U3 J/ m7 s4 X: H# o' X: z/ K% r4 F, G
+ e% Q7 W. e4 o
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);5 ~# T% L. @" I6 ~
Memory::SetCursor(MiscFunctionsOffset);
( Q8 L6 k0 h1 C1 |9 G$ Q$ B" I! c Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块& Y) K; ~3 t0 M
# B( q' A2 S f3 _4 H MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);7 S9 B; F4 g( w
Memory::SetCursor(MiscFunctionsOffset);
/ q3 w: ~6 s9 ^1 P4 p Memory::ChangeDword(0x200,0x299);//下边缘 299最大
# K ]3 l: w+ w- [* g- N h4 Z J' i) f$ d5 D
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301); }' G' p5 j( @& p6 J9 b, [" |: O
Memory::SetCursor(MiscFunctionsOffset);
0 y: Z: X/ D, t9 T8 J Memory::ChangeDword(-0x280, -0x400);//这个不要动* z- y4 \7 Q; _3 e4 M3 @3 i
}# W- n; `9 N. b" }( }& ~
* I: }5 P! V# \$ o4、快完成了,是不是发现金币啥的位置不对??- T! s0 {0 {4 g2 Y
2 f: L+ o7 x O- o4 Z- Y0 I4 u$ H+ ~//这里修正我们的装备栏% R4 }) U! T% S# K0 X1 t. c$ t
offset = D2Client::GetAddress(0x99B6C);
4 l: {6 b' [% R% R2 |* L Memory::SetCursor(offset);
: r* k# \4 ^/ G* q0 r% ~$ ^4 U7 ^; b Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);0 X3 u4 N& T' y T1 Q; C) L
' u6 c8 f( Y1 l' F# g% E
offset = D2Client::GetAddress(0x99BA7);( V9 t$ J0 O, l1 t! U
Memory::SetCursor(offset);
) X/ X0 a2 S2 Q. c Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);* x& m r" G% @
4 b( z) G6 T7 w+ R0 W2 G6 {
offset = D2Client::GetAddress(0x99BE2);# M" z3 S1 Z( N1 _& |7 m9 w8 m: }: e1 l
Memory::SetCursor(offset);. B7 f s) g) ?! s: E
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
& \% X% i* Z* F7 v% m/ _' S4 p% j( d6 _: k8 y5 D$ v
offset = D2Client::GetAddress(0x99C1C);* K( g2 \; E }5 s
Memory::SetCursor(offset);
9 \# T+ _7 T0 Y6 f Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
% O. a8 D; l: O/ f3 N) A* i+ M1 c, A9 D; L0 u& g- S. r) K
//取消两个popup,偷偷懒不过分
e& D" R( e3 o6 r7 x) ?3 N offset = D2Client::GetAddress(0x9386d);. g8 L9 ^7 N- C% H# H0 M
Memory::SetCursor(offset);
: _5 x5 d& K; v5 p Memory::ChangeByte(0x8b, 0x33);- e5 y; w6 ] f& H4 P
Memory::ChangeByte(0xc8, 0xC9);( i! W8 a3 t/ {' Y5 q
offset = D2Client::GetAddress(0x9390b);. u {; y9 ^$ L: J; n ^: `
Memory::SetCursor(offset);* @6 A. U$ |' p
Memory::ChangeByte(0x8b, 0x33);
, r! h% A3 Y3 e3 E/ G }$ t Memory::ChangeByte(0xc8, 0xC9);0 c0 k. E$ V- y8 F8 H. o
; C7 i# A- p: ]! D //修正提取金币, G' p6 c% p9 s6 [: r1 j( `( U
offset = D2Client::GetAddress(0x8D3E5);
3 L8 T6 k$ `; M Memory::SetCursor(offset);$ m' @( [& _7 q) @: X& R: N" q
Memory::ChangeByte(0xA1, 0xE9);
$ {7 w* S% s! h) r8 d: B& { Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
' V+ C. c: |2 X! S$ |& S9 l3 ?/ z- S) A2 d
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);- K& K/ N3 n: ?- Q. d( r' U
Memory::SetCursor(offset);
* l. x; G. m; I" ` Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
4 c- _/ f! v2 K" Y
. m- _! E! Z3 r( a offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
. i" J. [% q: d4 j _8 p/ v Memory::SetCursor(offset);
8 c2 d% `) z. {% z- c2 H Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
, f8 p; K& t8 S' @1 p% W# B
: \6 D% O# o( S. b& e: i( z+ D4 w //修正关闭按钮
% M6 Q3 ~+ x0 x$ m$ G& ?, I$ m n offset = D2Client::GetAddress(0x8BD90);
d% a5 E( X4 W+ A) W. H2 S Memory::SetCursor(offset);
0 T2 t; t1 `! O. x! c Memory::ChangeByte(0xA1, 0xE9); ]/ F# |2 n* x6 \8 C _: D: }, m
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);- p1 Z$ ~# {4 j
4 P3 q8 H' z/ B3 `$ @5 } offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
8 A) N0 U' W0 {. ~4 G: h6 r Memory::SetCursor(offset);4 j6 b6 |# P# ?; Y& ~/ i) C- G, J% q
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
( P( o+ H# l E5 b; N% t0 |7 {5 [. a+ L* J: |
2 r/ C4 ~7 P) m$ q+ w
//以下是细节6 h; o" s. ~" E8 E# Y2 x0 L- }8 u
#define getXGoldCoinFixBtn() RX(0x2d0). C6 b4 e- b. s8 f3 t
#define getLGoldCoinFixBtn() 32+ Z4 m" L- h7 k3 Q u' _+ k& s' @
#define getYGoldCoinFixBtn() RY(-0x59)
3 Q9 |+ a6 k! b7 C: H' M \7 G2 x! m#define getHGoldCoinFixBtn() 32& T& {5 q& W2 I' @. e7 x' x6 G
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
1 Q/ p/ b6 i ]# N0 s W
2 T( N6 Z$ S8 }: ~8 u#define getXInvCloseFixBtn() RX(0x3db)4 k% X" t" I1 `0 K3 W
#define getLInvCloseFixBtn() 32/ X. n, l' F4 m5 y* K
#define getYInvCloseFixBtn() RY(-0x63)* m$ t( m4 K& y1 \; n
#define getHInvCloseFixBtn() 32
: B, U! d% v; s' H#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())/ [# A. u5 L! ~3 u! k [& ^' Y
0 I) a( Z+ z `- J& h! m+ n! o( RBOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)6 p1 U% S) t4 y4 R0 h; \" m
{/ b2 ]5 I8 X6 D. S
DWORD mx = *D2Client::ptMouseX;9 A* D8 O: F& y' f8 p: i1 f
DWORD my = *D2Client::ptMouseY;7 @; U; y3 G D0 ]3 R& K/ ]/ D
if(isOnGoldCoinFixBtn(mx, my))
2 H' v# ^# U# l. F* B1 H return TRUE;) {7 ]5 p( A# j) j) j2 i
return FALSE;
2 X) n/ ^* G v( K. L$ S1 f) W}
" I1 f6 Y' [0 v1 _* r0 ?__declspec(naked) void caller_goldcoin()) D3 h0 {7 B6 v3 @5 K5 j" b9 e
{, a5 Y6 h0 p$ x4 H2 r
__asm; F" S* X' ?. w7 b% O5 b! T
{
9 \1 z9 A- Z9 \2 R push ebx
& v3 [3 Z& k4 f& |1 i( C; y mov ecx, esi
, |0 J+ y z! { mov edx, edi$ R0 F8 U0 M! G, Q/ f: l2 N
call m_NewStatShow_goldcoin6 U/ \+ P) [& P# F7 u1 Y
pop ebx
( x, f+ [" \9 M! U" r pop esi* x ?9 y: V/ h
retn7 M! v. j' h* l1 p5 H1 W
}7 g5 s7 ~" h; W3 R, J/ E+ @
}- x' }7 C' k) T. O7 K1 |7 W C
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
3 e, T+ I5 W) F: s S{; r$ |$ V- y M' E1 E8 x" p/ ]- d# I
if (*nXpos > D2Client::ptScreenSize->x / 2)
1 d; G' u* J W c {5 v1 F8 Y, r- j2 P* P
*nXpos = getXGoldCoinFixBtn();
" v& [1 J# m; d: }7 r *nYpos = getYGoldCoinFixBtn();, M9 G0 ]. F, k! f: H) p. ^
}
9 b) B; b# ]& n* X5 c}
- J0 L2 f0 m8 {7 D' L$ F4 z% [__declspec(naked) void caller_goldcoinimg()
# R6 O3 ?$ n S0 E4 V{
: ]( V3 T( Q3 v- ?* C __asm
% ^+ ^; E- b( B {
3 k& V1 z4 Z5 ^' p9 b( n7 V PUSHAD6 M7 Y9 q5 J+ q. m! S
lea eax, dword ptr ss : [esp + 0x38]- _3 N0 I: A* ^/ n6 \9 N
push eax
+ U J% ?3 M d& }2 H; I, Q8 l push dword ptr ss : [esp + 0x38]% d6 p- v! u! [* p1 J
push dword ptr ss : [esp + 0x38]
) B1 [) V/ L9 l" e lea eax, dword ptr ss : [esp + 0x38]( k+ \ n1 w& z% J" i" r+ @
push eax
" O, {7 A- \0 V5 v8 R! F# d4 k lea eax, dword ptr ss : [esp + 0x38]" A! r+ K4 I$ Y4 q
push eax6 I2 h% a6 @. H* L: {0 h$ Q/ C5 b" d
push dword ptr ss : [esp + 0x38]
$ N4 V: [3 x9 l3 [9 x2 X% a call m_NewStatShow_goldcoinimg
- s( x( x0 ?- I5 D% t0 l POPAD6 a+ s: [3 C$ j, f" q. B
JMP D2Gfx::D2DrawImage/ M1 V i' {( H8 M0 I$ F
}
8 ~4 ^# B5 R: o8 V: z8 Y}
L: ]: _1 E2 n: s/ `( q, _DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
1 t( ]1 z! H) L$ h{" C% ?! Y( T! r. ?
if (x > D2Client::ptScreenSize->x / 2)( F( d. z- `& M) B2 Y9 s
{6 {8 q! Z7 Q$ U; I5 N0 v
*y = getYGoldCoinFixBtn();$ o* t; V, Z+ S6 c6 S7 [( T9 {5 x
return getXGoldCoinFixBtn() + 32;
* z& d: Z( i h8 J4 O }
4 [4 j) S+ x1 Q. i$ {- J return x;
8 W. `' @# Q4 D7 B/ N$ { z: {1 O}7 l9 r, X% g7 H" n% D
__declspec(naked) void caller_goldcointext()2 P. M1 w+ R6 B
{
. K, ~* b! E, J- `/ s6 p. W. Z __asm% ?& u7 I( ~7 h0 H; E9 h& U. ~) Z5 Z/ M
{
! W2 H, B/ s" U3 u$ j! ~3 G$ p PUSH ECX
. Y- w) S$ V8 b& z PUSH EDI
m7 ^% S4 d0 }/ R PUSH ESI, e7 B; D% b, u4 n
PUSH EAX
w+ n2 ^: t7 A0 ^ MOV ECX, EDX/ i9 i" o5 W3 M
LEA EDX,[ESP+0X4+0X10]9 U) L% V" S/ N4 Z& p7 c6 U ^
CALL m_NewStatShow_goldcointext
@# q/ ?) q: Q MOV EDX,EAX
% a0 Y& R K+ g2 s- @' A( \ POP EAX
% x$ k4 J$ \4 L# `4 I" M POP ESI/ w) ^* x. X- a3 A" n
POP EDI4 A2 P: `7 q1 _& `& {" l
POP ECX
2 [/ `! p( K7 b jmp D2Win::D2PrintString; \; o- i3 N/ @7 |! P
}, T/ q0 Q1 C. R( b9 M, }6 q$ V
}
3 L4 K1 J8 z, p5 V/ A4 X3 O! J
/ B( P% a6 `- G* ^8 T: ~; IBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
0 c3 S9 _2 e$ f{
0 q/ `! h/ M2 I8 Z2 Z+ [ DWORD mx = *D2Client::ptMouseX;( ]8 Q9 X: g0 R9 Y/ H0 i
DWORD my = *D2Client::ptMouseY;
0 {. z$ I7 Q" C: Q# c if (isOnInvCloseFixBtn(mx, my))6 m U- m3 k2 p" H/ d
return TRUE;" S( b- w( c) `! W* \% O2 _
return FALSE;
4 F$ N. x; I2 D- ~( c" d+ @) w, q} i% _' ^( Q. J
__declspec(naked) void caller_close()( o o& s) ~: c. t* Q' s
{: i+ V' {) r$ a9 c/ L0 x9 u# a
__asm5 ~& V/ n. D3 y# a1 I; n7 f
{
6 u/ u" L6 d6 T" L0 i2 ?9 f- D PUSH ESI+ S0 c2 } c$ B6 E
push ebx. X+ g) S [4 {" U2 g
call m_NewStatShow_close
% z4 d) l5 ^& E. m7 D. h pop ebx+ \) g* J. H9 c1 Y- n8 M2 r
pop esi' V5 S ^5 z: K9 N; L9 s
retn6 E8 n+ w; [' l- @6 v
}+ s2 H7 p& |( {$ `3 _4 ?
}; b' K, b5 w7 K
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
4 s( m7 {8 A. C5 B3 V, d! r{3 G+ U9 \: y8 ~( c6 C0 h
*nXpos = getXInvCloseFixBtn();
$ J) Q+ n: _8 p# O *nYpos = getYInvCloseFixBtn();* t* f4 A9 |8 r2 `) z9 G/ j- N
}
% Y- ]) a2 P1 R7 m, R# v__declspec(naked) void caller_closeimg()
" K/ ]- C' O% H, M9 Y$ M{
+ }; o2 D7 G' F) C __asm+ e3 B6 l0 Y3 Y: y) |3 z
{8 V4 D$ V& f4 Y; t
PUSHAD
3 e- e7 s. G2 ^7 }/ ? lea eax, dword ptr ss : [esp + 0x38]6 j% C9 q& B) q7 x
push eax& W- ~3 u" W/ U, `
push dword ptr ss : [esp + 0x38] A5 ?+ K. J2 P4 N% N/ `4 r. s
push dword ptr ss : [esp + 0x38]
6 v3 [. b9 D* e. F5 U. K# ]$ t0 ? lea eax, dword ptr ss : [esp + 0x38]3 ]( W" V: S9 V* t/ i8 _
push eax7 K- m0 o2 K3 |! b* w+ s
lea eax, dword ptr ss : [esp + 0x38]! u6 S- `2 r! _; [/ L
push eax
2 E# d+ b- J) r push dword ptr ss : [esp + 0x38]
$ N7 T2 p y: g: V call m_NewStatShow_closeimg
e, ?7 l/ I, b7 l0 f POPAD2 O" O3 c( l% S D2 \- ]
JMP D2Gfx::D2DrawImage9 I7 D* H3 X' N* u
}3 a0 O( R& W; p9 k. t' s% o
}- P# B# S+ O! H3 h4 F% t" d
, L: d+ b& M7 ^) t9 n
* v! ?9 v$ G! k; @) T. Y |
|