|
|
转载/ A6 J( R+ I& p7 V" b
BY SJ
6 r. R$ ~3 e( T9 O首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)* D1 f8 r( N7 z
' v" o4 y q5 a" s0 _, {2 ^' VD2Gfx::D2DrawImage-10041
0 n# p3 J" Z# r/ T; V& N1、修复技能的背景(不需要可以不要)
8 I, _" M2 g; b; ]$ D( q, K/ o: Doffset = D2Client::GetAddress(0x77AA8);$ X8 G. \8 Q9 F: d: U1 j6 k
Memory::SetCursor(offset);& j7 J, [. X* B) c
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
! R9 `2 J' ^% S% [5 ?( N; t9 f% B3 v7 ^/ W& s1 M& G* v
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
9 L- c0 g6 e" f. i+ _( J{# F, g0 c! ?% z' A. ^- p
//Init data for print image0 k, K/ G; O0 g+ ]& r
sDrawImageInfo data;" t2 }/ X. E5 c, |) R
ZeroMemory(&data, sizeof(data));/ a$ c: c/ M9 w. n0 M5 V" y7 D
% \) O/ F e% _5 U
//print background3 n. x$ L4 J: o y
setImage(&data, spellBackgroundImages);
. @1 o/ i1 r& b# }2 t# R7 _ setFrame(&data, 0);
k3 G' ~/ Y; r2 H: D int fixx = 511;7 k9 O& ~7 \% b2 x3 G' {8 b2 W
int fixy = 9;' r' o" f# G0 s0 ]5 }
D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);
* M+ I- P+ v& z setFrame(&data, 1);
! N; X+ V* s7 B2 @! Z D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
R0 H' _2 z z& V: B" g setFrame(&data, 2);
2 r, ?- {7 Q& {6 I- {' X# }' L2 Q) C D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//4321 r0 K! P" t5 B9 } ~( `3 g6 J$ Q! O
setFrame(&data, 3);
7 k+ }' d6 {+ c! V; p% t D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);, h8 U+ _6 C% |) n i" _
}& A! @6 d6 t# R5 t) C: ?
__declspec(naked) void caller_SpellBackGroundFix()
% F# u$ u! V, [/ H{
" G+ ?, C" u9 F* R( ?9 K4 W __asm
+ I, }6 k9 \0 | f/ |" j6 s% X/ G4 Q {; b0 m% t3 d8 n+ o, {6 _3 z
PUSHAD
- `& z1 z. v) F! ?9 m9 n/ K lea eax, dword ptr ss : [esp + 0x38]" p% \6 j7 O4 a
push eax
5 |5 ?0 I" P, U/ ]1 s1 w+ b- W push dword ptr ss : [esp + 0x38]* h ~9 B: Z( M& u
push dword ptr ss : [esp + 0x38]
: A( m$ t0 O( J' v& S lea eax, dword ptr ss : [esp + 0x38]
+ [" ^* ^4 O. O& G2 ~( R push eax
* x, m+ I1 M) m5 O! C) \5 } lea eax, dword ptr ss : [esp + 0x38]9 H" ?3 a4 ~- U e$ p* V4 r6 n
push eax- M" F% P( p2 y$ O
push dword ptr ss : [esp + 0x38]
/ ]' I h* c6 c3 l* p call m_NewStatShow_SpellBackGroundFix
2 H0 ~- L+ a. [& h POPAD6 X+ y9 ~% L% M6 u3 H: R. U
JMP D2Gfx::D2DrawImage
8 i' g6 t0 B5 f& D }
( J4 t; ^9 y) c/ a}/ \! W$ W* K' r8 H
9 X; g: A; v# f& P" Q0 i& k, S
2、我们如法炮制小站的背景
8 ?3 ]: I# D0 l) i
E/ A0 a3 I& y- K- U8 Poffset = D2Client::GetAddress(0xAB010);! C' _0 i- a! _, ?0 J9 H
Memory::SetCursor(offset);
: T/ ]9 z7 e3 @: j( q; d; s# Y YMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
' T& U5 |/ l* h) f7 O! J# R% u- h V$ ~* a6 |4 W) V
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
' k( ~ C( J' E; m( C8 `{2 l0 t, \4 n( e8 {& X
//Init data for print image
& t) E. g4 a d3 S sDrawImageInfo data;
d# r4 B5 {& X. u9 |# t* ] ZeroMemory(&data, sizeof(data));" t1 \) ~; I& ]7 K1 C0 |3 |
* ?; r) ~. Y O( U! m i
//print background
7 \* j) R- C n9 {! P% X setImage(&data, waypointBackgroundImages);# v9 ?. C' t4 \ m' g
setFrame(&data, 0);
# h, a, C7 [$ I& W" f int fixx = 0;/ d5 V, @& g2 m7 T" w
int fixy = 9;
8 n4 l; H Z, |* E" J' c D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);
4 ^* P0 E6 e9 |: s; m& X setFrame(&data, 1);
4 {8 E$ E5 S7 o" D8 u+ u; ` D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
# F3 P9 D2 a" T% m9 v9 l6 ^3 M setFrame(&data, 2);$ \5 r& @7 R I+ }- B; a
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
- H+ Z7 b& z3 _; r0 B setFrame(&data, 3);
2 ]# Q5 k6 R& U. g D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
# p3 h- D! \1 v8 d7 \& ~8 D& c3 c( s+ r* Y" I) b& M
}/ ?! D! t% d) u9 G
__declspec(naked) void caller_WayPointBackGroundFix()
' s0 x. |, @, K! o* E. W; g$ G{
7 j2 ?5 Q! ~; M __asm
- M1 k0 F( \( ?5 F( m, D% X9 ]% r0 v {
# s' u( i3 J7 v PUSHAD9 M# D$ x1 D6 m8 X
lea eax, dword ptr ss : [esp + 0x38]
& G- o+ A% e$ T$ R; i: s( U push eax Z7 W" L) i1 Q7 h$ z1 e
push dword ptr ss : [esp + 0x38]
9 m$ u5 I# T8 A! z# u8 W" B push dword ptr ss : [esp + 0x38]* l# V# \. J2 K+ e. w# w/ H
lea eax, dword ptr ss : [esp + 0x38]
/ e2 W9 J1 U7 f' K: t1 |1 j3 _5 h. u push eax
, G2 h7 Z- m9 l' o lea eax, dword ptr ss : [esp + 0x38]
/ V) m9 S: w$ G push eax
6 c! V) t0 h3 G: f0 Y8 _ push dword ptr ss : [esp + 0x38]
' |, r: t. V( u/ t call m_NewStatShow_WayPointBackGroundFix; u: c( V/ b9 ~
POPAD( Q9 V7 S0 d/ e: _% S
JMP D2Gfx::D2DrawImage
( V/ r1 S" {0 [9 T$ v% y$ W( v }2 w2 i. S( u' v1 K1 Q1 M2 ^
}- y. r/ }6 K# t3 T. f
! p9 O& r" d' D9 D& {. n3、以下可以搞16*16超级箱子-腾出我们需要的边缘! T* _9 g9 P9 _, ^. @( ^1 T, U$ C2 S
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)) W& }) s9 f( e' @; y! U) e, [) P
{& `& A9 w& r2 [. t: f" i
class D2MultiRes : public Library<D2MultiRes>. ~7 K" K: R6 f9 Y
{; ~, J/ p+ a; ?5 M: r
public:
1 B( H ^" O e+ |/ ~ static void Init()
7 A/ ^* a L7 t! \- v' D3 F {) T$ D9 v" _. y# @ _
Name = "D2MultiRes.dll";2 F! p7 Y- R' M
Offset = LoadDiabloLibrary();
& C; g9 m0 r5 \ }9 @6 {1 E; f! `+ z0 E/ J! Y
};
+ K9 {# [! g; v: G0 x+ Q6 i" d D2MultiRes::Init();" ^) W) P! ^! w5 @6 M& @- X) C
D2MultiRes::HookLibrary();& S9 v4 ?, m/ H* A
2 T- @$ N- j0 r( a" N& N' n- d! @/ c# x9 X0 a
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);- O- N2 d n, k& ^
Memory::SetCursor(MiscFunctionsOffset);, G; ~3 Z' J: t3 j
Memory::ChangeDword(0x1b0, 0x200);; D5 b; H, ~, M4 F: w" N8 R+ ~
2 S* T, B1 V L2 C% Q3 p! W" e
1 e- T; F4 O! k; X% z MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);% I& z1 @* h+ Q) H" {
Memory::SetCursor(MiscFunctionsOffset);
6 g( ^+ `/ k6 g4 I8 Q/ ]: u6 Z, h Memory::ChangeDword(0x140, 0x200);( o0 g; e2 b; |- E; O2 r' ?
( Z$ w) v4 s) |6 S% t3 w
$ a7 H W) V" d5 S1 ~0 n o MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);2 M1 d* |* L1 J/ e: ]1 e
Memory::SetCursor(MiscFunctionsOffset);
' X( c8 a" @0 a: X" T6 j' ]. Z Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
) w2 m5 @# R/ e7 {* E$ J4 a
1 i+ A' |/ t- o! m2 \6 ~4 x1 i$ ` MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);+ e$ k [1 l. z, s: _7 }4 k9 J w
Memory::SetCursor(MiscFunctionsOffset);
0 I) \+ W7 \5 I3 K: L Memory::ChangeDword(0x200,0x299);//下边缘 299最大
. n/ f' h+ \4 ]5 d1 y0 U5 _. g
, m' a3 c; E2 a) V1 C MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);$ N4 f5 F1 b; ^$ X* Y! x
Memory::SetCursor(MiscFunctionsOffset);: r% d0 z# F g/ p4 c3 W3 z: X# r; V
Memory::ChangeDword(-0x280, -0x400);//这个不要动. @! i9 _1 M, H
}! R6 p) F7 t9 t
! j" t* {) G6 y' j6 F! s
4、快完成了,是不是发现金币啥的位置不对??
% n- G5 O9 _2 E; G9 u d9 C; Z: v) R) ^& |# s" ]/ e' M
//这里修正我们的装备栏
0 m- P( c6 E) D" N. u; { offset = D2Client::GetAddress(0x99B6C);
9 w) k; M; }( \( _ Memory::SetCursor(offset);
2 z) g, H" M* |" g, ~% F Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);4 u' I1 |: z/ e# Y% r2 ]8 ^: Z, k% r
1 b b; B- C6 z7 ~5 n
offset = D2Client::GetAddress(0x99BA7);) w! G) h" z) `8 k
Memory::SetCursor(offset);
% H( b3 z7 O$ F! _) O2 U Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);! {% x: j1 K/ A; G) r
- {, T2 i% k2 K offset = D2Client::GetAddress(0x99BE2);7 z. X, ?) i! e1 Z9 d
Memory::SetCursor(offset);
( X* y; I" ~1 W+ Y Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);' R- K6 W" e% m6 c- i
7 c! N, q: s8 U* z8 I
offset = D2Client::GetAddress(0x99C1C);4 Z: ?, G8 w7 e5 o
Memory::SetCursor(offset);
* t/ k' O, e. s# _3 m# R; ~ Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
0 K- O& u. `, W! J. s: @' G
% z' ]3 Y0 l5 C6 p5 _ //取消两个popup,偷偷懒不过分# K' E2 p9 k7 K
offset = D2Client::GetAddress(0x9386d);, [/ y3 L- V- D
Memory::SetCursor(offset);
- W$ K$ x. ]) [( q Memory::ChangeByte(0x8b, 0x33);* K, u H3 j+ M7 [9 y- v
Memory::ChangeByte(0xc8, 0xC9);
/ c, ?# \, i$ n% i, m* F7 b v offset = D2Client::GetAddress(0x9390b);) \6 j u* \8 V# ]
Memory::SetCursor(offset);7 U% ^. H7 Y$ {7 V4 q, S8 c0 D
Memory::ChangeByte(0x8b, 0x33);
' p: P/ v1 I5 F9 @) W Q Memory::ChangeByte(0xc8, 0xC9);9 N( \* l& e _4 t6 n$ W
- K7 ?. y K) O$ Z" C% n2 T
//修正提取金币1 W$ _$ s4 T" P! E$ `/ _
offset = D2Client::GetAddress(0x8D3E5);
6 E9 y1 e5 |3 g Memory::SetCursor(offset);, v& K8 X' d$ H; M" d
Memory::ChangeByte(0xA1, 0xE9);- ~: d3 x& t+ j" N4 a" l5 A4 A
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);- t$ l) |! o3 M3 T- X! C
% U/ I _2 y$ g' c* c
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
- m% i5 }1 Q- C Memory::SetCursor(offset);
2 N. j& f8 y7 X5 y Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
, g0 R0 ?$ D* V
; {; z0 q8 W) I$ i/ z: w offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);. W8 ?; c1 q: p6 ~. [, ^
Memory::SetCursor(offset);0 `9 ]8 T6 ^ S: B# u& Y7 ]# G& c
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);& N, `( j% y. ~6 W$ N
3 q) `- m3 Q& n W, u //修正关闭按钮
# N9 [; l a& V5 I# y9 ^/ } offset = D2Client::GetAddress(0x8BD90);9 Q' G+ B( u5 _. Q. d* h7 x& R
Memory::SetCursor(offset);
2 I7 ] f$ T; ^ n; g Memory::ChangeByte(0xA1, 0xE9);
, H& y6 ?. L! \! U Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
2 _+ E2 y7 X, J. i U* W% C5 q; R- e. H4 i& m
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000); H3 w9 r6 h w1 V. M& v, o, l
Memory::SetCursor(offset);
$ G/ z; }8 k9 Z7 }( z( a1 p4 [2 _ Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
5 o# M$ \4 V `" Q1 [/ D) n8 b1 p/ j3 U5 l( G( u
6 Y: u* M: v' D. T5 }7 V: F
//以下是细节
) u( e6 j$ `5 V. f7 B#define getXGoldCoinFixBtn() RX(0x2d0); i3 g; b; @4 R" b/ S, Q
#define getLGoldCoinFixBtn() 32
: a" P) \! P) A; c6 D#define getYGoldCoinFixBtn() RY(-0x59): S: t3 n( \8 u( l. c9 H! `$ p2 Q9 m
#define getHGoldCoinFixBtn() 32/ M' p. G+ W8 z4 `) P# P
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
- V; @4 [# p# Z) }+ M
4 B$ f( y( U. w& \8 y1 c# F4 h; C#define getXInvCloseFixBtn() RX(0x3db)
/ U1 X" F" |/ T5 @2 h- K/ c" i/ H* I#define getLInvCloseFixBtn() 32
8 _+ } k, T" J2 l( C0 a" ~1 Q#define getYInvCloseFixBtn() RY(-0x63)
5 [% M* b$ Q, S5 U4 U#define getHInvCloseFixBtn() 32 x# j1 A, f' _, Z4 a! F7 g
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
3 U$ E) J) S1 g+ D% d2 l8 N* x; l0 y/ m0 E) x
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)* e& w, r& ? b1 [& a$ W
{
H4 E4 p+ y0 v5 L, ?. [6 g; R DWORD mx = *D2Client::ptMouseX;* A. F% c4 t I7 {
DWORD my = *D2Client::ptMouseY;( c* ?9 o- `; Z( w9 z- ?, Q) G
if(isOnGoldCoinFixBtn(mx, my))0 ]2 c! K1 ^; K, @) B, w) J- K
return TRUE;
" Y3 F$ i: }* U# u' [! D return FALSE;9 a9 Q7 ?9 b( Z! z
}, F$ t: r a; U$ C- a$ K5 }
__declspec(naked) void caller_goldcoin()
6 `: @% X) y/ v{
- o5 F6 l. l* h ^( M __asm: i! y3 {3 p; H" i
{( I, C+ c: a# f/ M0 c8 L/ g
push ebx
0 q( n9 i7 Z9 E; o B' R% Q mov ecx, esi
+ \% S8 O: F- O( B mov edx, edi
/ e6 f: G! t6 R call m_NewStatShow_goldcoin
' v4 k8 I3 y ~* Y2 w4 v pop ebx
; `. p. z* j- o+ [/ T8 W9 R pop esi2 _0 R0 d2 w/ ]( A; n/ q$ k2 y) y
retn
5 v6 N7 _4 n0 D; W3 s+ A/ { }
- {/ M$ p5 W5 @- c}
7 C* G) Z1 G: H1 O" g2 t/ @# ]void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])+ J5 B4 d* {: L' l0 S
{
9 ~+ [) W+ M9 z% L; X4 [ if (*nXpos > D2Client::ptScreenSize->x / 2)
$ L$ [5 R3 q0 x2 b) C {! v+ O6 l/ U8 l
*nXpos = getXGoldCoinFixBtn();# I5 T- S4 k1 Y9 r* a
*nYpos = getYGoldCoinFixBtn();
6 @1 u+ F) c, j6 \ }
6 Z! U' `: J9 u& Y6 N( o}
6 ?: T% m, l. }5 n7 O+ P/ W__declspec(naked) void caller_goldcoinimg(): ~7 c! p; G4 Z: m# P
{0 D8 l3 K( K3 i1 q) Y$ d' Y
__asm
. L$ n; h x) g# z8 u/ [ {& G! D5 H- m2 D. [) Y( D8 Y4 t
PUSHAD
' i9 K+ U# O6 {- \% O# O9 q lea eax, dword ptr ss : [esp + 0x38]
3 B- W% w) `( ~ push eax- K C' k3 I( s6 `& }3 y1 Q8 g
push dword ptr ss : [esp + 0x38]
( u2 a; a4 r: t4 ]9 ] push dword ptr ss : [esp + 0x38]" \0 @3 p% s* n* B
lea eax, dword ptr ss : [esp + 0x38]
5 O+ K6 K$ Z) i* A- x: l push eax
+ j9 Z% K$ f, t3 [2 k lea eax, dword ptr ss : [esp + 0x38]8 f8 \/ O' d5 B' k; F
push eax
P3 F6 |7 I/ ~ push dword ptr ss : [esp + 0x38]1 I9 [" l# V" c( {) `
call m_NewStatShow_goldcoinimg
6 O0 |$ W( Z- U% I" ~0 ?4 G/ ]5 m" v POPAD: _1 q+ W3 D/ I. r6 O V: M5 U
JMP D2Gfx::D2DrawImage
4 j+ c g" T4 ^: ~0 f! A* T }# E2 n' ~! D" D, d7 U a
} p! E- @$ t) ]- s( r2 `' m( j
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标' D3 @+ u" Q% e7 x/ ~
{4 P9 ^7 F' e2 [
if (x > D2Client::ptScreenSize->x / 2)% H1 r$ Y- b5 o5 y
{
# R: J' R# M4 ~ *y = getYGoldCoinFixBtn();6 ~$ |- U) n5 w1 q) p
return getXGoldCoinFixBtn() + 32;" m1 P# |+ G+ M& g( L$ G- O, G
}
& A c) M) m5 ~! L! x4 J1 } return x;
/ i# m+ F& C) a/ p3 m' H$ U}. ^5 B9 x! t3 v U. B- h& N: j7 A
__declspec(naked) void caller_goldcointext()' y7 G7 |( e" H, a4 D1 s; ~7 E
{
( q! `+ a+ P5 r8 U __asm
* g) ^! T$ }5 ]+ n3 H+ N6 A" H0 p {* p, i7 N8 @7 ^$ n) X8 y ^
PUSH ECX; c3 i" [- f& I- _' M
PUSH EDI- {/ ^4 W: z. j! R& g
PUSH ESI" l3 ^" F$ y2 @/ e
PUSH EAX) W$ E0 u- v( @8 P" p
MOV ECX, EDX
: E# v- P( q+ l2 n# Y$ q4 q LEA EDX,[ESP+0X4+0X10]/ H2 u* }0 C+ R/ z0 E" \
CALL m_NewStatShow_goldcointext
' A$ ~( F! K/ s& e; p MOV EDX,EAX
4 B+ @$ R- w+ w$ C; s. ]2 m( ? POP EAX
% Z( X, h3 V E/ k5 J: F a- T POP ESI
" J/ w7 M g6 W! H# ?( [* |" I v# u: x POP EDI
8 y+ t7 o4 G6 `. _( A- ? POP ECX
4 Q) t& C1 S, }; ^/ ^; x9 D3 v7 ~, E jmp D2Win::D2PrintString;
0 h* K, U5 J. N$ @2 U0 o. o# D9 j$ q }
. D( m) O# p% D: @" n; _}
2 j- f' N! r4 X+ L$ v3 w: K
8 P* s2 S9 Z3 C2 rBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)$ e7 ]% u& @4 J2 n: v; o
{+ X$ W/ D* O: _- B0 y
DWORD mx = *D2Client::ptMouseX;
0 Z, a J4 b0 s2 |, k, \0 a6 t DWORD my = *D2Client::ptMouseY;
) j/ L1 T3 p# {. v- u- L9 W if (isOnInvCloseFixBtn(mx, my))
2 I( U& z* Q" L3 u1 } return TRUE;( P/ Z- a- I+ n/ p
return FALSE;3 Y" C# h" i3 d) v/ Z( j3 i
}
% V ?! r# M! \/ W2 L' Z__declspec(naked) void caller_close(): l3 u! {7 l2 i. h$ a8 h5 U9 M
{& O/ l9 J7 j. M+ I: _; ~) W2 w
__asm, D( f* P! S+ z' j
{9 a; f, V2 L8 v! |+ r
PUSH ESI
8 ]6 ~5 f0 L; W' F0 @ push ebx
, | q' d8 Z1 [ call m_NewStatShow_close* m: _: w$ _( A4 @
pop ebx& H7 g3 k/ x$ `0 z7 A
pop esi( l3 d( }$ E+ R" g
retn" q( `; B+ k6 _: m! T0 X
}
+ S+ A" n$ p p% z2 N2 {}
& K, n1 `# A- jvoid __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])1 e7 F& E, U$ G m3 ? L
{
, r( C9 b3 ], d Y/ b *nXpos = getXInvCloseFixBtn();
$ E, q4 A7 g6 \ *nYpos = getYInvCloseFixBtn();
w' U7 T/ n- T3 `7 P, u}
& T' G. m% O- ^7 ^__declspec(naked) void caller_closeimg()' y @5 d3 ]- S. H* b, U. I# e$ r
{
) K8 T# C" z7 O2 ]3 c: F3 t$ _ __asm% @ k. E4 B; z8 A1 M! ]- t' V8 i
{
. x' s+ S; A. b$ U# q PUSHAD$ h- C! T3 R. J' G" Q/ j
lea eax, dword ptr ss : [esp + 0x38]: K r+ ~" @8 _
push eax
9 Y! G" ?# D0 V) v( a) v- X push dword ptr ss : [esp + 0x38]
2 A1 w4 i2 l2 a7 S7 ]4 ]# M$ } push dword ptr ss : [esp + 0x38]
, c- N- j% z5 e7 G lea eax, dword ptr ss : [esp + 0x38]/ b, }& R: a% Q2 j5 c* l% p0 _
push eax
0 s U4 Z$ ^1 L. w" t lea eax, dword ptr ss : [esp + 0x38]) Y" U) ]/ v2 P' O% D' f
push eax
5 _1 N0 X' s! g2 X% ~9 \* D push dword ptr ss : [esp + 0x38]7 i" Z& w1 D. s* P: f. |3 P
call m_NewStatShow_closeimg. q' q. B" m1 c
POPAD
& B8 i2 S' s# ` m# `4 p JMP D2Gfx::D2DrawImage
5 d) [3 b' W0 L- Z+ z; Y" F }) S9 b+ n$ C1 b0 J y
}
0 p4 l' A) f/ ]$ H" l B/ p- O$ u6 m" p* l( `: c' |, E
9 k1 G8 Z# }* m D" `* ^! N |
|