|
|
转载
" P- k+ O4 \$ J& dBY SJ% l5 ]! @- U) r9 i
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
0 m1 _7 x* C) z# `( S. `+ y1 z: s% @0 L" P, G0 b7 h
D2Gfx::D2DrawImage-100410 j+ u. g9 n" W S! S
1、修复技能的背景(不需要可以不要), G" }% O( a6 W9 e0 H) n! y
offset = D2Client::GetAddress(0x77AA8);7 u/ @# O" n6 W0 y& l, d3 q6 ]
Memory::SetCursor(offset);
! R* p% |# A- x5 s6 j7 vMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
% D; }" I) D4 I' N$ c5 G8 X- F
0 A# i& L9 z2 k( a$ |3 Svoid __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
) V( E" J) B' E2 w( s{- P* [( N+ q4 i: y% }
//Init data for print image
4 _* N6 Z# k, o, A8 @& B% u- ~) x sDrawImageInfo data;
( t2 Z! s9 F( V/ v ZeroMemory(&data, sizeof(data));
* \8 U' X; n. X( u Y$ M
0 h2 y* v# P2 P2 e" C3 m; P //print background
3 }4 {8 w$ i L- n) L V# g setImage(&data, spellBackgroundImages);
( T# V6 S( N+ S& e setFrame(&data, 0);/ j; [- X V& z5 }6 d6 V
int fixx = 511;" V: Q O& ?/ \5 g \: m |
int fixy = 9;
- c+ g2 [( L3 ~% X D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);4 W- S/ G7 Z' W
setFrame(&data, 1);
3 n& s+ C" Q; v& U1 L' Y D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256- y" K: B& v& N
setFrame(&data, 2);. n, [' b/ V( E$ Z* r/ _8 r6 e
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
. H3 U; y! ?& O setFrame(&data, 3);& S2 t- l+ Z8 u! B# \
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
: q" ^" f8 g2 ~6 z}
+ P3 ?, b1 E, m9 w__declspec(naked) void caller_SpellBackGroundFix()
+ l5 I4 w% K( w% s: [0 T{
4 d- [0 R& Y. x$ p Z( o& Z __asm
# b. R( j! d, E {: [4 ^. x6 e* H% Z
PUSHAD, ~8 i7 B6 N& V. d/ j
lea eax, dword ptr ss : [esp + 0x38]
' ]/ s2 C; ~ y" Q, I# I; Z! Y push eax
, Z* v9 m: @. b) ]2 K7 c push dword ptr ss : [esp + 0x38]
5 Y- S- n4 p/ r7 e7 u r push dword ptr ss : [esp + 0x38]
' v: x& C) g* X! t# {& Q" W lea eax, dword ptr ss : [esp + 0x38]% M" {+ P: a S' a& X1 G
push eax
0 S- L5 z7 n2 _2 j) G3 W" A) E lea eax, dword ptr ss : [esp + 0x38]
6 w; i* F! q& O9 B+ O* M push eax: s" f d$ P$ o" h
push dword ptr ss : [esp + 0x38]/ G, {0 Y+ x/ c+ o7 a$ c! w7 i+ T# E
call m_NewStatShow_SpellBackGroundFix$ T$ q6 K' Z* ]# a# ^; h% `* a
POPAD
( P+ v1 `+ `' `* d JMP D2Gfx::D2DrawImage
y- e7 G/ T- H! H }
1 c3 t2 m$ I' D J8 o}( p# Y8 D, F+ }2 E) g- O1 p
y1 ` l+ v) {2、我们如法炮制小站的背景" X. S: U* w6 \: K# o/ A; R+ w$ s3 e
! K5 O( ]0 M' h$ z/ @8 p
offset = D2Client::GetAddress(0xAB010);
) p: i+ O8 R$ `! lMemory::SetCursor(offset);! S+ i# w& k {( \
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);0 I) H6 y; f; [% |1 J
) m, v8 [, g# [8 H) v
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
4 V: C7 s) {1 Y+ d, M1 i4 k{
* P, k/ C! X8 n, I6 W+ a! i! R //Init data for print image+ ]1 l4 A8 O, v x2 M: f2 a: z5 L& k
sDrawImageInfo data;
" a4 M! P' D: K4 Z% d ZeroMemory(&data, sizeof(data));6 K; _! Q5 _( z! ~. a" o6 ~8 `2 k" g
* [( ?9 c, I4 Z5 ^
//print background& W3 L3 q: H) e1 \. y3 t2 }* S
setImage(&data, waypointBackgroundImages);7 G+ U, T4 _2 {) A2 v- y
setFrame(&data, 0);
& S1 g9 h& q& b8 @ int fixx = 0;
( ^$ @" z' M4 z2 n/ E% K int fixy = 9;
5 @/ d1 K$ M0 l' s6 ^7 D8 \1 [ D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);
8 l* U0 B$ ^1 e5 K# P3 k k setFrame(&data, 1);) C4 M/ c( Y& b3 o- j$ W
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256* Y' T; p( T+ P1 b( V; C5 L
setFrame(&data, 2);
" l. y( q- T6 | D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432. G# s# \2 p4 V4 h2 z/ I
setFrame(&data, 3);
; ~# `: O8 o3 Y7 A0 `" o6 {' I D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);8 s: O* ]; _) L1 U6 i
6 T, k3 J$ {6 K; b! t$ V' H# n
}; n1 W, }& G8 f% x. e; }; W% c
__declspec(naked) void caller_WayPointBackGroundFix()" m) h$ d u$ t5 |8 J/ b+ W
{
: w& B: k; f" L! f. q __asm; j2 M: q2 ^- }& J' q/ U, V: V3 h
{3 ^# _4 I/ X. ?3 R
PUSHAD1 {1 T& {5 t" R
lea eax, dword ptr ss : [esp + 0x38]
9 H# X: D% U. ]8 i* v% a9 y push eax4 G9 \. ^# t. D5 x$ f7 T. {& e7 k# D
push dword ptr ss : [esp + 0x38]5 L8 J" Z. s8 _* R9 j0 }7 ^- A6 f
push dword ptr ss : [esp + 0x38]
3 d0 z& p! O* e2 [% X n lea eax, dword ptr ss : [esp + 0x38]( _5 S0 ^! d- K
push eax
7 _" m! t$ i- E; a. @+ W t lea eax, dword ptr ss : [esp + 0x38]
0 F! e+ c# H2 U! T. D push eax
1 X( W4 i. A5 V( ]+ I push dword ptr ss : [esp + 0x38]
0 R; [$ i4 a6 N" o' t call m_NewStatShow_WayPointBackGroundFix1 |; Y/ b+ s. k7 q# e
POPAD
+ d6 p, T9 O9 o# n JMP D2Gfx::D2DrawImage
! L% i s5 j. w8 o$ o$ ~3 E v3 l }
8 H! f" W: S; b& o}
7 _3 U" Q9 N# E# g
4 J% s% E9 Z: V8 ~" T0 j3、以下可以搞16*16超级箱子-腾出我们需要的边缘+ J( \3 f' D8 u- q4 Q/ f
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)! d) E, ?% x6 N9 A9 f; M
{/ f- g, u/ C3 l: k
class D2MultiRes : public Library<D2MultiRes>" o% P }, Q7 \7 F; C/ n0 \. ^
{- ~' e5 ]" i) q) y ~: @: C$ N
public:9 j* {- @& L& L6 E7 Z
static void Init()9 W/ X" G5 p8 r" @7 h
{
: g" M \. @4 x+ Z0 K. @/ ^& `) x Name = "D2MultiRes.dll"; d {. R+ y. M5 w! z
Offset = LoadDiabloLibrary();
2 d: C5 G- k! n; z4 h; L4 _ }
0 L. f9 l- j/ v2 N$ u. U };) m+ ~2 L& y! t! r7 K
D2MultiRes::Init();
3 c. ?# i/ u) w$ x. v D2MultiRes::HookLibrary();
8 N( e; X& X! q
+ u+ Y& K. @# ~8 Z! u. ]7 o2 P
; N; O' T- S2 b MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);3 W$ @/ X5 I' y4 t5 j- e
Memory::SetCursor(MiscFunctionsOffset);; U/ t! i5 k/ _( l$ c; V0 _2 U/ r; j G
Memory::ChangeDword(0x1b0, 0x200); _" I+ S# o! x6 ]4 g& `
5 |$ _) ?& R. o% o! w7 B
& r! o7 f* {% N) Y; I MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);/ x( L8 f7 u, _1 Q- n* b/ o+ o- \) f
Memory::SetCursor(MiscFunctionsOffset);# z) y @8 o2 v$ s5 p' z& Z+ c
Memory::ChangeDword(0x140, 0x200);* w0 d: ~' g) X; [! B, y" ]
: g* r( v* l2 K) c1 e8 Q: Z3 X
8 s2 S9 y: U: N MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);
6 L8 a0 z- g2 F! V# w Memory::SetCursor(MiscFunctionsOffset);$ E3 ~+ _; f( F, p
Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
t8 J/ v% C# w3 z4 n0 C# E6 ^1 e8 ]0 S% M" e! q
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
: Q( v) j s# @- ~1 Z Memory::SetCursor(MiscFunctionsOffset);% e/ D$ n# x$ P8 a
Memory::ChangeDword(0x200,0x299);//下边缘 299最大 r* s" b. M( u" V0 M3 ?0 r1 y
+ ]2 O' S, g, P* t9 Y x4 E MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
: ^# V9 J6 v* n, N" o Memory::SetCursor(MiscFunctionsOffset);
; K! y, R I2 f4 [: o+ w: w; M Memory::ChangeDword(-0x280, -0x400);//这个不要动2 c% o3 c% l5 |( V% b
}( Q$ E3 q" _6 {9 r9 D
}8 X0 q D9 x2 S5 ?
4、快完成了,是不是发现金币啥的位置不对??- v, Q) a0 D/ b+ `( ?( f1 [
/ x$ {% R' `, V" A2 \//这里修正我们的装备栏
/ Z$ {" O: A3 z7 L) D& {/ [ offset = D2Client::GetAddress(0x99B6C);
2 M* A9 d; O9 n; S" m0 `, j Memory::SetCursor(offset);
1 h% @$ H( R1 Z, V6 i8 z Z3 V' v Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
6 r! [, b8 }7 o6 J7 w0 V9 J1 h
7 W( x" ^: f; W0 i: u1 h offset = D2Client::GetAddress(0x99BA7);- o6 F- D0 {; y m# D8 S- h* b
Memory::SetCursor(offset);
3 t [( ^0 J7 A. \ Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);2 Z; q1 D: c8 S
+ P1 t1 F* O* ?4 N) O5 g
offset = D2Client::GetAddress(0x99BE2);
2 j! U- N2 Y0 w& w4 n. e6 p. n Memory::SetCursor(offset);( Z! s6 J# W8 o" H' A2 w8 x
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
2 n; q. o. P7 \9 K/ u/ Z
/ [ Y0 M. c0 t/ g4 ?( ] offset = D2Client::GetAddress(0x99C1C);
& ~9 N/ X2 i* @; O2 n% |6 u Memory::SetCursor(offset);
8 N, A- N. ]) N( U; q/ Y) Y Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
4 ^& s8 Y5 @; h
+ w0 W2 u/ h* i3 y8 G //取消两个popup,偷偷懒不过分
8 K$ A: j+ z- m. [5 v4 b offset = D2Client::GetAddress(0x9386d);4 {" t9 h8 g2 T+ M4 F$ c
Memory::SetCursor(offset);# W5 s u/ f' S7 O
Memory::ChangeByte(0x8b, 0x33);
D) Z$ g( P$ g) ]3 N% U! H Memory::ChangeByte(0xc8, 0xC9);; z# o6 n* o, H1 ]: Q4 G6 ^
offset = D2Client::GetAddress(0x9390b);9 d9 g& w4 A( ^4 O. \% X
Memory::SetCursor(offset);3 q$ E4 A9 v; \1 q% b8 l
Memory::ChangeByte(0x8b, 0x33);
- Q% ~+ \8 d, v( x! s" ~ Memory::ChangeByte(0xc8, 0xC9);' v4 v5 f. F* w4 M, [# u
! K9 q; v: y* v. S
//修正提取金币: Z! @+ G$ H3 J# W2 g8 {
offset = D2Client::GetAddress(0x8D3E5);
# M7 e9 i5 T1 E( d( L% u' C* s( N Memory::SetCursor(offset);
0 [1 b+ w, U' z' q Memory::ChangeByte(0xA1, 0xE9);! n- j9 z1 I" H" C
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);1 L( S, o( t5 Q3 |+ f. i- W9 x
1 }+ ^. D9 c7 R3 O: s
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);: c1 l4 y, z/ Y. B
Memory::SetCursor(offset);/ C' s& Z$ L0 j* J1 g- w
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);+ C( K5 }/ g# |0 [0 a8 X6 i8 V# y1 n
: F' p g3 @1 i' ~% q8 H9 X
offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
0 n; q# l, e* B Memory::SetCursor(offset);
' ~3 G7 x/ `: R" d Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
0 j S# p3 y: H4 L/ v9 k# q$ F4 Z' q: l5 h3 ^) [ I
//修正关闭按钮, K/ C G0 {4 }* B* b
offset = D2Client::GetAddress(0x8BD90);
/ _2 |: l. f1 j* c4 s$ G Memory::SetCursor(offset);5 S2 n& N' `% C" v8 U7 w4 K) Z1 l' K P
Memory::ChangeByte(0xA1, 0xE9);( D; u. E& W0 d; A( Z# P. N, a" ~4 w
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
& P7 V; J9 l- X! ~* _+ j
& M1 z Y7 A, A% i! o1 I! t7 { offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);* s0 C- z1 o/ m. p: c7 s; W7 s
Memory::SetCursor(offset);1 T) W# |# [. m; @3 x3 H' P2 E0 j4 \
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);+ j, K; |" x$ x) w( j* b
* _$ D$ c# i3 l/ }$ Z/ [: V9 y1 ~, E6 t* C3 K
//以下是细节% O5 Z: M6 X# \$ R9 |, [9 q4 d' X7 I
#define getXGoldCoinFixBtn() RX(0x2d0)
. x5 \1 D! d9 g#define getLGoldCoinFixBtn() 32
z+ m" ]; A8 e' @" I: p% K#define getYGoldCoinFixBtn() RY(-0x59)
# {1 k5 e5 @+ J. L5 Y5 g, e#define getHGoldCoinFixBtn() 327 t! x5 e; V4 G2 J# f
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
5 e( B1 T8 Z6 O/ p! P% I! v( b. D6 l; a7 G
#define getXInvCloseFixBtn() RX(0x3db)( U, X( D5 m) N
#define getLInvCloseFixBtn() 32
# {9 c" m' r: H x#define getYInvCloseFixBtn() RY(-0x63)
) a2 c O$ s! V#define getHInvCloseFixBtn() 320 y8 O+ r# x/ C( D2 @! s6 `: ~
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())- z- U* V7 D0 ?1 ~8 w$ `
6 o+ C8 N6 e9 {& v# PBOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)1 ^3 n5 X3 R/ A2 l2 m$ Q; d) H0 H7 r
{% z. {& I4 c( m7 l) J: e- L+ I
DWORD mx = *D2Client::ptMouseX;
( Y) K/ W+ b1 ?7 [ ?- M& z DWORD my = *D2Client::ptMouseY;
0 V6 u. ? @4 M. I/ T; u if(isOnGoldCoinFixBtn(mx, my))
6 O) Y2 v5 t7 g% z8 q5 P2 x return TRUE;
. o2 P, Y/ [6 p. Q. ~ return FALSE;
$ | o, m; V1 Y$ ]5 X}) x/ K9 f. T, d* ]9 O5 C7 x
__declspec(naked) void caller_goldcoin()7 b9 n3 _! E2 f1 j) @
{
6 p! z8 L" l5 o0 }" Z: p# U __asm
3 { o3 i# D# t Z {: `3 C' z$ O: u3 E7 U" [' W" u
push ebx/ \( |- ^* m1 Z4 G3 G2 t+ q7 U
mov ecx, esi
- N' R h) \' y' J, |/ f mov edx, edi1 u1 H$ E* W, \ z' b
call m_NewStatShow_goldcoin
) }6 ~. Y7 C& V, p pop ebx
, u2 ]$ W) F( A! o) b; H0 g3 |* J3 A pop esi0 v7 L1 P' w) e6 \
retn
" \+ _0 ]' I- m4 @ }
3 k2 P3 C- Y" F" Y" H" G) R}
7 F6 [! u4 V1 l- L; X4 M9 u- svoid __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256]): S$ o* u) V9 r- D
{" M! D0 h0 h, O# k9 n
if (*nXpos > D2Client::ptScreenSize->x / 2)3 ?' f- m" _7 {
{
9 L! T3 C2 S' E) A B3 @: o: Q *nXpos = getXGoldCoinFixBtn();" ]1 O* I( l+ |/ j; x' L
*nYpos = getYGoldCoinFixBtn();
6 c2 ]+ O# [' H# Z; I5 V |7 Y+ a, A } o. H' E7 R1 `3 v, D2 a( x
}
/ j# X! O- d1 H# D3 ~/ E__declspec(naked) void caller_goldcoinimg()& ~# Q5 ~0 O& ~* l: J& ?9 [
{
/ D, [( ]" t+ s __asm+ l+ o) L q- @3 l5 ?
{
o9 z3 l m! Q, h PUSHAD
( S* ^% T! t6 v. v lea eax, dword ptr ss : [esp + 0x38]
. `5 F2 ^2 _! n1 a- }; ~7 ] push eax
: n0 p z- i4 R; T0 T) [, a push dword ptr ss : [esp + 0x38]
9 m, }4 e2 K" x+ R1 N6 d# |6 \ push dword ptr ss : [esp + 0x38]; I- r2 ^9 B- c9 w" y
lea eax, dword ptr ss : [esp + 0x38]# q1 q2 m7 K: {/ e! N
push eax
& a* k% x1 _/ |$ N+ b lea eax, dword ptr ss : [esp + 0x38]
% v7 t1 g: S* P+ i! y; G push eax
% [4 j* f9 c) M5 n* b' Q- O" R push dword ptr ss : [esp + 0x38]
, g7 m/ u( @( W$ v call m_NewStatShow_goldcoinimg
% U) j' {$ P$ z1 g6 \( V9 P' [ POPAD" x# F* y- k$ z4 W/ \8 e, n
JMP D2Gfx::D2DrawImage! B, e: N8 M% y* O
}
' d' [5 }* h, ^" \}
! i' M5 b- y- I: R A/ ]DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
# {7 S+ X+ f6 {* \/ i0 ^) o! {/ x{
1 ?6 Z: E5 g* ^+ `) Y if (x > D2Client::ptScreenSize->x / 2). g& z. M- q' p) q. _1 q6 r
{& y( s8 p7 T6 Z- u2 J; v6 {( K
*y = getYGoldCoinFixBtn();, B. q3 `1 t, \4 P7 _: z* q
return getXGoldCoinFixBtn() + 32;
, H" Z0 b" ?/ t" y3 K }
9 E- Q& Y# P: J& ~/ \ return x;
# p2 [/ r6 p5 |; b7 C$ B}6 g. K5 t( X- I+ Z& g7 r( s
__declspec(naked) void caller_goldcointext()
0 s F8 I* O T& @{
" P; @. F1 a* ^0 O/ ^( Y __asm
( R( F; V. ^ b1 l- {; Y {: o2 {6 ?# `2 |) D2 |; q
PUSH ECX
/ [; Z3 e `) C5 ?3 N# d2 B0 }: m PUSH EDI
! m/ y5 e1 h. y3 Y6 N+ b PUSH ESI% @; A) l+ A- C
PUSH EAX
/ a2 ^6 k( Z( Y/ \% b8 { MOV ECX, EDX
$ u( N( n! K- u: j$ n) C LEA EDX,[ESP+0X4+0X10]* j0 B* G. i8 P7 N* Z: B5 Y D. ]
CALL m_NewStatShow_goldcointext' `1 V& x9 ]/ }1 l$ v
MOV EDX,EAX6 ]9 u: D6 `. ^! e
POP EAX
1 Q+ ]( @) W m R POP ESI6 L- `/ Z& a4 `* A$ l1 [8 {
POP EDI
5 M! Z0 b8 m+ i4 E8 W$ E POP ECX
8 n, N$ D8 B; O$ { jmp D2Win::D2PrintString;7 q, ], }: F, b0 V- N2 V
}# P1 h( F& A A i9 Z
}
5 w5 E9 i& ^" w' V! K% d/ E$ u" F) |! D. b8 L/ E7 E0 q0 D
BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)/ u. O" P/ a- Q) U O- S, b
{, k0 v* I! d2 h
DWORD mx = *D2Client::ptMouseX;. x. b2 W* I1 t
DWORD my = *D2Client::ptMouseY;/ u2 E' {' h/ Z
if (isOnInvCloseFixBtn(mx, my))# ^( ]2 p! a0 Y
return TRUE;. h4 b! X. i, H* o/ i( ]) y, d
return FALSE;/ F9 y) h2 r% G( @
}
; x$ V+ `* x$ g" O7 g4 `__declspec(naked) void caller_close()
$ I$ l, y& S2 G, s3 x7 g5 r( q{9 l: B. P5 m3 E& ` A7 E
__asm. s) [: J; J- [0 k$ w) S3 S
{% }2 S) f$ S \; i
PUSH ESI
: c+ Y6 U3 q7 j/ H% u0 Q( T' s push ebx, `% d; Y, _/ \& C$ s7 |& Q
call m_NewStatShow_close0 L# C/ x% o& k
pop ebx
" `5 X0 O0 E# S! g# s pop esi
; O; Y; K. Q: s3 d retn
# |8 L; {+ L. y) s) _' x }* j- r& S" o+ y+ y8 ?2 A5 G9 ~
}
, E' f! E$ a" Cvoid __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])6 \- j# A& l6 J/ z8 [0 ] w
{
- | s. o0 ?4 C( d* r *nXpos = getXInvCloseFixBtn();
& Z S1 O' x! p: z2 g *nYpos = getYInvCloseFixBtn();
, F) b7 Y: e$ R9 c}. ^* S7 N# n7 O8 o' V8 R8 m/ P
__declspec(naked) void caller_closeimg()8 F! C" z1 G1 Q8 N: h7 k
{' B2 j* e1 Q. m J3 i2 T
__asm
0 Z0 ~/ d9 c% W. h* h4 O O7 I. E {
. U) A4 v3 D1 T i; p. t' ~0 ` PUSHAD! q$ J. x- a1 @9 J9 ` \9 }/ @& D
lea eax, dword ptr ss : [esp + 0x38]. } N, H- S; P. v D$ i
push eax+ F# N6 L+ A6 o/ ]+ J1 i8 E1 S
push dword ptr ss : [esp + 0x38]
/ G! Q$ E0 @6 A* k$ A push dword ptr ss : [esp + 0x38]* E& | K8 }" p5 S
lea eax, dword ptr ss : [esp + 0x38]
I; Y& v+ P. o$ z& Q. D9 P push eax+ a# O* y; z) n3 {5 v
lea eax, dword ptr ss : [esp + 0x38]
! }$ W N3 {" [4 o" { push eax
4 x: v$ G `" @+ M1 [5 ^: {/ T5 y" A push dword ptr ss : [esp + 0x38]
2 J; [, q/ b/ \+ N; Q call m_NewStatShow_closeimg
/ c; g! j5 N& N) W5 ]7 M- F POPAD3 {' ^% o1 y6 Y' Q e7 g/ |, u! M) t- N
JMP D2Gfx::D2DrawImage5 ?! o% W$ z2 E
}9 e$ o \/ O+ ^% D* }2 q
}, | j3 ]; U1 f; S& \6 o$ P
2 ?2 b* k+ r: l1 s
8 [+ P: v0 Y. @$ a) X
|
|