|
|
转载' q; S# r1 r7 O3 ~2 ]
BY SJ
* A4 c! r n% Z" q# A* M首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)6 @0 w) G3 }+ ?, Z7 p
) }7 O3 V! k/ }; MD2Gfx::D2DrawImage-100413 [1 O- J I9 \9 P
1、修复技能的背景(不需要可以不要)$ o$ }4 @. G1 ?4 ~
offset = D2Client::GetAddress(0x77AA8);9 t% f/ e8 d0 q8 B
Memory::SetCursor(offset);
6 w, O$ x9 D3 b% CMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
' ^. ?+ K0 Z9 T7 W5 y6 i% n6 Y. I" L- Q5 X4 B' w
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])& Y) k# }5 e+ P) @2 T: y6 h4 f5 @
{% i5 i- a2 F5 O2 l. i! I$ X
//Init data for print image: n0 l7 x, o# `$ |& H B
sDrawImageInfo data;
. f O* ]+ @4 E# h/ t ZeroMemory(&data, sizeof(data));: N7 m+ x3 e" Y8 q
( W9 x( h4 y! H1 C& Q& V- O$ `
//print background8 j% h' [- C( ~1 g8 G, Q2 ^( S8 E5 x# h
setImage(&data, spellBackgroundImages);/ v" X. r2 Y1 {
setFrame(&data, 0);
# m) I& x) ^" }: h2 i/ w int fixx = 511;2 N1 N- d. J2 I% M; ~$ y, ^, P- n
int fixy = 9;0 H b7 s, M9 \1 ^" {. d
D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);
' I4 N; h" F! Z4 ` setFrame(&data, 1); o k S3 @$ F0 a; V0 j$ d4 o3 S) f9 h
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//2568 z1 I) P& W& i( v% ^" N
setFrame(&data, 2);
) T8 b! ~3 W2 a8 H, F0 R" g D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//4328 K! [; `& C. h0 h4 S$ {' @8 T
setFrame(&data, 3);$ L/ v2 H2 `5 J
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
, \/ u2 l* g5 e/ {}
; i! x ?# ^% ~& \* \6 ~# v__declspec(naked) void caller_SpellBackGroundFix()
2 E) T# }6 f' d+ M1 l$ a1 f{
& k L; [7 F$ T& [+ M- M __asm
0 T* P& ~# W) n. Q {& K" p$ ~$ ~! T" E2 r
PUSHAD3 X$ m2 m* I; i) v# h
lea eax, dword ptr ss : [esp + 0x38]( t- ^/ {, r! x2 O+ v- Q
push eax
4 o+ R G4 ~9 g8 `0 T+ T push dword ptr ss : [esp + 0x38]
2 n& _ o, c- }$ [ push dword ptr ss : [esp + 0x38]/ I+ F$ }" {8 r$ {$ ]& n$ M, m2 e
lea eax, dword ptr ss : [esp + 0x38]7 b& F# M' I) ?) x4 A, S
push eax
4 H/ Y+ i9 a& z) d' \- [/ w$ z lea eax, dword ptr ss : [esp + 0x38]
/ h7 \" W% d. M) o' L push eax
' ^; n, {4 z1 o! d1 G! \: M# ` push dword ptr ss : [esp + 0x38]* I/ f2 a5 Z; W9 I
call m_NewStatShow_SpellBackGroundFix8 B$ n$ R/ |- g- K2 M
POPAD
, q: M8 w. ~! X! O6 I; U* H JMP D2Gfx::D2DrawImage
6 r- x0 l2 E4 b& a1 l }
4 ~" P. Q( V5 O, @7 d+ Y5 {6 m}7 A$ s& C! J" r6 ^
: k3 y% ~% k3 P& q
2、我们如法炮制小站的背景1 F& H* h. F7 S6 ~# q# Q* o
* K# p8 U8 N+ w
offset = D2Client::GetAddress(0xAB010);
$ I7 n8 g6 _! T( sMemory::SetCursor(offset);( L7 b3 _) h0 o+ q
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
) \' W' ~' Q, _8 Q
) N: s! P6 f7 {; ?. ]6 Fvoid __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])% k4 x7 |" }$ V6 @
{- M/ r, f$ u, o% r1 z! L) v; Y. X
//Init data for print image
8 v W, \8 a9 O6 N! O, j1 B+ F sDrawImageInfo data;
5 r1 A: K6 J) f3 H7 T- E8 \( B: G) I ZeroMemory(&data, sizeof(data));
& b7 M& o2 S6 s( A3 D
; U0 Y, R- F& G# K9 ` //print background* _% W, `& e- W5 _4 ^4 t4 X
setImage(&data, waypointBackgroundImages);; K7 D! M" B3 Z2 f) b
setFrame(&data, 0);$ a0 v# K4 m% `. o! p( A
int fixx = 0;
; c. z; Q+ Y9 R- y int fixy = 9;
9 K5 e5 _, g) E, ?$ W$ c D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);7 A- M* g' V2 h
setFrame(&data, 1); J+ W- y4 O$ }2 f6 \# U+ J
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//2569 u, b/ l- k' @: A
setFrame(&data, 2);: b4 ?4 I8 l' ^
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
: \6 U6 Q, c+ D1 I" h T* ~9 ~, G setFrame(&data, 3);& w' g" J% p# r5 e7 _5 _
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);4 `& H2 c. c% D' R
, ^& [3 T1 x) J3 D0 D3 M}
c! |/ y$ ?' ` W/ U5 {__declspec(naked) void caller_WayPointBackGroundFix()
$ {" ?* i; f* @% g0 |/ x{
* p$ J9 [6 Z6 s+ M! ^9 j8 Z/ X __asm
( Y% K4 j7 \: e8 T8 H" Q, x {
, O' v+ s5 H6 { PUSHAD
. P( l# q$ o! ^$ E2 F lea eax, dword ptr ss : [esp + 0x38]+ Y1 ^0 K4 a: I# s
push eax
6 O) @3 j4 T- Q; Q% y+ W. T" z$ c push dword ptr ss : [esp + 0x38]: f) g' N' g& ~$ T! I4 ^* ]
push dword ptr ss : [esp + 0x38]1 ^- [* _" C$ f" R. v6 P
lea eax, dword ptr ss : [esp + 0x38]
* s0 [1 x) G+ P9 n1 u# _& g push eax5 q, A2 q$ ?( q) x3 w( ?4 |
lea eax, dword ptr ss : [esp + 0x38]3 }/ [, e% m- W8 r
push eax
3 {+ @% r- n! U3 ]' P' B push dword ptr ss : [esp + 0x38]8 d/ t- Z/ Q1 f0 X
call m_NewStatShow_WayPointBackGroundFix
( T7 i' P6 C! H# A- o- ~ POPAD
7 V/ I1 C- l0 [% P* L JMP D2Gfx::D2DrawImage
1 h" f/ W! u. z" p2 I }
' F) i! ^' X" L c( b3 ^) a}
5 I% b% [9 R0 q3 M' B: o* I5 N- `! T+ ]
3、以下可以搞16*16超级箱子-腾出我们需要的边缘9 r* Z* ^7 N1 U' m" E w: W! M
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
5 x2 j) g1 y, u- k: m# Z2 S {9 v) U7 O+ Z/ B: R3 F+ I* j! q
class D2MultiRes : public Library<D2MultiRes>
7 |4 f( |# @- b7 c1 R3 k* N {
$ ]( y/ {& O: S" ~* T; o' ^# z2 q public:5 h, m( H( d3 }' [
static void Init()( j, V G- y# r7 G% g! K+ J
{
8 }+ O7 E: T7 W; G; Q! @9 \ Name = "D2MultiRes.dll";
5 ~0 a8 f& C8 s% j B" F) U Offset = LoadDiabloLibrary();
: k: L7 K: v6 Y& o3 j3 m }2 E2 [$ n4 n, |
};' C' o/ ?* Y9 n4 n) `
D2MultiRes::Init();) c# ^+ h9 ~8 z8 z1 h
D2MultiRes::HookLibrary();( n" D1 K8 f5 F ~9 g3 u
% l" b/ P! ^' U* R- T. z; F& B/ I t$ J: Z) e7 K1 W& e) K! b' N
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);1 y" f) \$ p, ?% u
Memory::SetCursor(MiscFunctionsOffset);4 N" R; ~7 |+ D2 n9 V4 ]9 \' r" r
Memory::ChangeDword(0x1b0, 0x200);
6 [, [ C- ^. U; I' w7 M* v0 L' y2 x" O+ }4 z6 K$ ], c+ W
6 B+ c6 @" B- x MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
( H. D/ b Q6 N. t- g9 j0 \* p) _/ C3 U Memory::SetCursor(MiscFunctionsOffset);5 R2 y1 N9 A: N" F% i7 M) A
Memory::ChangeDword(0x140, 0x200);
* k# `' m0 ]. k0 ?2 \: z' G- t! _9 O( b: X6 r$ B( ]
- D- a! U9 F1 z+ P
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);
$ I* k4 ]& V7 E2 P Memory::SetCursor(MiscFunctionsOffset);
# m$ _# u% e: Q; J0 Z' G+ ]) }" k$ M Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块. Z0 b+ J, N6 x7 W$ }5 M
0 L: W( B$ t; c0 S MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);6 T9 q( H8 w+ R) U; z- s
Memory::SetCursor(MiscFunctionsOffset);0 P% `3 y) ?1 P, c0 Q) }+ ^
Memory::ChangeDword(0x200,0x299);//下边缘 299最大
2 t" y1 m% H, p3 J( f1 B! e" C6 R3 x" m" H+ a1 l' B
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);- L2 g% k9 p9 C+ O+ a
Memory::SetCursor(MiscFunctionsOffset);& ^- }" E) `$ K M, {9 A$ P
Memory::ChangeDword(-0x280, -0x400);//这个不要动
1 l& i/ t6 L! N; q }9 @- a8 j9 |4 m& ?5 O }' K
2 F# c2 O( x# `4 w
4、快完成了,是不是发现金币啥的位置不对??
( o" F+ z% r+ X4 X9 M, Y: |/ J; }( {6 H
//这里修正我们的装备栏
" n1 x* L8 r' t' V1 ~ offset = D2Client::GetAddress(0x99B6C);
' j2 i: Y- v# ~% q/ s; G9 z Memory::SetCursor(offset);7 i( J1 T9 `# `& G5 n B; X, K p
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);/ g2 Q& h, K: g- m: |0 G
8 G6 q5 G3 X8 r# U! P
offset = D2Client::GetAddress(0x99BA7);% e8 r/ B& x6 o9 W' n& d
Memory::SetCursor(offset);
. }& x6 A" H7 n8 V+ m, O0 K6 J Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);0 l; q9 `6 g: Q" t
1 }: T4 J: `: y, N) D9 K
offset = D2Client::GetAddress(0x99BE2);7 ?3 e, h/ H$ x9 s' c
Memory::SetCursor(offset);
0 m: Z, f' `# N" ?" R Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix); ]; C+ n* V( |5 ~
$ p' P9 F" }% n3 P, Z
offset = D2Client::GetAddress(0x99C1C);
+ N/ P; D X" }8 e3 D! K Memory::SetCursor(offset);
6 E. P4 R x1 b" g: b Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);0 p2 I0 E* p7 D0 ?) H; z1 @
3 x2 N6 k& Z4 n" ]) g( R //取消两个popup,偷偷懒不过分
# _" M! ~0 k9 n5 N' ?; B offset = D2Client::GetAddress(0x9386d);( z2 }" ]8 m5 D& y3 t0 N2 r
Memory::SetCursor(offset);
8 h7 ]' B- W9 @) Z& w! K Memory::ChangeByte(0x8b, 0x33);
4 i* w- R1 b0 T2 I& q0 C Memory::ChangeByte(0xc8, 0xC9);. S9 B& s2 ?$ p( U. E0 Y8 A, r
offset = D2Client::GetAddress(0x9390b);& }9 X/ M: f* n4 b7 \1 A5 P
Memory::SetCursor(offset);; ~+ n& d/ B3 I: B7 V* F# C! q7 U. T
Memory::ChangeByte(0x8b, 0x33);5 m$ o* z$ H& Z. l/ Q
Memory::ChangeByte(0xc8, 0xC9);
! f' P2 I e! w% [5 ?) }8 _
* f! s8 c+ H6 M3 L& ? //修正提取金币2 `: B. O! a' `! c5 |/ z/ T8 ~' b
offset = D2Client::GetAddress(0x8D3E5);0 m0 e) K1 _: B: v
Memory::SetCursor(offset);: |- ^0 |- _+ F2 E% ]' |
Memory::ChangeByte(0xA1, 0xE9);
! v& i# z) ]7 Q* J Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
4 I5 k Z5 p3 B9 n6 T1 y0 C3 ^) A; B
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);* i4 W. n/ y7 g/ b, X7 @( ` b- g
Memory::SetCursor(offset);) }5 J: S g' |$ ~2 i
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
- d6 ]) C8 a4 {( F1 J" ?1 Y. x" j0 p
) z3 n4 w" q! s" W3 y8 W( J offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
0 ?' A8 T$ O& M( a Memory::SetCursor(offset);+ p/ M' z+ n. w' o" M" H
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);1 T: n J$ j# ~
/ y+ R! c" ?8 v0 S$ K! y //修正关闭按钮
" w8 D a* _8 n offset = D2Client::GetAddress(0x8BD90);" D4 _0 E7 Z9 x/ K d7 _
Memory::SetCursor(offset);
: ?8 g& a7 [; S) H- g Memory::ChangeByte(0xA1, 0xE9);, u- {/ G3 P) b7 l- r
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
" z; N [/ k) i2 v1 ]. I
) d2 ]7 r) F, ~: [" l2 ~1 G* R offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);! P f% ?6 `2 h( X
Memory::SetCursor(offset);. X" q {7 F3 z+ t7 Q, ^; v j
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
; r' w+ S' g: ^! h$ N
' ?% w3 h8 o" O. N! L) ?; \8 q0 h& v* i' g+ N
//以下是细节
$ Z' E4 U; V7 t- V+ Y9 b x" g#define getXGoldCoinFixBtn() RX(0x2d0)
/ ~8 f' {' F3 G1 f' X# d: N$ y#define getLGoldCoinFixBtn() 325 u; ?+ M4 [. P, z0 L
#define getYGoldCoinFixBtn() RY(-0x59)
6 w2 x6 q: F4 z, p#define getHGoldCoinFixBtn() 32
) E# X, W' f) A/ W$ j% l! `: R5 Z$ w#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())4 Y" c" C7 Y2 X8 ~
! V4 U8 T4 L$ ?- C: w* q#define getXInvCloseFixBtn() RX(0x3db)
5 `, X3 h" z0 |: C' b. x! I+ g#define getLInvCloseFixBtn() 32
0 @+ _( b' Y7 ]' g, Z- l. I+ f#define getYInvCloseFixBtn() RY(-0x63)5 |$ D( X- n6 }$ p x- Y3 m
#define getHInvCloseFixBtn() 32- g# x7 |' X& [; @+ D
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
8 |1 W7 U/ B7 F5 `. J/ l
) _5 g& W6 o% j V! z+ i+ d" u9 fBOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)' A( N6 v; i& l, U3 Q# t9 @
{6 {# V6 {3 [& \
DWORD mx = *D2Client::ptMouseX;
) D5 y5 @5 F' r( y3 |3 ] DWORD my = *D2Client::ptMouseY;5 {! ?+ }: a8 | ?5 w5 j
if(isOnGoldCoinFixBtn(mx, my))
, \8 u: \: Q o4 y1 }7 ?0 @ return TRUE;# U7 G: R& A( |& J# m: Z$ ]
return FALSE;0 \" r$ m* ]. g2 I
}
3 t& S/ K) u7 b__declspec(naked) void caller_goldcoin()4 `/ w3 d: Y3 O% e4 N
{7 m2 m. o* r5 F5 U* [) z/ i
__asm
& q) c- H% x% ^5 h7 w. z {1 z$ c8 U' M: I
push ebx# e( Z3 O& |0 f3 }( @8 U3 W
mov ecx, esi8 f+ ^' `1 O) \
mov edx, edi
& ?9 ~2 d5 F) I6 D7 K9 a call m_NewStatShow_goldcoin$ j, |% F! G6 _' I+ d
pop ebx
1 j; A/ t2 A4 ~. u% b% m8 r pop esi/ a I, e2 |6 X9 @
retn
* X* n3 M" F* m) H4 R1 i1 y }
4 ^: K" ^0 i% F4 F6 q0 }}
9 d, e( N5 ?# o3 f' q' svoid __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
- c. J. y. U/ S+ J L{: u8 U0 e& o s% ?; z/ x/ X! N' l' ~
if (*nXpos > D2Client::ptScreenSize->x / 2)
4 Q& D. F8 t# ~6 z7 C0 m6 F0 f {( o( s! K" O* `
*nXpos = getXGoldCoinFixBtn();9 i4 O3 H v& M5 q6 Q, f+ _
*nYpos = getYGoldCoinFixBtn();
; X7 S! e+ N& g4 s4 b }
, \6 A! ]& L) \) B0 ?$ I1 z}- c4 X2 _0 Y* @% X
__declspec(naked) void caller_goldcoinimg()/ ?2 i6 P* G( O) B
{
. i1 Y9 A. t L" c __asm2 ] c- Y" g. ?, P
{
7 F: G5 C+ a; R; `) x# y; K/ g" [1 O4 R PUSHAD
7 d; E: p \ |3 ^ c# E3 T lea eax, dword ptr ss : [esp + 0x38]
( D8 L; o; X& A& {8 l push eax$ z* a8 N2 W+ d
push dword ptr ss : [esp + 0x38]
& u6 e; n# q1 q9 ]7 p9 t; u6 D push dword ptr ss : [esp + 0x38]" v. N) D9 Y& s/ H' c, g3 A2 U7 v
lea eax, dword ptr ss : [esp + 0x38]
% H6 Y% ~! b. x: K$ | push eax( h' M/ ?, I& C; o8 r7 \1 g% `( U
lea eax, dword ptr ss : [esp + 0x38]* _" [1 q7 e5 U& C/ n, P
push eax; Z4 `) _' n% N; ?& X+ t. Q$ y
push dword ptr ss : [esp + 0x38]
8 {: Q9 n+ a$ t3 y call m_NewStatShow_goldcoinimg+ s: J' [7 G. k" K4 P
POPAD& ^# r4 ?( i2 o: R6 }
JMP D2Gfx::D2DrawImage6 ]5 A3 h" w0 U( e
}* w- S; V8 T! o! z
}
! }' z! U" s: x0 f& O, q; ]1 r" ADWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
( C' U3 e) f' o' @4 I' `{
1 R/ u: s! k: ?+ \3 c; x9 u$ ?' ? if (x > D2Client::ptScreenSize->x / 2)
+ Y7 T0 f* n7 j, r& X; l$ H {) |) o: L/ t8 |- a$ X
*y = getYGoldCoinFixBtn();# L4 P6 h- g0 z& l W. B# _; N
return getXGoldCoinFixBtn() + 32;
* Z% ?, A5 s; H E+ T }4 C3 G+ w! y) `( l
return x;, \/ ^4 }0 j/ w: [
}
' s) G, e* [9 d0 X$ [% A__declspec(naked) void caller_goldcointext()
; s* y! C" [0 l: m{8 W: a# J7 h8 I) E8 @, G5 r& \
__asm6 F1 v1 g: a, \+ J$ s
{
2 |7 H* u8 A {, B PUSH ECX
, r) m+ r n2 c# \ PUSH EDI ]# Y( x* F; x1 R. o+ i
PUSH ESI- O) s+ `" n% I6 c+ W5 H
PUSH EAX; d2 l( n: `/ r( _7 f( r( B
MOV ECX, EDX5 |; E+ e9 o$ K! F4 b
LEA EDX,[ESP+0X4+0X10]* y% g& G) J) ~- t7 r
CALL m_NewStatShow_goldcointext
, \' t& ?- y* Z& M) H MOV EDX,EAX
( W+ N( O4 o9 ]1 B' ^1 N POP EAX
d! k+ H; j+ j T. C9 y) K9 r% R9 ? POP ESI
0 s9 g, t5 L% H5 q0 d( { POP EDI
7 q" r. u4 \1 ~/ N+ ` POP ECX, m- m' o' W6 ` |2 l
jmp D2Win::D2PrintString;
B' |# k" ?: F }5 {0 R+ D U3 G( x% h, Z
}. g' L1 g; a3 j8 H/ x- c, o+ [
- _5 U4 R% N$ a1 ]
BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)! P/ n8 [0 G0 J, K+ r6 H
{
: k% p( f' P" ^' I) T, @ DWORD mx = *D2Client::ptMouseX;7 @3 y4 T/ Z5 O, [
DWORD my = *D2Client::ptMouseY;
7 C! J8 M$ S! u! U: \1 \& y if (isOnInvCloseFixBtn(mx, my))
. R; b) B+ P1 Z4 b/ ^* Z' _ return TRUE;
" N$ b. H; P( H/ a$ w5 d3 A" S7 U return FALSE;
& _8 W- j; l8 |# k5 E9 r}6 \# y/ g5 u G; t/ Q: R
__declspec(naked) void caller_close()1 o1 D% u: |" P" P; Y- u B: L
{
& j8 B; G( {& A; j5 |/ N __asm
( y, R2 n5 u' x/ ~ { u" \ l& Y) O% A
PUSH ESI, \. c2 U8 L8 N! ]
push ebx
* _; a, L) m5 k2 h call m_NewStatShow_close: z1 W: h2 z+ s& A
pop ebx R. J* K' [& w* {# u
pop esi: s+ g% w- o5 D9 b8 R# |0 Y% r
retn" E" S/ D/ n& ~# B" m! m- R
}6 I3 P2 C& O3 ?# y& g/ E
}
( s% E2 o5 K6 k/ G# C* J" ovoid __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])" Y# x9 x/ \1 r6 l8 ~
{
7 |6 m$ s: e! A0 R *nXpos = getXInvCloseFixBtn();& v) j; h. h" j3 C3 q
*nYpos = getYInvCloseFixBtn();; V( ]6 |, |3 e5 |
}
% g5 y6 ]( d$ @( Z0 q) k__declspec(naked) void caller_closeimg()7 Y6 |% c# d% C7 `& ~- r- S
{
' y4 Y( g" E; {- Z# s3 V __asm
8 q3 c5 K5 E# A7 d7 ? {
" E( v7 G, C5 ^" n PUSHAD
6 m5 m( w2 F$ `$ x* L# }3 b k lea eax, dword ptr ss : [esp + 0x38]* I3 x7 H( {' ?6 P: [/ _) n5 o
push eax0 Q. r9 L7 `8 R% K& T0 D
push dword ptr ss : [esp + 0x38]
* s4 E9 q) F$ P# t6 r push dword ptr ss : [esp + 0x38]
8 d" g) F8 Z" y5 A2 U lea eax, dword ptr ss : [esp + 0x38]
- O7 I2 I$ d$ C5 M9 Q push eax
* W `4 E- x& M w% t6 E/ q4 k+ b1 Z- V lea eax, dword ptr ss : [esp + 0x38]6 H0 \8 Q& k- ]8 J
push eax2 q8 }% l8 L2 o2 S! s
push dword ptr ss : [esp + 0x38]. g$ o' }/ f1 J; B& m+ h! b
call m_NewStatShow_closeimg
) L6 y( L( W3 N4 C POPAD- `) O* M3 b- l+ }( a% @7 a6 l
JMP D2Gfx::D2DrawImage$ k6 i: d( D4 g+ b# n. R
}0 v7 V9 h: M% i2 V) Y
}; I: j4 Y9 B/ p5 O0 M: f& L* p: y
6 z( f; K1 d2 ~' R1 W! M' t h
) n- |- u' ]1 L2 I. h% s! Q
|
|