|
|
转载
3 A5 d0 Z: S% a. t8 X0 C+ J" FBY SJ" |& ` j5 {! m; g" D, w# Z
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
* w' W4 i* g3 W: z; f, m: q
$ k( A3 [; H& {7 {6 r- C. z( yD2Gfx::D2DrawImage-10041
# q! }8 d6 Y7 K1、修复技能的背景(不需要可以不要)
2 Z, r0 m: L6 i) E8 uoffset = D2Client::GetAddress(0x77AA8);( ~- a# [& { d3 ^* [
Memory::SetCursor(offset);4 u8 Q* _; t, A% w4 b0 }! v
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);' t) N$ ]8 d" {) `5 ~
8 @9 H9 z4 A$ \$ {/ |$ u
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])4 K3 R6 i2 y! X0 p1 N& b# t
{5 ` B5 d. U6 o2 o( v$ v+ Y' x: E
//Init data for print image
! @7 M2 U* _/ y" ] sDrawImageInfo data;
6 r! [' j1 h. Q0 B% w. E ZeroMemory(&data, sizeof(data));5 P5 k' J7 k0 A8 m4 H7 T
0 Y) J# m/ F( s
//print background
+ L _* ~: p$ w7 ]) r8 R2 b7 A setImage(&data, spellBackgroundImages);- N$ u) d" A! n$ E
setFrame(&data, 0);
7 m' z7 L4 I/ S+ z2 m8 R int fixx = 511;" v" A8 _7 w* w* D# E3 Y
int fixy = 9;
" r1 d) @6 d5 [( a' T; n: v7 U D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);" u( t# |. I- m( W% E) W* `; I7 Q
setFrame(&data, 1);
( A6 d6 m9 m" p( I D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//2566 b! \& f4 U- P N: q9 T
setFrame(&data, 2);( ?# i) R$ V5 B1 Q
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
$ k2 J( ]$ D! V5 C n: o setFrame(&data, 3);
/ h) d' s+ o# y D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);) @( N& ?- Q& |* H
}
. J6 R" w2 h! A__declspec(naked) void caller_SpellBackGroundFix()
; ~! k5 M6 [0 A5 h i5 i& W{( |7 F7 U! G6 T" f, n, T
__asm6 w& L7 Y3 t M; |8 j; V4 W7 Y
{
% S9 s9 T6 W$ j7 i0 A+ c PUSHAD
4 T, O% J( P5 G H0 ^, d, ~ lea eax, dword ptr ss : [esp + 0x38]
: `9 N& }0 W+ z3 } push eax
+ x% o0 ^" G# x push dword ptr ss : [esp + 0x38]2 c- U0 v9 D+ S# D0 R, v# @
push dword ptr ss : [esp + 0x38]$ r. w% A4 R* I3 o# }4 ]: M
lea eax, dword ptr ss : [esp + 0x38]+ v+ T$ |) ~, Q6 G8 Q
push eax
3 P+ ~" H) }& i5 `* v lea eax, dword ptr ss : [esp + 0x38] I. r2 F" ?* k3 q% G
push eax
1 {! o3 k4 A1 i* L push dword ptr ss : [esp + 0x38]0 `4 i, `3 h3 ~
call m_NewStatShow_SpellBackGroundFix4 x- x O0 s! W. d! z u4 R; f# `
POPAD5 T" a* H; I5 w: ]
JMP D2Gfx::D2DrawImage
2 Y5 ~$ ~+ x; j6 C2 S/ g }1 F, D+ r- u& L; x) e
}
% H# U: h# D5 m
* ]. k+ z# l' e+ _8 e2、我们如法炮制小站的背景
; e7 I6 ?+ v- G1 X4 L& X! _% u. v+ y% W$ F/ x# Q6 v# P
offset = D2Client::GetAddress(0xAB010);
* m' h( W6 Z [2 z2 l/ Z, RMemory::SetCursor(offset);
A, Z' x' H( S* N/ F! c0 K# C. DMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);0 p9 W$ k) |2 a% b4 l9 }3 h0 E
; T' N6 `* [/ t. Q+ C# I3 B
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
5 {1 O& G+ [; _! M6 s7 J, {" E! ?6 r{9 I( b3 o* K- D5 ]' v2 u. O" ?1 g. t
//Init data for print image% O4 O1 q- V" ~1 h; G
sDrawImageInfo data;
5 y2 p% U! @+ l0 l" G, G9 o. P ZeroMemory(&data, sizeof(data));
3 [" R( r0 O. ?# g
, q3 J0 I: Q3 o9 v+ |3 n$ F9 c! { //print background
" p5 n5 s+ k; J8 r7 z setImage(&data, waypointBackgroundImages);
6 \) H) }% P& {# ]& D* t setFrame(&data, 0);2 d& }- H( q+ w. q5 J9 \
int fixx = 0;6 Y1 }" ^. L* ~3 i
int fixy = 9;
5 V( v& K6 }+ [1 c D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);
9 Q- O% `; z$ } ?4 d1 J# y- { setFrame(&data, 1);
2 d: z7 R; f, W$ V; X9 H& A D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//2568 {; s! R' v. c9 n8 Q
setFrame(&data, 2);* n3 r1 u/ \# X* D7 e
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
7 l+ ^ \3 W0 R setFrame(&data, 3);9 k1 u6 `7 N" ^- Z4 q3 B
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
: M4 ^$ s. D9 E/ b% }0 {" O, b
4 I4 C/ P& x4 d- e}
9 M. m6 @5 F t3 E__declspec(naked) void caller_WayPointBackGroundFix()& m, [& g3 B; w- c, ]
{. W4 k# ?1 f: ~
__asm9 P5 D! o# D' v4 V3 y. z1 t/ j& C
{& X; B* ?7 ~ p) }
PUSHAD
9 a% E- W, B: C) ~$ Z2 f H lea eax, dword ptr ss : [esp + 0x38]
1 t% p+ B( Y1 D# L t- U" V push eax
2 u1 ~. q( D5 w# e7 P' ^; b push dword ptr ss : [esp + 0x38]
+ W. E; X8 C5 a6 L' w3 Q# G push dword ptr ss : [esp + 0x38]8 {0 _4 n2 r; ~1 n7 N! @8 ?' J+ b
lea eax, dword ptr ss : [esp + 0x38]
" u1 X. L L) M! G% X push eax
. k: {* D: C/ u$ C" A( C: b lea eax, dword ptr ss : [esp + 0x38], Q* A% S3 v# a, o7 I" w
push eax
* e( a8 @ I5 i1 H. q push dword ptr ss : [esp + 0x38]# x$ Y1 i7 G7 Q+ o% | K6 e
call m_NewStatShow_WayPointBackGroundFix
1 {; c% W9 D2 `3 h! e% @; h POPAD# |- Q6 U r/ X3 ?) R0 h
JMP D2Gfx::D2DrawImage
6 @8 t- M8 Y4 s9 r4 p }
$ v* l7 u' j6 O1 n; v6 r3 x% g}$ E+ [( @# Z! |; ?1 v
1 N1 _8 a) @" u; ^2 o) V- _
3、以下可以搞16*16超级箱子-腾出我们需要的边缘
, O' D2 ^. P' x+ C; |2 x腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)( @7 H; w+ T4 N+ K* s z
{
9 y8 ^, c0 f3 T1 ]$ Y) x! X! O; `. h class D2MultiRes : public Library<D2MultiRes>
& G4 X( k# B y5 a% ~1 U+ |2 X {0 c2 B. f8 [1 B% Y: T6 e2 r
public: T/ K/ y; G. c# c6 F3 t7 u
static void Init()
0 z( m+ }" e o/ @ {9 k7 a6 e8 ~( G
Name = "D2MultiRes.dll";, w a' c1 n: O1 N- z: P, L
Offset = LoadDiabloLibrary();
& }. W- Y, U2 R; ` }
( L8 r& T+ B. L- s) ]$ [0 I$ a };/ @4 S( V. z7 c F% o2 s9 h7 X( z
D2MultiRes::Init();9 \8 }# f! ?3 k/ @% ]% y; ~# n% l
D2MultiRes::HookLibrary();
0 M; H' G/ ^8 H( j0 K" x& ^2 |( _# C5 V6 T
- L ~2 R' j& j7 P MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);. ?& \# B8 E( f% n9 e
Memory::SetCursor(MiscFunctionsOffset);: T; @4 M3 _7 Y( A
Memory::ChangeDword(0x1b0, 0x200);
" ^$ x5 O* ~% ]9 u+ h
& |7 ~3 K5 g V" O$ B q! g9 n( f" ^% k' }
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);/ q) L3 J/ [- T1 m3 t% @& Z
Memory::SetCursor(MiscFunctionsOffset);+ T/ \3 L' A( v6 T1 T! J" a
Memory::ChangeDword(0x140, 0x200);
8 `: P$ q- q. L8 g8 o6 g
* p, n8 t' `" c: G9 C S
: `( f, J( n4 b& M1 d# L MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);
5 ^ F0 M$ J& A O Memory::SetCursor(MiscFunctionsOffset);
8 A& o" p8 L- q/ B( H Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块) `- f* C" V3 F: i. K' r
" H4 C6 r: a0 h MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);5 B! i" c6 w: f3 ^! T! _
Memory::SetCursor(MiscFunctionsOffset);; r0 s0 ?. `- i" F0 {1 \
Memory::ChangeDword(0x200,0x299);//下边缘 299最大& n6 Q, w5 h" r( p, i, G# r
5 O9 b% K C) B3 a3 E. s" |( N! V MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
1 M( f* W0 I. \. ~8 K( g# d Memory::SetCursor(MiscFunctionsOffset);
. R0 B: T! D$ ~* T Memory::ChangeDword(-0x280, -0x400);//这个不要动7 c* l6 H" e, E. ]. x2 H8 ]
}1 F6 o1 b! w" a$ N/ O1 W
/ w5 Y( r- }4 _* |+ F2 l' H
4、快完成了,是不是发现金币啥的位置不对??
7 s: [& ~4 I1 @* h" l# i& t! r2 \* p( q1 C
//这里修正我们的装备栏
9 k; A! ~' {- _2 Z; [ offset = D2Client::GetAddress(0x99B6C);. ] B) A; F7 |( I) N7 ^/ o
Memory::SetCursor(offset);
3 w" ~- t0 y3 b' N" Q# u Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);4 O- j; M: ]2 t# \" `
" h- h5 k Y3 Y' d# w8 b) | offset = D2Client::GetAddress(0x99BA7);
3 P7 F* Y% }) f) V" x% q) d Memory::SetCursor(offset);
- m4 O3 u0 C* [ Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);2 q: z9 d3 K" o3 ~% V z& ]- a
; D* N" e4 M, B( I/ C offset = D2Client::GetAddress(0x99BE2);( r9 K/ Q7 P6 T) w8 K9 L
Memory::SetCursor(offset); p1 @6 N' I$ }
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
9 } R$ b) d2 p3 O+ ~1 `& e. l% x$ R! s' X- {+ G8 ?
offset = D2Client::GetAddress(0x99C1C);
3 w, L% J2 p# k2 M9 q9 k3 Q0 d Memory::SetCursor(offset);& n2 m: K5 B& @4 l4 e0 `7 u6 k( P
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);' i. A( l! M% Z
9 g, J9 G( \" E [ {% }' J6 \; L2 @ //取消两个popup,偷偷懒不过分
7 N" p3 o, M* ]3 {& v offset = D2Client::GetAddress(0x9386d);
" ]7 k1 B L9 R6 ]0 x3 z- \4 f Memory::SetCursor(offset);9 \! q% A! L$ c6 G3 H$ }$ K
Memory::ChangeByte(0x8b, 0x33);# _8 ?6 T( Z# \8 Y& H" S' a. B
Memory::ChangeByte(0xc8, 0xC9);* u* F& }% p& m/ V
offset = D2Client::GetAddress(0x9390b);& Q. x9 i- R4 e) W9 |% `1 c& ?
Memory::SetCursor(offset);2 D; X$ A6 d( D7 A
Memory::ChangeByte(0x8b, 0x33);6 }" F2 [6 P" v1 U8 j
Memory::ChangeByte(0xc8, 0xC9);4 h( y8 T5 I3 L; j. { t/ s
2 E. J a H; o# s* U. _ //修正提取金币8 e2 z( H, |) i. T- S- b
offset = D2Client::GetAddress(0x8D3E5);
4 C6 \0 `( S& W Memory::SetCursor(offset);5 ?! L. j! S' b( T& f8 I) f' v, H
Memory::ChangeByte(0xA1, 0xE9);
3 P; @# ]+ B4 q Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);. N# O8 ~# g/ }3 A9 f) w! {
) u# U6 O( r1 }4 K offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
2 D/ [- a1 K. {0 A0 _( T6 ~ Memory::SetCursor(offset);
' c% m) W4 E+ w# R% v+ c Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
Z7 i# \& I- O/ A* p/ T
0 P, g7 F$ c% h* X offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);2 `6 T9 f8 r9 ]; a. C- y
Memory::SetCursor(offset);
9 ^/ f# `" e7 T Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
% W: Q6 v* z1 k' U, d9 H/ p- U
3 l, q& J4 |" y //修正关闭按钮
# L* u2 L8 ^1 X( q8 V7 Z9 D9 e: A0 w# @ offset = D2Client::GetAddress(0x8BD90);# S7 m, [7 S. m6 E/ }$ t" P
Memory::SetCursor(offset);
) J- S5 \7 G8 f3 p# H0 | Memory::ChangeByte(0xA1, 0xE9);6 Z# i3 C, Q: M" r
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
# C! e- R- c$ [1 F2 B& | i( I7 V3 h' K m# P, L; e8 A
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000); B) |% X7 [; k4 K8 j/ y% z' k
Memory::SetCursor(offset);
) S4 N5 t, _: h' x. | Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);6 |, m; G7 l' a" _3 J4 R6 J$ ~
6 l- h1 n7 _% q/ s( a5 t& D; m9 T) q. S+ r
//以下是细节
% Q$ V2 {7 N5 k( {* q m$ g#define getXGoldCoinFixBtn() RX(0x2d0)
( J* a6 c2 F" t- m#define getLGoldCoinFixBtn() 32( H' N6 l; u. d- `
#define getYGoldCoinFixBtn() RY(-0x59)+ ]+ X. H; U e7 H+ d2 h ^
#define getHGoldCoinFixBtn() 329 H/ D7 P6 s/ ^
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())! d( A; R; K& z4 H
$ t/ w b7 W$ n
#define getXInvCloseFixBtn() RX(0x3db) z7 g* |" H* E6 ?
#define getLInvCloseFixBtn() 32
$ M' X! m. C4 b$ q7 M#define getYInvCloseFixBtn() RY(-0x63)5 T! \0 w! y% e k5 B
#define getHInvCloseFixBtn() 327 l: s W4 i4 H/ o
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
4 [+ K1 [; m! S7 E0 S
, D9 \0 v' P7 }- O1 |' a oBOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y), I2 ^" t) Y* H) W; ~$ t9 ^
{
- C. l! ]1 k( z& g0 v) F/ a% i4 g' i DWORD mx = *D2Client::ptMouseX;' b; x# Y$ V6 U2 X5 o# F+ N7 `9 T5 l
DWORD my = *D2Client::ptMouseY;
8 K, r0 s: q8 W8 N. r if(isOnGoldCoinFixBtn(mx, my))
' M- E) ?2 G& \: W1 q return TRUE;
2 Z. s5 V- Z; F M7 Z, |9 _) { return FALSE;! j5 v8 e$ x' {( R# ~
}# w* o) g- K8 h2 H6 g
__declspec(naked) void caller_goldcoin(), F: p* Z, y4 _( j
{
7 p# r9 x( C/ f9 u1 w$ B# V __asm
/ w# H1 ^1 b* G6 g {
3 V9 l8 P1 e8 _: d! b5 b push ebx% t. Y: m8 h7 M/ P- x1 _% K
mov ecx, esi" E' f1 l1 s, H8 D6 \2 z( C
mov edx, edi# |# v" i: a! o
call m_NewStatShow_goldcoin
+ A- _% P( G! r: V4 V) O pop ebx' {5 w4 M3 R. m( {- W0 K
pop esi
6 x! B7 s& e7 y8 m retn
- o3 i8 w! ^" D/ A( P1 | }
+ H+ ^+ G b7 i$ F}
- I/ u: y8 k9 O4 ?/ ]: |$ G l# evoid __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256]), r6 O7 V( s7 ^6 B- o2 [7 S* d. y( j
{& Q# `+ Q( t0 t4 A2 |% W$ U z& @9 s
if (*nXpos > D2Client::ptScreenSize->x / 2)! K. F! K7 I* m! p" a3 ^
{) N( x L2 p8 ^! o7 t( `
*nXpos = getXGoldCoinFixBtn();
. L; X* X. t$ O5 e n; v3 a/ n& P *nYpos = getYGoldCoinFixBtn();' y' ]/ v' ]/ l) }$ U
}
3 I9 p5 u5 b1 G; h2 J* D}
. L) T `" m; Z4 H; ~__declspec(naked) void caller_goldcoinimg()
' B# g! H1 l1 u4 H% o{
) Z5 n9 ]- v- r! C' ?5 J* w3 g$ B __asm4 x6 |7 I8 p6 l/ P
{
% a# r# i& k x PUSHAD
/ `* x* O$ x; A; C% m. z9 h lea eax, dword ptr ss : [esp + 0x38]
9 F' d2 L; H+ y7 Y push eax3 g; e, `3 L* }9 ^) T
push dword ptr ss : [esp + 0x38]2 y3 N. B4 g; B0 |2 B
push dword ptr ss : [esp + 0x38]
8 F: }/ v ?: Z5 f! ? lea eax, dword ptr ss : [esp + 0x38] U3 {+ C2 j+ B/ ~5 `, R- s
push eax( K0 E I# }& u
lea eax, dword ptr ss : [esp + 0x38]$ I' _! x. B% ?5 Z3 g# j
push eax
' @' L$ K" ]2 T- n. i; d push dword ptr ss : [esp + 0x38]' p9 k5 ?" K q0 r! i. P
call m_NewStatShow_goldcoinimg
' G9 k' o6 o$ k; B3 N" Z& v+ Y POPAD
3 Z' W1 N0 L9 X0 I9 S JMP D2Gfx::D2DrawImage7 }* c6 o& G r; Y5 Z5 Y: x, y) w
}) X7 m7 ]# K3 h, G$ P2 x% Y# l
}/ I6 m A* x: L4 x
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标& z5 n$ } l' Z% u3 Q9 E/ N- E A
{! m, G! s4 @9 \! D9 l9 G1 |& Z! ?
if (x > D2Client::ptScreenSize->x / 2)7 X) W$ T( q$ v2 E
{) w0 h6 W' {1 J2 Z
*y = getYGoldCoinFixBtn();: d- c, q8 W9 {/ I
return getXGoldCoinFixBtn() + 32;
( ~; m2 S: \( @ }* m& w" u% V( l3 i* M& V" Q
return x; Q: ]4 A! O! T; D+ O
}
% B; x R: V+ k* M__declspec(naked) void caller_goldcointext()' ?' U1 M% a6 p* C( H n6 r! T/ k! x
{+ ]6 ]+ o* Y/ |
__asm3 {- T; W' N a5 I8 L
{
5 P: E) N+ w$ S; |/ | PUSH ECX
+ |+ L4 i' ~0 a7 z. F* m: L# X8 h PUSH EDI; W" v# s0 Q4 N C
PUSH ESI$ H0 Z1 R" [( G
PUSH EAX, ?$ E2 O' j0 d& z8 {% r
MOV ECX, EDX! {! d/ ~2 d, r& C: W! ?* @
LEA EDX,[ESP+0X4+0X10]7 w( d- ~0 c$ e; E: G
CALL m_NewStatShow_goldcointext
! p* ~9 w, V9 {7 x3 f: ? MOV EDX,EAX
( M; g7 \1 V6 T5 f% A POP EAX% u2 t- m3 \" j& w
POP ESI
- u; v' T' @" p* [/ Z POP EDI
! e5 D8 U- H1 S" v F# v POP ECX) u1 Q1 N* E2 [, B+ `# H9 f
jmp D2Win::D2PrintString;) O* S3 e7 q, x! l4 }; ]# f* R
}- |* ]$ @' y4 ~( P8 m5 s; C
}
$ W" B3 V& Y- {' e
+ Z- |8 d$ ]) i/ N, f) BBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)0 }6 A) C* w; Y. ?+ |& l
{. H6 d* v5 X5 \: ^$ o6 {; v. c
DWORD mx = *D2Client::ptMouseX;9 I9 J! x: @, x& j- ~" b: P2 D
DWORD my = *D2Client::ptMouseY;9 i9 V* r; ?& S! ~2 e" M+ L, H
if (isOnInvCloseFixBtn(mx, my))
5 i0 |# L- V2 t# w+ q8 g" C5 w return TRUE;$ @) z+ D! z1 B" ~( P, n3 J1 i
return FALSE;
, H- t+ E: g5 u) [}3 ~. @# P8 [* I6 t9 i3 z
__declspec(naked) void caller_close(), [- {! J; m: f
{. ?5 l r6 f. [: Y& H: b+ |
__asm* x# }0 A. b/ C% G/ z' D- Z7 w
{+ f2 A: F/ e p& E. D
PUSH ESI
) Q) y+ G. [8 E6 P push ebx5 P' N7 ?5 _; e5 Z
call m_NewStatShow_close
7 T q7 g1 Z& K9 r% d3 v pop ebx: f$ J6 C& W M1 ?0 D3 r# H
pop esi
5 I0 Z; v. Y9 V) m retn
5 H% q! ?# I5 C8 o4 v }
, L) }$ M) K1 q! n}
( ^7 j3 i& H3 I/ T, J# svoid __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
$ ?/ A, B$ K- V! O1 w* L4 f{
( Y: o* m; `) D6 u7 W *nXpos = getXInvCloseFixBtn();2 U7 y# j4 f* }. c, O0 h6 d0 u
*nYpos = getYInvCloseFixBtn();
6 i% U) H$ K# o}
) T* _& G4 \# Y& Z% p) y; V4 o__declspec(naked) void caller_closeimg()
8 Z! J/ E) j) {2 ?. w{
! V& I# ~. {6 \* B$ G1 u' l& ? __asm$ V2 t5 D: M: }1 t1 w
{
6 ?' s2 f! S# o& N% ?3 N PUSHAD
+ z. I. e. `# J2 \4 P lea eax, dword ptr ss : [esp + 0x38]- i% d! d( t8 g+ |5 f1 r& `* O
push eax1 |: \! E7 h( K" D
push dword ptr ss : [esp + 0x38]
. s' k% u$ z# u2 n7 e, n5 E push dword ptr ss : [esp + 0x38]
8 q% z8 G( J: Q ~8 g lea eax, dword ptr ss : [esp + 0x38]
: B# s' j( J/ @ L! M push eax/ h' t" I6 F8 A: |
lea eax, dword ptr ss : [esp + 0x38]! Y+ Q y Z" Q* b+ C1 ~+ m+ Q5 m
push eax
: k/ c% b& [0 S( _3 a F0 | push dword ptr ss : [esp + 0x38]
+ V7 J7 X4 q. X- A+ \6 l' U8 i! x$ K call m_NewStatShow_closeimg: a! P* C2 a6 G" ~3 V# ]
POPAD
: g) D; R4 I* i E JMP D2Gfx::D2DrawImage. H8 {$ l! X: z
}" d/ L+ d4 `5 M& j4 g
}& x3 k# U! S- y3 {" f3 d h
' `8 R4 M+ a7 o* s1 R0 s1 M
T& Q- b! @9 j* y7 k |
|