|
|
转载
% i4 V. j) Q* G# p3 }2 ^BY SJ
* V* d( |0 i, e; \首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
+ m' q- i1 y3 t# N" @: `6 y6 d8 u+ h4 ]8 `5 L3 W. z4 e, q+ Q9 K
D2Gfx::D2DrawImage-10041' Z% s s& y) A
1、修复技能的背景(不需要可以不要)
2 _ T. j S6 a8 M7 noffset = D2Client::GetAddress(0x77AA8);
4 S _5 @' @+ U) {3 w; y7 i9 nMemory::SetCursor(offset);# K: }! a! D; `3 q; a l, k
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);% u3 x! U1 E" g0 W% D! d
4 o5 b/ Y8 {1 o; o0 Kvoid __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
0 a8 G& j7 s" p/ s. ?: Q{
& C8 l( ]$ l9 \0 w) u( n //Init data for print image
+ a1 `- `) Q2 P& u( r sDrawImageInfo data;
/ d$ p3 D& v2 @1 ?( p ZeroMemory(&data, sizeof(data));
- x( K |! J. ^. |# F+ l4 G
6 @6 ^' V5 p+ }1 z0 i; } //print background& Y3 X, a7 O( j a- |8 d J
setImage(&data, spellBackgroundImages);- n4 b8 g) X0 T$ q* @4 ^% J$ v" b
setFrame(&data, 0);- v0 I7 j! }1 _# }# ]* d' f
int fixx = 511;( W' e: s3 o6 h
int fixy = 9;
6 D$ ]- j, X2 k% C, b D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);: F" ^8 ]) v- C5 o/ g
setFrame(&data, 1);
8 c6 r }; U+ W- H D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
& M9 V: a8 i1 N9 _# R4 L setFrame(&data, 2);: X7 [) c2 x h! @% s ]/ v
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//4323 d+ B1 v- w% v" ?3 K
setFrame(&data, 3);
`, i5 A8 T, J# j. H4 x3 U1 `3 Q D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
+ F* ]1 h& S; c# V# L( b' P% Z* M}
% z) W6 Q- }8 y$ i! j4 b$ Z__declspec(naked) void caller_SpellBackGroundFix()- m4 |6 ~8 i @' e" r$ D
{( V: A7 y& B7 m: v D3 L
__asm+ p$ U! r# |+ g$ x8 E: Q
{# U; e/ J' t, f3 O5 [
PUSHAD
0 D; x, M- e* K, f1 R1 B lea eax, dword ptr ss : [esp + 0x38]
" H. J' f& I" @7 H: ^, U" o. { push eax
8 z U2 b! X" {. `4 q' G4 W4 I- j: C- M push dword ptr ss : [esp + 0x38]
" M0 E# u+ Y; S$ @3 ~ Z push dword ptr ss : [esp + 0x38]
( f( a2 ^% Q1 K7 a) R; A, B! G" \ lea eax, dword ptr ss : [esp + 0x38]
0 h8 D( e: G8 F: g push eax
: D3 `8 h' G7 O5 Z; q8 _" K lea eax, dword ptr ss : [esp + 0x38]' l' {: h6 ~; m4 h
push eax' o0 t5 q- ^5 }( a6 ?
push dword ptr ss : [esp + 0x38]. O- v1 G3 C& m7 I( r
call m_NewStatShow_SpellBackGroundFix
/ U$ {0 T. `* d& @* _5 o/ y POPAD
5 V& V' @* _8 J) J7 b JMP D2Gfx::D2DrawImage
7 \& l8 {9 h ~" k4 K( {# Q }
2 \1 Y2 h( ?5 i! D4 k}
/ d& a1 X' D) W, u( t. A0 Y
( v# H/ g& _6 @8 U2、我们如法炮制小站的背景
- i' Y6 T) E; L% N: O. g3 r
1 S+ A; {$ Y2 K7 e% o+ goffset = D2Client::GetAddress(0xAB010);
& D! R% c- F* ? R4 a: @$ A) ZMemory::SetCursor(offset);1 \" Z; d5 \# i- I- _
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
7 s2 f& e4 ]: K. f, k F* U F& B; v* w1 b- l" t' U
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256]): ?, N6 X2 Q+ H6 _: v5 k( C2 B) L
{6 M( H7 I' ?- ]0 `
//Init data for print image
0 I) T6 U: T ^8 G sDrawImageInfo data;0 i- g' R2 e/ f& ~1 C5 a
ZeroMemory(&data, sizeof(data));
; a4 \& W4 D6 }: @3 M$ e" ]- X: e# \8 F4 P0 B
//print background+ j. Q5 S% d, C- a; \) e
setImage(&data, waypointBackgroundImages);
- V3 W1 x+ _9 c* c# l6 Z setFrame(&data, 0);
. C- K' T; t2 c G- y, I( ~6 a( G int fixx = 0;: v& q' R& d& z) f8 Q; G8 r8 i
int fixy = 9;
2 M: V8 Q# Z- t8 n# b D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);2 O; j5 v2 [) i
setFrame(&data, 1);8 r6 R1 _: ~, p) Y% K
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256" {" X$ i1 z5 x0 O
setFrame(&data, 2);
5 H- Y/ R6 B* I D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//4326 t7 k* B, V( d- t$ w
setFrame(&data, 3);. Y% W# x& J6 n0 N5 j2 _+ W0 l
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
) T& \, _/ s/ @" z6 }) K& ]
( e. P* ?* O0 c7 q8 u. D- a}
1 A, v* N. ~8 ]) C O, w__declspec(naked) void caller_WayPointBackGroundFix(), B G9 g0 n2 d2 t1 J& a
{) V" K- H: h$ R7 s; C
__asm
$ D* X7 C3 |8 L1 ~$ M: f- n4 T* s {
8 z0 q/ F: q8 w$ J9 a% z PUSHAD7 T( M: v! q0 _0 }/ J
lea eax, dword ptr ss : [esp + 0x38]
7 U5 e e: p3 t7 `; c- { push eax: ]; x9 T* X- a! t/ m
push dword ptr ss : [esp + 0x38]
, o) V( t& L" J! u) z- M4 B push dword ptr ss : [esp + 0x38]- P) e" e. G6 \# @3 U% u4 w
lea eax, dword ptr ss : [esp + 0x38]
w1 l: T, C! {& @+ l) w push eax% x4 M$ V7 ^' `$ l! J! ?
lea eax, dword ptr ss : [esp + 0x38]% ~7 W: a: Z# m$ b3 E
push eax5 S& n* {8 V( G e2 N
push dword ptr ss : [esp + 0x38]( v6 B1 T- J8 U1 ^% `
call m_NewStatShow_WayPointBackGroundFix
& c3 E# z2 @$ E- O; J POPAD
. G4 |: z/ R9 h% n JMP D2Gfx::D2DrawImage/ ?' ?7 ^! I. M5 }
}, @" J* M6 D) q* x
}$ M. |0 k0 M3 E% n1 m& h: V! [
8 S: a2 s' y1 W9 ?' X3、以下可以搞16*16超级箱子-腾出我们需要的边缘
0 o7 h- @% U- Z9 H& M腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)# E3 D A: N$ O0 Z1 g( C3 P
{
3 O o% V& ]* @) Q class D2MultiRes : public Library<D2MultiRes>
J+ d* \) P( A, t; q: o6 A {: f2 f! S2 B/ s+ K/ r9 s
public:
/ @/ ~. @4 E, { static void Init()6 f5 a- @& m3 k, P0 D% s. v) a) F D2 e
{) Z4 l- H0 z T9 Q$ @" N+ Y
Name = "D2MultiRes.dll";/ Y$ n2 W5 `$ n. X2 t% a5 n
Offset = LoadDiabloLibrary();
: t$ I# @( B) ?( B% ?+ T }8 r6 V% W8 I; ~, D4 `. F0 s
};
' o0 B4 l7 U S9 k9 Q D2MultiRes::Init();
. D5 M( |! d) T2 o5 C5 |6 L/ H D2MultiRes::HookLibrary();0 {1 S }- v* `$ O
, `; ~3 G8 k, Q0 `- x1 K q4 N% w4 Y9 f0 H2 U8 F5 |
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
5 Z3 }4 b! z2 g" u0 W$ l. H5 j; l Memory::SetCursor(MiscFunctionsOffset);
* g/ v6 ]- Y. K Memory::ChangeDword(0x1b0, 0x200);4 i: L' t0 M, I# _3 s) p+ o
g( p$ b6 t' u4 l! i# d. }' d' E( f8 x+ E# [
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
; h' E C/ |) J# h1 e- n2 q Memory::SetCursor(MiscFunctionsOffset);1 l c( Q3 U0 H; `
Memory::ChangeDword(0x140, 0x200);1 F* m% g9 v* Q& K
4 l. g! T! o) @) J/ t. ]1 k$ D5 O4 `" b0 e/ l. F& _) E' p1 t c/ x& h
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);3 A, Y) |1 v5 @
Memory::SetCursor(MiscFunctionsOffset);
$ @( G# i6 p) x. ? Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
8 I- |" U6 d1 Y+ c# W
' m0 y! d. u+ N) ] MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);8 a1 D5 I. f) J
Memory::SetCursor(MiscFunctionsOffset);
; E3 T, l' ^* V8 A1 [ Memory::ChangeDword(0x200,0x299);//下边缘 299最大
7 u4 k/ W* a/ o. H
* K" A1 \/ [, i3 D( s/ a MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);0 h9 f6 B& q* E$ c( f/ f8 h
Memory::SetCursor(MiscFunctionsOffset);8 e& D' t9 ?" t$ V6 ~! K! x8 |) n# {
Memory::ChangeDword(-0x280, -0x400);//这个不要动( t+ E( l% t- E0 l! [% f: u
}
: k% t3 W* U6 X* x
, h+ [: a% x% J4、快完成了,是不是发现金币啥的位置不对??
9 c% K* j* {+ O7 C7 h3 z
% g# @; I$ r) Z, B$ l//这里修正我们的装备栏
) T* e6 S u& J" G* i offset = D2Client::GetAddress(0x99B6C);; U# V: E1 z+ X7 z* P4 w- G
Memory::SetCursor(offset);3 T6 ^& C5 C$ L w2 u0 l# E/ H. G
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
: H0 x/ N7 A/ z/ f0 o, V( r
! r2 M& e6 R+ ^4 y9 {- g+ Z offset = D2Client::GetAddress(0x99BA7);! p8 ?9 o6 C, Z
Memory::SetCursor(offset);
4 d/ l. [/ H+ d" j2 G Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);2 M' s2 d9 f8 y% _) V
+ O* _8 A% S$ C3 H! h; z
offset = D2Client::GetAddress(0x99BE2);
) e! p& m/ y7 T( \0 N; T: {2 c, L3 Z Memory::SetCursor(offset);
/ _7 K* C) Q1 k5 e8 M Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
9 f: n8 A6 U2 ]8 o% O
6 b T3 x5 E1 l, X! n* G offset = D2Client::GetAddress(0x99C1C);! B9 I: P# v" y& d3 Y4 R) C
Memory::SetCursor(offset);# G J( P! S8 i' z) K: U
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
+ ~1 _ ]) F! Z# `! U& [- v- G, f4 z8 L3 |* J1 _% X7 u
//取消两个popup,偷偷懒不过分% B+ K# K* p% x/ Q4 T9 o/ N
offset = D2Client::GetAddress(0x9386d);2 e7 W A, B/ J) X" m
Memory::SetCursor(offset);' P7 P* e7 M1 n2 b1 k
Memory::ChangeByte(0x8b, 0x33);
1 I0 V: {8 b7 i9 [* l K+ C Memory::ChangeByte(0xc8, 0xC9);# w9 w. F9 ~% V0 s/ v
offset = D2Client::GetAddress(0x9390b);1 Z( j. P$ J; F( P r. q% m
Memory::SetCursor(offset);5 h& E) \% d$ {4 v" `% z
Memory::ChangeByte(0x8b, 0x33);
0 j# R* a2 {; b! f+ Q+ o/ t: T Memory::ChangeByte(0xc8, 0xC9);' Q" T& N- P$ q4 p M8 y: s
0 c( t* P( Z* }/ I/ d) g8 l* { //修正提取金币
) l E3 y2 _- k0 \ S* p2 a offset = D2Client::GetAddress(0x8D3E5);
3 ^8 {% y6 D0 j6 _: v! g9 g Memory::SetCursor(offset);; k# Y) k8 }0 O G3 r, c
Memory::ChangeByte(0xA1, 0xE9);3 T0 j, |: J- p- u, i! F
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);1 s2 w3 R* n$ c9 i, y
! S) R3 f: L) Y# J3 r
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
2 `4 K6 ^4 ]2 B, p! e Memory::SetCursor(offset);
: d$ y/ L" x3 T6 `4 S2 ~ a; ~0 { Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
/ h; f4 A0 @$ y+ A S2 T, j( J& Y
& z |5 i4 D5 @, ]& N$ @" T offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);# L# n q; q1 V( x9 G! f
Memory::SetCursor(offset);
/ ^. e. k$ x" _ Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);. j, E6 P- z, E/ J/ b& Y. H
0 N r$ _2 V6 r! P
//修正关闭按钮
4 E3 C; q' E8 ^* W0 F offset = D2Client::GetAddress(0x8BD90);+ V: a; \; ]; @% s$ K& c2 V
Memory::SetCursor(offset);
5 c, o. ~: i: ]: P Memory::ChangeByte(0xA1, 0xE9);" N9 A/ T3 t& L+ Y+ H0 \. S
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
& ?% N1 _4 o5 y& L6 B
8 g% `* C# v3 W' j( N" J3 b offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);7 g) p0 D) A9 e! |# t+ k; f5 m5 W
Memory::SetCursor(offset);" Q9 F7 `3 L' A; x: F
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
& V6 G0 }; M9 W; ]# h
8 k( J; Y* O$ ^$ h. E4 j4 A" K- ~" c T$ o2 k% y
//以下是细节
/ O) h9 O; f9 A- M- D; C#define getXGoldCoinFixBtn() RX(0x2d0)
, g" e3 A6 v9 r9 h2 F: I) P- T" a#define getLGoldCoinFixBtn() 32
; J* E4 Q$ s& O- B) M2 Y7 [8 b5 r#define getYGoldCoinFixBtn() RY(-0x59)
2 U8 f3 W. U2 _; S/ z l#define getHGoldCoinFixBtn() 32
6 ?! n" n4 d, i. T5 A#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
5 E4 X' R( h1 } [; W3 u9 `( ?
% ?! Q1 }( U- i#define getXInvCloseFixBtn() RX(0x3db)
4 V) J% S6 k- D# x% G#define getLInvCloseFixBtn() 32 {1 u U# ~ \+ R
#define getYInvCloseFixBtn() RY(-0x63)$ a6 f& F0 T0 }4 ~
#define getHInvCloseFixBtn() 323 P* o9 e2 q0 x4 E; \6 H
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())9 ?& o' `- c4 k7 s
9 l9 p& l, K7 _8 c3 n8 l
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
- G2 t" T; q( ?; m7 e{+ j# T# K7 `2 C- [# p# Z5 g! c
DWORD mx = *D2Client::ptMouseX; K. P7 ?( |; u& l
DWORD my = *D2Client::ptMouseY;0 t2 |; N* q% L6 l J0 p# Q* [* F* j
if(isOnGoldCoinFixBtn(mx, my))
% |% m$ E9 R# z+ @ return TRUE;
J0 I3 J3 Z$ b return FALSE;. o2 \. c6 T+ f% |; Z
}! F- O8 C5 x( R- V" I; ?
__declspec(naked) void caller_goldcoin()( j: z4 ?! ~8 M, D
{5 C) S9 Z9 g/ e9 T. G
__asm' \% t" u2 Z b( F3 K0 E# b' s
{6 f& H5 v. B5 e9 E, Z2 d
push ebx! M7 @- h. f3 m1 f" N8 q
mov ecx, esi& k/ m+ ]$ x. T! R" T! Y
mov edx, edi& ^; L1 b: \* @. R7 G7 T
call m_NewStatShow_goldcoin
" _* K$ F& \/ C' Q! d% ? pop ebx
; n) E4 N' N J# Y2 E pop esi
) ]9 z! H1 p) c) y retn
" }7 n: G5 }% ]; S9 o$ w }
1 v6 p9 b/ e/ u6 r9 u# L B}9 B% o2 q& W' V
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])( p5 Q( \8 Y/ `1 s
{3 Z# W" d! z- T% C% w4 _
if (*nXpos > D2Client::ptScreenSize->x / 2): m" L0 @& P1 ]7 t% H+ n5 L
{8 u$ k2 h# \8 \3 p
*nXpos = getXGoldCoinFixBtn();
1 i+ P+ ?+ g! m( l I8 Z9 @6 U *nYpos = getYGoldCoinFixBtn();
: i$ |. b$ C( ~7 I: U+ i8 U }- s4 a6 B; {/ v! z2 ]2 N
}
7 E6 i! a |1 Z2 r. S7 A__declspec(naked) void caller_goldcoinimg()" H7 F4 Y6 j+ T/ T4 B+ R
{) f, u- a+ g u1 O; j% c
__asm( g: z/ x- }7 g
{
' I3 d- ~2 `" @+ v PUSHAD
5 R0 h! n7 z& z lea eax, dword ptr ss : [esp + 0x38]
2 b/ k5 r6 Y4 K8 _ v. ^ push eax4 Y% n) c% A" r9 H* V8 w
push dword ptr ss : [esp + 0x38]* D4 ~+ f$ c; \4 \$ @- M8 S
push dword ptr ss : [esp + 0x38]
1 c6 o; N, _, y6 M% n& i( h" W5 ~ lea eax, dword ptr ss : [esp + 0x38]
0 B% |7 w* @9 X }6 B0 S push eax$ _7 ~2 J. ?0 S; c; _ ~" Z6 \) ~
lea eax, dword ptr ss : [esp + 0x38]$ E) l4 P% K# Y8 Y* S7 x8 T
push eax& J7 w8 R: w9 x: d7 N* L
push dword ptr ss : [esp + 0x38]
0 m: r( S. G7 r call m_NewStatShow_goldcoinimg# z4 e7 k; s% v$ y; m1 A
POPAD' i2 [. g" i8 I5 K$ e$ _8 K
JMP D2Gfx::D2DrawImage
+ j. q8 O2 ~* a3 N: d6 C }
. Q! j- r+ c3 ^: \$ i- a1 c3 n}$ l1 w' Y# F% \2 w' D/ z
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
4 u% j6 Y6 v! k1 H3 q9 P{
: K0 Q9 u7 S8 b- w8 x; j" E if (x > D2Client::ptScreenSize->x / 2)
% ^9 Y: Q& c0 M; ~# x- O { z. d( q! K% F" O" x+ c2 n$ N
*y = getYGoldCoinFixBtn();: v2 t, o! {8 b
return getXGoldCoinFixBtn() + 32;
; R8 d- c3 B/ F }$ d8 l/ J, V. L# ~0 A
return x;
) p: b0 M3 Z: _! A0 V}
Q3 [* c* F& |__declspec(naked) void caller_goldcointext()
# P% v% q5 B5 P. ~) [1 u+ L s! |{; G5 i* ?% C. ^2 I& O
__asm/ w3 D; e5 }4 ~( h0 q
{
( f2 v' B: n, G+ d( G2 @ PUSH ECX4 N" J9 C$ W* u6 C
PUSH EDI
' R+ U0 S/ V; {! y, P PUSH ESI
" I0 U$ u( d; ~4 ]" E3 y" F PUSH EAX1 L6 W9 W1 M( F7 O
MOV ECX, EDX7 b ?# \* J( ^) u/ B- Z+ H& s0 A
LEA EDX,[ESP+0X4+0X10]' c6 K) n# R1 Z4 Z D$ ]3 i8 N
CALL m_NewStatShow_goldcointext
' T: _7 x3 q; ?3 X. _ I5 k3 @ MOV EDX,EAX
" i2 G0 E. H0 L8 K. G" U POP EAX, W: W/ [" R2 A; i
POP ESI; H( ~# L! b9 E4 d" O& y/ D
POP EDI
5 a1 ~3 \" p; v. Z$ E9 Y POP ECX6 X; j% _3 o6 k7 j
jmp D2Win::D2PrintString;
6 m) s; g; Q* N% K- V }* A1 v* X) `. v3 @
}% M2 v% C! A8 @+ v" s* V* @& s
6 G1 d: Y! F! GBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
) K' v5 J# q2 w6 B5 _5 D6 |+ u7 K{/ N7 M# S0 l4 X' A
DWORD mx = *D2Client::ptMouseX;
/ g! |, G. Y6 }6 _- S; V3 R DWORD my = *D2Client::ptMouseY;1 V z) f7 X/ U3 F- `
if (isOnInvCloseFixBtn(mx, my)): U* m6 M4 h$ O8 `. e0 F
return TRUE;* T9 R7 b9 O' H# Q
return FALSE; E- }$ r4 v7 x1 y5 G& s+ Q0 ~. J
}
% H: k, x v+ B9 @% f4 G__declspec(naked) void caller_close()
6 w; I' C: h" ]6 K{
6 J* c2 M8 q3 f9 k __asm
4 [5 `. z9 T5 `$ e, ^9 H {4 U; B$ A6 s! A( F5 W" i7 y$ r" D
PUSH ESI) e+ O8 I* Z. \- y$ o
push ebx
6 d2 [8 r( a0 r0 y; P2 ]" x call m_NewStatShow_close/ [4 W n0 `4 c2 ^* v* @; y. D
pop ebx
# H, ]$ l J& ` pop esi
/ [6 I1 q) m8 Q# i; [+ I retn- ]' E- q: U* N6 g
}
5 J& R8 i M" ?! _! w2 }$ ~& @}
; U; @- w7 w# W) J: @# gvoid __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
6 d# X, l% Q6 i3 E{1 @1 B) m8 `6 P+ ~) Y+ I
*nXpos = getXInvCloseFixBtn();
" S/ ^% |$ G5 W9 V3 D *nYpos = getYInvCloseFixBtn();
! o! Y' a3 _; u) Q}
; T" v6 m+ f' h. f, H7 V__declspec(naked) void caller_closeimg()8 y9 r6 B% F- B
{- Y: M( M$ K; X7 g+ |9 T
__asm! \$ h* x3 V; W2 W
{
6 p4 {! d5 a7 u7 V" T PUSHAD
0 J$ X3 j7 ^6 d8 U# M8 x lea eax, dword ptr ss : [esp + 0x38]
' `( ?# K% q4 C5 b j push eax
4 H( Z2 J5 l7 p; ] push dword ptr ss : [esp + 0x38]* \. i" l' F( ]5 n' z
push dword ptr ss : [esp + 0x38]
+ ], X5 m& I& S; _" Q( l. b lea eax, dword ptr ss : [esp + 0x38]
/ J' q! P7 n( k/ Q- u4 r push eax
8 c- t7 R8 P5 H5 n: P+ T0 v* S lea eax, dword ptr ss : [esp + 0x38]
" [/ A0 h7 ?' D8 t push eax* l) m! W/ s3 @7 c$ g
push dword ptr ss : [esp + 0x38]" C' O9 t! O, s$ S) [
call m_NewStatShow_closeimg
3 S) K+ I/ l2 z' b9 y# S POPAD
: f$ B; f, X- J- w0 T8 J JMP D2Gfx::D2DrawImage
0 d1 g& p, i4 i! B s9 j }1 T& f* @9 Y- ]+ Z& q
}% w7 `; c+ @! E2 q6 z3 o+ y- t
. o! ]2 Z! f# r h w7 X% u7 M: o
: P& y) g( R- n6 L5 @. Y* c! { |
|