|
|
转载
" C) ^6 Y0 a- u% X" i/ T* w$ cBY SJ4 c, D0 d& n0 V
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
( {$ L% A5 R$ R6 W7 O- O% R
: a7 b; l8 a1 t6 J7 lD2Gfx::D2DrawImage-100416 `1 x1 B% H. U' ~2 A; r
1、修复技能的背景(不需要可以不要)# t1 t' B. u' }& F+ A+ R
offset = D2Client::GetAddress(0x77AA8);
1 b$ g' Q5 ?* {3 a5 bMemory::SetCursor(offset);
& y% m0 J3 ?: F+ y8 ^2 I5 f2 Z6 mMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
9 f+ q/ U# W0 t+ y- ], H2 R9 r! f9 w' f+ Q: [. |* t6 c3 `
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
: s4 Z+ l s& Q0 S, V( ]& r: ~{
, F. O- \/ r! G //Init data for print image
1 u& h4 Z9 ~; t3 z$ J' d sDrawImageInfo data;
$ E$ H! R/ c8 n ZeroMemory(&data, sizeof(data));
. h3 y! z( O: ?6 N: f N
|& @( B# ~: ~) s //print background
) e5 T$ m7 z- m5 F6 k; f$ u% x setImage(&data, spellBackgroundImages);
; P6 f3 e7 ?* u0 j( J* b* J* o9 w setFrame(&data, 0);+ e; ^6 R, }, n+ W
int fixx = 511;) k3 `$ w# i b2 J9 }" j1 }
int fixy = 9;
2 q) D0 X V+ j% A D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);1 O* L% Q, Y# o! a% @2 U7 {+ z; z: N
setFrame(&data, 1);
# P; ~# A# I9 O, n; o D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256) _. J0 b! s* ?! \* ^
setFrame(&data, 2);
4 M( E$ Q% @- s: n D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//4327 S2 m2 t, z; @- G/ o' G: a) Z/ Y A
setFrame(&data, 3);
}4 n x$ A q! W D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
3 ?/ N$ o, S3 i) V' ]3 k+ }' @. t}* q$ t0 u8 F) p4 b% T& ^9 t* A/ r: h! q& g
__declspec(naked) void caller_SpellBackGroundFix()! g+ M* ]. ]. L& S+ W% {
{
* A. u9 _' |& f9 V) y: U' Y __asm4 e9 Z; W6 A/ V6 d5 q6 @
{/ U0 a% Q* H9 X( R
PUSHAD
, ~2 ?- e c) M& N9 g lea eax, dword ptr ss : [esp + 0x38]0 J3 h3 w) N; V6 i( r
push eax
2 x# \9 d4 X4 ^; q2 {4 q. P9 o7 @: h push dword ptr ss : [esp + 0x38]) a8 z7 t" c& n7 U: v
push dword ptr ss : [esp + 0x38]: f- j9 ?0 O5 [' J" c3 t( M, o- X
lea eax, dword ptr ss : [esp + 0x38]
K) {+ P8 m3 B O( n" x push eax
6 R/ [: {3 A/ D' C8 Z* S lea eax, dword ptr ss : [esp + 0x38]
/ N _9 c' L1 U3 a push eax
$ j0 o( k: g3 M* r" f$ M. K push dword ptr ss : [esp + 0x38]
/ R! w3 H- u! ^0 g call m_NewStatShow_SpellBackGroundFix
! \: {( L7 J( Q9 J6 c1 ^7 q POPAD
8 T% K5 ^+ k# k$ _ JMP D2Gfx::D2DrawImage! k L! W% q/ V' v4 U3 E
}( K! S9 f( C% S9 u" \" P' I
}4 V+ a& d* M3 W" S# m" ]4 c8 C
$ g* R% }/ ^: b8 ]( t
2、我们如法炮制小站的背景) o `! q! N1 O" U2 R
& N; H4 T/ P* r4 ~0 M/ O# Coffset = D2Client::GetAddress(0xAB010);& V( c1 m; u0 _: S* P
Memory::SetCursor(offset);
( P; S( V/ _: {3 q& {3 ]' fMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix); u- }, _& u$ ?; _
$ W* } T, d. Rvoid __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256]): [5 d+ u& Z! P2 U4 d% b$ s* q* t
{- y; r% W: X% U3 p& R% G& Y
//Init data for print image. l. v* B9 y+ Y" g
sDrawImageInfo data;
- B$ ^4 a! g2 S- Y# ?+ I! k/ S- `7 ] ZeroMemory(&data, sizeof(data));, j- L: p0 X. d
# v; y' y* r2 w& T5 L3 q/ |
//print background
" l5 u9 y+ ]! V- U) i7 g4 [- @9 x setImage(&data, waypointBackgroundImages);
{5 d" P5 u0 C! T setFrame(&data, 0);! H5 x' j4 M1 N3 s) z e; X
int fixx = 0;: k! P; t& P2 H2 R2 |% p9 \
int fixy = 9;) p: z# p* e: m1 W7 Z. Q8 ^( U
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);
5 ~- @5 B$ @) P5 v' @1 r9 U setFrame(&data, 1);
' q1 l5 F5 i' v, C D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256: L) }4 o9 \' ]& Q/ y) s
setFrame(&data, 2);
7 b6 i0 e _6 d' q0 O, _) e2 f D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
& S& Y/ {2 ?2 b; O2 y setFrame(&data, 3);! j7 m1 e: `; u7 j* b: C! P* X
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
; G s2 S: q. B5 V3 P$ V) u: N% Y* E# X- @: d7 x' f
}# @6 B- X9 ]+ `6 `) g, G
__declspec(naked) void caller_WayPointBackGroundFix()
2 n) b( j+ `2 r1 x8 i" r; v$ b/ I5 G% y{ m6 L y- L$ h. B) o' K) ^ R
__asm s3 r X# L5 G3 F; L+ \9 d
{
7 r# t) s) i$ X$ Y7 w% E PUSHAD
0 H e2 L1 g7 ~4 }" f5 W8 T2 y lea eax, dword ptr ss : [esp + 0x38]! w1 u4 V- t" H$ x8 C
push eax
6 a/ z( Y* r& Z! T push dword ptr ss : [esp + 0x38]
! q. f' m/ [ O: {# a push dword ptr ss : [esp + 0x38]
# N' }; `% {7 a# V! E9 g lea eax, dword ptr ss : [esp + 0x38]6 }9 U, k: f3 W2 G a( l
push eax9 k1 {! P7 M$ G5 D1 x. j- p+ C
lea eax, dword ptr ss : [esp + 0x38]( p- T; J, ^) e% s! k. y( T1 P0 A
push eax- }# [- ^% m' r% u2 {$ c
push dword ptr ss : [esp + 0x38]- n9 U$ @" t1 C" |/ _7 f
call m_NewStatShow_WayPointBackGroundFix
9 D2 U5 `( f- d% Y POPAD2 B) W" N# q; R. y% q: z! m
JMP D2Gfx::D2DrawImage
- e" Y+ i" T! x) ?0 O5 ~1 p }
. M0 ]; I" `/ M: L1 X8 D}) L# R8 T* z7 {: Q+ H' b) Y2 s
Q& Z! c/ Y& {+ n2 f5 D* ~3、以下可以搞16*16超级箱子-腾出我们需要的边缘# o+ w9 r0 ~' j& N
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)% K$ \/ B) E0 D- b* z a
{
3 t+ a& e/ m- `5 F. u class D2MultiRes : public Library<D2MultiRes>
, y# @2 L7 A; t% x {# t R) ?6 @! i K9 I# g
public:
8 f& r! C/ @' u) D/ ^% s5 \. ^ static void Init()
: I6 y, {2 [; k! X {; ]. S0 d- ?% o8 s$ f. e. g8 {
Name = "D2MultiRes.dll";) P5 X$ ^/ E: x& N, j6 f5 d
Offset = LoadDiabloLibrary();8 g* q# P/ Y1 z0 a; ?
}
4 t$ ^# a% V7 s! v3 d p+ w* c };
9 s! A; E, e& T( L1 I& m% V7 h( o/ z D2MultiRes::Init();: B: B' Z/ {1 R8 @' y: K; v8 F! g
D2MultiRes::HookLibrary();
+ g I9 I) C7 G) x* L/ w; r3 g: ^ _ B% p
( ?9 K2 X3 X. W$ \4 B# Y6 ?9 W" R" C; u" H# _5 B1 \
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
( H& @3 t% c$ ?" e0 z: ?; ?' A4 I Memory::SetCursor(MiscFunctionsOffset);- j, e0 }+ A) l2 h. t! q
Memory::ChangeDword(0x1b0, 0x200);3 q" H! U" n' x- d4 S+ g$ K
9 ^0 q0 Y F0 O" T- s! c1 t) l; t9 l7 Q
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);0 G- J7 j8 x# k9 L' y
Memory::SetCursor(MiscFunctionsOffset);( f8 m% e% d1 E
Memory::ChangeDword(0x140, 0x200);9 k& N) d* Y! c
5 |# d2 A2 w, B* {* @# g1 E8 v6 u$ V+ q; |
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);0 h0 i4 P) g f& `
Memory::SetCursor(MiscFunctionsOffset);
% ?7 |* t2 P- t2 T Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
0 v( h* x! H, H6 N I! ?0 C( C: v/ H* d) l/ o$ a# b: i' M
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
9 J: y5 ]3 [% R" n5 V3 p! ?7 e Memory::SetCursor(MiscFunctionsOffset);
0 J* [4 n* h" }5 E p Memory::ChangeDword(0x200,0x299);//下边缘 299最大
9 l8 L4 O) t: M! m' m+ v7 K' g* d( u9 q! ^. a/ W" q
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
% Z, z1 S6 E# \' Q3 k Memory::SetCursor(MiscFunctionsOffset);
' x4 M, }2 Z3 E( W, o7 T1 e Memory::ChangeDword(-0x280, -0x400);//这个不要动
8 u. p- H# f9 K u) O9 w }
- C$ O+ O6 t& N3 H9 A! ?& i, k1 w2 U6 a5 F5 z) f
4、快完成了,是不是发现金币啥的位置不对??4 F0 n; z! ?4 M; H) W+ R" K; m$ U
4 S- u/ K1 M$ p, k; u//这里修正我们的装备栏
. |) Y# V! x7 r8 s, w3 r0 B4 q offset = D2Client::GetAddress(0x99B6C);
9 S, i* a/ M( L0 c Memory::SetCursor(offset);( q6 x. b X: W+ X$ }( p `% B5 ?
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);9 q2 ~$ W |4 b- Q+ e' l. d* q
6 N' y' o1 P% D& Z offset = D2Client::GetAddress(0x99BA7);
& a6 [* g1 ~7 p0 B# I3 g Memory::SetCursor(offset);' ]+ b' B/ ?- A5 \ X- l5 X) b
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
% R* I" _8 L. m6 C; W4 m. Z4 T* A2 N2 b7 B6 f4 p9 u# ]: o
offset = D2Client::GetAddress(0x99BE2);/ U6 N8 g3 y x& F" y
Memory::SetCursor(offset);$ d* v! |1 |2 u# }( q
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
8 | G6 A9 V% B) P
1 Z, ~% j* o, Y; o offset = D2Client::GetAddress(0x99C1C);# L$ `1 x, ]- O& G) [ z, N7 b4 O
Memory::SetCursor(offset);) \) v8 n) Z+ V0 K
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
# c* Y6 b; o+ j. h8 [3 s
D/ I5 {! [; ^! u1 T! Y0 N0 y //取消两个popup,偷偷懒不过分
' Q( d( X: u; M1 @) z: Y2 F' n1 p! T/ k offset = D2Client::GetAddress(0x9386d);4 H! L4 t- w B' ~
Memory::SetCursor(offset); R0 k, `' Z# w6 U, J
Memory::ChangeByte(0x8b, 0x33);
2 x/ j: n; t: } Memory::ChangeByte(0xc8, 0xC9);
* Z* O0 A/ u ]4 M2 N) ~# @ offset = D2Client::GetAddress(0x9390b);
8 j: E% K& B# u+ t Memory::SetCursor(offset);
) c. H6 H) R. R& U( j+ s" K Memory::ChangeByte(0x8b, 0x33);: n) p3 a9 k2 o7 N; I( D5 Y# N W
Memory::ChangeByte(0xc8, 0xC9);. ` r( C0 X* v3 |/ |, D8 j; S
" W) {% x" P$ F2 d$ q
//修正提取金币
- a' i3 J9 t9 Q, g+ _* m) ~ offset = D2Client::GetAddress(0x8D3E5);0 [+ d1 M2 p' C+ F3 _: ?
Memory::SetCursor(offset);
& a2 k0 d W, c Memory::ChangeByte(0xA1, 0xE9);
, b& Y; A# h7 a! Z! e Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
2 q, o- I9 m' D! l0 q! `5 n& Z; o/ n
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);4 M" M: y. a! M7 T8 c0 c
Memory::SetCursor(offset);
8 P' U& b& q9 {" }5 ]7 T Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
( }+ b2 b/ _/ v6 {& U. ^! H8 }+ V! Y# q
offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
0 ?" Y/ q1 D8 p$ e$ M5 @ Memory::SetCursor(offset);. Z7 C# Y3 Y% C, T
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
6 y- D! U; h) {4 w
$ v2 g3 @* b3 T7 n //修正关闭按钮
n3 Q* r7 x$ r0 l offset = D2Client::GetAddress(0x8BD90);
0 s4 p+ k5 a0 r' N& R7 \- @( e" a1 ^ Memory::SetCursor(offset);4 w( |5 M8 ^6 ?
Memory::ChangeByte(0xA1, 0xE9);, H2 q. I: r s: \* `
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);/ a: C) E: d w' N. U
& d) |% n! @7 f# L# S+ e% J8 ?: v offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
( h2 v& {' D1 {2 b& k& l# x( U Memory::SetCursor(offset);# R5 a' F3 @* ]! B. B5 @& X% x4 l
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
! K. |* }( d2 z# q( I8 ~ @ B- x6 \( q4 _: c+ t, y, [
- |8 {) B( D7 u3 u9 T1 l' M. Y//以下是细节
# R* r$ P, l9 H% {9 o+ e#define getXGoldCoinFixBtn() RX(0x2d0)
2 ?, u+ J8 X( N7 a4 V" c8 }9 D#define getLGoldCoinFixBtn() 32
; @" _2 G& v* V8 {, H, ^0 ?7 W4 N#define getYGoldCoinFixBtn() RY(-0x59)' [- q& C2 G& p4 D
#define getHGoldCoinFixBtn() 324 n5 W2 u7 o4 F- k9 P
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())5 e ^: c& R, \# ^2 y( W
m0 b" l+ B6 ~; F- r9 w#define getXInvCloseFixBtn() RX(0x3db)
$ \' T3 @7 l! ]8 Q P. s9 j, @#define getLInvCloseFixBtn() 32
$ `" W7 a" X& R* o#define getYInvCloseFixBtn() RY(-0x63)
3 r' `& j% q% W2 O3 w0 s! @ w#define getHInvCloseFixBtn() 329 H( c2 W6 ]* G( @2 u3 I
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
& L f& q9 P5 h' C# `5 F
5 c, h R; w( J {9 fBOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)3 S3 ?6 w5 b. |) ~
{
4 l3 W1 b7 q* g DWORD mx = *D2Client::ptMouseX;
0 U0 V/ t$ `+ U# T, T DWORD my = *D2Client::ptMouseY;: `! f# U1 [& K5 b; y" U4 {9 U
if(isOnGoldCoinFixBtn(mx, my))
' D6 f9 N* u7 ~( h return TRUE;7 ?& E$ R% x" ~+ X I
return FALSE; e# G! X, r9 M5 L( D. F0 _3 E
}2 n' P( M7 s# m( X1 Q& h" _
__declspec(naked) void caller_goldcoin(); s5 e, m F; f: e- ^% S( V
{- Q- Z8 F& g$ \$ c- h1 X7 W2 o
__asm
o. M4 u6 u: I( f2 J; q {
, b' u9 O' c. ^/ R* ` push ebx
: r% o" f3 j" r$ ~' d mov ecx, esi
: J$ u W1 B5 _9 p1 { mov edx, edi
5 a( Z4 d- |5 O$ d3 @" x) u call m_NewStatShow_goldcoin, P5 t: T7 p1 p4 A: i/ c
pop ebx9 |! ` [ N# n* G3 \
pop esi
" Q' A( t7 w2 g2 H+ R; t% U retn
- q+ C E E& k2 x7 d8 m }
v0 ]7 g3 j* I9 Q" u% A7 O}3 t/ ]1 d U6 n- }( a* X. u+ F, Q
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])0 E1 a9 U' h3 H. C( Z. y( A
{, x& f2 H/ z& }: l, ~* s
if (*nXpos > D2Client::ptScreenSize->x / 2)
7 u& K0 z% t2 ]% F5 i$ X {
. i; e6 g2 R. _4 `2 n8 ] *nXpos = getXGoldCoinFixBtn();* Q; \& |' A" o1 E% H! m
*nYpos = getYGoldCoinFixBtn();6 k: W2 v4 X/ ~, f9 p( b) `) G
}
6 d8 t6 M3 x' s! T}
- q" r$ y$ N' w( K__declspec(naked) void caller_goldcoinimg()7 j7 A! I2 Z# r! M% }$ o+ c
{0 G' J( J# Z' i0 t
__asm2 p2 a4 l- z+ @/ ~. F/ G1 L7 L
{. g/ U6 W( t, B% G/ C! L0 i6 [. J
PUSHAD8 `1 R9 C& w( E5 L
lea eax, dword ptr ss : [esp + 0x38]
Y7 l. @2 J! R* A8 b7 a, s push eax
/ v5 I9 k# _* U, J" M) | push dword ptr ss : [esp + 0x38]" w) {0 ]+ D& L6 s- x ^, y
push dword ptr ss : [esp + 0x38]( G7 n2 O8 Y- F9 B# I0 v
lea eax, dword ptr ss : [esp + 0x38]
' h& W1 A$ n) A' S- H; ] push eax8 M$ ?9 P! B" s) W" H% _
lea eax, dword ptr ss : [esp + 0x38]2 t; p" F# t9 L1 k, _ ?3 q7 c
push eax( i9 C; G% b0 @7 d$ k7 `; D
push dword ptr ss : [esp + 0x38]( H; i4 o; b$ p( J* }6 j* \& T' P7 q
call m_NewStatShow_goldcoinimg& `# F6 X z% Q8 q$ q+ A( I
POPAD
; L" D: Q2 a% X3 f( @ JMP D2Gfx::D2DrawImage4 T8 m( a* k& d* ]2 I
}
6 E8 p H' x8 z$ V: e+ o2 t2 z, w}3 u3 }8 s: t, ^/ S2 e, C
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标4 I( w9 z/ A- O, E& L
{
. D8 N q0 j7 P* U! Y7 A if (x > D2Client::ptScreenSize->x / 2)
$ E( k. N; d8 \# L5 m' e+ W {
2 b4 b; Z+ z( C8 V" H+ S9 D8 } *y = getYGoldCoinFixBtn();
" X4 g6 a; ?: c7 b return getXGoldCoinFixBtn() + 32;3 [/ @0 \) @2 _" U
}
* c( t! h7 ?4 a. H return x;
1 W2 Y% l- B n6 a L}" G% V6 X1 _' d+ S" D6 w2 |' G
__declspec(naked) void caller_goldcointext()
" s0 h9 t( R! V4 B{0 |, B: |" j% `' p5 u0 }
__asm# M4 l1 q& D a1 x z/ n+ I
{
, k( u# a) T0 x PUSH ECX
& t' R3 _- E7 H0 l+ X: l PUSH EDI2 V" r6 r# j+ a* g. k5 u
PUSH ESI8 X) Y/ y( ?9 x0 f6 A. f+ k
PUSH EAX, P R2 T! E# D9 o; F
MOV ECX, EDX
9 ^+ Z! v$ o; u: O) T LEA EDX,[ESP+0X4+0X10]
; `( f2 e* i! S+ S4 B# z CALL m_NewStatShow_goldcointext+ w4 y! C6 E" p* k3 R5 l/ h9 _
MOV EDX,EAX& L! s0 v0 b( ?* q+ c
POP EAX
" m0 o9 o$ X/ m POP ESI
( @9 G5 t/ a& B" t/ s POP EDI
O2 j7 ?: _# J0 G6 t POP ECX* |/ h# V& `4 K! s
jmp D2Win::D2PrintString;" F2 G2 C- u$ O0 P+ Y k. S, W
}
0 ^' C& R2 v. ?0 n5 M}: t" Z; T( y# I d1 o$ J+ t7 X
* z. a1 x, t5 h" H+ \2 ]
BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
5 F& T8 I# ?. q7 A/ Z; ]3 q{' r+ g5 j( U# A
DWORD mx = *D2Client::ptMouseX;
* @( R4 v6 x y& m. p DWORD my = *D2Client::ptMouseY;
* c1 y. F/ W3 Y if (isOnInvCloseFixBtn(mx, my))
( \6 a4 e5 {6 q% T3 L0 ~ return TRUE;% ~7 {, K( J! {# E: X
return FALSE;' Z/ n4 r3 a l/ y' s4 t
}
+ f; [# X U% V5 j! V+ n4 H7 y__declspec(naked) void caller_close()
# [6 {2 B1 I' M{: s" C7 H+ H5 p0 A
__asm
9 |' d$ k$ a! m: M3 H! D1 E6 T5 B {5 x5 ~5 n6 x; e4 j2 B. j h
PUSH ESI8 ^- y) X7 F& I. N# [* s0 p
push ebx
8 _5 X. p4 s5 Q! A) q* A call m_NewStatShow_close
) m! ^$ r3 D# v- x5 E( s2 X8 C pop ebx8 Y$ M4 B$ b$ @8 M
pop esi
5 Z$ I. @) R+ ^' x retn a9 s/ c" t# M& c! ]/ \2 E8 h4 t
}
# R* u8 n3 D5 R7 ^+ Y- s# A) }}
9 L2 N9 N# r pvoid __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
; ~: R& P: y5 F3 X4 S% L{
m1 \' i$ v" }5 _ *nXpos = getXInvCloseFixBtn();
4 K3 ], x: L$ u z& Q *nYpos = getYInvCloseFixBtn();. u+ O# w3 F7 M: H0 v
} v6 ]6 }4 N% ^& u& n/ r
__declspec(naked) void caller_closeimg()
" y# H3 P$ ^. d$ \( j: E6 a{9 s7 I& K' M3 I" o; g1 n
__asm
+ R* i+ \! U+ E; \. B/ k' m {9 v# i0 j7 A9 ?& h1 Z7 b6 U
PUSHAD6 \" X: _/ Q( c! ^. J j: z
lea eax, dword ptr ss : [esp + 0x38]
5 N( L- _$ l5 H push eax' `+ }1 a g2 M
push dword ptr ss : [esp + 0x38]
/ `* e6 f9 K( [ push dword ptr ss : [esp + 0x38]
; K* K; O1 ~. n* d/ u( | z lea eax, dword ptr ss : [esp + 0x38]
$ e$ }+ f- j, w/ w9 a0 b0 M. I push eax
E! @; ^3 e( p lea eax, dword ptr ss : [esp + 0x38]
6 I9 l) q# B; h+ P. r push eax# E7 N' O4 t0 a. V& a% R. P& I
push dword ptr ss : [esp + 0x38]: j' }+ b& J) c# ]# j
call m_NewStatShow_closeimg7 @9 U/ v7 E- M" S% C5 ], Y$ u
POPAD
2 T$ D; k5 Y4 p1 M/ K+ j: ?1 R5 f JMP D2Gfx::D2DrawImage$ F( ?/ t; `# k& F1 g4 U
}; i8 w/ ]5 {$ k8 @
}! t I, b5 C3 y+ }" u- ?# z2 i
$ {, _9 D9 H/ G- ~: W0 r7 @3 t
1 X% }' ?! l2 X4 @2 l2 e" t% |/ V) | |
|