|
|
转载8 r! T9 ]$ y. ^
BY SJ: L/ h: k4 n/ B, {* r4 ]
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
. d% b3 r& e9 ^
. U/ V, H6 h+ `, P: l- N! S8 \1 rD2Gfx::D2DrawImage-10041
8 A+ z, @, l" s: E/ D4 x1、修复技能的背景(不需要可以不要)
' P6 S! f* P X5 c0 Yoffset = D2Client::GetAddress(0x77AA8);& k. ^5 H8 t3 w& t/ [9 i- }3 L
Memory::SetCursor(offset);
" [/ F/ d1 k( A) X! KMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);) f9 O* r! q+ U5 T6 W- ~$ Q7 i1 s2 }
2 z1 l( X% S- \1 j w* ]void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])$ U. Z6 c1 f X
{) ^2 e4 I& S/ E* u8 o, m& V
//Init data for print image
2 ^" R2 B8 e- A" U. U2 L: u: I+ w sDrawImageInfo data;* Q+ m, A' q/ u* R% j z+ S
ZeroMemory(&data, sizeof(data)); ^% @7 q/ C( o1 t
, k" ^/ ~0 @2 t9 f: d9 c; j- {
//print background
1 J' U) I8 v( @ setImage(&data, spellBackgroundImages);$ G9 K2 y( d# O6 @8 m
setFrame(&data, 0);
9 J* C: L/ M: x6 ?" k" T int fixx = 511;
1 M/ S% {& O2 E2 z& } int fixy = 9;
: y; q1 T( h& M$ r D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);- T! F! e5 b' T$ f! i/ J; K+ ]% q+ Q$ m! R
setFrame(&data, 1);- r i* J# w, h& u% i5 }
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
4 D/ h* z( }+ `& ` setFrame(&data, 2);, m2 X; M4 G8 |% P
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432: q) s# E: v f; p5 _
setFrame(&data, 3);
0 R1 h2 x: j, W3 T D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);& l3 V. X, K& ?7 K4 S1 f$ p
}
0 \5 _& A/ Q. s* l2 E ___declspec(naked) void caller_SpellBackGroundFix()0 z9 b' c5 K0 b
{
5 v) {" O7 F) b2 K$ Y1 a/ W7 g __asm! y% Y9 B# @9 R
{
s3 [4 x7 r, l; u/ i& Z& b+ I PUSHAD
" e9 a b5 u% y4 v! p& a, f lea eax, dword ptr ss : [esp + 0x38]
, e o( d$ Y; A1 \! d$ B push eax
: ]. w: `) R" D' H( A1 X; [" \ push dword ptr ss : [esp + 0x38]9 G3 n6 N2 t+ i" u9 C
push dword ptr ss : [esp + 0x38]4 l8 ?$ e7 z+ k0 ~( j
lea eax, dword ptr ss : [esp + 0x38]
9 w& ~, }0 X' f O push eax
$ H! ~5 Q X8 {/ T3 @, x lea eax, dword ptr ss : [esp + 0x38]4 ]7 X4 Y5 A$ X# @9 C, i
push eax
9 E3 v4 h/ G' ]( \$ X9 T: a push dword ptr ss : [esp + 0x38]
) Q7 C4 E+ K. y1 u7 d, W call m_NewStatShow_SpellBackGroundFix1 x( b% m) T: H1 v
POPAD
7 P3 x5 c0 m0 W% Q# G) p: g JMP D2Gfx::D2DrawImage
, A; s3 B* G2 i+ |3 i. J) s }
1 _8 x" W: {& Z, ?- E2 K}
" x; l- D# l& u2 J+ @3 j. A! K8 f5 e4 p0 W8 R# ~- c; k5 ^
2、我们如法炮制小站的背景" \+ e- I6 u0 V8 P$ u2 Z
- }# {" L3 n& ?
offset = D2Client::GetAddress(0xAB010);
3 P7 p/ y" Q2 W1 w8 ?Memory::SetCursor(offset);+ `' y3 @" G( Q
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
, }2 v& p7 M$ }# o6 ^, _6 z5 c* m( D7 W. }; ?4 {4 ^
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
& e/ p5 @! a& {1 B# S{ o$ E: I# u9 p$ s6 s* s
//Init data for print image
( U, | w+ X3 _' J$ H v6 z2 Q sDrawImageInfo data;
- W8 N' J/ c5 e+ p: X ZeroMemory(&data, sizeof(data));
( y* `$ K8 Y7 G+ t1 I7 X2 I' u; F( F: v3 r4 s) K4 ~, ?
//print background
( C* k; I! S k& a4 R: v8 H setImage(&data, waypointBackgroundImages);' w- B/ E+ \+ _6 h' p
setFrame(&data, 0);
3 E9 M# h& N. P2 L% Z. l int fixx = 0;
# B G5 q5 M- `( h+ b7 S" d int fixy = 9;
1 y$ |$ g1 x* m# a$ y# Q D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);; L# j, f( m' F
setFrame(&data, 1);
}% ~! G' Y; [6 P4 e5 c D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
' C$ R4 `, h& o; K! {5 J' m- f0 _ setFrame(&data, 2);" J+ _, w. V9 I$ _/ J' l& n
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
3 d+ o6 d2 t+ X3 T/ ~ setFrame(&data, 3);
8 @9 q8 u( |1 S- ^& S D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
0 c) S0 _( M* T) N g: x2 W
2 N5 j/ F6 V/ o' q) J}: q# p8 J1 I! d2 N8 o! h
__declspec(naked) void caller_WayPointBackGroundFix()
: j# V# T! X; {! M6 {' E{% y I$ k. Q. h8 @4 b# c
__asm
& ]# \2 Z5 ^1 |3 ]# @ {
T$ x/ Q* `4 g1 J, h, y; ]& ` PUSHAD
; Z4 n% I( ^) X2 F/ w8 ?$ ] lea eax, dword ptr ss : [esp + 0x38]/ H0 X: _& |, z5 Q
push eax
" Z) c, p7 ?# Z1 p& U9 L push dword ptr ss : [esp + 0x38]) M' F. ]; ?- U8 q6 K0 a
push dword ptr ss : [esp + 0x38]
) D, Q* |+ O- d4 i5 L9 ?* } lea eax, dword ptr ss : [esp + 0x38]
\4 Z0 m# x) f( e7 u) y push eax1 C- c9 I# Z$ W+ c4 H
lea eax, dword ptr ss : [esp + 0x38]
$ a2 D1 N+ }: J" h1 n$ s3 j; v push eax: p! |5 [6 I% M, X& C
push dword ptr ss : [esp + 0x38]6 p( d7 R+ V2 V2 M; S9 |
call m_NewStatShow_WayPointBackGroundFix
; |: P# R4 `8 R POPAD
; t# d0 _# w k, |. T4 t5 m JMP D2Gfx::D2DrawImage
( k* Q" G; S! \" V8 S) m }# L% s5 @. L- O' M' z
}5 G3 p" n( k3 D; g1 o
( |% [* P0 R' l2 V( j' Q3、以下可以搞16*16超级箱子-腾出我们需要的边缘
5 p' H2 _7 f! n3 @3 e) B1 e5 L% o腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)! }9 r g% {; F' f/ Q" \0 b, B. A
{
9 u7 @4 q# r# t: z8 h' l0 d0 J class D2MultiRes : public Library<D2MultiRes>
1 A) ~- s* G- a7 z6 k& y0 ~ {
1 \( J" ^' ? }1 { public:
6 y3 U# p. T# n, j. V% k static void Init()
9 ?- z3 ^5 {: S/ h( K6 r% h {6 e2 V3 U, [8 ^2 A- Z( s
Name = "D2MultiRes.dll";
V3 `8 s# `+ A3 t9 G) k! R7 Z Offset = LoadDiabloLibrary();* E1 }9 E# |- w
}% ]+ o x( K F$ B% H' p# [) c
};! G' I! O5 \' [; {' ]
D2MultiRes::Init();
% X- e% K, \4 ]2 I' V D2MultiRes::HookLibrary();
9 x. \: u6 Y$ l; k
: M# s/ P b `% u! A* ]) b2 }+ C V! M6 v" l% \. Q
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
3 t9 M- B( O" {" r1 k: C0 G! I Memory::SetCursor(MiscFunctionsOffset);. c( W$ b( n) t& ?7 {
Memory::ChangeDword(0x1b0, 0x200);
9 n- g) d& a' z8 ^$ ^6 ~2 r: F6 s8 i/ M b
. j3 E% a4 O- M
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
4 L/ ~; T" V" y' m8 ` Memory::SetCursor(MiscFunctionsOffset);. u( `( w( {6 F O
Memory::ChangeDword(0x140, 0x200);
X' \7 x. x. f( [0 D
$ B9 m3 e5 X1 L% U1 x5 Y' _7 X s7 T7 ^+ z% f8 R
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);& Q3 G9 M* S @; g3 {8 a K I
Memory::SetCursor(MiscFunctionsOffset);: k) P7 D9 S! {
Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
5 k; [- i! x' _9 C. X' r* W; f" s& d
, G1 \/ M* K' |/ S7 l MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
5 a5 \5 o& u- M6 K" J, e Memory::SetCursor(MiscFunctionsOffset);
7 e$ `$ P+ e* _ Memory::ChangeDword(0x200,0x299);//下边缘 299最大
% H9 s- E5 B1 b5 z5 R+ }4 @
0 O- Q- f: }3 c! t MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);% k2 T' b3 I/ {1 ~& l0 j2 u( W1 a
Memory::SetCursor(MiscFunctionsOffset);
* ]' ~# N6 j& X+ T Memory::ChangeDword(-0x280, -0x400);//这个不要动8 b+ k7 g- k# |0 H$ y6 T0 ~
}
( x4 ?% r2 Y* l' e' @* U
# S3 e1 `6 v# }4、快完成了,是不是发现金币啥的位置不对??: y& ~$ q: b4 u* g# }9 ]' A
+ S. i( r$ u9 |4 r4 `% L5 w//这里修正我们的装备栏
$ `( k; t& h( i1 U; Z7 T; m offset = D2Client::GetAddress(0x99B6C);; Q, l% i1 j3 W' p( P
Memory::SetCursor(offset);
8 y2 o1 |" A# W6 @" L' ^% U Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);8 F/ j2 |* B. d) J! R/ A9 l
0 S& Q' ~8 r& L4 {$ f
offset = D2Client::GetAddress(0x99BA7);6 j' P: C1 I2 |, n$ Q
Memory::SetCursor(offset);
+ ]- d/ k& U/ r5 ^: | Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);- d& H+ I5 m4 V4 N* T2 h
0 j- N5 s$ y8 [% L: W1 i offset = D2Client::GetAddress(0x99BE2);
9 W( U+ t- H( R x$ O5 ~* K7 n Memory::SetCursor(offset);8 R0 u' a. X/ ]; X v
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
- Q8 ~ z0 X r* r/ ]/ W. r u* `# V2 C
offset = D2Client::GetAddress(0x99C1C);
5 r: p o V% u' P5 I! c+ ` Memory::SetCursor(offset);
' v9 U8 u6 t! A; b7 X+ y5 M( N T Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);! O0 A) ]/ ~& U' f/ g5 C4 S6 m ^- l
. i+ p9 B% {8 |2 k& L' Z8 n //取消两个popup,偷偷懒不过分4 n) f: j, A0 x) D2 O' Z; M
offset = D2Client::GetAddress(0x9386d);
+ R8 ~/ K6 A: q" B6 J Memory::SetCursor(offset);
) V: ]9 @: t( L* j( Z+ T, M Memory::ChangeByte(0x8b, 0x33);( b B: }2 x; V2 r$ f
Memory::ChangeByte(0xc8, 0xC9);' a( b- t S {/ Y7 v
offset = D2Client::GetAddress(0x9390b);, s9 `1 p, Y9 U' F( Y V
Memory::SetCursor(offset);
3 E" E4 `9 _9 Y1 i0 Y Memory::ChangeByte(0x8b, 0x33);" O* Q: j, w: a) x7 h
Memory::ChangeByte(0xc8, 0xC9);
9 Y) h6 E5 H( B5 q
; v7 s& b' T7 F* C" Q4 p* s5 u0 j //修正提取金币
. s4 w4 h* q2 K3 q5 K offset = D2Client::GetAddress(0x8D3E5);
1 S9 s5 x7 s) D, u; M$ C7 j Memory::SetCursor(offset);' ^; p4 [; @) d0 X2 D; J1 Z0 Y
Memory::ChangeByte(0xA1, 0xE9);
$ V7 {& S# L0 g4 ?4 S Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
q+ v' S0 r# s( k
L4 b/ I+ J/ { offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
+ u, |# K0 |& V2 ~: J# J Memory::SetCursor(offset);
9 P. X& v( F6 B Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);" H9 K6 A0 D0 n' }* r; m
( f$ T/ S2 s' Z! D, t offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
. n5 b8 Y9 v5 W2 Y/ S Memory::SetCursor(offset);
! f& s5 b9 O; ~# X" b" F Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
( v5 q- [+ N( p2 j
# l/ z. F% l7 F7 I' d+ [ //修正关闭按钮
6 h6 `) c, z0 j offset = D2Client::GetAddress(0x8BD90);7 l5 V5 y; d8 l
Memory::SetCursor(offset);
3 ~/ T- R1 X3 [+ l) ?) Y Memory::ChangeByte(0xA1, 0xE9);
0 U# O' }' q7 ]' n! {4 A Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);5 R8 C" J, K2 @9 L) P% f
3 ^7 x" ?! S6 Y/ _
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
5 [$ s8 @( v, P" S2 j" \. n( T Memory::SetCursor(offset);
9 X! K& M- @" B) B: l- ~ Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);8 f* I) c7 `7 u2 n1 E" {
+ \1 w% E' D: `8 L1 J4 c
1 M" \. H* [6 M/ O0 Z//以下是细节
5 C: w* i% d }2 _0 D#define getXGoldCoinFixBtn() RX(0x2d0)0 X8 u) F4 G8 Q; N. W. v
#define getLGoldCoinFixBtn() 320 c& ]; [+ ~+ ^: [6 k- N0 \
#define getYGoldCoinFixBtn() RY(-0x59)
9 {3 _1 `4 B' B# F# G#define getHGoldCoinFixBtn() 32
( p: U( e9 V' G1 I7 p; H#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
4 S* R/ d8 B/ R/ j: M, H( f6 |$ |& h' E+ M) ^ c x( O" d
#define getXInvCloseFixBtn() RX(0x3db)
$ h! w& d% \/ s, Y: E% ^% R#define getLInvCloseFixBtn() 322 u1 ]3 A. m8 p6 ]7 G2 x! s
#define getYInvCloseFixBtn() RY(-0x63)% X9 _* O5 v1 i3 V
#define getHInvCloseFixBtn() 32: _/ F3 T, r- x$ r$ u2 C- n4 T
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
" y: f) R+ W; O% U9 A7 y( E E% V. P3 U. ?8 p4 p% ?6 C1 m" l
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
9 G. ^* ~6 @0 W2 F" {{, ~$ ?! n& ]+ T, U) z: H
DWORD mx = *D2Client::ptMouseX;, Z( d/ ]. I# Q/ p
DWORD my = *D2Client::ptMouseY;
: A; E4 n% A: t- I4 I if(isOnGoldCoinFixBtn(mx, my)) A$ p% {; Y3 n
return TRUE;
- T" E0 m3 _& \2 ~ return FALSE;, d& _: \. F. |: v
}
' ^7 E+ [! ?. a5 V- g0 A__declspec(naked) void caller_goldcoin()
( w4 z ^/ F2 l! t, k( c{
# Z- \5 r% o6 _" F' Z) U __asm5 b4 D0 j( _2 a
{
) L4 T0 o0 ]* Y/ e. A+ |5 V push ebx
6 H: v; K) m9 G9 B* e! N mov ecx, esi$ l! n) h/ \' t* S0 e( H
mov edx, edi3 ]) B" e; O7 Q4 E5 X2 i
call m_NewStatShow_goldcoin. j ? C2 R4 t* t8 j# o4 K5 X
pop ebx
+ v% K& Z, \/ v+ a+ I4 N" I pop esi
+ }: [* x2 P/ `2 ?+ ~+ ~4 A1 j" P retn! ^+ a# Y B; p( @
}
. j0 I% \/ b6 L; D C" W0 i}% v7 }0 i- ^/ I6 i7 V$ Y1 D
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])# e* D" N; R2 z. I& o
{
+ z! K2 m. T+ P0 Q, [6 \ if (*nXpos > D2Client::ptScreenSize->x / 2)
4 y* }" ^- s. g1 A0 v {
$ L9 D6 w' G2 ~2 j8 ^7 D4 P *nXpos = getXGoldCoinFixBtn();
; S3 X, v% e! z *nYpos = getYGoldCoinFixBtn();
H- M9 S4 g6 b! M. N8 ~9 } }
7 d3 R7 q5 L7 h! ?4 J}2 S N$ r& k5 s, |
__declspec(naked) void caller_goldcoinimg()
+ I' G* v9 \" b! t8 I% Z{3 f3 A0 j, S0 J3 Z
__asm( q" V7 h# R( z! X8 d' A
{
/ } {* d2 q$ { d5 h PUSHAD7 B; y3 n2 r6 I- B1 ^ o$ D* M
lea eax, dword ptr ss : [esp + 0x38]# M8 ~% e' Z3 k8 D& P" h
push eax( j7 F! N3 p1 i( Z& r" W
push dword ptr ss : [esp + 0x38]0 p2 z- y# u; h$ D L k4 Y* h
push dword ptr ss : [esp + 0x38]% Y- N1 a3 o1 {9 a: D9 _
lea eax, dword ptr ss : [esp + 0x38]3 b8 n6 w3 R" C3 _% t6 |( \
push eax
& g) ]) I- Q8 ~) M# _ N( ~$ K( x lea eax, dword ptr ss : [esp + 0x38]
; Y8 ]. p: f9 o' D5 O push eax [1 x' R9 W3 V) E( v* S7 r
push dword ptr ss : [esp + 0x38]
( T6 {1 r3 h$ l7 f' G, v call m_NewStatShow_goldcoinimg
2 {) o1 {0 |! u% `: m4 T& b2 L POPAD$ Y2 w' h. m1 p8 F2 Y
JMP D2Gfx::D2DrawImage* }6 D# m6 h) W; Q) y
}
; e! w4 n. B( }9 s* T# f) d n}
8 {6 E- [' A3 x" i' @- \DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标+ E6 E9 I6 Q2 f6 b k4 z
{
" H2 I/ W6 z8 U. L0 m if (x > D2Client::ptScreenSize->x / 2)0 D6 F% P6 B. I4 H/ u5 d% o% M" T
{9 p! L/ l! a! I; h; S" b
*y = getYGoldCoinFixBtn();
4 {# l1 G9 V$ [& i1 X+ |' E return getXGoldCoinFixBtn() + 32;5 ?$ u$ f6 ~3 q* C) n0 l. w
}
/ I ^* d$ F. V2 C. x9 \ return x;
! ~4 i* n N& M}9 `. t% q! u6 [: z( \. _
__declspec(naked) void caller_goldcointext(); z: M! N5 ~1 Z0 G
{& h5 J. G# e: U; x8 G4 z! `5 d# U$ ?* h
__asm
" i( c" b, w3 C9 J' ?! y {
( [1 U6 |9 ~4 O* J: t' k. i PUSH ECX0 r* ~; _1 u0 M4 |. |
PUSH EDI
* ?% ?6 A! |+ U4 e PUSH ESI
2 H* o2 q1 e; n; o* F& c0 D# Q. K PUSH EAX+ H" `- Y7 ?" n G$ R# L
MOV ECX, EDX
9 ]5 J) F7 q# o0 \ LEA EDX,[ESP+0X4+0X10]
+ h$ y) [. O7 r0 j CALL m_NewStatShow_goldcointext H0 E* z7 n2 I# G! N6 z& J
MOV EDX,EAX1 M; R# k4 I& m' I6 W( K1 m* K# R
POP EAX, d2 Z2 V- s$ c2 R! K0 E2 Q7 ^
POP ESI: m$ l5 r$ @; t! |' n( t
POP EDI9 O* e$ p b( ]3 h
POP ECX' O; P- S0 w$ A% M$ A9 ?
jmp D2Win::D2PrintString;
, C2 N, x* @1 H/ v8 \( ~4 x }
; U+ U& A: Z9 h5 f! v+ d4 X6 ]/ k}4 m2 x3 Q0 L# S8 a2 h% ]
( R1 z! W$ \# s& X9 \BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
4 L: ]; Z5 T8 x0 Y# b* p9 j) m{% S; D, p$ I' _; ]3 O/ [0 n1 ^
DWORD mx = *D2Client::ptMouseX;
& k6 F% w% P8 \ DWORD my = *D2Client::ptMouseY;% j2 d: K! [" I! D3 y
if (isOnInvCloseFixBtn(mx, my))
3 k1 D/ w( z) G$ D4 L return TRUE;& A: H% o8 O3 L) X( [2 j% F
return FALSE;1 t$ w/ s$ ?5 |- n, D/ V
}
; i& I" F" P0 w) ]4 t, V5 s; ]__declspec(naked) void caller_close()
) ]# G E$ ~* w8 b2 f, o{
2 L" b* v+ e' s4 T+ U/ q% k4 K1 E __asm+ i4 D: i r' h& L$ R: |
{* q; A2 A, e" u5 @$ c V% k2 m0 c
PUSH ESI8 x4 z; s$ G! q) @# J& j
push ebx% Y) M( C% ^& a2 b+ e! ~
call m_NewStatShow_close5 y' i& P) ?/ [
pop ebx
6 _. n0 y, o! R& o pop esi
- e; W: K4 N, i9 \+ t1 {0 x retn
2 n$ N2 S4 v; s1 P" ]+ ?9 e }0 Q) G% K# ~8 J* v
}
* j/ S: y) y8 b4 Mvoid __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
5 q9 j- ?" e; v, C7 S6 X# |{
8 {% K- L+ B! J7 n8 k. G Y *nXpos = getXInvCloseFixBtn();
. t! D1 `! ^* Q; ]: d: F *nYpos = getYInvCloseFixBtn();* c) s; ]8 H8 V
}
- g) y2 `/ V7 n5 K; z; b$ x" h* c__declspec(naked) void caller_closeimg()
7 }! s0 b$ l& O j' G{
5 z9 z, c8 n9 q __asm9 Q9 A" H6 C4 w5 y" u# E+ j
{
/ K' h# F" V1 {1 t6 s2 Y n PUSHAD) P! K( t% Z8 k. |
lea eax, dword ptr ss : [esp + 0x38]
$ R; f$ B" P. X1 f1 Q$ J push eax
' C1 {+ o X) ]$ V, L push dword ptr ss : [esp + 0x38]/ w5 g: d& E$ r3 u& F# |3 ]
push dword ptr ss : [esp + 0x38]" a* r: C6 \4 c$ a. Y/ Y( Q! E Z
lea eax, dword ptr ss : [esp + 0x38]: L& w0 x# @; v4 z% t% ]- s
push eax
7 J6 S' X V" y# g' Q- {; n- J! e lea eax, dword ptr ss : [esp + 0x38]
% b3 \+ M% k$ T push eax# o4 a# x4 o: Y4 Y$ m1 f" K
push dword ptr ss : [esp + 0x38]" }; u6 O4 o8 }4 a' @9 y* O4 t
call m_NewStatShow_closeimg: O: N4 k" U a- {5 u% |
POPAD
0 Z7 r8 t6 f9 B$ _$ s4 E JMP D2Gfx::D2DrawImage
: Y& [7 A& h# [5 [ n, L7 i }0 x6 C6 B1 _! V, t
}
- N) k# c4 Q8 \! R& l' Y% C9 q( n
4 y4 z4 j* p$ y/ w5 B3 z
p" \. o! U1 F5 h9 b: F. m |
|