|
|
转载0 W3 F0 Y' u* |% m4 L
BY SJ+ o6 H; v0 w6 `1 s. o' ?4 T
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
0 Q6 Q8 M' B- A& @5 B8 F
) ~( ~1 T2 ^( \0 p$ c* zD2Gfx::D2DrawImage-10041
8 {, J" f+ T3 W1、修复技能的背景(不需要可以不要)
; @/ v/ t) ^4 U' Ooffset = D2Client::GetAddress(0x77AA8);
, c2 A: E2 H- H/ S! ^- QMemory::SetCursor(offset);! |' ]8 t4 D8 n" N4 _
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);" F# I9 y4 q( u1 a0 y8 I
, d& S3 W @3 h$ H. H: M
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])7 [* r+ e9 k6 b( d, R
{
# G. L' \) ~' z% y0 w- P* e+ k //Init data for print image
6 X0 t" Z* j) M R5 u sDrawImageInfo data;* O1 j# s4 B( ]9 m
ZeroMemory(&data, sizeof(data));$ g/ u; D V0 L' S, A7 r0 `4 y8 c0 h
$ ^+ s" N9 [/ j! \& q# t0 |0 Y //print background# |, J5 I1 I) T3 I4 i
setImage(&data, spellBackgroundImages);
+ b1 t" Y# I' l# m' Z! h3 B0 O setFrame(&data, 0);
: u% B3 W: W& {7 R: } int fixx = 511;: c* B+ m/ }; T* T
int fixy = 9;
6 C; j# |5 c6 O `; i3 l D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);+ s+ W7 K* Q3 O/ B0 U6 a
setFrame(&data, 1);
O3 K9 `: `5 a6 b D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//2561 K" u1 l. Y6 P7 _
setFrame(&data, 2);/ _3 x- C* A, |/ v* D" H- K
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
+ a1 }" u& v- C! O( P& [* v% s1 { setFrame(&data, 3);
& B9 a$ a+ X' U9 t1 y' v D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);( K& q0 z/ Y9 J2 {& ^
}/ ]$ s% Y8 @. a* b+ C$ `* T
__declspec(naked) void caller_SpellBackGroundFix()% p! P+ s2 F; i1 s
{
5 R0 i- f- E0 M" T( o; Y- l __asm: _) X: m: F' W* ?5 V0 D
{
3 c1 L* [* V- Z/ [6 m7 N PUSHAD
. `/ e/ A4 b# j( ` lea eax, dword ptr ss : [esp + 0x38]- a9 U' e. ~0 R5 Y ^# @
push eax
& Y+ n; v4 T( P push dword ptr ss : [esp + 0x38]
3 R$ \ G5 i! p/ d: a push dword ptr ss : [esp + 0x38]( R& Z0 i) k, ^
lea eax, dword ptr ss : [esp + 0x38]6 O* V3 b( k9 u0 ^# I6 F* c/ H+ D
push eax6 }9 J; _% [: n% m
lea eax, dword ptr ss : [esp + 0x38]
$ V1 ?3 ~9 g/ N push eax
5 _+ k; r; V/ {& X push dword ptr ss : [esp + 0x38]
, k9 _5 ^; t+ @8 f# [% Y call m_NewStatShow_SpellBackGroundFix% x/ a. e% y1 z. K
POPAD. w7 ]- d3 Z ~& m
JMP D2Gfx::D2DrawImage
S% z7 v Z/ H+ K- ^ }& ~& O! V1 s" Y* Q- g
}
: Z4 t4 z; W% C9 _0 q! d2 t& r8 \) W- X, ^
2、我们如法炮制小站的背景
! z0 D6 j+ |+ ~6 r9 D, b; r5 l& r' K$ h2 V! J
offset = D2Client::GetAddress(0xAB010);: t/ O: z3 A# ]% @. X- ~0 M: `9 r: t* {
Memory::SetCursor(offset);- t; u: y3 K9 `# q9 z+ \3 z
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);, U/ Z9 v7 \& f- j( _! m) ^/ @
9 w% q. Z, T% Z2 A, `0 |( w+ [void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
- Z0 G8 Q8 ?0 E6 n" k' q6 e0 u{
8 {+ t( H/ O1 h, I0 f, ? | //Init data for print image- h( |( C( V" v' j# W6 P
sDrawImageInfo data;
, T0 }0 k7 N5 T% m5 F1 X0 X ZeroMemory(&data, sizeof(data));
7 q9 C! S2 b4 v+ }) w @* p8 M5 i$ E1 q
//print background' u0 F9 Z6 l2 v& B
setImage(&data, waypointBackgroundImages);: ?4 q* U6 l. m2 y
setFrame(&data, 0);: B7 m/ t( O! e3 I5 P
int fixx = 0;
0 w( \- q# H6 I0 q, V* o int fixy = 9;
" \/ f5 p6 `2 J, Z0 f D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);
/ m8 J/ G1 v5 f setFrame(&data, 1);% b, A' U- v, G/ E& C2 ?
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256) `2 O' s. o8 ^. l$ m! T6 Z9 C% i1 X
setFrame(&data, 2);. x4 u9 ?& e# U. O: w1 J
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
i* W5 v9 e5 K2 z. _$ g( y setFrame(&data, 3);
* w- g& ?. W5 \, ~' B0 M& v D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
% y0 ?& {' _4 R+ Q# z
7 n7 Q5 D% H: L( G$ s2 r2 n9 [* E}
/ V* ^+ q g8 v5 u4 }0 `7 |__declspec(naked) void caller_WayPointBackGroundFix()$ d( O) h% r* ], |( d% |) @* I2 L5 ]
{
, D% g1 P7 ^( Y" z. \3 N6 v! B __asm
- b4 J3 ]4 o' |* a$ l {+ H; t1 f* i" ~) ^2 G2 `
PUSHAD
" w4 o O/ ], q# f3 t. u! G lea eax, dword ptr ss : [esp + 0x38]
! v7 F4 z$ b4 ?: L* M$ C push eax
# j9 E+ z& U2 F4 |6 j/ F+ D push dword ptr ss : [esp + 0x38]
/ p) y8 \/ t2 B$ H9 O# A" j push dword ptr ss : [esp + 0x38]
# G) u' {9 @0 X9 s" W lea eax, dword ptr ss : [esp + 0x38]
+ s9 ]! I9 t1 b( q- E* N push eax
& f' a7 U" A$ }9 z lea eax, dword ptr ss : [esp + 0x38]4 w- L& s# k! e5 k" y. N* ]( ~
push eax
4 a4 z* _! H5 H push dword ptr ss : [esp + 0x38]
4 E2 {# s# k+ R+ I call m_NewStatShow_WayPointBackGroundFix! \* [) ?. q% E' H; z
POPAD2 O8 L e& I/ Y
JMP D2Gfx::D2DrawImage$ V7 o0 ~! ]! I$ K
}
) @1 @7 F! o* S4 j" ?8 Z# a) ~}' ^6 C$ ?1 J( `6 E' J8 l. h/ n3 H+ @
S3 H9 I( @/ o# V" v
3、以下可以搞16*16超级箱子-腾出我们需要的边缘
) i9 @8 p2 R. L; ^腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
0 f ~' {6 F: p% z K' H9 g {. S; t" g, }5 k2 b
class D2MultiRes : public Library<D2MultiRes>
( o. ^) I [- x& _. H {
# P- U U. F9 T1 i0 F6 { public:
3 t! }" ^ o% D3 \ static void Init()/ o' R* \7 e2 P' D
{
$ E! `: Z! j" d- T$ Q Name = "D2MultiRes.dll";6 D! J( t8 w. Z4 d; U) J
Offset = LoadDiabloLibrary();4 h% c8 V% ^9 k' \) R" h
}
# L g! ?& g+ }& a- t5 `2 H* R };+ }7 G" I% B0 T) ^: ^
D2MultiRes::Init();$ U0 Z; V4 `2 _4 n/ }$ g
D2MultiRes::HookLibrary();3 ~( J3 E$ {, D- n
* A* }* v3 m* w2 j- E% a# a; y( ~' r' m
9 V5 ?0 ?" A a" q; \: Q& \) ?
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);7 W( y7 `) V5 ?* K
Memory::SetCursor(MiscFunctionsOffset);8 X0 S) ?. S" K( |. i; K: S
Memory::ChangeDword(0x1b0, 0x200);6 f, ]) `" x0 q8 s6 J3 M: Q' N
+ ]) A, C& A# O' A$ r2 k( E
+ Z* V4 {4 w; `5 l MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
4 \% B/ ~2 d; Q1 m# U Memory::SetCursor(MiscFunctionsOffset);
$ ?# ~3 `1 J. q4 n: c8 D5 Q! M Memory::ChangeDword(0x140, 0x200); I5 Y% a3 p' j# x( x' s' I
; ]2 O' l/ {$ o- v; F7 e0 K- T, y# I8 q, Y; K
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);% s; L: P! ?; W7 g5 K' [
Memory::SetCursor(MiscFunctionsOffset);7 ]8 a3 `& I: v& {7 C
Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
5 f6 N! T9 h1 A6 {3 q3 t
7 {, R4 ~! X# z; N) N j0 O0 R. X$ Z MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);! V( L X( u4 P
Memory::SetCursor(MiscFunctionsOffset);
6 K' T% ~" U! |) n7 m. i Memory::ChangeDword(0x200,0x299);//下边缘 299最大
}4 N- \6 d. D9 i( e% x6 _6 s! R: F# `! U6 g$ e0 N: ]
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);3 s$ s7 B) ~2 P' ?: i" \
Memory::SetCursor(MiscFunctionsOffset);
& Q3 y d9 x' Q# d" Z Memory::ChangeDword(-0x280, -0x400);//这个不要动
/ w: {# L+ ] W0 \1 E }
- [0 W; |5 C, i9 Z0 f- \3 P6 E/ i+ G# ~
/ D( ]0 J- ~; k4 D) F4、快完成了,是不是发现金币啥的位置不对??
5 L2 C1 l7 C' B2 t9 c5 c1 e
$ n! h% Z( P" J8 ` Z//这里修正我们的装备栏
+ W1 b" y9 t" O5 h% w offset = D2Client::GetAddress(0x99B6C);. z, ?1 V# t) k5 k7 X, O# K1 Z8 g
Memory::SetCursor(offset);
: X* P; _# T1 r+ ~0 ?; _ Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);- K3 g; X: v, [- @% {3 M& }3 I
4 E( k" E7 N9 a2 E offset = D2Client::GetAddress(0x99BA7);
! t! ^ \4 n' l: |5 w Memory::SetCursor(offset);
5 q1 X2 v) I9 ` ^) d Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
% b/ y5 ?2 ^, O8 k- ^ e7 y7 T/ {* Z, g) A% m
offset = D2Client::GetAddress(0x99BE2);
3 D, p* ^. x7 `6 u8 q) |7 c. [6 e Memory::SetCursor(offset);
" Q( \- t6 g/ K9 ] G" J: q Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
X3 W. O. s/ {0 l2 \8 u& c
" q, p: B- o O. }! C: a& {, @8 H w offset = D2Client::GetAddress(0x99C1C);8 O9 K q4 A" a8 o$ W
Memory::SetCursor(offset);
: _9 P/ o; Q. I. Y( ?% ~. C4 k Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
# Z# H/ c0 b _: c; `- K) d9 e! F, ^/ i/ r! Y& R2 J0 z; {' ^% L% g
//取消两个popup,偷偷懒不过分
" \" @% q, M$ A+ i& n& I offset = D2Client::GetAddress(0x9386d);3 r6 c" M* k0 Q3 n% `
Memory::SetCursor(offset);
% G \, F* ?0 r4 h7 j Memory::ChangeByte(0x8b, 0x33);8 }, C2 I3 [, V# u; @
Memory::ChangeByte(0xc8, 0xC9);
6 q* \# y) T) J offset = D2Client::GetAddress(0x9390b);
% w8 c2 X& Z+ p0 r Memory::SetCursor(offset);, h m6 r) [6 d% s% g' F1 J
Memory::ChangeByte(0x8b, 0x33);$ D. E& O6 |0 q' R e$ J3 E( `
Memory::ChangeByte(0xc8, 0xC9);, E' N6 U8 w$ U4 l2 \5 r' @
+ @9 j3 w* A+ v3 R: v ^) I# @ //修正提取金币
% Q% a& ~' r" y+ W4 y offset = D2Client::GetAddress(0x8D3E5);
, [, h) n# T. s" X) x. ` Memory::SetCursor(offset);
2 L; L3 O- }8 A$ q6 z3 M Memory::ChangeByte(0xA1, 0xE9);
, s2 V/ @! k* C Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);$ P g) D$ V/ u5 u. |
4 c2 V" Q i% C/ a/ [% ~
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);: |9 x. W# Z% f; d8 i9 I5 K: ~
Memory::SetCursor(offset);
/ E: q. Z0 _# f+ h' |9 ? Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
. G6 n' C. P/ N+ V! X
0 y+ a% Y+ K0 a' h; w/ M offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);- b' E7 j4 s: l) {/ ]# \
Memory::SetCursor(offset);
, d' `& {( m$ p4 u( [; |( H Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
. z( R( u* i8 E. w; D/ b) M, b0 }% j# X+ @0 S$ _3 L: m
//修正关闭按钮
' X& ~3 i: N w" x' z* e* {/ d offset = D2Client::GetAddress(0x8BD90);
+ Q# H7 q0 c4 ~1 E6 I& D, P Memory::SetCursor(offset);" K C* [) o: U0 J' S+ Z
Memory::ChangeByte(0xA1, 0xE9);
# D8 @8 |2 ~) @" j- l* C) x1 }8 n Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
4 u: l" X- g! R/ O
d9 ]% b+ ?0 k5 G9 B/ D$ e. v offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
" M) i& }1 Y; q* Q& E# u Memory::SetCursor(offset);3 s& B' P: ~- y! C: E+ G/ l2 X
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
/ W7 Q F+ J. C+ ?8 q$ y( i. j1 S4 |8 Y, V3 j) X* E$ ^
6 ~6 K% l0 e4 ?' X; U
//以下是细节) R3 D- l: ~: n0 g& Z; v4 M
#define getXGoldCoinFixBtn() RX(0x2d0)
- B( Z, a4 ?) n4 T1 Y3 s#define getLGoldCoinFixBtn() 32
6 J0 o- H* Y1 c5 S#define getYGoldCoinFixBtn() RY(-0x59)" F- D% X t, j# u* g! z( L
#define getHGoldCoinFixBtn() 32
5 P; |2 _5 Q y#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())! o A8 N; @% Q7 w9 D
* F2 Z; q% h4 E#define getXInvCloseFixBtn() RX(0x3db)
4 Z5 h8 o2 r8 |& D j+ @#define getLInvCloseFixBtn() 32" N7 g! l0 |0 c, U3 R9 s/ D
#define getYInvCloseFixBtn() RY(-0x63)
" [3 c6 X& l% F) K$ C#define getHInvCloseFixBtn() 32/ V/ _5 Z5 ~0 Q, A
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
8 R! t& |8 d1 y3 u2 {9 S `+ \3 S/ d& }3 O4 y- l
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y); o" b2 {9 _; r' U8 Q* B. C& M( O
{
7 r8 g, W) |/ v% j: Z DWORD mx = *D2Client::ptMouseX;
, v/ f9 I" [8 c! s; A DWORD my = *D2Client::ptMouseY;6 K( Q7 ~: n4 [8 o, i0 P
if(isOnGoldCoinFixBtn(mx, my))5 Q) v9 T8 i" N5 M# O
return TRUE;
% g2 Y& \, M) P) P! d5 m4 y return FALSE;
7 \$ g W# U* ~6 H( L}
% Z1 A5 g6 m" Y__declspec(naked) void caller_goldcoin()
% ^, U5 E4 ~: D* L' R{
# F3 o1 j t% M- W9 e __asm9 {6 X0 {. q- S9 R0 `7 ~4 }, }
{
( e/ ?% `( W+ p( n- n. G push ebx
8 }* P" D5 `5 d4 W3 I mov ecx, esi7 u3 n) H4 U/ @
mov edx, edi* k! ?3 [- o% ^0 z7 \; L* M* A
call m_NewStatShow_goldcoin9 p; Z9 A- z+ e% R& P0 `( }' O
pop ebx
0 b$ k" T! o5 x pop esi2 h5 A( m7 S7 R# @$ a
retn
8 M( u+ v) G) }$ g0 a. H# O }
' ^2 ~! h B/ h; e; u2 e+ S}- s0 j3 o' O" y# k" A: p' k
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
+ w) e4 U$ o6 i1 u9 E* u{
# p; f2 S9 c0 A" X* N/ _; [& O7 @ if (*nXpos > D2Client::ptScreenSize->x / 2)
! I; w3 { {/ ^4 Z0 G9 l1 \ {" k; x4 {0 H# i
*nXpos = getXGoldCoinFixBtn();
6 W( Z* x* ^/ G4 _ *nYpos = getYGoldCoinFixBtn();
% D) b4 r8 I2 H: \) H6 y }& G" O/ p& ~+ ^5 G
}
0 b1 r8 K5 L2 |1 E__declspec(naked) void caller_goldcoinimg()
! |1 \3 U, O J{( ]9 d, d- I' L" Z9 R6 [5 U. r; ?
__asm4 l) O$ R: f0 K# |5 ~$ Y! F
{
8 e2 c% S3 g/ {- B4 J' ^4 g, P6 { PUSHAD
* U! w8 a4 R* P5 y lea eax, dword ptr ss : [esp + 0x38]
( U6 a0 ~2 U+ a* @( S push eax
. d) p" B+ j: o) u6 D0 q7 ~! U5 J push dword ptr ss : [esp + 0x38]4 S& `9 J5 _! z4 E
push dword ptr ss : [esp + 0x38]# E! d+ ]3 Y9 |8 q- f
lea eax, dword ptr ss : [esp + 0x38]
, i2 x* i, ^, f; g push eax
9 b0 }8 Z* Z* l+ l/ j lea eax, dword ptr ss : [esp + 0x38]
2 j8 K" A& U& X" V5 |) \' c. k2 X push eax
0 u) |: I3 [. ]- [" ^* t/ o push dword ptr ss : [esp + 0x38]3 ^8 W6 k$ W- F( y1 A/ n
call m_NewStatShow_goldcoinimg& z3 k1 e" S8 Z) B* a
POPAD6 W l; N& P. s; e! c% J) F
JMP D2Gfx::D2DrawImage* W; z8 y0 J7 {+ k4 \
}2 h9 B, E1 E! h, q" d ~! V* {
}
" f! a h8 K; Z. G8 x, QDWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标, B! v6 I4 Z. V# V5 C! o4 Q9 w6 s3 `
{6 O) ^8 y8 Z% t
if (x > D2Client::ptScreenSize->x / 2). ~1 j C! _% K! z8 J
{
6 R2 D8 [6 b$ N( z8 ^3 A# B *y = getYGoldCoinFixBtn();6 q/ v7 C( u$ Z' y, U1 X) \
return getXGoldCoinFixBtn() + 32;
# |- R9 T( p% X r$ P }/ t% b2 ~2 {) p" g2 R
return x;
, V# _% j9 @- w# O* I* d, B8 L}
9 C- L4 B; s0 r4 G: }- s8 t: D__declspec(naked) void caller_goldcointext()- g* D+ Q' i, Z# [' S6 |
{( n @, ]. Q# I& A
__asm
$ A0 R5 [/ [ h7 |' q$ \ {. u: H( N+ J5 `8 v" p. t1 ]
PUSH ECX
2 z$ @, E5 N/ g PUSH EDI/ |- y6 A* n9 D
PUSH ESI
! P) u/ B+ H7 x+ O( [" N: y: b PUSH EAX, \- j9 k" X! U2 U# Q4 T, J0 ~; g4 V
MOV ECX, EDX
- y$ W& p3 K0 Z8 v8 l LEA EDX,[ESP+0X4+0X10]
/ f( d' r% q: E- I CALL m_NewStatShow_goldcointext
) ~/ g( o" z: E MOV EDX,EAX
/ ?$ E( i g) {) L2 H3 O0 ?, M$ m POP EAX) I) W, W- z& r4 W: r6 l# X; H0 h) Q4 {
POP ESI; h @* b# L# l+ D7 W: d! U( ?
POP EDI1 s8 T4 g' a' D- K' c
POP ECX5 @# Z0 |. i+ c* t& J! f0 L+ h
jmp D2Win::D2PrintString;5 ^) h. {2 `1 h/ {2 q
}. M; R# j! n' t, u
}
6 J1 j* \1 t; ?) b7 J* F
, k6 s0 U( f1 f! yBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
0 `- }# P; l- K0 b3 ]6 a{
6 f$ I9 g* n4 I: r+ s DWORD mx = *D2Client::ptMouseX;
# G; T% E1 O' } | DWORD my = *D2Client::ptMouseY;( d. v# ~4 O$ m4 o# K9 T
if (isOnInvCloseFixBtn(mx, my))0 ^! o2 ^, L0 e( p! w9 F
return TRUE;! Z2 D: f* Z$ x* ^8 Z: |* q. C
return FALSE;
6 M# c. d0 f1 ^! l5 i}5 ~2 i A' q& i* {; e0 A2 u# `
__declspec(naked) void caller_close()
/ y- O- N2 v" s& a{
# a" y. ?) x5 m" z+ | __asm
1 T' X8 L7 _$ p7 O/ a, q! f {. l- Z; N# Q" D6 J8 }
PUSH ESI
# G4 j W% p' v4 A5 f push ebx9 i% E0 e& o2 b7 i) j- |! a5 f
call m_NewStatShow_close& a& Z$ {3 x n9 h0 w
pop ebx9 r: C- Q& v2 M) q, y# \! j! Z
pop esi
$ S3 y% A; y8 V: [7 W7 W- U; d; B retn
! r$ g8 Z5 V" c) P }& ^% ]! H% e4 h
}
# w" Z Y& s7 M0 C9 L, z8 D1 hvoid __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])$ d1 m J" g" @: A1 a7 p
{5 ?$ }( b8 l& S: U9 n* `
*nXpos = getXInvCloseFixBtn();1 F5 K k" N4 o( P
*nYpos = getYInvCloseFixBtn();6 v" R! C( M: S" J! e+ Q/ m) X: u
}) T N1 p/ j8 K8 w7 R3 }! m
__declspec(naked) void caller_closeimg()
7 M' [8 d4 F6 z. c @{% r* W# K# y, ]; o; b" F' }
__asm
: D) V* I8 O) Z0 H3 z) p3 _ { {+ @9 h0 Z. S0 X
PUSHAD/ ^, F6 o. y5 j0 n) h1 k* z
lea eax, dword ptr ss : [esp + 0x38]5 g: X5 U/ |) F$ q9 x' q0 H4 p2 `
push eax
# [8 p7 d& u) w7 [' ^, c( E push dword ptr ss : [esp + 0x38], \3 H& R6 p( Q% D
push dword ptr ss : [esp + 0x38]
' D: Q( K. @1 h6 g5 T* ^! a0 S lea eax, dword ptr ss : [esp + 0x38]
; W/ D! E) f5 E) a; R! p1 f push eax+ C2 g) O0 w, {' o3 v
lea eax, dword ptr ss : [esp + 0x38]
2 Y1 Y% f$ |1 z. m( Y3 W2 a push eax9 y, W+ e, o. T' h. I" r
push dword ptr ss : [esp + 0x38]' b [ F3 u& J: S3 u! P, h- T/ t
call m_NewStatShow_closeimg
* ]+ D0 e4 j3 f0 J) c; [( O5 f POPAD# A, ?) t' l" C _& [
JMP D2Gfx::D2DrawImage
9 r8 E T* B. y }. p9 r% s% B u3 \3 M/ B
}/ s' u9 e8 m2 f4 T- G U1 K2 P% w3 Q
2 e5 [6 p4 I6 p# ~2 z% {2 K o* p$ S/ x/ w) x% `2 ^$ \
|
|