|
|
转载7 \& d' Z- u, L* \. y: r& @
BY SJ; k9 K+ q! W6 W7 ~$ w
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)! v- Z4 t/ j' m5 i+ l2 ]2 w, W& I$ z
1 V" \. D: ?( e9 _: T5 \D2Gfx::D2DrawImage-10041! H$ u X2 ?) n9 K/ Q4 A
1、修复技能的背景(不需要可以不要)
- a. ?) B: y H9 u0 s1 hoffset = D2Client::GetAddress(0x77AA8);
! P- D& L* J- z V0 A* M7 r0 xMemory::SetCursor(offset);
, b7 t9 m6 N7 W; u4 `Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
3 s# v1 ^) [' M* `9 z; r! o3 t
, _- Z$ t; ^. ]/ _3 F' b1 @void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])( f3 L! p1 L/ f
{
* @+ a. D6 } V: F5 n# {( F- r% Q //Init data for print image
, ]) _2 l4 l5 L7 W: T( _- ] T+ f sDrawImageInfo data;
! p. I0 `$ A- j& \' \1 _8 S' c d ZeroMemory(&data, sizeof(data));9 Q. y% h3 F! _+ _+ e
& p r8 ~8 T* ]# I- \
//print background
7 ]1 f' }# o& Q" I$ v' M# Y setImage(&data, spellBackgroundImages);6 `0 F& t! s3 y
setFrame(&data, 0);
0 |8 F8 H* z+ W5 A, e; } w! z, ? int fixx = 511;
4 s( ?6 t, d9 ] @9 Y3 d int fixy = 9;& P& }* ^4 d# i
D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);, g, A/ [% V, x( {/ t7 Z
setFrame(&data, 1);' ^8 }2 _( g! D3 F4 W7 U3 a
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
1 G5 ?, Z' G' ] setFrame(&data, 2);6 C- \! m/ L" n( a( x( g
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432% f4 k3 J; q% m, k) i8 q p
setFrame(&data, 3);! G8 Y- l3 H9 G1 l" b
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);: J o% Q3 h$ A9 b6 E; X" T6 t
}
, o5 }4 `; G% E. D% z/ ~) R3 V) L__declspec(naked) void caller_SpellBackGroundFix()
8 o7 i% ]" z$ g% b: w{
0 ?7 Q8 J+ R# Z; V% Q* d __asm
- c4 `7 ^3 z ?3 Q/ r! Z5 S, o/ c {
5 d! e E5 V. k' D$ n7 @0 \ PUSHAD
% X' }4 m. D. E$ E lea eax, dword ptr ss : [esp + 0x38]: L, M" F. v; ~" H f
push eax |9 H9 b& g* K* Y% v
push dword ptr ss : [esp + 0x38]
5 S d* i: { g6 z$ `6 L7 O; r5 d push dword ptr ss : [esp + 0x38]1 f* b6 n# y) d* _
lea eax, dword ptr ss : [esp + 0x38]9 {3 a$ ]- }$ t6 E/ P5 Z% N- u: e# r
push eax+ N( O \' ]2 G
lea eax, dword ptr ss : [esp + 0x38]1 |( d: J& W4 M
push eax+ Q' z# n% I; N$ t& S
push dword ptr ss : [esp + 0x38]
2 ^6 O4 w; x8 Q# M call m_NewStatShow_SpellBackGroundFix
) f9 b/ Z, P' ] W- N0 k POPAD! a& C1 c6 \0 \: R
JMP D2Gfx::D2DrawImage1 ]9 k; Y# y, @7 `" B
}: w) D' K6 o9 D$ `
}; V; @& r! j% ?% E. F+ s
7 U% E/ x2 f5 C6 R/ s2 L- d, T2、我们如法炮制小站的背景0 F0 N- z( q0 h% Y; C+ s- k
5 `, i( X n& i2 Aoffset = D2Client::GetAddress(0xAB010);
: w+ ~$ E, ~8 f5 _3 c0 U5 eMemory::SetCursor(offset);; H: I) O7 L& D: X4 R) P6 G6 A, K' }
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);) ]& W3 t: w8 z! t M5 |- g
$ R) z' W0 W, ?void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
5 ^3 T3 o! E* e( ~/ Z& m- t# E{& n& H3 Q$ _- E% d& x/ d" R0 ?3 F* x
//Init data for print image
: @! b1 W! L! u3 \+ \4 D sDrawImageInfo data;$ Y& ^; i* g6 v
ZeroMemory(&data, sizeof(data));1 X6 e" @2 D4 g& C; X
* G* j4 r2 |) J
//print background
3 w# h5 U( j$ t setImage(&data, waypointBackgroundImages);
" |. o5 X4 O( e7 e* ^2 n8 B( \ setFrame(&data, 0);1 J& ?( N# B3 t7 C
int fixx = 0;" f/ y! Q2 }( k* h+ b8 h5 X9 C
int fixy = 9;) Z; d8 a6 B) `8 k
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);! p' K4 Z$ P, D; _6 r- c) [/ A3 _9 b
setFrame(&data, 1);
: G0 A: U3 a3 K0 J% \+ D: A D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
' J! f: L- k5 S3 z9 |$ A+ }/ N setFrame(&data, 2);
7 W; _( _1 C/ p- E, ?0 M' K D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
7 H* z$ ~( ~9 p setFrame(&data, 3);4 x& u6 b! n6 S' }6 D- g# T
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);) T& _3 n/ ~! Q P" ^' L$ g
0 K" u; o) a* U
}
2 \( q- h' p, ]__declspec(naked) void caller_WayPointBackGroundFix()# g( R. \( P, @1 j4 H
{
6 k0 g- @8 Q& L __asm
9 ^- _2 u: ]3 E9 B {
7 |9 x# s9 G& M5 z. M PUSHAD+ f9 q q; i* b9 F1 n) Y& j% {
lea eax, dword ptr ss : [esp + 0x38]! v0 Q5 s' [8 c6 H/ I' N
push eax5 {1 |; ^# X Y/ ^1 g
push dword ptr ss : [esp + 0x38]% v) ]5 X9 b2 _: w
push dword ptr ss : [esp + 0x38]
7 x8 _3 F; ?- C: b' O& k! e+ p9 D! r lea eax, dword ptr ss : [esp + 0x38]6 _0 s N" E% o' w5 g( A$ U
push eax
1 q- b0 d% k. D2 s% @. i* i! y lea eax, dword ptr ss : [esp + 0x38]: r* m, i3 E o: U% f6 y7 Q
push eax
! O- Z, E/ ~& `, f* A/ `5 i push dword ptr ss : [esp + 0x38]
& S, ~0 |6 G H5 O9 w7 C" D call m_NewStatShow_WayPointBackGroundFix- S! ]7 h# m9 |; y; q7 a
POPAD0 \ q: g2 G, a, h. f" A: O; _
JMP D2Gfx::D2DrawImage
2 r/ H! _" S/ \- |4 r3 P- j }
Y6 C1 w7 k! d2 m- k3 m" a) P}: E% D c3 V2 |7 _$ Q8 M
- C* {9 A: X+ ? M( g* _3、以下可以搞16*16超级箱子-腾出我们需要的边缘! c; Y# o$ R0 o
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)! j; H: Y$ t0 N: l
{% C% W! ^5 p0 ?
class D2MultiRes : public Library<D2MultiRes>- s7 k4 l* g2 g6 e: U h4 ]1 C
{) q- n0 w8 A% N ]; K
public:/ i! {& R1 @; R* K7 J- H" t
static void Init()
! G9 W6 [9 N; |9 t: W- X" _ {
3 D; C' K6 s* r7 b Name = "D2MultiRes.dll";6 G& o, m0 ?6 C h& n
Offset = LoadDiabloLibrary();
7 ~5 e" {7 A- G8 } }
; M8 M8 @* o# ~% C) T0 t/ \2 J7 A };
0 ?( {3 e( `' a/ } D2MultiRes::Init();3 ^, L7 e0 a9 s$ A/ j, r* U
D2MultiRes::HookLibrary();
: w: O& T. I/ E; e2 Y. q
7 U/ i$ C2 e& F! n+ K8 f) W
0 }' X0 I: Q$ W. @; A9 }. g MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);- b/ F( h9 v! W. K
Memory::SetCursor(MiscFunctionsOffset);
# G& \# ^2 [9 q# M4 \ Memory::ChangeDword(0x1b0, 0x200);$ p" }6 m9 H g, X
{, A* C: p" [
2 [. a. R; s9 S R' a1 ]
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);1 F! Q# l- a2 ?2 b! ~$ [
Memory::SetCursor(MiscFunctionsOffset);
+ V- ~3 d/ v& O Memory::ChangeDword(0x140, 0x200);; c! r8 a4 N; X Q$ o
5 V! V: C8 N* N1 }
# f- D5 i l3 w2 C* t MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);; W0 ^ U% s1 P! l0 E9 W* h
Memory::SetCursor(MiscFunctionsOffset);7 ?1 V% m* G' ~( F' z* ?7 ]: |
Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块- o* l7 [! `, m3 B3 k( c
" z) W( B2 V- H% l! k$ d
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);* b/ T# z- V' o0 v- ~. s
Memory::SetCursor(MiscFunctionsOffset);
& ?3 \! _# b# D5 c1 P Memory::ChangeDword(0x200,0x299);//下边缘 299最大
( h3 C- [% a) y8 \5 U4 v8 w$ ]1 @
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
3 O! f8 Y- {4 a0 j+ J6 k Memory::SetCursor(MiscFunctionsOffset);. @) g, V) a: k2 o6 } [# o
Memory::ChangeDword(-0x280, -0x400);//这个不要动4 P) A. _) ?2 ~) u" T( v a4 s3 b
}
3 z. \; B7 U; t/ g }) [/ ^+ [6 c/ t1 V
4、快完成了,是不是发现金币啥的位置不对??# w) a1 M/ ]/ m& O9 {5 A, n
% d' ^3 s" d9 ~, v: x( A
//这里修正我们的装备栏3 n7 f$ a V9 K6 V! U
offset = D2Client::GetAddress(0x99B6C);( y/ @. l; ~6 I5 R& G) p7 l; T" B5 q
Memory::SetCursor(offset);: t$ ] d5 c# s
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);2 |: n; }' C! H$ n
* a9 e+ d8 L" Y( X1 r# E% x
offset = D2Client::GetAddress(0x99BA7);7 `; U/ h! C' {9 {% Y1 J
Memory::SetCursor(offset);
3 X3 G; q, W/ M# _+ z Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
. x, |6 I0 s/ G, e' o$ H& H( ~) Q' E/ _, B4 b4 J6 J+ u
offset = D2Client::GetAddress(0x99BE2);& @, a; q: y5 c+ z" }8 u
Memory::SetCursor(offset);
5 u. U- O) H! s0 u" Y Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
h4 S( Y5 I& p5 r% c" N, x i( n# z1 O
offset = D2Client::GetAddress(0x99C1C);
+ \8 Z0 m$ L7 V5 T Memory::SetCursor(offset);2 A* k0 A9 v1 Q3 A6 {1 R2 ~' a# i
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);- T0 q$ S4 F* M; Z0 \# f& l
* i! p# [3 t6 Q2 `. z0 M
//取消两个popup,偷偷懒不过分/ ~" b: ~5 Q% ^) n! d
offset = D2Client::GetAddress(0x9386d);2 ~7 K0 U9 J7 q) F7 r; ~
Memory::SetCursor(offset);
6 ~7 i e/ l4 h/ ?' n) b+ _ Memory::ChangeByte(0x8b, 0x33);
) Z8 Z) c* Z b5 B( ` Memory::ChangeByte(0xc8, 0xC9);
1 D3 R+ k* L) P6 B! C @. g* m$ Q offset = D2Client::GetAddress(0x9390b);# i A2 ?9 w$ I% k) R _. h
Memory::SetCursor(offset);
& J' [1 e) s! ]0 c$ ]+ E Memory::ChangeByte(0x8b, 0x33);
* `6 @6 y5 E/ z( x# t' u Memory::ChangeByte(0xc8, 0xC9);4 b' b& U% Q& M& q' Q _* [
% G4 _- I7 b+ y1 q //修正提取金币$ a2 |( z4 g4 P! g3 R4 f
offset = D2Client::GetAddress(0x8D3E5);5 n# w% J1 ^, b0 j
Memory::SetCursor(offset);( r. O- K. m: f/ Z) N* }8 a
Memory::ChangeByte(0xA1, 0xE9);
6 O: C" Z: V4 k, Q' x! O Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);1 O; x/ p1 C( J R
# `, V# W# F3 n. ^" W offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);3 B( M5 @7 N2 v* a( M+ T
Memory::SetCursor(offset);
) L% b7 x. [6 g$ J% v Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
0 Z; z, i$ ?8 t3 u7 I' U. J F
7 d+ F w' A4 `5 h# j4 Q8 r' b: J offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
% [* q: K: y5 \2 A* N Memory::SetCursor(offset);/ D$ h; o( O. L* q6 M( E! ^) ]
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
4 x& N4 X2 e: R) V4 x* n9 H
9 u ?5 J. @5 g! G3 T) i //修正关闭按钮& u+ f p* }) U, V4 v8 _9 G
offset = D2Client::GetAddress(0x8BD90);, Z1 e5 E' o2 S3 W# K0 M2 @& O0 f
Memory::SetCursor(offset); P7 r$ ~( ]( ~8 m" b% P
Memory::ChangeByte(0xA1, 0xE9);
2 ]) m0 J/ q. Y( s Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);& ]% u$ h# z0 w; o* `; L
8 a4 b r: I- N" U offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
. j2 Y7 H3 ~6 f. n) n5 _' e Memory::SetCursor(offset);+ ^/ `( k% E) E* g9 Z6 O* _
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
: s6 n e1 v" M) {/ L: }
: q& f! Y: @$ K5 Z; @4 S# C& n0 C5 B7 Y2 E+ ?& o1 U- n
//以下是细节
& A* v" l- Q& [+ H" o; Z#define getXGoldCoinFixBtn() RX(0x2d0)6 `6 ]# w7 O5 P$ Z3 j; A4 F
#define getLGoldCoinFixBtn() 32# a. x% D7 `& V. P( j
#define getYGoldCoinFixBtn() RY(-0x59)
7 t- s0 m) `6 |5 A1 Y#define getHGoldCoinFixBtn() 325 W) v; J/ O! a! `3 ^8 j6 X* C
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn()), _+ b N! M9 [3 E$ y l
) e* Z. V- W7 I1 X1 i; K! G& N) f#define getXInvCloseFixBtn() RX(0x3db)5 x8 o- I, n# U* O. J S: x- R
#define getLInvCloseFixBtn() 320 x' l& u M9 @0 S& e' Z
#define getYInvCloseFixBtn() RY(-0x63)
" z3 e s" v# Y#define getHInvCloseFixBtn() 32
& ?/ ~" X9 V+ s! [6 t+ P* j#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn()). L E' y9 x# g8 U; l% a: n1 o
0 Z3 X- Z2 I- O$ I
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)) @9 v1 @( [2 y5 ]- L1 p
{, I4 H* B$ n0 n4 ^ K7 |6 q- x
DWORD mx = *D2Client::ptMouseX;
8 H T# T4 y: e/ b) O9 U- [2 V DWORD my = *D2Client::ptMouseY;4 Z9 X R$ B4 t! c* Z5 `- a
if(isOnGoldCoinFixBtn(mx, my))
8 ]; \$ m' O8 ~; w return TRUE;
/ s+ b7 m& p! i2 ^% W5 t return FALSE;
" h) |0 f7 i4 Z0 C! ~}
/ ?% b: ]% H% k" t$ d$ r) ]__declspec(naked) void caller_goldcoin() ~$ ]' G' ~9 w/ E6 G I
{
1 i9 Z; |+ x0 [+ |" g3 Y) I __asm+ q3 L5 \3 c) G7 x/ u- N5 _
{
4 ~- B, m2 `% L0 P! X* M4 |' K1 } push ebx3 r& l8 T2 c3 G$ H# L# V' g; c
mov ecx, esi& q, r8 ?7 E, N1 q: q( C @# n
mov edx, edi
% I+ z9 Q& \* c7 C- b call m_NewStatShow_goldcoin' }8 T4 s; A: x9 S& e% \9 D' T
pop ebx: i2 _ C& K) l% u/ {
pop esi
% V+ w" B) y0 C retn
5 |. n" m+ }2 J% D2 B8 y }
' J7 m( D1 G7 ]& c}1 g3 O6 i. Q* V
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])8 F+ |' H- D5 {8 x8 k6 a |1 E% C b
{$ O0 d' j6 {. D! G
if (*nXpos > D2Client::ptScreenSize->x / 2)
+ e$ B$ h+ [3 H* o {
) X* ?1 b7 ~+ n$ O- P *nXpos = getXGoldCoinFixBtn();
# I$ t+ c2 \/ V* G *nYpos = getYGoldCoinFixBtn();) f( [* d% M6 z0 J6 H- z
}- H! G. e4 g1 M: i' j
}
/ F$ z# H4 J! d' S0 i2 K+ l) p5 j- W__declspec(naked) void caller_goldcoinimg()
9 h5 ~5 C( k) w; ]9 a K{2 b; Z, p& v- C5 u8 C- S2 Z! z3 E
__asm! z/ w- E0 H e9 L' P1 t
{
5 n+ @! @+ ]2 v2 U: B. E PUSHAD# l/ E7 E( Q( q
lea eax, dword ptr ss : [esp + 0x38]: Z; W; B# ` \9 I/ w' G
push eax
6 j9 h! B: ?: F( D push dword ptr ss : [esp + 0x38]* a+ U6 c. ]9 G# C
push dword ptr ss : [esp + 0x38]; i! U w: E2 ?- j5 X
lea eax, dword ptr ss : [esp + 0x38]
7 O2 m/ }( s ^7 _ push eax
7 k( k; z# M- ?& A lea eax, dword ptr ss : [esp + 0x38]
$ H( ^$ T9 e6 C6 G! M1 ^# V push eax
: ?% {/ R" @0 i1 _' {6 t; | push dword ptr ss : [esp + 0x38]! T/ c" x$ {( G; K4 H# t9 v) I( r
call m_NewStatShow_goldcoinimg
% k, h/ z1 E1 C POPAD
4 E- i- p/ b M' n! M+ u, i8 Q& K. A JMP D2Gfx::D2DrawImage6 l9 N$ \) _8 T R0 h4 J) Q0 b
}& _( j# ^- \; n, H5 z/ a
}$ s" ]3 K! C9 e9 `* T8 c, T( v
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
7 X# h. Z/ [: D. O* ~9 _6 W' G{
# U( b, F4 B' w' A9 M/ ]2 z" A7 _ if (x > D2Client::ptScreenSize->x / 2)
- s" u( @- k* R/ f `" N {
; n: c6 N6 e r% B4 t *y = getYGoldCoinFixBtn();6 g# [9 i+ L, b' r" z. h
return getXGoldCoinFixBtn() + 32;0 s+ n, [2 ~: c# }2 v
}
, v2 n \& x9 k3 G, Q, C. m: V2 N return x;
$ @+ S; V S, Y. n}9 p) s! t! b5 H
__declspec(naked) void caller_goldcointext()
) Y+ L# }2 f+ l+ u# t# C{2 K4 b, \! Z2 ]6 H
__asm% N# B! h+ `4 i, d2 e* B
{
* W! j0 H8 ?6 `$ U l PUSH ECX. P! a j! b! h/ ?9 G" u* ~
PUSH EDI
" ?5 p1 k; w6 [8 n; J PUSH ESI
6 X0 C7 ]; [2 T ?5 W( f; R- D PUSH EAX( D" w# A5 K- \( I0 n. [
MOV ECX, EDX8 N; p3 P7 C. n7 v9 Z) F& a
LEA EDX,[ESP+0X4+0X10]/ c! O2 ? u. s- C. |, [9 P3 n
CALL m_NewStatShow_goldcointext
/ w+ W) m- g. t- U: \! Z MOV EDX,EAX! A- R, V& \- F* T% @
POP EAX
+ I$ j" ]( B* P+ Q. v( w/ H# s POP ESI
' B5 u I4 c9 `. H* ]( O POP EDI, O7 D3 E/ A5 j3 Y2 o/ m
POP ECX
6 f4 d4 j# i. h9 M2 U5 m/ e jmp D2Win::D2PrintString;
( K5 x3 \. y( i }& J3 h# r3 J" G+ v; L5 [) P
}# E4 v5 c) F. R; T
( j- P, o3 u) R) j1 VBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
( A+ R% Z7 g5 T3 ?7 u{$ m0 f3 _: y$ w" q
DWORD mx = *D2Client::ptMouseX; [1 P, |* r/ P3 P
DWORD my = *D2Client::ptMouseY;' X* R/ _0 \: e* O7 D
if (isOnInvCloseFixBtn(mx, my))8 S+ L/ N( [* K6 R/ f* Z: O
return TRUE;
; z- \# Z; `; G5 M2 d' m return FALSE;
' o) v6 Q0 e. [* p" f0 b: m- ?}' u& Z+ W6 }+ c) Q; }1 `' ~
__declspec(naked) void caller_close()3 i3 w( w" n/ x% |) _2 [
{9 A8 Y/ T; s( V% R! r" R
__asm
; `! q" `) n) {6 F, X2 E p7 ^ {
, G+ ]3 V/ A; S3 f3 R. H PUSH ESI$ @2 t) y# h# P- j, |- F) U" M
push ebx
8 v+ b$ E9 v0 C+ L call m_NewStatShow_close8 c- {/ p: e2 C ?( g
pop ebx0 x: m1 ~3 U' E' t3 z) i
pop esi
0 @) G3 ? c4 T retn
+ f. s5 u& W. C& K. C }. [' I, d0 K1 Q- S5 z' z
} |! x' d, T! Y7 \
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])4 w. |- Q4 w, X
{& A' p6 V9 k8 J8 V
*nXpos = getXInvCloseFixBtn();8 i: @1 ^7 t* `1 x0 d: }
*nYpos = getYInvCloseFixBtn();! \" w3 U" ~) \
}8 _+ o- M! p: e, D7 n
__declspec(naked) void caller_closeimg()0 W* M! t+ N$ X; w; O/ I9 p) a' E2 `
{
+ {9 ]" ^" y% w- P __asm9 H& u% U6 O$ F. f/ K9 Z8 U
{
# L0 W& F/ O5 T" j3 ? PUSHAD
W6 \2 Y+ e4 P7 _6 Y lea eax, dword ptr ss : [esp + 0x38]
' k0 |! v& u, ]5 \" `- ?# @ push eax
( }8 @* D$ ^0 P& [$ C push dword ptr ss : [esp + 0x38]
H4 [6 u8 L. i* V push dword ptr ss : [esp + 0x38]' V$ _6 R" h3 ? C
lea eax, dword ptr ss : [esp + 0x38]* R0 K4 u, J7 z" D+ `% _; K9 n
push eax
0 ?& t; V( r0 g. f lea eax, dword ptr ss : [esp + 0x38]
; c6 U; z# n/ l; ^6 E+ Z# ^ push eax
! M& b7 K4 \0 A" K' w! ^/ s push dword ptr ss : [esp + 0x38], R, M* v4 Q; W4 ]7 l- K% a
call m_NewStatShow_closeimg0 d; f- W9 |# o0 K5 F: d
POPAD/ s- ]* X5 X1 I/ W e- u2 K' a
JMP D2Gfx::D2DrawImage
' e! \ u' b; N2 T2 l0 W9 @ }
; r, k) k" F5 W- a u: ~}; k' A# ~, Q7 \" e3 O
( D6 Z+ \+ W2 X& g
% b$ q, J0 M' s. g5 O; N) [ |
|