|
|
转载
9 H8 @9 K; x4 DBY SJ* b ~) ], ?; q" b" Y
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的): r* ~0 ~& |3 I: V5 l" k# Y9 ]
/ Y6 q8 P0 X- X! ]; i# uD2Gfx::D2DrawImage-10041
! D& g3 K- }8 _5 q1、修复技能的背景(不需要可以不要)
+ {3 Z1 ~6 k! g; X' `3 ]* joffset = D2Client::GetAddress(0x77AA8);
2 Z, {$ ^$ E7 F; J6 QMemory::SetCursor(offset);
6 E* k/ @ x2 l5 RMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
: E3 c; `! ^ I- B' G) Z' ^! p9 s2 E+ k3 t8 o
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256]) k1 C; @: e% v# ~7 {; p) Y! O( x
{3 n; U: n# b `
//Init data for print image% u9 g5 p2 d+ A, W8 b4 J$ J
sDrawImageInfo data;- ^' ^1 |. Y; g. A3 l6 h$ b6 H! ~
ZeroMemory(&data, sizeof(data));$ D: L+ M2 Q6 ?5 W3 y% |
* o' p' H4 C8 q4 p; o! k //print background1 E- c" b7 D( Y. L" J; L
setImage(&data, spellBackgroundImages);8 N9 p" A/ a5 i0 O
setFrame(&data, 0);
2 G0 r) ?+ C* j: D& L int fixx = 511;
; H9 O; _- x0 a7 ~. i6 {4 v( a! d" z int fixy = 9;
9 M( Q# B* Y" t' h/ Q2 Y( P1 Y$ { D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);+ `4 G1 I2 x8 O" f! H% y
setFrame(&data, 1);
/ [. r7 L. l# N. e D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
/ X4 p! c0 |1 `/ f: S8 K setFrame(&data, 2);8 @' Z% x3 O: F! e [
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
& h$ v1 u [0 D6 m* } setFrame(&data, 3);% ~5 j6 a" d1 D& I
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);) I. f K" G* @# }) o) u1 y0 _
}
) M3 K+ b$ \7 q2 R) Y' `/ U__declspec(naked) void caller_SpellBackGroundFix()
4 s1 u! g1 V' N" N& I$ V! A{
8 N6 V& o0 K1 x& a! P" L- o __asm7 u0 F# e0 @' b" q0 e/ ?6 U
{6 J: f; B7 f+ F* J& B
PUSHAD1 _, U6 [. F3 }4 [. j+ p% ^5 O5 t
lea eax, dword ptr ss : [esp + 0x38]
- P5 d9 O- p2 V1 [( q3 P0 P7 n; N( V push eax, X, m+ B% Z g
push dword ptr ss : [esp + 0x38]
5 ?4 J1 k: x- G' J push dword ptr ss : [esp + 0x38]7 m; E/ b+ Z b& G7 Q
lea eax, dword ptr ss : [esp + 0x38]
# \8 q9 p) s% L3 q push eax
7 g; }: e. D# y7 u+ ` lea eax, dword ptr ss : [esp + 0x38]
' Q* v& m( g8 W: B1 ?3 T push eax5 T& C% Y8 u a$ x1 J" u% w
push dword ptr ss : [esp + 0x38]
4 {' N) q0 c3 q' C, t call m_NewStatShow_SpellBackGroundFix2 \9 [& u6 }* e+ u8 R1 {4 o
POPAD& `- F+ C( X) K* p
JMP D2Gfx::D2DrawImage. Z3 M' {$ \( l2 t; p3 N! Y W2 z7 C
}% h8 g% m0 Y+ N
}
8 O& z6 r! Z' H6 l# s+ K
8 C% t' J* f$ u- W# d5 z+ o2、我们如法炮制小站的背景
) k+ j; G- ]# m' U. d9 W
& {' t9 v- C4 \: Soffset = D2Client::GetAddress(0xAB010);
. x+ Z4 v5 ~+ g& w, M3 [6 o7 P* B7 {Memory::SetCursor(offset);
3 f0 ]. ~+ r3 S C* wMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);4 |" r0 w; ]# B% g0 u8 [7 }
G) E+ {$ B4 ~9 i' O. s
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256]), ?2 }# e3 L* K3 @4 e+ }6 v& @/ m
{
$ m; O' U/ W0 v, x) x! K9 {2 q //Init data for print image2 `( n0 w4 P' s
sDrawImageInfo data;( @& C. n) G* P" Z& O
ZeroMemory(&data, sizeof(data));, K8 \* G& S3 R9 `# B$ _
/ @% P$ b8 u8 {/ g8 [8 V$ ^ ?6 o
//print background
8 [; i5 ?; U( R0 h: } setImage(&data, waypointBackgroundImages);% w) c" P' C9 E6 V9 z6 E
setFrame(&data, 0);
9 b" ?9 j! L- W% x2 c) h$ W8 J int fixx = 0;
8 V ~6 ^& U2 [4 H: J7 [ int fixy = 9;
" v7 [; q8 o9 u) i D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);$ e6 g& D% \: c& W& |& z4 B& @6 v
setFrame(&data, 1);
3 A& w9 E, R8 U$ Z4 x D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//2561 i# V: @3 p4 j+ J! H
setFrame(&data, 2);
3 f1 Z+ M; q! Y& P D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
' D& @* |" j3 Y1 w6 Q4 q0 M4 ]% ~6 g setFrame(&data, 3);9 c* Q$ `/ _# u/ K0 q
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
& Q8 u6 Y* C6 _& Q9 ?: x
1 B$ y& H {9 x t5 s E}
: Z% p4 l8 h# K8 J9 [& n__declspec(naked) void caller_WayPointBackGroundFix()
) I% h, {1 ]$ O" w4 b2 X9 Y6 Q" s{3 T# x0 v7 h9 [
__asm! Z4 M- e: R" ~$ u
{4 k6 q# ], C% |2 C
PUSHAD+ {0 d8 L, x: u" b% j. @( x
lea eax, dword ptr ss : [esp + 0x38]. V3 d1 K# u$ U; S
push eax, H3 m6 Y% ]! Q: `) B
push dword ptr ss : [esp + 0x38] v5 {5 R- p5 z( ~5 k, F* F- [6 Y- `* `
push dword ptr ss : [esp + 0x38]
' R2 w5 J |5 A5 {9 Y lea eax, dword ptr ss : [esp + 0x38]$ b! k/ h$ Y' P
push eax& X. o4 C! Z) X
lea eax, dword ptr ss : [esp + 0x38]
, m0 h" p, S! p' Z* B push eax) t: @% C6 T h
push dword ptr ss : [esp + 0x38]% |1 f: R% n$ G. t4 o7 r- m g0 W
call m_NewStatShow_WayPointBackGroundFix* J7 T! H9 H9 F4 }$ W( R
POPAD
/ B" s: e+ L3 W JMP D2Gfx::D2DrawImage3 A: }( t$ y' _5 @3 O
}) U. M4 m% z- n
}$ I! X: m, n2 I! J x
. P8 h/ H4 v2 B% m( |
3、以下可以搞16*16超级箱子-腾出我们需要的边缘
' A% \0 w: k# o- z0 t# S腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
' f' R1 l9 x5 i {
# G% X5 @% u3 F4 w$ { class D2MultiRes : public Library<D2MultiRes>
" C9 J+ K, R2 w/ V) d* H7 Q4 v {* l1 O; a1 r( o0 k& \
public:
$ |3 u X. ^2 t0 V: i9 ] O: ` static void Init()
0 i% i' z& U1 p) I {
9 G1 M* H9 A* f! E" e6 Q& ?$ } s Name = "D2MultiRes.dll";( S: L' r- ^0 c( u, g
Offset = LoadDiabloLibrary();
0 c* V# u, C6 f* q- ~$ E }
. i7 F, w% V% ^3 x" {$ ^2 J$ N2 Z1 c };
( O4 D2 {3 X6 B( Q1 u. k0 D D2MultiRes::Init();
( [- C/ T# o& J; K2 [1 g1 q D2MultiRes::HookLibrary();% h- J3 F) @1 F( X! _
Y( T! W+ W% P/ b$ q' x& ^
! l' m' @! L5 n: A* F- m h MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);1 y; e) H2 g5 F& b, Y/ ]
Memory::SetCursor(MiscFunctionsOffset);
& @7 ?1 ~3 ^# {& S) q Memory::ChangeDword(0x1b0, 0x200);, B# }, Z" \5 ^4 u
' ~! y+ _9 q, o3 @
3 T! e6 y2 c: A' ]' }; E* c) k4 A MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
. w+ H' Y/ R" x0 X" X Memory::SetCursor(MiscFunctionsOffset);5 }6 Q9 L7 R5 H( g$ s% n
Memory::ChangeDword(0x140, 0x200);1 T: ~; ?8 r: A9 q! u7 w8 S
6 T5 L: x! P& ~& X4 s2 W1 V0 i# N2 X( g' D7 [$ Y: ?# N1 `
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);6 G5 t% v R. U
Memory::SetCursor(MiscFunctionsOffset);
7 ?- T! v, G/ n" k: D Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
$ o" T; E8 L0 s" P, \: Q
d7 ~. T1 Q2 C: r. R2 b. f0 `7 o8 | MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
( J. u& P) ?1 J l Memory::SetCursor(MiscFunctionsOffset);. V& C2 s. P D$ `* u& R" g. [
Memory::ChangeDword(0x200,0x299);//下边缘 299最大
5 Y( N) ]5 E3 V2 B0 t7 a5 F: e
# g2 M9 B3 y/ j# Z* r1 u$ ^; } MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);- H% f8 o; J3 S( B r+ C0 D
Memory::SetCursor(MiscFunctionsOffset);; }* F& m: y, C0 @: ]
Memory::ChangeDword(-0x280, -0x400);//这个不要动
8 G# d+ Z. q% ]6 u0 q/ ^7 @ }) u7 x9 G7 U n0 z
% u) Y$ j ^) I; V7 n3 \" G
4、快完成了,是不是发现金币啥的位置不对??
, D6 P8 a7 j: y% G- I# R
" ?* u" W: p- B5 _$ ^( |! Q+ x1 r7 n//这里修正我们的装备栏, [ z# `9 y1 x5 L
offset = D2Client::GetAddress(0x99B6C);
7 p& V8 `4 ~( p. \2 b/ G% y Memory::SetCursor(offset);1 E1 q: E7 d* \9 U$ E5 } S1 A. C
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);; n' \. S6 w# m% ]0 n6 ] b. @# r3 t' e
" ~7 A; @6 J; m offset = D2Client::GetAddress(0x99BA7);6 U- K5 U2 B/ p! F O7 x2 Y9 V! F
Memory::SetCursor(offset);
# g2 M( l* c5 N# m5 D8 R Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
2 D2 ?( S9 Q7 l1 v3 v* f, h7 H
. V; |9 B, H+ F" F offset = D2Client::GetAddress(0x99BE2);) {+ u3 V( H5 `+ |2 j
Memory::SetCursor(offset);+ L: e7 w! r* D8 D4 \! p/ p; A" d R
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);+ G9 F' O7 E3 ?& R! M9 I5 Y
3 I, K0 g, ? P! j% w% i offset = D2Client::GetAddress(0x99C1C);4 l+ k& k/ j) y: M% g
Memory::SetCursor(offset);6 M9 ?+ |' z! |+ p5 q4 e
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);: ]0 Q4 n4 O" L5 W
5 V' q3 ~+ Y/ G% u //取消两个popup,偷偷懒不过分
. Q) p. A9 Z8 n+ r ?6 z offset = D2Client::GetAddress(0x9386d);
% k; b! V5 m, i2 Q5 v Memory::SetCursor(offset);3 g. r s4 ?* s Y1 T- D5 B
Memory::ChangeByte(0x8b, 0x33);9 D6 e6 ?0 Y, e7 u$ x" j
Memory::ChangeByte(0xc8, 0xC9);; [! C) a: Z" ` s/ @% X
offset = D2Client::GetAddress(0x9390b);$ i$ N8 w- N v e
Memory::SetCursor(offset);
3 p" ^$ ~9 ?, B( u Memory::ChangeByte(0x8b, 0x33);! \/ J1 [8 b9 O: `% s
Memory::ChangeByte(0xc8, 0xC9);6 `' r w# n ?' |
J! Y' C | P6 i j$ a //修正提取金币
! N* _$ } s0 S! u' { offset = D2Client::GetAddress(0x8D3E5);( F' S# y8 e% I( v' b* J* p6 M+ f
Memory::SetCursor(offset);
) V8 v/ Q2 x) g. {% f: r' t5 R" ^6 V Memory::ChangeByte(0xA1, 0xE9);/ b0 i: M7 y# q' { n; _
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
3 G: O% Q; b! _5 k- O! O6 J I+ h+ i1 ]; p: h
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
! C( P& K2 _+ C6 g Memory::SetCursor(offset);, t1 \6 F% V/ H6 N) ~
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);. o8 {+ H+ d# ]/ ?/ `4 U! i# l, I
3 w+ |9 P; z( x6 D T2 r
offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
: Q( O% W4 J' ~! j! H Memory::SetCursor(offset);
+ Z3 S! ?9 M* _/ u0 k Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
6 y; Z/ h, q7 a, p; M2 }3 m5 h& Z- s$ C, K4 ~# Y
//修正关闭按钮. p/ ], C& ?: Y/ @. L
offset = D2Client::GetAddress(0x8BD90);
, d/ F, [" Y( P% i: [6 s6 v' H Memory::SetCursor(offset); ?( e Y6 L7 I: l' u9 R1 {/ p
Memory::ChangeByte(0xA1, 0xE9);
0 e, _* K" E4 ]) m2 V6 { Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);- c9 P; e1 c' u3 d2 a! j- @% O
' R" Z) o2 C, L
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
! k5 ^4 N1 ]$ L$ w7 l Memory::SetCursor(offset);' l1 I( \5 E4 m& l
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
' h4 c; m0 ^: s5 U' O; D. I
" _, E* {$ ?) p9 B. i0 r: y# j/ F6 G1 K8 k7 j9 L+ d! y
//以下是细节, S, r5 a4 U5 J$ c0 a
#define getXGoldCoinFixBtn() RX(0x2d0)% ?8 Q. o# F, b9 c9 x9 k# W
#define getLGoldCoinFixBtn() 32 l6 S" k9 h3 W. l2 `6 C
#define getYGoldCoinFixBtn() RY(-0x59)
3 P) }( q! q7 X4 T2 g/ s: I#define getHGoldCoinFixBtn() 32
/ R m: \3 }$ u#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
' y$ L) `0 E% v6 ^* t3 i
2 D0 X, i1 k( v1 g#define getXInvCloseFixBtn() RX(0x3db)
, I; n7 }- ] d j( Q& @#define getLInvCloseFixBtn() 326 E7 \' N9 i! d8 D# ~! y8 x! E
#define getYInvCloseFixBtn() RY(-0x63)3 b; `: C9 p4 K# \. K) U
#define getHInvCloseFixBtn() 32
. [& B( f" E B1 m" k#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
G" B( `) O- G+ e( Y% q( r$ [& d* E( c' l
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)( ^; l" z0 {2 S7 Z1 P A# y! f; i+ U
{
" I' ]. V g0 W2 T DWORD mx = *D2Client::ptMouseX;
$ J! Q' x# j8 V. `: x8 m DWORD my = *D2Client::ptMouseY;
" `( O* y8 j" w* U7 O if(isOnGoldCoinFixBtn(mx, my)) h6 n9 a3 K& n# l6 t2 p: s% |/ X
return TRUE;
! W8 g: n6 H0 c7 p; ? return FALSE;
" m' J4 K3 b- S; ~4 c6 B5 t5 N6 s}
d; K5 I5 H. z$ c/ g; I% Y2 k$ u( U# o__declspec(naked) void caller_goldcoin()
2 k( d. V& }+ G1 h( u{4 B, ?% P |8 _6 Z/ I
__asm
, m; ?: Y' j& q- Z; j {
* W5 T. I* B( i0 i( v# a push ebx
; Z* `) W3 W: \& B+ C, E* F9 k6 A) }6 N mov ecx, esi
' Y- o$ Q, o P( x mov edx, edi) e# n* T1 g7 X3 g
call m_NewStatShow_goldcoin
* Z% @6 r* D2 t- i% e& o% j pop ebx! f+ B @. A: q: |
pop esi
8 L" k7 [6 d6 x6 @; h retn
2 a6 d; _ j8 m7 |, Q+ p- H& y }2 H* }9 p3 B3 H3 u f0 _7 M
}% o5 s [" m% ^* S7 ^* Q
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
) _8 C9 k8 e2 u% a4 V2 Y* [. A{
9 D1 F4 a0 C; R- |& c' ^/ B* X if (*nXpos > D2Client::ptScreenSize->x / 2)+ \) z1 q% |+ F5 T# I. R0 `
{% d0 x. c% d$ @/ {
*nXpos = getXGoldCoinFixBtn();, e: w' F+ ^ [
*nYpos = getYGoldCoinFixBtn();" o8 T4 \, U* Q2 H8 ?# `
}* S+ c! P. G3 g( K" h$ F, r
}
+ I2 Q; }* O$ D2 e& Y* m1 z__declspec(naked) void caller_goldcoinimg()# S2 n. y0 [( v
{4 u$ t+ {; `& z! B t4 i) r
__asm. ~& |4 Z! {- f* i& N% A
{
% ~, X% G0 R) m5 x) M- {7 B4 y PUSHAD) }! O7 r+ e1 q2 y
lea eax, dword ptr ss : [esp + 0x38]
e; h( v4 C8 J9 E" Q push eax
3 k+ p- p0 c. A' S push dword ptr ss : [esp + 0x38]
: g: l6 T) L; K1 Y push dword ptr ss : [esp + 0x38]
7 w3 q+ H6 f; g lea eax, dword ptr ss : [esp + 0x38] ?( z& u+ Q) w# }7 K: U z
push eax
$ i4 O) B+ c+ _* ~* U/ B lea eax, dword ptr ss : [esp + 0x38]
! Q' ]5 q! ~" r4 `3 R0 K0 |- a push eax
# r& O$ c: L0 Y s& m! N/ u! g push dword ptr ss : [esp + 0x38]( D4 ^& l1 x1 @4 {
call m_NewStatShow_goldcoinimg. q/ @; a- }) T# ]
POPAD
: H2 |" T7 A+ v) q( c9 u( P JMP D2Gfx::D2DrawImage
$ x% }) ~6 G5 b }8 f9 ^5 ~% ]! R1 }9 b' b: @ A
}
$ [ {% H6 y- CDWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
7 {6 \$ p) F/ a0 X{( o6 H2 K& ~1 J S E6 H7 W
if (x > D2Client::ptScreenSize->x / 2)8 C3 e( X' o, Y v% i" T7 B( g
{
. ?0 U2 |# }- _9 C *y = getYGoldCoinFixBtn();( K( Q! v* q$ S% x3 p# \/ o4 Q
return getXGoldCoinFixBtn() + 32;
3 C* T, u+ [% U* e' @9 m [/ Y }
- F8 j7 o6 s; }7 D- H return x;
) }( d# d. u3 ~$ n}- K5 m( E6 X0 u, G. `' r
__declspec(naked) void caller_goldcointext(), l. i) S6 u3 Q
{/ b% f# n! T4 x/ H
__asm x+ E8 F- f' g; B$ J
{
5 F5 G' C- m9 ? g PUSH ECX, }! l9 ?3 f- F' e; m J" A- p
PUSH EDI
% h" y, ^! W/ R" O, h PUSH ESI
R# a, \0 x/ T, Q& n+ \ PUSH EAX6 p o- G/ j" V( ]
MOV ECX, EDX! J, G; R6 H% W# c
LEA EDX,[ESP+0X4+0X10]5 [( w. |1 x0 H+ j7 T, \/ i* t
CALL m_NewStatShow_goldcointext8 H5 \7 \1 @ \ x) B
MOV EDX,EAX
8 T5 }4 G: c, p& n k1 Z- ` POP EAX
* A/ Q+ u& v3 s+ [% H POP ESI
7 `' K- k, J" r/ E$ v& q* V POP EDI
- ?9 q$ q6 W9 t, h POP ECX
' Z0 q: E4 m+ i7 R/ |3 w jmp D2Win::D2PrintString;3 w4 I% a. [' ~, R
}" W6 A, z* S' }6 B4 T
}- S2 l$ r8 l' h3 F
9 G1 g/ P. S+ D4 c2 _( O' e
BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)8 E/ t! \+ \/ w( A' o4 i
{
1 ?7 C* |) S2 Z' E4 A DWORD mx = *D2Client::ptMouseX;
. H) [3 n& O6 I+ N! ^7 X9 n$ g5 _ DWORD my = *D2Client::ptMouseY;# ^# d/ ? g4 c, `7 A3 X' O
if (isOnInvCloseFixBtn(mx, my))- W, G. c$ m0 x1 O5 i0 E, {
return TRUE;/ v; f% `( v; V# ?3 l
return FALSE;4 w% a& }; E% l! C- u- D
}
, C1 o5 p" ] O__declspec(naked) void caller_close(). J$ L+ o* `0 s4 F/ e
{/ M/ l% C5 P/ ]" c7 l: r& B7 }1 d
__asm7 \# X- |0 ?) X5 |
{& ?# b$ C+ {- _- g. a$ e
PUSH ESI6 t# M& \' r2 @1 o( T0 Y3 N
push ebx& r& `! G& d0 ~2 m; ^
call m_NewStatShow_close+ I6 t* D6 Y& \* {. M8 w' E5 x9 M
pop ebx6 c: Q# x8 Q2 P9 Y8 U/ c
pop esi( \& B/ i# i! l* }
retn: Z: s/ R% q* I8 F
}/ v: m2 V! J/ V! N1 `
}% C5 X! M% _: `1 v+ Y
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])% E3 _1 r, S' j! ^/ l
{' E0 d( j' i+ n- L: r Q8 E
*nXpos = getXInvCloseFixBtn();
& N/ X% |2 h$ z5 v" Z: M *nYpos = getYInvCloseFixBtn();
1 C0 p9 z5 ?0 N+ U# C}
2 }3 |! b6 V0 ^& y__declspec(naked) void caller_closeimg()' u, Z: C2 o g8 @/ X
{+ ~ i M6 d# B% p. T2 w
__asm
* G. l+ R" n" z+ `: o+ j) j/ J {
! J2 B0 _' P- |0 p$ h+ t PUSHAD& i3 a2 H0 b" b% z% a
lea eax, dword ptr ss : [esp + 0x38]
$ p( A a1 r' Z/ c push eax
7 s1 V. P# n g; r/ h push dword ptr ss : [esp + 0x38]& D. v9 J9 i% }, | N8 g
push dword ptr ss : [esp + 0x38]
6 D4 v3 l' ]* G4 D6 r; D/ U lea eax, dword ptr ss : [esp + 0x38]
6 ?" P2 i3 }: |! ?* g7 @ push eax
- r( h, [) s* r4 a3 m lea eax, dword ptr ss : [esp + 0x38]
, C% D V1 \) r: q0 o# l push eax* a% R6 v7 F3 O5 f9 m, v h1 ]
push dword ptr ss : [esp + 0x38]5 M9 Q! \; d; j t4 o4 u w
call m_NewStatShow_closeimg
: @! ^; g6 h$ t6 }; k POPAD0 B2 W9 \. t! U6 t. f
JMP D2Gfx::D2DrawImage
/ l, r1 l% t1 x. m }7 ?* u. C. w$ h7 X( S! l( Z2 m
}; e6 v7 B* K' H3 J* y' h
+ e6 u/ T& k% b5 u/ ?; Z, |
0 {3 N2 G$ h7 l) w. n, H! |# s
|
|