|
|
转载% N8 ]2 p$ m* ~5 k
BY SJ
) U; B( b$ F9 Z; h% C首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)# S8 P: w1 r" f
+ K) @, V$ _5 I+ \D2Gfx::D2DrawImage-10041
# V* n- p" h) g, ~+ e1、修复技能的背景(不需要可以不要)) ^# f. b F4 N* D7 }& f
offset = D2Client::GetAddress(0x77AA8);, Z0 d( D9 q1 n- Y. R7 k5 g
Memory::SetCursor(offset);4 j3 a( D, c0 K# @! w- i
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
% E" j1 W1 b, |3 F* T0 D q# q P+ k# |' P2 s& i! H: S" i- y4 E
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])" B) L" _3 b' q+ `# o
{8 ~8 B- W; Y) U! x
//Init data for print image
9 o* `* J: z1 u+ a sDrawImageInfo data;. d9 o$ f+ I& h/ r8 |/ `( D1 y
ZeroMemory(&data, sizeof(data));* `$ m/ \3 J2 S+ f4 b" j
& ~/ j" i+ [" Y- J2 x5 ~8 W2 F( R; n
//print background2 s& i" l4 f& \0 }0 y# @
setImage(&data, spellBackgroundImages);' S; b7 N! `9 ~, q7 c9 Q$ B
setFrame(&data, 0);7 i0 y% _7 D* A' f
int fixx = 511;
: a8 a, r; h3 ?; W z7 U/ u. o$ ^ int fixy = 9;
: _5 Y/ \8 [1 i/ a; K" N- G: E D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);
, p' C% U- q3 ] setFrame(&data, 1);
+ D8 t0 P c7 p M3 \; j D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
$ U& g* R) m4 M K setFrame(&data, 2);
/ ^2 `. L' M4 B. i" V" j1 k; s D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
5 N7 H- v, P$ \! C% g setFrame(&data, 3);
: {! }* v$ z* A. y( d/ @ D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);( z: |; B+ d% v' x8 j
}" o4 W$ d7 t3 @/ `' e9 p
__declspec(naked) void caller_SpellBackGroundFix()
# g* ]7 @0 p& ?: D* N# M{
+ r, k0 H6 d2 n! G __asm
0 _9 P9 o2 B( ~* @ {% b7 @! \8 a. {/ A( a- e
PUSHAD
* I, j7 S! ]# Q6 N% l3 e lea eax, dword ptr ss : [esp + 0x38]
1 W$ T8 |: t7 e5 K) j, o$ ^+ @ push eax
" w% H u8 Z5 H* |- H push dword ptr ss : [esp + 0x38]3 b! m7 [/ {& s% P; N! K0 b( N6 d- V
push dword ptr ss : [esp + 0x38]8 B D. e* }3 o: G) m8 _* r: h
lea eax, dword ptr ss : [esp + 0x38]" E" z2 B1 }0 d! W6 A, e- @9 |
push eax
! [& N) F* \" n' a; S, u lea eax, dword ptr ss : [esp + 0x38]
" S3 h+ Z8 X# Z) p8 c push eax
/ M) P: P7 C7 H! ]4 h push dword ptr ss : [esp + 0x38]! y+ p$ C+ v0 j \4 L
call m_NewStatShow_SpellBackGroundFix" h' {% S' u& X+ Z, B
POPAD' [8 b) E. z+ Q/ O% |7 y% R+ Q
JMP D2Gfx::D2DrawImage+ E; G( W" Y/ o. t# _) a% ?' S" H
}
3 x: C# f! G$ Q' Q6 L8 q. I}" P) C4 Q2 o( G2 D4 U
, [+ v# p# }& O( K3 i- l2、我们如法炮制小站的背景
- Y' O' L7 c# w- Y% F( ^% G/ v/ p+ h+ [" |4 a0 x
offset = D2Client::GetAddress(0xAB010);
- B; }# t0 Y1 p5 fMemory::SetCursor(offset);
. G& G5 m" y( O& n, JMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
( N( s4 F: x2 M% F7 l3 x/ W* j
( s6 G K: M" d" ?; U, cvoid __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
( ^; ? D7 s8 \" J! f( `8 F0 j* F{
9 z1 j/ c% [6 ~4 _! J //Init data for print image- R4 f8 s# h1 H, j
sDrawImageInfo data;6 {3 X) S+ u+ f& s- E5 ?2 m1 { Y
ZeroMemory(&data, sizeof(data));
" t) O! w2 `& V Y m3 e5 J
2 J7 J$ V+ f0 E K0 f# b0 s! _; V //print background* W2 `% d+ P8 `, X2 L( j
setImage(&data, waypointBackgroundImages);; `# k/ J. @! F
setFrame(&data, 0);. ?& l+ w6 u8 T" Q8 ]
int fixx = 0;
6 u, _0 p3 D" e2 ~' u. Z# Q: g/ M int fixy = 9;
% U5 K) A3 i6 O- ~8 } D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);
0 y/ l0 A) ^8 y setFrame(&data, 1);
6 K& |4 d1 ]8 s D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//2562 n; y2 N, j& n8 I' h! W
setFrame(&data, 2);
( `9 L, l4 o3 S# A: S D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
1 |* ]7 {+ I- Y setFrame(&data, 3);
( ?" M8 D$ [+ Q$ A% b W' h D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
* E7 j9 ~+ c! D! `) r
% c0 p# S6 j; i$ V' N& Q}
) T$ ~' f+ b0 J9 x) r# h__declspec(naked) void caller_WayPointBackGroundFix()
* A& h/ {3 ~4 n, Z7 J{
E" S, T0 P7 M5 V* d& b __asm
7 P% X" ]" }- L( q, t {. m' R+ E- q" c6 u, Q/ O$ {) F( J8 Q
PUSHAD
; @6 r# o! _. L$ x lea eax, dword ptr ss : [esp + 0x38]: p5 |; c$ C8 q" w% n+ X1 H, X
push eax
; h$ l7 d% ` b' d push dword ptr ss : [esp + 0x38]
7 ]) j! e& Y, _- K5 [2 @9 ]( O push dword ptr ss : [esp + 0x38]5 Z/ v+ T" T# t
lea eax, dword ptr ss : [esp + 0x38]. u" A" R7 t/ L% J( |8 S
push eax
1 L! c9 g9 ^& D+ E( y( E! Y lea eax, dword ptr ss : [esp + 0x38]
/ Q. y3 L9 g& ^3 Q2 a: w push eax
( x! L$ M a3 \- e push dword ptr ss : [esp + 0x38]
( Q# g3 ^. }6 r: s1 F call m_NewStatShow_WayPointBackGroundFix1 y P& I: h: ?+ D6 [/ o! u* q- p
POPAD. a5 O5 W, ~7 _. b7 J+ d; a$ ]( I
JMP D2Gfx::D2DrawImage+ f$ h2 ]( Y. w* l+ x: m H
}9 B8 P) L6 R) n
}) I/ T V2 h, W. `2 E/ f5 D/ j6 i6 O
' I9 a' m$ ~9 `) D3 o. _
3、以下可以搞16*16超级箱子-腾出我们需要的边缘) Z* I6 h9 m D; |. H6 N8 `4 x
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
& H; y. }# r; G$ L {7 Z2 Q4 c w5 U4 _1 O3 C$ ^9 w
class D2MultiRes : public Library<D2MultiRes>
% `; L+ m6 ]; Y- Y {
* Y( P3 M" ]+ D! |/ a public:
% T- j$ j0 Q/ |! U5 n static void Init()) `6 A( T- W; E
{$ f: q) `$ z3 t, G l V
Name = "D2MultiRes.dll";
4 `! \! ~* t: h* j& e Offset = LoadDiabloLibrary();5 H6 {! z8 q0 ~
}3 J. v* H! C$ z& `3 F
};
6 U4 t3 Z' y$ A, _6 f Q/ P8 u D2MultiRes::Init();& J3 C* H4 r- |" t4 h+ u, A+ {2 \- `
D2MultiRes::HookLibrary();
6 S( o) O5 m# U. a; N/ z- l$ i, V; {
0 ^" Q; n; `7 h) \" M6 v: ^0 S" L b. P. I3 s5 b$ ^0 I; `
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
+ m$ C0 I' k0 v% S. X Memory::SetCursor(MiscFunctionsOffset);4 D- ?! V) x: d7 R- t6 k! X
Memory::ChangeDword(0x1b0, 0x200);6 Z$ s( R+ C- t2 n6 U
0 F) L& N5 @! v: X/ _. v
. U8 P9 T/ B3 o5 @ MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
! i; v# J! M$ T1 ^ Memory::SetCursor(MiscFunctionsOffset);
7 l# r: Z9 t4 p6 t" z9 ?6 W Memory::ChangeDword(0x140, 0x200);
% e" B1 ^# ]+ }: M8 Y+ T
2 o+ b# q2 S* l- e" E' W9 L5 W* R5 m; U" g1 D; h$ B5 }8 \% H
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);
# G2 r/ b+ e) z' q Memory::SetCursor(MiscFunctionsOffset);
+ h* f$ M8 V, J: ~$ Z9 Q# j Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
' I7 Z5 x: |1 \6 J! L! W. Y# ]8 |+ B& X4 q
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
$ P7 [$ P1 {: ~1 K6 c! b. ] Memory::SetCursor(MiscFunctionsOffset);
0 r% u# E8 Z1 B" S- L$ j Memory::ChangeDword(0x200,0x299);//下边缘 299最大
9 Y6 J. X$ b3 B" L+ o% j% e: r
& L# X! g0 X: a% m" s MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);, u' Q3 |' d/ c# v% z- y
Memory::SetCursor(MiscFunctionsOffset);
3 L% s5 ~( _) @/ S$ O' l% G* } Memory::ChangeDword(-0x280, -0x400);//这个不要动
! m3 O/ n9 T: S8 c }
6 G- J6 A" ]- P. X: l8 f. r7 |' q! V# F: x8 T. R
4、快完成了,是不是发现金币啥的位置不对??
) e8 {+ P3 e+ x6 L9 N2 ?" ]+ w$ ?% R1 W, @# N3 s% v
//这里修正我们的装备栏
b. z1 s7 X! b8 k8 C offset = D2Client::GetAddress(0x99B6C);
" C( y- t" u; { Memory::SetCursor(offset);- r; T8 K$ I+ U: e- j
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
; Y7 F5 A* `0 Q6 E7 _0 d
3 I( a* Z6 Y4 A- F5 z- `9 ` offset = D2Client::GetAddress(0x99BA7);
8 T6 @3 F$ k, m p3 J Memory::SetCursor(offset);8 J1 k# |& c' m' S4 I
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);% r2 ~8 N1 n( ^; x. O+ e2 a
) m# |6 r4 h6 _8 [( M3 }* } offset = D2Client::GetAddress(0x99BE2);
& W# R. S; q' e+ t* r Memory::SetCursor(offset);
8 d4 Z' R I$ q, J8 g" t5 o Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);. G( w* i5 A1 {; |7 @' F, D
( D1 y: \( Q! r$ o* y0 d. H offset = D2Client::GetAddress(0x99C1C);
6 M+ v# b( a- a8 S/ Z2 } Memory::SetCursor(offset);
* ~4 m% T1 J& J/ H, C9 m. U3 W Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
+ x A5 H- c+ L/ U8 S, d b% p; B# h g
8 `2 q& o( n7 H, X; v" S //取消两个popup,偷偷懒不过分
9 D! e' n4 G8 b% k offset = D2Client::GetAddress(0x9386d);
4 ^3 M6 c3 B) E0 I3 `2 E# Y Memory::SetCursor(offset);
4 P5 @! C" Y# a9 e; ]: W. r, P Memory::ChangeByte(0x8b, 0x33);
: H) }2 }! E" n6 n6 z' u Memory::ChangeByte(0xc8, 0xC9);, a+ y, Z3 ^: S( F$ f" E( ~
offset = D2Client::GetAddress(0x9390b);# B4 B' \, x$ e5 H9 G1 U! v
Memory::SetCursor(offset);) A7 L' j8 v8 r& k. Q, V
Memory::ChangeByte(0x8b, 0x33);
0 m! {0 b$ f1 W) M4 C" m+ U Memory::ChangeByte(0xc8, 0xC9); |+ w1 h! O- d4 ]
' T5 N+ p$ s( j* N' M# w7 L, r
//修正提取金币+ }6 \0 s* v) d" S* u5 I
offset = D2Client::GetAddress(0x8D3E5);
( S- m% L5 p" h$ J/ Y6 C- T Memory::SetCursor(offset);
1 M' v/ ]4 ~4 P' a; ?+ F Memory::ChangeByte(0xA1, 0xE9);) I7 Z6 j- I* f$ G) K
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
+ S J# L D' w+ P' [9 p; S
* O8 k7 r$ D' Q6 K5 N" Q- ? offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);& @# {$ T! B% y% e
Memory::SetCursor(offset);2 w9 X$ k9 f( [; S. ?, K
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
" C' U/ U2 t# Q( G/ y& z- I) n& `' @2 b( ^8 c5 E# u0 S! J/ C. M9 e
offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);9 W! |: r/ X% L2 T0 r# q4 i0 V8 {
Memory::SetCursor(offset);
/ A$ B5 f% V! ~6 G' } Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);4 K# f/ i' e5 ]- [% I
: K- M2 U3 O N
//修正关闭按钮 p2 D3 G- V0 K/ t) q0 ^
offset = D2Client::GetAddress(0x8BD90);
4 e2 P/ T5 [9 {- k Memory::SetCursor(offset);
! j3 M6 u+ m( |: P: v4 m2 O Memory::ChangeByte(0xA1, 0xE9);1 z. a8 S' q8 |( s6 ]5 e
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);# ]2 q5 Q! Q, s; d7 l* d5 W" t
% O# x, X* ^ l4 K F8 b offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);# S6 r4 Q7 Z p0 {5 G7 k9 s: ?
Memory::SetCursor(offset);
, P/ d- C/ x+ t Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);- |$ E" H2 H" B0 X+ W) K
. E: n: x" L8 V( H
% N, J2 B3 [6 ]& ?9 b//以下是细节
0 o, t3 [% g3 c5 x#define getXGoldCoinFixBtn() RX(0x2d0)' n4 w0 Y) Q p, g1 @/ p
#define getLGoldCoinFixBtn() 32
) d/ h! v8 K y: Q#define getYGoldCoinFixBtn() RY(-0x59)3 Y* e2 g9 N$ B$ [' W a7 o
#define getHGoldCoinFixBtn() 32' O. M1 j+ B) C0 ~& y! s2 v1 x
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())/ Q3 E( |2 f) S. F: K* l
* ^5 S* v( l: r3 z) Q#define getXInvCloseFixBtn() RX(0x3db)+ G$ E6 C; S I/ N" X4 O
#define getLInvCloseFixBtn() 32
+ B b4 M9 r7 M U$ a#define getYInvCloseFixBtn() RY(-0x63)
' d9 F4 N0 B7 @- W$ S7 p0 E#define getHInvCloseFixBtn() 32% R& J Z& w; R) U* h& U
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
7 I4 \& o0 h; m8 f! d
?9 K# \4 E( V6 `5 O2 Y' NBOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)& J! A! d0 D: S# a2 C
{
/ N# c+ n2 A6 {" m5 C DWORD mx = *D2Client::ptMouseX;. h ~, l$ ]7 ]/ G
DWORD my = *D2Client::ptMouseY;
7 h3 _. Y( q9 n% d& t# D* i& [6 O if(isOnGoldCoinFixBtn(mx, my))5 o" ]; c8 r# z$ }2 e; P$ k
return TRUE;9 c6 W* d. x( j
return FALSE;8 l( Z) T9 y4 z! D
}
4 r: h5 K R& H__declspec(naked) void caller_goldcoin()7 z x8 u& q) [: `
{& E. K* \9 V* j4 d) k4 y3 n
__asm
3 b( Y9 f! w2 |# q" Z, z' h4 j {
( v, M/ a0 c+ r) E$ L, U push ebx' [: ?! M9 L6 l# X2 m b
mov ecx, esi
% M7 G- s2 `, k, B" O- z mov edx, edi
! q, {" [* [8 l7 p( m9 M4 ]0 i" }" z call m_NewStatShow_goldcoin; G) G9 o4 _/ s, ]
pop ebx
( g6 I0 D* ]' ?" t# C pop esi6 V0 ?: B N9 p& R
retn0 A9 M2 ?) q A, w
}
3 s) j9 v& {9 M}
3 c% E' T' W# O( L0 V' hvoid __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])- x5 K- l- t, r* j
{! f) E, ]$ [# }* @' a2 E, h& ^8 v! w
if (*nXpos > D2Client::ptScreenSize->x / 2)9 Q8 g8 B4 T e/ w" ^- C6 f7 |
{
% h/ h! m9 [3 ?9 i+ ?- @ *nXpos = getXGoldCoinFixBtn();
1 |: T: O: \; F% Z; j. U# H *nYpos = getYGoldCoinFixBtn();
, B3 q: r# y9 Y# U" Y }
* @1 T+ K' M! l, R- v}
8 J/ R4 _0 E1 }8 D- K6 r__declspec(naked) void caller_goldcoinimg()
( r' {: M/ L; ~( E. [% _{
8 |8 K. d8 Z% P& G __asm4 S) r; @$ `0 [9 c
{
, k. \2 g6 L+ h- C) `, g1 P6 Y6 r PUSHAD
( U# O% f$ W' O" q lea eax, dword ptr ss : [esp + 0x38]/ b0 V; X& ^- |4 j4 ?* @/ \% S5 t, x
push eax [) r; Y& K: Z& {
push dword ptr ss : [esp + 0x38]
. s6 I. Y3 w" b, w0 U3 t push dword ptr ss : [esp + 0x38]
$ x% ^9 @0 l8 t7 N) Y3 r lea eax, dword ptr ss : [esp + 0x38]0 z6 l; {" U8 P" x, Z8 Q! M3 ? X
push eax
5 E1 q) x3 ~) v" M! X N lea eax, dword ptr ss : [esp + 0x38], D% u* N! M' s7 ?% n/ g
push eax0 t8 F" `4 d! a/ `, J7 e& M
push dword ptr ss : [esp + 0x38]
~. L- t& I/ _ call m_NewStatShow_goldcoinimg& W7 ?9 Z, M; f& S3 N
POPAD) c' }: ?6 g! J( i" ~ `
JMP D2Gfx::D2DrawImage! L' R! A6 I7 \% a' Y7 l9 j
}8 _! h/ L$ d# U; ?( }& g$ C
}+ |( f7 ~/ l* X( \
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标! p$ [$ X- C1 Q4 }9 ]% Q
{ R% [) x4 }$ @8 g# ~" u
if (x > D2Client::ptScreenSize->x / 2)
/ f& I# B) W9 q: h1 Z {" K1 J; _( W0 \) ~0 h" F5 T5 Q
*y = getYGoldCoinFixBtn();! t4 j0 s4 Z4 f* ]4 C& R6 j/ `
return getXGoldCoinFixBtn() + 32;& Z* r! P1 f# M
}
& n+ U5 X! ?8 {0 V' _2 Q1 m6 U return x;7 I' X" Z3 U% k& g5 H* A3 ~# f
}4 |6 l# J( u: T0 f$ t
__declspec(naked) void caller_goldcointext(); Y! f8 f! ] f2 H
{
/ t5 o1 a; ?+ \) Z+ w+ x __asm
" H% N0 }6 f! J% o3 V5 w+ j {6 p9 |# V+ i. l
PUSH ECX2 v+ \& F- U; }
PUSH EDI' A4 Z' H. X9 @' v/ b2 _( }" l
PUSH ESI! i# E% T* k$ j' w7 |1 m
PUSH EAX
2 u$ o$ s2 u9 t: e: f/ q% a MOV ECX, EDX
' {! K% E- X+ E. V# s x2 X LEA EDX,[ESP+0X4+0X10] m1 q @, }# U9 ^
CALL m_NewStatShow_goldcointext
: Z. z9 H9 [2 t9 b2 u# T, L/ c& V MOV EDX,EAX
, f7 Y. I! H+ k( S POP EAX/ }* \8 _' `. n# L; @
POP ESI
. {( G2 t' N/ y2 ~- q/ f POP EDI
: G- i" Z, R- }8 y/ i POP ECX: S) B9 F+ l: N7 g
jmp D2Win::D2PrintString;
( l+ p( B& d, A# ^! M }
h; Z; f6 z0 {4 }+ X* A+ \}
# F! C6 B/ q% r6 r# z6 l6 b7 F
' g4 `/ B4 @4 M g( QBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)8 z' ]: a* h; w. x' i- D3 B
{
, G9 s: X% [% b5 u8 q8 I! F, f DWORD mx = *D2Client::ptMouseX;
& j; |8 L) F1 o z" V2 F, M) e DWORD my = *D2Client::ptMouseY;) j% V4 V9 M! }1 P& e, ]2 K
if (isOnInvCloseFixBtn(mx, my))* ]- \* l1 ^: v& p' x7 ~
return TRUE;7 u. O3 A+ X) P: c1 L- c$ X2 r8 Z
return FALSE;
5 I' ~# o$ C$ w( i, B8 `}: ~4 l& h1 T$ y; e
__declspec(naked) void caller_close() w# n% M& t/ o f: K
{
% r# E9 }2 b2 B7 y6 P __asm
& L) i& {) X+ j4 q1 z {6 r$ v( k+ n' H( T8 r
PUSH ESI7 w: M+ a$ Q* p6 D# d5 N8 j
push ebx
& k9 ^# i' E) Q: i! u, b& ~ call m_NewStatShow_close
# Q! Y% s7 ~4 d) x+ L0 d8 Q pop ebx
: Z6 \' | q0 }; y2 k- `& w pop esi& }# f8 A$ |' u4 G3 i4 Y3 l X: L
retn
' i3 W4 D2 ~8 _8 ^! A8 ^ }: t, R. ]: I8 L- y9 u
}, o& s& L: q B' |* a- x+ [
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])% [8 {. e, _3 o8 Z
{# N' M: ^0 ]( z) H
*nXpos = getXInvCloseFixBtn();
: U) r, h4 ~; N9 B! m% D *nYpos = getYInvCloseFixBtn();
" ]* y( ]: A' J' K" C}
' l3 B. Q- o( x! a$ Z- \7 {! I__declspec(naked) void caller_closeimg()
# `0 r* C2 d* Q2 ^, F( U{: x% [1 V+ ^& r
__asm
0 t* @3 S1 G2 ]8 x8 z2 ` {$ M) O7 S/ e$ B( u
PUSHAD" p2 w( f/ j2 B) {$ U4 l1 W* j
lea eax, dword ptr ss : [esp + 0x38]
" a& Z$ @% z+ a- n4 T2 c push eax, S/ c) m4 ] ?2 H, Z' I) Q
push dword ptr ss : [esp + 0x38]7 p3 I5 C7 H6 `+ l. W8 R
push dword ptr ss : [esp + 0x38]
V1 w3 I* {9 g( c4 J lea eax, dword ptr ss : [esp + 0x38]
5 }$ F* t/ D2 U }6 g7 D) P push eax
, P% j9 {& V/ C! a e9 B2 m lea eax, dword ptr ss : [esp + 0x38]7 g8 S& I! g7 O' W, k. ?2 n
push eax2 g& E2 R% g: l
push dword ptr ss : [esp + 0x38]
3 f+ p/ ^- x3 n: V% M* i call m_NewStatShow_closeimg# \1 R3 o- Z! I. G7 B. W
POPAD
/ I% E9 a& ?# R4 P& Q! B6 ?; q JMP D2Gfx::D2DrawImage
6 N; h! m. ^' M v* j# R0 m }
' @% [, F" i& x' S}- d9 r" o$ \# r
# e; h) n; v1 \" M& c8 F' W& M" R" H. k t# g+ m! Q
|
|