|
转载- c- m( c, |+ k" @7 U9 K. {
BY SJ% q* P. Y; q! P( s; S
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)* W4 V: w: I4 ]. b; E
) z# {- R6 C0 ?( L: Y5 S
D2Gfx::D2DrawImage-10041
9 O% J4 R h/ w0 t1、修复技能的背景(不需要可以不要)& \. k# ~. m8 r: b
offset = D2Client::GetAddress(0x77AA8);. [& O2 L9 I6 S Y2 u, _9 W7 e& w
Memory::SetCursor(offset);
, y5 q" I% m1 B; w4 yMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);+ V' N& q$ O. z8 G2 Y
?) [" e, j& @! U2 r' A
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
2 X Y G6 f6 | B( f2 E: t{
7 Y( z _& i E% M //Init data for print image
( m4 q8 ?7 J( H& e sDrawImageInfo data;
, y, o: r: p# o# _' O* s ZeroMemory(&data, sizeof(data));" \: \( @/ j+ I: ~
3 p) Q* W R, ] ~+ i7 F+ z! g
//print background
5 g5 e* x/ T y3 N0 Q2 T! S. v. y+ | setImage(&data, spellBackgroundImages);
( y9 E/ k2 y; k% ~5 _' z setFrame(&data, 0);; B; O& }% L5 k
int fixx = 511;8 P0 m( q* F2 k, n
int fixy = 9;
4 S( L1 D, d! t, Q8 k D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);
6 W. v9 A3 R# d setFrame(&data, 1);
" i8 w+ ~1 K3 M3 }# Y) V5 Y; t2 E D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
; j4 s) w( b7 V# q* a2 @2 J setFrame(&data, 2);
# i9 q8 E) O/ C7 O% N) f D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432: h. S% E8 {) N* ?
setFrame(&data, 3);
& g: z' G6 ]2 ] D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
; c4 b0 _" ?* l l}
8 p+ L7 z S' M7 X__declspec(naked) void caller_SpellBackGroundFix()
3 m( J( j+ a6 k5 V{) [; i4 `& S! b* @& H2 T0 {
__asm
" P9 E# c [- f# |1 N5 Z, l# ^1 r1 R {
% h/ _/ s. a+ D7 v8 o7 Y/ A PUSHAD0 r4 ]+ J2 F" `! d0 `% x' u, A
lea eax, dword ptr ss : [esp + 0x38]" k9 ] J% m0 j: g8 g: a" {2 ~
push eax5 ~8 ^7 M+ d1 T7 R' A! o
push dword ptr ss : [esp + 0x38]* k: N$ u0 ]' `. T7 t
push dword ptr ss : [esp + 0x38]) X0 c1 I; f9 J: Z- o. D6 h
lea eax, dword ptr ss : [esp + 0x38]
\) W- t) h$ j2 A$ j* a8 j push eax. D6 |( u2 t2 I+ S
lea eax, dword ptr ss : [esp + 0x38]
1 \/ C/ c1 J7 d) m$ }. m1 N: B push eax
+ g2 y0 `! \% N) M push dword ptr ss : [esp + 0x38]" `2 @' ?9 L& n% Y! q: l/ ~. b
call m_NewStatShow_SpellBackGroundFix4 `/ R6 B1 q. I+ a2 `
POPAD
5 n6 |& |* g" X @* L1 J$ j JMP D2Gfx::D2DrawImage, _% W& \4 t, J9 P. g1 H' j, v; e
}5 U+ k( K$ `! s3 U% Y/ L: B3 j
}
; y9 [& @" s$ ~% r/ m9 @0 }5 x1 O2 w; N B4 E: V
2、我们如法炮制小站的背景
7 U1 F$ z9 P) p/ B! [8 Z: m& Y4 A' X: j$ U% W+ I
offset = D2Client::GetAddress(0xAB010);
9 y: B% r, \- N6 N( `Memory::SetCursor(offset);7 q; f r3 k. A- s. q9 O- ?( s
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
& D; j1 r' X0 N% a" a1 A# G" G x8 e) _4 N2 `
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
1 f+ p4 H3 D4 f+ O1 D{
0 s) F( W" G9 s //Init data for print image
) S( ~/ [; W5 M7 n8 X& A3 h sDrawImageInfo data;# q3 d$ i- M7 F5 A% H2 j
ZeroMemory(&data, sizeof(data));3 A3 T) P+ V- I- R, E7 }, K
' ]! i0 f( m1 @3 X7 i5 R6 z- ^ //print background5 B; k+ R& W. H* Z
setImage(&data, waypointBackgroundImages);
8 a/ T1 [( W+ G' ^6 r7 I0 C setFrame(&data, 0);2 G7 X# {% B5 h7 j- @! [, w
int fixx = 0;
9 {3 d! j7 { o" ` int fixy = 9;7 b1 M" `# x* n6 o5 R) c) u4 _
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);6 V1 c$ ~' P5 X( l; u) D
setFrame(&data, 1);9 Z$ Z5 A, ^1 J; T' H+ b0 v
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//2562 h' P9 t2 s& ^' q
setFrame(&data, 2);* D* c4 u4 }$ \) n0 `5 [. E- K
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
+ ]& j' L; {9 A. b; Z2 |% i setFrame(&data, 3);
" x' A- q9 x0 C- L0 A; O9 ]5 k% T( A D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
5 d% h) o$ s$ M& q8 N0 k& P4 v* M6 H; h; l
}# v, l. q4 g: q
__declspec(naked) void caller_WayPointBackGroundFix()* f7 z- ]4 Y) n' m
{
5 J/ T( Z$ q+ }. }/ t __asm
, F: k) k3 d7 X {+ K- M# |7 v" ^* h- M& w
PUSHAD
, L/ F3 W/ b& ~, G& w lea eax, dword ptr ss : [esp + 0x38]
9 P* g! U8 _3 A" X$ G/ k. v/ K w push eax- m. |8 h0 R0 a$ h. R+ N
push dword ptr ss : [esp + 0x38]) m( L" \ D! d& Y& b; F) `
push dword ptr ss : [esp + 0x38]1 Q2 @0 |/ O! Q V; B
lea eax, dword ptr ss : [esp + 0x38]
# k, q" J$ z2 i7 A push eax7 |2 y, A4 O6 u, _5 m2 e$ P+ W
lea eax, dword ptr ss : [esp + 0x38], d; y; Q/ ^% G5 ^
push eax
8 D; ~* w9 b a( E& _ push dword ptr ss : [esp + 0x38]
3 g! u% P3 @7 ^ call m_NewStatShow_WayPointBackGroundFix
0 U1 K5 u) ^* V POPAD8 [: |8 k+ V( E/ K. v' C
JMP D2Gfx::D2DrawImage% Y% R, G+ Y& S! G1 ?! F9 l
}
9 l* e: C- r0 V" j2 }4 ^}% l; I! f6 A& i6 G0 t$ H& |: O0 U
$ y1 N* h' V' j+ [1 f: q2 l
3、以下可以搞16*16超级箱子-腾出我们需要的边缘
2 M' z* E, S/ z+ i: J' J f |, S腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)( P# i( D+ \5 u7 ^( c2 r
{" r/ b# [1 P& l0 K* W
class D2MultiRes : public Library<D2MultiRes>, z$ { {1 K$ V& y P, A
{& v A% t- P9 u8 Y) X
public:( J0 M) Z% J6 F4 S0 u
static void Init()4 |/ g. I1 C& a
{& N( v6 U9 K9 r- x3 }/ s6 L1 z
Name = "D2MultiRes.dll"; r2 K1 [% g8 |2 C' w
Offset = LoadDiabloLibrary();1 j$ z( W c' K- k* }$ \
}2 T2 Q: @5 U8 S; n; ^
};
; E3 M: s# e6 h; l8 [3 \ D2MultiRes::Init();
9 r4 m% j! _5 p( L9 D1 B D2MultiRes::HookLibrary();/ t5 J8 M: h9 q& |/ L
, ]! s3 U5 w6 h- x) R6 `- A. v1 w+ d
6 X6 v; N7 D r' q8 ?, O" T* F
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
1 w( i/ y: @+ h, ` Memory::SetCursor(MiscFunctionsOffset);
1 f/ w5 N# g8 K7 A7 I Memory::ChangeDword(0x1b0, 0x200);+ k/ A( r: n' N1 H! D
4 F' c1 i, p5 M. X- a0 w9 h" P* \0 P) N1 Y
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);0 Y/ X) F5 V. M$ x' g4 k% E5 {; a
Memory::SetCursor(MiscFunctionsOffset);
' x; P) Y, j5 X |! E Memory::ChangeDword(0x140, 0x200);
7 i, A. J, D- S! I* z) L9 o( Z5 {6 j( k5 z! {' q- h
+ ^0 a- T( S+ F1 E6 | MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);
* h) q4 l+ z3 J/ Q! ] Memory::SetCursor(MiscFunctionsOffset);
& Y( ^% Y' k X; Y, l0 x' A Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
" L4 Y# B/ Y7 B) e" r
- T2 x, X2 j- [6 A1 d/ p MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);" Z$ Q( F6 L9 G+ ?9 a3 ~
Memory::SetCursor(MiscFunctionsOffset);
2 I9 L8 k1 q) e+ Y) a: B* A Memory::ChangeDword(0x200,0x299);//下边缘 299最大3 I: U( o8 i0 r
8 l( D# H7 `" j* W2 [$ J% f$ Z; d' M
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
/ B# t" i- A/ Z Memory::SetCursor(MiscFunctionsOffset);
/ p& ?1 m3 U' W! b& j. n6 x- K/ [ Memory::ChangeDword(-0x280, -0x400);//这个不要动
! U6 ]) d5 t6 z# y& Z* [, V }
0 B S1 S3 Z p; {! h2 q1 m$ `+ s
; M8 R3 U1 |- H2 r) d1 v- W4、快完成了,是不是发现金币啥的位置不对??
6 e. R; s/ s. G5 [3 I( d9 a
" r. {- M# u8 I( H//这里修正我们的装备栏5 F4 ?1 r8 b8 f2 ^
offset = D2Client::GetAddress(0x99B6C);+ h: j0 p" O7 O
Memory::SetCursor(offset);
; J) v$ P: T" p0 G* H4 C Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);% {* a6 | `) I5 V2 i) v: Z
3 p" @, q+ ]1 [! K5 q offset = D2Client::GetAddress(0x99BA7);
+ J) _6 C/ ?; e/ z6 I$ | Memory::SetCursor(offset);
. }, W- _4 R5 N$ }: P4 K; S! t7 R Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);7 m" V' M; j" ], r
9 s. n2 \8 Q5 g9 F$ r( N
offset = D2Client::GetAddress(0x99BE2);. T2 x: q1 r9 H# M
Memory::SetCursor(offset);9 c( v8 s. c& d+ p
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
# T. A5 a0 Z! F( `; M, d
6 a0 b% E: m. F offset = D2Client::GetAddress(0x99C1C);
|' S1 t; h6 J' M; E8 u0 F2 a% p' P Memory::SetCursor(offset);
5 f, s2 i6 | n h* j9 L. `$ l Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);9 Z# B7 H* w8 J$ q+ C$ n) g5 H
5 v) _ F5 A z: ^
//取消两个popup,偷偷懒不过分 B3 P- G z+ X' W* P- `
offset = D2Client::GetAddress(0x9386d);" _4 f; {6 W6 P, _0 N
Memory::SetCursor(offset);! Q4 s. r$ a6 E* e$ k* e! ~8 s
Memory::ChangeByte(0x8b, 0x33);
9 t- R! h* A% D1 J4 V5 m3 ^; ^ Memory::ChangeByte(0xc8, 0xC9); K6 B5 j! Q* W
offset = D2Client::GetAddress(0x9390b);) Y0 g$ R" ]! u2 x8 M
Memory::SetCursor(offset);7 d% n: {- y8 G& ~
Memory::ChangeByte(0x8b, 0x33);
& G0 F& j: ]. }4 _* C2 c* ] Memory::ChangeByte(0xc8, 0xC9);
- T0 e! d# q V" M3 ?3 e# Z8 p" y) ?
//修正提取金币8 S9 C3 e6 J' X- n3 ?/ N8 ~' K
offset = D2Client::GetAddress(0x8D3E5);
8 Q% U6 C( \, G% y* J3 T$ Q5 \ Memory::SetCursor(offset);
/ h5 F& r. t: a1 {! e Memory::ChangeByte(0xA1, 0xE9);4 a/ p4 e, L, F$ t. T/ J- b
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);- q7 u7 f3 J- Y# N0 w4 s
T* {* c- ^) z/ U offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
9 m, f: F& y1 {; M0 S1 ~" G! I Memory::SetCursor(offset);
& {2 W; ]/ h4 Q! g& d/ o j X8 z0 n Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);0 e4 V/ T& ~# _# p# i5 W
# v/ f5 @0 c& e& I3 i1 {" l offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
7 l) ] `6 Z# v6 | Memory::SetCursor(offset);
4 E) c% z$ s. ?- g' d Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
7 z. R1 f: T0 j7 y1 O8 ? u$ e; b- K I1 {, |
//修正关闭按钮- L& m/ ^2 f) i+ a S
offset = D2Client::GetAddress(0x8BD90);
4 D) o( n1 t( @5 h1 b8 N Memory::SetCursor(offset);
+ \# M% V6 C9 Q" w Memory::ChangeByte(0xA1, 0xE9);
; O. |6 g" I8 J, i# ~3 J Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);; a+ A) T2 M' }% T' K0 U2 h' N/ `* D
6 ?' Y$ L6 ?% c: ` offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
$ ^" u7 Z$ L) Z w* a+ T/ l Memory::SetCursor(offset);
4 z1 U( ]+ H2 N3 H- L5 Z( C) l Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);, }9 Y( V: N9 {/ y
. \3 X* R' ^" g s! L* Z
$ |) B3 s5 w% d8 v( b
//以下是细节
1 w' q- M& T# [. Q#define getXGoldCoinFixBtn() RX(0x2d0)7 W4 P5 g* C% y# M% n
#define getLGoldCoinFixBtn() 32* A& \2 d' D5 |* L. X
#define getYGoldCoinFixBtn() RY(-0x59)& B9 H; h: K) Y% e6 f& A. \( O9 Y
#define getHGoldCoinFixBtn() 32) f; G5 `( n# C6 Q; o% o# \; w
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
+ r) S, F" |$ D8 O' U: h
: x, Z( r' K6 S9 j#define getXInvCloseFixBtn() RX(0x3db)
6 |; e3 _- H: ]2 ~: A x#define getLInvCloseFixBtn() 325 Q/ p2 a* z2 ~7 U
#define getYInvCloseFixBtn() RY(-0x63)
1 F f- Y. A- S2 U3 F6 [! x- p( O#define getHInvCloseFixBtn() 32
1 f& {( O* f& D5 g! b& H! Q#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())6 @6 {1 O+ g0 P" t; y6 E7 k
8 u5 p- c: {' ?, Q, S4 KBOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
$ H" @- p7 \5 T8 I{) A* p9 g: z: \1 o! i2 \( E
DWORD mx = *D2Client::ptMouseX;& o" S2 C- R, W3 a. k+ u
DWORD my = *D2Client::ptMouseY;
) b) X8 H w' t0 ?; f% o if(isOnGoldCoinFixBtn(mx, my)) |/ p1 r! Y/ f, {2 Z
return TRUE;) m9 C9 D. j+ i) s
return FALSE;) S) _/ L& M" t$ c
}: R. q n# Q9 _% ~: g" Z8 a
__declspec(naked) void caller_goldcoin()
+ M$ r3 A6 e$ ?- _4 A5 ?2 d5 }{
: e3 K+ O; u+ e4 p3 v3 ~5 R __asm1 }8 h" \) ]+ `- {9 A* J
{
& n; _6 t) c: x N push ebx* K; f( c- L2 u. ]# R0 T
mov ecx, esi
% [" U6 z a+ k) v( E mov edx, edi# E- H$ d( E9 w* [9 J2 a
call m_NewStatShow_goldcoin
0 ?0 `: y+ \3 p' e2 |9 O pop ebx+ {; [2 H* }3 p, X$ w" ~
pop esi P& J* O* E6 Z0 G7 q. l
retn
# o w" k& d) L7 A3 u- P% ^4 |& e2 p }
8 d9 T. F$ ~& b3 l. b" [% g}
. M/ g1 K1 A$ J2 bvoid __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
% D8 x: ~& y; v2 ?8 v+ O6 f3 a{) x+ C1 m$ c- b8 r3 D
if (*nXpos > D2Client::ptScreenSize->x / 2)" v0 D. l/ |/ d) ]7 ~1 O* U
{ P I0 u: m6 Y( g. d6 m9 ~
*nXpos = getXGoldCoinFixBtn();; I* `/ h( B! \
*nYpos = getYGoldCoinFixBtn(); S [" w- Y; b9 J
}
# `5 v; K9 u+ p' s: S}9 J: ^+ i3 l: r" \% I3 o- X: P s
__declspec(naked) void caller_goldcoinimg()1 \5 {1 P+ o+ `! C0 s
{
# g. A' [3 L- g- k, l- k __asm
. |% j6 L& \6 u/ l9 @ {; b/ V9 T( v, h: C) D; k
PUSHAD1 ~$ V+ i3 Y' G6 w
lea eax, dword ptr ss : [esp + 0x38]0 P+ [9 M! u) J" C. j3 e* D% G8 _
push eax; V X! O1 z6 H! y- U
push dword ptr ss : [esp + 0x38]: f- h4 `$ U( f+ j' t
push dword ptr ss : [esp + 0x38]& i5 Q5 q6 V, |, ]5 K. d7 q- p
lea eax, dword ptr ss : [esp + 0x38]
/ v3 w; c6 T' Y7 `5 i push eax8 ^( D. s- P, x, N! h. k7 g
lea eax, dword ptr ss : [esp + 0x38]
" s2 L2 f, u. L+ u# }, J push eax) h7 i5 p% q) H! _% ?/ d# A V4 x* v
push dword ptr ss : [esp + 0x38]
' x# M5 o, p% Q6 Z7 J) M v call m_NewStatShow_goldcoinimg
1 |2 P# i" R2 v; S POPAD
( K1 `4 G0 M9 _- u' t6 r( m JMP D2Gfx::D2DrawImage
7 h$ z+ q8 ~/ | i" G6 S, E }
7 z$ \1 @; O/ n2 E0 w2 U) M}
; c! O$ W# T+ w- ?5 T' iDWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
, Q( v. P3 `( _9 v$ U{
) N0 j/ _: C0 B# _ R# b if (x > D2Client::ptScreenSize->x / 2)
/ b: n( B& [- G% u {. M" H( k" C: x8 y" B
*y = getYGoldCoinFixBtn();+ ]) a3 ~. F3 Y! T
return getXGoldCoinFixBtn() + 32;
; ?4 ~8 j8 m; m4 Q' m, D }
+ O; p4 Y( ?2 A% |& I9 C! S0 F1 I9 d return x;
2 h* N a7 I( y! p+ n% r& _}0 y* g3 \) p. b+ V4 j- Z( f
__declspec(naked) void caller_goldcointext()
/ T7 t6 S( E3 W) ?{" p$ @0 v: g7 x4 d( u7 g
__asm
) i9 w: U) c- ?5 j) F {6 \, i! ]9 }, r0 J2 w' f$ ~
PUSH ECX% `. X4 G* h5 k4 A6 E: {
PUSH EDI
( U/ S' w; S6 s/ S0 N% L0 n1 q# B PUSH ESI
( }) b! J2 w: J. B; Y PUSH EAX
; `' H9 z. J% z( h" n1 E$ N MOV ECX, EDX
3 c8 S4 r0 [6 R0 x! [* J LEA EDX,[ESP+0X4+0X10]
0 \% a7 `% a1 t" k CALL m_NewStatShow_goldcointext c5 H7 d! j! r& `$ k1 T% o" P
MOV EDX,EAX8 F1 Y; d% l. o6 G+ A7 X4 z
POP EAX- d# f* q. b' J! z
POP ESI, ]+ n& Q1 U) b- v
POP EDI- v" j$ N+ r" e2 \0 }+ T) o
POP ECX
* y A+ I9 m Z, T. c& o jmp D2Win::D2PrintString;- }3 ^+ i5 z0 v1 w4 \8 D6 |
}
" P9 ]! ^7 \( V+ ^2 }}
, G1 Q V7 I5 s+ K% @% j' j7 V1 ]
- d8 X; |# w( u7 dBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y), w! y$ B' x. n2 R& `9 x
{
+ Q5 E8 W3 R6 k* y+ H) Y DWORD mx = *D2Client::ptMouseX;. t( v, ~" |/ O& G
DWORD my = *D2Client::ptMouseY;
|( }! U. h5 L8 F2 n8 e if (isOnInvCloseFixBtn(mx, my))
) W3 h9 `# O) E. h1 L0 `' A2 |, ] return TRUE;$ n8 a( J8 s; V. X+ Z
return FALSE;
* g" U- x* a4 w9 v}
/ w8 s' f& a0 |5 s* {; A4 \" [__declspec(naked) void caller_close()
$ J' M2 A6 q& ?( o4 E; z{0 V; }# G6 P9 x, [+ }
__asm
5 h3 u; M+ ^* ?1 n& G7 G k {- H$ N4 H. S' J( Z; S# k* u
PUSH ESI) X5 ]4 G' H* F& `
push ebx
8 }" o; X$ \& j: B( k' x" B0 ] call m_NewStatShow_close
2 W, O, R- i% ` pop ebx
2 j. C2 R* N$ o8 }& A5 Q H2 t9 G pop esi7 |, t/ A: S' {5 V1 @$ P
retn
) w8 q6 e8 G. d: e2 U1 Q }0 B% i* u' Y- X& \0 w! Q8 j3 i
}
|! i6 y) F5 _0 P) h4 @! ` ]$ R2 p1 g* tvoid __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])% r) C" ]! S, t- F \
{) k7 L; J- e' V5 @2 H: T& U
*nXpos = getXInvCloseFixBtn();9 i% F+ T2 T9 R
*nYpos = getYInvCloseFixBtn();" ^- @- _; b5 T
}
2 \# a- S9 i' t7 R% J9 x5 u__declspec(naked) void caller_closeimg()* f5 ]2 S# d# P7 a& C
{: w) @' q/ r9 B+ @. B1 j$ E- d
__asm1 H- W/ b, i/ Y1 R
{ a! i1 r6 _% D( I
PUSHAD
/ S0 M( ~% Z; d lea eax, dword ptr ss : [esp + 0x38]* `! t5 P, S# y3 k. l* b
push eax2 v7 l2 l5 ~2 n) E9 L- R `
push dword ptr ss : [esp + 0x38]' N, j5 Y* E0 g$ X' c
push dword ptr ss : [esp + 0x38]' Q: C' N# v7 x' w8 ?( ^! b7 V
lea eax, dword ptr ss : [esp + 0x38]
# B5 d$ i* n( i push eax7 d' m- c& ?' O
lea eax, dword ptr ss : [esp + 0x38]
9 w) K# C+ U& ?- y push eax
+ d3 E0 d9 }$ k/ c$ O/ ?6 ~& y: h. h push dword ptr ss : [esp + 0x38]
5 E3 z6 M: N; b" j call m_NewStatShow_closeimg
) B# v# T1 p) w; f! }1 m8 H3 ^8 \ POPAD( @* J/ M" o& j S0 g8 a
JMP D2Gfx::D2DrawImage
4 D4 U$ Z7 F3 M) z }
- {2 M& O6 @& s; P6 `}
* q, u" f! k# V3 y/ `$ K9 n6 b' q' F3 E7 o" \1 y) I
X) F# @% w9 s, y6 C
|
|