|
|
转载# y; ]4 ^) _% ]0 m
BY SJ
. a1 n& S: k( U3 d# o. M1 M, Z首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的), x6 z* T* w2 a8 G
. c h; k; M8 x( K
D2Gfx::D2DrawImage-100419 ?) t) L! q$ ?/ G: P
1、修复技能的背景(不需要可以不要)
; r; W1 o& y0 X6 {3 G7 roffset = D2Client::GetAddress(0x77AA8);1 p x: k5 M( Z& _) `5 n
Memory::SetCursor(offset);0 F8 y" S1 S5 z6 a$ p% q% Z
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
+ h4 N, w4 n; `; v- `, C r% S: |5 u, k2 P4 [
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256]): E9 N# v! `0 h0 W! S( `
{ z/ Z5 \; L' X, {- Y Q
//Init data for print image
- n0 r* e# ~4 V$ i7 P sDrawImageInfo data;+ _ c& o' x0 h# D; G5 q
ZeroMemory(&data, sizeof(data));+ {* w, \5 ]2 P! R4 _1 q1 W& R6 g# g
& y0 g0 B3 t# S2 n //print background
9 J6 z# a( @7 I$ P, e# L% H: Y setImage(&data, spellBackgroundImages);
% N4 p, K. a" B9 U& N setFrame(&data, 0);
( J0 v8 |+ k$ A2 K2 X& i int fixx = 511;
+ a1 y2 ~" A4 _6 B. r3 G1 y int fixy = 9;
8 k. r0 U5 K6 I7 o D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);. d% s. p9 B" W4 j6 ?
setFrame(&data, 1);
& Y: `9 F7 h6 W( K2 x* Z1 _) g) Q D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
* \3 K6 J+ g1 `/ f$ N4 C5 ^/ | setFrame(&data, 2);
4 x# Y8 |$ g2 n! N; i D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432, T u f0 V* Z
setFrame(&data, 3);
9 b" ~7 Z8 a4 |) p' [8 q X7 e D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);/ R& Z" b& I+ p6 q8 K
}$ T: E% x0 r0 {
__declspec(naked) void caller_SpellBackGroundFix()" T \ J1 `# m1 ?- E$ u4 S D
{/ Y* i+ o7 J3 t9 [9 |, Y( G* S, _
__asm2 ~+ w0 U s* O9 h
{+ W4 j# ?8 A# [& `8 A. d- m
PUSHAD
+ E- X* ~- A2 ~1 J( c2 F lea eax, dword ptr ss : [esp + 0x38]
5 p* g2 C) \6 j+ N+ k" c push eax6 w( v. Z. U: H8 K
push dword ptr ss : [esp + 0x38]4 Y. O: U: h4 K0 A J
push dword ptr ss : [esp + 0x38]% v3 P0 \0 A5 I# m
lea eax, dword ptr ss : [esp + 0x38]
0 Q2 L* P6 A9 E6 d" D$ G push eax1 _; Z; o$ T. m" F: c
lea eax, dword ptr ss : [esp + 0x38]. a: Z2 Y$ F' W R/ u
push eax. m( G, E; k# I& F2 \. {/ p
push dword ptr ss : [esp + 0x38]2 a0 ?! C0 m: U- C3 h: \2 ?
call m_NewStatShow_SpellBackGroundFix
4 S, A/ E. ?5 S8 u5 J POPAD, A4 o: m9 d% ]: m
JMP D2Gfx::D2DrawImage6 |. p# O3 a. t4 v3 q
}6 D* S" |% g7 }/ D9 @. [
}
" p2 t8 J- R1 G u) \0 ^. F( B! d# O' a I5 I, o) i# B
2、我们如法炮制小站的背景1 `6 \+ s; b3 t+ d7 @3 l4 t
8 b) r2 e X' L& g: f, @offset = D2Client::GetAddress(0xAB010);( f) h: U% J8 u: E
Memory::SetCursor(offset);
( O3 ?- A- j, u% Y# ]" [- FMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix); D6 Y2 P2 T! ^! X
0 ?1 ~! V: d0 t5 x! }( z- w avoid __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])/ R5 m* p" N% P2 c" h4 }
{# @- [2 l" u/ z" w, y3 q: ^
//Init data for print image4 [: |6 `' h# {
sDrawImageInfo data;
% [1 z7 G, p% a ZeroMemory(&data, sizeof(data));
4 m1 [1 o- _! h* \: f' A
( H% \( S2 {3 l1 o //print background
! y1 C3 V7 R( E. d setImage(&data, waypointBackgroundImages);
* Q# [* m$ T4 U) `3 e setFrame(&data, 0);4 {, o l5 @/ G J: p+ Q
int fixx = 0;
9 i$ v" Y3 a- X- ?) N int fixy = 9;
3 m B) ~, m9 p' }4 H& x D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);6 _ t C. a5 e4 c* A7 F& \
setFrame(&data, 1);1 S* N0 s" {2 Z! ?
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256 H/ ^5 I# o3 h# r/ R U% {1 `
setFrame(&data, 2);1 Y* [8 A* J- d
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
p' T8 n$ M) S0 u. j: k1 B setFrame(&data, 3);3 t5 @# r5 X3 E& N9 h# L
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);6 u2 @# x& B' H7 f) l
4 {+ o+ F; `% o( J8 f; l7 @; z) h
}
8 `4 P* `% ?; z) B$ i( z__declspec(naked) void caller_WayPointBackGroundFix()4 p" K4 }: U# L' x" ]/ a
{: m2 n% G* \3 H+ W; ^
__asm; @7 H6 ]4 h9 H5 m7 o) g4 ]. D5 W. A
{
7 j& X% ]' A( h2 Z# |( k: s1 n PUSHAD
; n3 Q$ y9 r5 N$ h" u$ j4 \: G lea eax, dword ptr ss : [esp + 0x38]0 [! j* H5 t+ I" _* N2 s1 G4 {
push eax
6 J( e4 h, |% Z- T3 q! V push dword ptr ss : [esp + 0x38]
, g/ @# u$ g, s9 ?4 a( R& V push dword ptr ss : [esp + 0x38]
$ L& I- \1 t N) ?% p3 W% q lea eax, dword ptr ss : [esp + 0x38]! K! w' K( o( G. ?. m: G: y$ C1 E- n
push eax0 }) c- F! X# b6 F- x1 K3 ]6 j
lea eax, dword ptr ss : [esp + 0x38]
( J3 j2 L" q2 G push eax
& y/ e& C2 m/ l8 \0 y: {! o/ z; h push dword ptr ss : [esp + 0x38]1 T; H) Y' g) A7 _3 X
call m_NewStatShow_WayPointBackGroundFix
- O+ O8 G& L9 k2 ^; Q( u" | POPAD
& V5 J" I! E! q: }( Z JMP D2Gfx::D2DrawImage+ E+ F0 [9 C# h8 h5 }& ?7 s2 c. H
} i; r* J6 V2 k: c
}
* C2 q3 t, n# ^0 f3 x2 H; v; O
8 T+ j" w6 H: \, r V8 H. y3、以下可以搞16*16超级箱子-腾出我们需要的边缘
3 Y) f( ]7 z' {; ~0 |) c腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
! o0 f: L- Z) I7 C1 r$ t* F9 I {- I1 L) H5 |. `8 h& t% m/ m7 Z; U
class D2MultiRes : public Library<D2MultiRes>
2 I- }& u% d6 h P& t: {- h {
* W3 J$ _/ {2 x d ~ public:
- d! r# t, \ w9 P" r static void Init()
0 r3 B2 R' B* {# @ {
% \9 N3 `2 J k9 Z# | Name = "D2MultiRes.dll";
6 \ u9 h3 Q& ], ?& D. C' v6 C Offset = LoadDiabloLibrary();3 ]" b( s L1 J: l! {! p6 p
}/ k, V6 H8 ^6 W0 J" @3 z6 Y9 m
};- ?2 ]5 }! N* D+ ]7 O
D2MultiRes::Init();3 s A: v# d8 u/ Y0 G$ `
D2MultiRes::HookLibrary();
I; b, ]. v+ f! ]" _1 x/ `" ]7 y( y8 x$ q$ a. x' s
* |; H- W# x7 n r( C) {8 K* L MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
, \! [: o8 k3 b R6 H9 p Memory::SetCursor(MiscFunctionsOffset);( i/ A5 g0 P- T& @7 ^/ H0 R
Memory::ChangeDword(0x1b0, 0x200);
0 Q9 w' Y. `6 i) S
# \. V F: }6 A7 @- w/ s5 @# O8 k% e, @. V
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);8 ~& V) s1 W8 [" g/ N& y5 B* ^ y
Memory::SetCursor(MiscFunctionsOffset);' o8 A* _. x u0 u& i3 q- \2 n
Memory::ChangeDword(0x140, 0x200);! R6 t& {: d; Z; `6 g
' \# b8 P( p3 E0 @- a; M! }4 Q- J: l$ E8 K! g
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);! r* |7 y8 i. G# U! L
Memory::SetCursor(MiscFunctionsOffset);
/ h! I! Y7 [: A) z Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块% N. Q: \; A5 y2 [, Z3 y9 `( A v. r4 X
2 h0 d# } R( H, R
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);3 S0 x3 M4 h% E& m
Memory::SetCursor(MiscFunctionsOffset);! j$ C1 n7 F) q7 e
Memory::ChangeDword(0x200,0x299);//下边缘 299最大 X- ?7 ?% @0 Z+ W% I
+ Q+ B; }5 y4 h+ I4 h1 Z MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);5 E; S9 V$ P# R& j: }
Memory::SetCursor(MiscFunctionsOffset);5 @2 x" \+ E4 C/ I5 Y
Memory::ChangeDword(-0x280, -0x400);//这个不要动
' C2 _3 ]; v" X- d2 D* Z }
3 F8 B7 i( y4 f* Q; A w
2 n7 k' I1 f& A J4 ^$ S4、快完成了,是不是发现金币啥的位置不对??
/ g% D$ H8 K# f6 _: F9 C6 f
" ]( D6 H; |3 J# p- @//这里修正我们的装备栏8 ^* p0 f$ v6 i6 K4 k& m; `: E6 f
offset = D2Client::GetAddress(0x99B6C);
2 b2 s5 I0 G4 L. z9 u& A' H* k Memory::SetCursor(offset);9 T% @& b1 Y- G7 v+ [4 m" ^4 w
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
# w+ B( [( ^; ^4 p* ?2 y2 U0 ^% C& r. i& [; J
offset = D2Client::GetAddress(0x99BA7);6 R% E, v/ C3 ^
Memory::SetCursor(offset);
3 f$ k: [4 h3 n; U9 b2 N1 D# _: g Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
! v; p$ r! m* ?" M W- N% B. Y) b3 C7 v9 g: I- \. Q
offset = D2Client::GetAddress(0x99BE2);
Y; w( U) `2 k3 n+ V3 c( ]7 V Memory::SetCursor(offset);
2 e, d; ?! \/ \/ r9 s0 z g( F/ } Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);/ x4 \: J* t+ v$ h) N# @
/ s N9 p2 A' H0 A offset = D2Client::GetAddress(0x99C1C);3 ?* @% u) L3 V2 C( N
Memory::SetCursor(offset);, R+ _" W6 ^* s1 `9 z3 m
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);- ]8 D; R& S5 [- [ o
9 {9 r7 `7 |8 {
//取消两个popup,偷偷懒不过分
% F" k; K2 u8 ~7 j8 ~+ C- ? offset = D2Client::GetAddress(0x9386d);
) b6 f1 ]3 b% ?* U- ~2 T Memory::SetCursor(offset);) Q& s1 d3 j9 n$ h5 `$ c* }
Memory::ChangeByte(0x8b, 0x33);
4 f- u) e# f7 Q& o$ ` Memory::ChangeByte(0xc8, 0xC9);* ~# `# i: {! o4 b" Q/ q
offset = D2Client::GetAddress(0x9390b);, p1 _- ?8 `% Y3 M$ e) @
Memory::SetCursor(offset);
% s3 H7 l+ p6 V" E Memory::ChangeByte(0x8b, 0x33); V6 e( I: r% v) \" |. v8 f
Memory::ChangeByte(0xc8, 0xC9);
( x, _" H4 B/ o u& n7 v7 |3 Q' S/ E9 x9 J
//修正提取金币% ]- }2 C. Y" M
offset = D2Client::GetAddress(0x8D3E5);
. J! g1 @# S) z Memory::SetCursor(offset);
5 S4 h6 V t# x8 e, z; i Memory::ChangeByte(0xA1, 0xE9);
* z3 ^& \4 u+ _9 u Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
5 p- R G) }6 X5 L' p3 U4 K. h+ p0 K9 C, c9 X: ?9 [& B8 |& K+ m# c" a
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
8 x8 V# e* g' r% b* T Z3 } Memory::SetCursor(offset);( N8 |. Q7 O) E# |1 O! [
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
0 l7 `/ _+ u7 P2 {5 a8 z& z1 |
, R! M* s# I B r, ~/ Y# ^ offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);0 u6 A% z, x2 D9 J4 o
Memory::SetCursor(offset);: }. K0 C3 A q- r5 h. Y3 }
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);+ _5 B& I& D1 q
6 l6 {1 y: W* E3 }) u c" g
//修正关闭按钮
0 X1 |4 R1 O) l+ o2 M$ b offset = D2Client::GetAddress(0x8BD90);
9 Z2 F; U: X, R Memory::SetCursor(offset);; C$ t# E' z& r. @1 ^; q
Memory::ChangeByte(0xA1, 0xE9);
5 r. _, Y; L; ]0 F+ W Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
9 d6 m* ]' F/ T$ x2 |$ Y+ v/ `/ K! Z
' P2 _! F! |# _3 P/ c" O' [0 P1 a: A offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
N9 d9 a2 F G* f: B8 i- x# H Memory::SetCursor(offset);, J7 z+ I! W0 g
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
& X& [9 v& e* n- V% t+ }. w! V- g' X& P) h
! k8 a) @ I3 u6 o/ P; n- m//以下是细节, W8 o& B4 I3 s; W$ q; x9 Z0 j
#define getXGoldCoinFixBtn() RX(0x2d0)
( S# R) T- W" W( Y: [#define getLGoldCoinFixBtn() 324 k+ Y, Z1 i. Z9 l/ R+ o' l( F
#define getYGoldCoinFixBtn() RY(-0x59)5 G, K" B' R7 [: V
#define getHGoldCoinFixBtn() 32% _' p' H# j' i1 G* [7 K
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn()). Q8 z% u; z* _1 k: k& {
/ \& h' _6 p0 N! W9 x3 I#define getXInvCloseFixBtn() RX(0x3db): W8 e- _, \. P# O2 Z/ y, Y0 X6 b% z2 T
#define getLInvCloseFixBtn() 325 w \ R* Q. M7 Q( t
#define getYInvCloseFixBtn() RY(-0x63)
! E" P3 o5 s+ ~5 ~8 Q2 g#define getHInvCloseFixBtn() 32
9 s5 \/ g& l8 Z7 z& }#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
& e1 U6 ]) [. s3 p& {. o+ B5 n3 K( e% b1 d, Z
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
4 D( B) ~# y! P5 L0 i& H{
2 ^: \0 o- P: t3 P" y& E5 C2 S DWORD mx = *D2Client::ptMouseX;
! B% I# X9 d* U" [; i DWORD my = *D2Client::ptMouseY;
. } I0 P+ E r+ }" [% | if(isOnGoldCoinFixBtn(mx, my))0 U* k0 p+ I& w/ r! W
return TRUE;. b! _$ R: B3 c/ @8 ^2 n
return FALSE;
9 m6 f- c8 s+ _}
( N$ w# p2 t& h__declspec(naked) void caller_goldcoin()
9 a/ ^. F2 l% ^6 W{
, v; c& z7 L$ C; @% @& F __asm2 _) h6 u5 V7 G: F9 t
{
% P* L0 S) I1 \+ j% _ push ebx
7 |+ M% Q: F/ ?- G mov ecx, esi4 F1 U2 m O9 ^: o( g8 P
mov edx, edi
0 N3 u2 b0 P2 H5 r) R% O call m_NewStatShow_goldcoin
6 [% J) q* y* G: O5 R pop ebx9 z) Q6 U2 f/ s: C3 U" t
pop esi% W" `/ c; G% A
retn
( K# e0 x4 E* y+ i+ A8 h }
& j$ T- e' R# G- Z/ N0 s}* l f+ ]4 ` X4 X
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
3 I& `" k$ i- x# Q# n8 i: n{
% g/ D w8 R% C! C% o if (*nXpos > D2Client::ptScreenSize->x / 2)
: o& L2 }9 X* U+ i E" L {
; j( _) Y& b$ i) E* e *nXpos = getXGoldCoinFixBtn();( M# B' p5 K2 X7 p+ F6 `4 }9 E1 q
*nYpos = getYGoldCoinFixBtn();
& J H) d( K+ @! L8 m }
. [; Y5 n( B# y; \% @}6 N$ @; ~8 i( C, j- ]: T
__declspec(naked) void caller_goldcoinimg()1 |6 O( `3 }4 U8 A7 `+ W5 J
{
a2 H7 {4 g- E& V. A9 H5 R% @ __asm
- Z) a6 V* q8 R* \( t$ V8 z {
7 g" j& d. e9 l% n( `# r% | PUSHAD
, n% Q+ y' m* { lea eax, dword ptr ss : [esp + 0x38]1 H7 k$ H" i X5 Z" M0 ]5 t
push eax4 J* k1 Z! k9 E+ C; o; h
push dword ptr ss : [esp + 0x38]
8 e0 Q k- x# D/ Z) b1 ] push dword ptr ss : [esp + 0x38]
) \1 Q; w0 A6 h- ^ lea eax, dword ptr ss : [esp + 0x38], m6 {. j: V g; O9 X6 Z
push eax
) A% k" U4 i* \ lea eax, dword ptr ss : [esp + 0x38]: R% ]5 H& o) l, f4 O
push eax
, J& U+ v7 w+ Q. v" k push dword ptr ss : [esp + 0x38]6 F! A& w) v8 f7 D( G! z
call m_NewStatShow_goldcoinimg8 o* \% Y+ k- J" Y/ ?: y/ ]* B
POPAD
- v/ K" Q: \$ z( f% E JMP D2Gfx::D2DrawImage+ Z& c+ b. a2 ?. Q
}& ]' g/ `8 r, D
}
* g0 P* ?) V a% Z+ a; YDWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
S' U& b4 l3 \! a! [5 w3 {+ A{
, ^6 U( e( B) F3 D1 f7 @) e) M if (x > D2Client::ptScreenSize->x / 2)
5 s* K+ `- g8 Y+ a- u+ m3 [ {
, Q. M9 {0 g' m% F* z4 c2 o* e *y = getYGoldCoinFixBtn();
& a6 I, o9 P. k" ~7 Y: t( ~ return getXGoldCoinFixBtn() + 32;+ I. M+ h, Q$ [& h) w& j: z
}
, B( y2 S1 s# X4 f) h return x;( k2 V t5 G8 Z% Z9 S
}* d% \' z8 |3 Z; C* G3 r0 K/ O4 [
__declspec(naked) void caller_goldcointext()
# I% l! B3 k. j/ A{2 S" E5 G; x. B2 O
__asm
. G3 P1 O+ j( u3 F6 ~' M {% T+ Y" Q, E+ ^" ~5 q; {
PUSH ECX
# ~, T- d; h# R+ E: `: @8 D PUSH EDI
- }1 e; x" T, C7 g/ [5 v8 L( E PUSH ESI
9 ]3 Y. I! a/ e& V/ e H0 w3 X7 L PUSH EAX4 k; p8 x7 e1 [
MOV ECX, EDX; p2 L8 K W j0 _. [! ^# ]8 I0 Z
LEA EDX,[ESP+0X4+0X10]
0 {* |+ t5 P; H( k' k- C% j CALL m_NewStatShow_goldcointext2 Q5 F$ ~7 o F) W% x: x
MOV EDX,EAX
7 V% i! h% [ h" S$ R$ t' P POP EAX5 Z4 o' V0 h3 d6 d: F2 l, _' I- Q& v
POP ESI5 x4 c1 Z. K5 h7 g( U
POP EDI9 C, Y: `3 g6 G% _/ L9 r
POP ECX
) _7 F# w8 T2 z jmp D2Win::D2PrintString;7 }+ }! u6 ^( ^0 m+ r z3 n
}
9 ?* L8 G' N/ x4 G2 W; `, K}. \% M3 O9 v/ G5 l+ O+ m; ?, f
2 y9 e9 U# ? K' k& f
BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
) v* A+ ]0 y8 K/ U4 q. i. q{ d5 d5 V. g% y! V
DWORD mx = *D2Client::ptMouseX;1 m* Z @2 W; |+ s, t
DWORD my = *D2Client::ptMouseY;
2 Q' A$ l0 |" _: o# h3 A if (isOnInvCloseFixBtn(mx, my))
; G* e9 ?/ f& r3 j( b6 ~3 E4 K& B8 J return TRUE;
6 F; Y6 w. x5 n return FALSE;
" p$ f0 \ @- i" H}
8 S( S% `# x" g% ? l__declspec(naked) void caller_close()
- ^, F, R7 a' s) t e. C. Z{
' M& c- F5 `: K __asm
, {9 h: i+ d2 Q6 v5 T {
7 d* w% z/ N: ]1 P PUSH ESI" K S! h. T/ O) ? @$ ^
push ebx
0 S" E& \7 Y0 D; J* Y call m_NewStatShow_close: _; N+ b. s; H9 ?8 ?$ m% I
pop ebx& N' S. C9 h$ O" T" r% \! j/ `
pop esi3 m, ~1 ?8 M' h. D+ r
retn
& B( z- A8 b9 ^8 e }$ u3 \2 j& b+ n% r3 \
}
* l2 m: t; T$ [1 h" c8 Z: @0 S6 Z! i' ~void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
& P. y& W" e( a( ?8 P D! Z d{
% T0 t. S' E5 x' {$ [& t1 \8 B7 L$ B5 m0 z *nXpos = getXInvCloseFixBtn();* v5 D- `* L! C! p; r4 w0 m5 L; x
*nYpos = getYInvCloseFixBtn();
) Y; ~& G0 z: q! Z9 \}6 t2 }2 k# ]' l3 A9 j3 D6 `
__declspec(naked) void caller_closeimg()
A9 b0 ^( n4 V2 i! ^0 w# M{6 x+ A7 G- i1 s/ F
__asm k) I9 u" B' D! ]5 h
{
! x) T2 f: K% N7 i$ l3 l3 s PUSHAD s: U+ ~5 Y, L; u0 s" p6 o
lea eax, dword ptr ss : [esp + 0x38]2 m- y3 D) {, t5 R
push eax
# T- c* E& Q; o5 N: H% S push dword ptr ss : [esp + 0x38]5 N3 ~) ?; ^- f) p( L
push dword ptr ss : [esp + 0x38]3 o# g* a1 i& p' @* f0 q
lea eax, dword ptr ss : [esp + 0x38]( A; ~8 x+ u- D% u& j
push eax
6 H1 a) s) _3 J9 c6 m5 ~% H lea eax, dword ptr ss : [esp + 0x38]
" t$ Z. N$ \- d% Z# e/ { push eax7 G( p. B( s1 N! p
push dword ptr ss : [esp + 0x38]! p, i9 U# O; H' X s
call m_NewStatShow_closeimg
b4 ` r P! b/ F POPAD4 Z8 t4 g0 A( J, w% C
JMP D2Gfx::D2DrawImage: o2 b$ U+ a0 \& P
}3 m0 B9 _, P0 u# S+ j- t
}
3 i7 n2 v/ [& ~/ n" u, p, F0 H" @# Y7 V% Z, u
, m9 [( {3 x( g$ H! F
|
|