|
|
转载
4 w0 d1 b; L, [& K" `BY SJ/ p) Z7 r; s* U7 ?) t9 C1 L
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
" L# [+ Q6 C0 Q6 O4 B/ u
2 g& e5 q, E( O% c9 U, D& [ eD2Gfx::D2DrawImage-10041
, h7 h/ @, f" v' j) k1、修复技能的背景(不需要可以不要)8 |3 i) F- r) s. R3 @1 K0 Q
offset = D2Client::GetAddress(0x77AA8);' g! J, g, X4 J8 X6 T
Memory::SetCursor(offset);
% n) n1 b/ k- P, J) q, MMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
# N! O) J, Z% I) u/ u( R& a1 K
2 l, _" U: x, F% T$ G+ Bvoid __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])$ M7 U8 x8 c* k5 |
{/ c7 x5 N# C4 l
//Init data for print image5 g3 S: w5 w* n" K, K
sDrawImageInfo data;) o0 \9 e* r$ x
ZeroMemory(&data, sizeof(data));5 U, {( }- Y' N/ J: q- X. c! ]
: z) b! J, z+ C7 P* k
//print background
1 j* t: _, A% ?/ ` setImage(&data, spellBackgroundImages);
4 v% v1 t6 c+ I! r! D. _ setFrame(&data, 0);
' X. s/ s* f; A1 A* k9 D int fixx = 511;
2 a& z+ _3 s: d( c: z+ _ int fixy = 9;0 d3 m1 J* U/ h4 ?6 [1 q; s
D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);
\) Q% b- o6 K) f! h0 ~( `6 _ c setFrame(&data, 1);
/ n+ ?1 ?8 f; a$ @3 D* ]; ?; p. K# Z D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
2 i" y. D7 X$ @' i! j# b- z setFrame(&data, 2);: |6 r: t9 h, G8 z0 ~
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
' M$ J K* _8 ^: ]) M! |5 \* P setFrame(&data, 3);
) G2 D8 O- p1 u3 ]! e% k5 | D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
\( ^1 Z; \$ O}7 g" Z' y* X, i4 l& L7 F, Y3 ^; F
__declspec(naked) void caller_SpellBackGroundFix()) B8 y, t. F3 A- |* \8 s
{
1 E2 U, E8 F; d$ ]( d5 `. ] __asm0 |* ^7 v) X" b/ {- Q; c9 l8 m# ^
{/ K0 D3 L/ g/ @
PUSHAD
" B5 Q4 ]! [+ u! q2 a# B; F4 f/ T lea eax, dword ptr ss : [esp + 0x38]
6 o! _* E9 q, P. e push eax
" e: D7 D( l) R1 [ push dword ptr ss : [esp + 0x38]1 r3 h4 u" C/ c9 t3 k; @
push dword ptr ss : [esp + 0x38]
- P% ~0 p9 C5 f0 N lea eax, dword ptr ss : [esp + 0x38]
) |* ^6 k$ x1 [& Z8 _: O push eax
0 [7 G( @ u+ \ lea eax, dword ptr ss : [esp + 0x38]: d1 o3 j' @8 M& ^! [
push eax# D$ F; R8 H7 j1 g }* u2 e2 r
push dword ptr ss : [esp + 0x38]* P r4 S* T9 Z! p {
call m_NewStatShow_SpellBackGroundFix2 {/ s/ Y+ |' \. K2 U6 j) U) w
POPAD
& X# |/ w+ N. z% m$ F JMP D2Gfx::D2DrawImage
# C. I, l% x' b$ c9 N4 I6 T5 \ }3 O! X, ~ e, H+ h6 A* i8 I" }
}
+ r7 T$ d% w5 x G+ S5 S' Z4 O
( Z2 B- N; @( `/ a, O' |) T2、我们如法炮制小站的背景
2 M* J. h* G4 k9 e% I8 R; t' ]* ?6 o8 @) X9 ]# Z- a* ~2 s4 G
offset = D2Client::GetAddress(0xAB010);
. }; m' J4 e3 u; QMemory::SetCursor(offset);( ?* S4 _/ P$ h6 _" [/ S) i
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
. A9 N+ G+ P5 s2 G6 g9 s3 L* ~
2 F- P9 _9 P6 z5 C, jvoid __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
3 W; y1 n1 ]0 v3 j. n{
" l3 `6 H: r7 C- A //Init data for print image7 S- Y |4 E( K' b
sDrawImageInfo data;1 B1 n! X2 A# Z5 u* n5 ]9 T
ZeroMemory(&data, sizeof(data));) [' P% U9 [9 e
3 Q& X- Y4 w1 M: d* k0 d3 e$ Z4 l; x //print background
& _) h/ }2 v2 X9 q9 H0 h8 ? setImage(&data, waypointBackgroundImages);
6 i4 o# s9 a7 Z2 |8 M5 ] setFrame(&data, 0);! V0 e( a6 r- v5 H6 R
int fixx = 0;9 b$ d# S5 Q6 Y5 Q: R5 q
int fixy = 9;' I) A, ~, A$ Y0 l% H
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);
9 O( e- I6 v. R0 {( H$ a- s setFrame(&data, 1);
0 f8 R$ v( Q C4 U. j D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//2569 k" k& y; h- O) ~* n
setFrame(&data, 2);& R; t0 V/ g" B5 ^; j9 y
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//4321 e i! f G/ D" J/ r/ T+ S" `7 M6 S
setFrame(&data, 3);1 J4 t* t5 z5 ~+ G" t
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);9 ]0 M" }0 [! D" l* P
1 ?! u5 G; E U' X/ i! E: }7 _
}* ?! T% F9 l, w1 k5 ]
__declspec(naked) void caller_WayPointBackGroundFix()0 I: `4 d+ Q, W) m" G, Y
{& j" o2 O$ L) o$ _5 l' k5 z/ {
__asm6 e+ G" o* \8 t4 W* ^
{# R8 A+ f- F5 d* c' ?! _
PUSHAD
. L2 B" M; l# f2 L) u lea eax, dword ptr ss : [esp + 0x38]
! x) C% [7 Y% F! u$ M push eax
. L" t* `3 `9 `& F% e7 q- c8 r push dword ptr ss : [esp + 0x38]
' r% i! h; i; a- v push dword ptr ss : [esp + 0x38]
. L' Z( h9 z" {( I2 r3 M3 N7 ~ lea eax, dword ptr ss : [esp + 0x38]
( F* X4 F0 Y* b7 H7 O push eax
z8 X3 I: } u* g3 h9 s# A( [3 L lea eax, dword ptr ss : [esp + 0x38]+ k: K/ n; c; h
push eax1 c, a2 g. {( y9 t+ f8 P8 a
push dword ptr ss : [esp + 0x38]) I, u" h5 `# V8 ?, g' b
call m_NewStatShow_WayPointBackGroundFix* W& U U* k" b: A7 W ]) G
POPAD
- [* Y& {' `" X JMP D2Gfx::D2DrawImage
2 M& ?" @1 T7 `8 F. y% K, v- e3 n( b }- t k& w8 B: X$ K1 r
}
& [9 y& _* ~- n3 d6 s7 F
& F% P' z! S' n# I8 `8 T3、以下可以搞16*16超级箱子-腾出我们需要的边缘
( S# @! G& e0 x! ~1 a: @3 N腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
( g/ K+ F; _8 m. U4 G O' ^ {& u4 o) H. Z$ A, l/ m. V
class D2MultiRes : public Library<D2MultiRes>* m. `) |6 f$ z; H; m* j
{
, ^8 D" G) b0 C$ k$ D, @ public:8 D9 \3 p( N# b5 |
static void Init()8 L; e8 R* M5 _5 r
{% _% q- Z+ \7 z/ Q# u
Name = "D2MultiRes.dll";: `9 Z! q2 \$ M: Y. j1 A2 ^$ S
Offset = LoadDiabloLibrary();
$ f+ n" Z0 j5 D% k) j/ o }
% _9 Q( L: r3 ]; J, ] _, H9 Z5 D };
% `& K$ U4 o/ h D2MultiRes::Init();
1 c, t! \- M0 a D2MultiRes::HookLibrary();+ T- H, W9 N. a' t; r$ ^
' ^) q: j. O9 x
6 g; W" D) E3 N/ v3 p* X, C' F( S R
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);# u7 r _; u b/ _2 j7 b/ O
Memory::SetCursor(MiscFunctionsOffset);
( ?( G; L' a! E l& | Memory::ChangeDword(0x1b0, 0x200);& ]2 j9 x2 _. E/ [: B7 M: |2 ]
( M" R2 P# H5 W, [$ U+ N% K
- z2 t) x) A: w! _/ \
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
- L" i) u4 F; {3 C# m Memory::SetCursor(MiscFunctionsOffset);$ S l; K+ l- R" q% j' y
Memory::ChangeDword(0x140, 0x200);
! z, C% f* V& n# [7 P0 L
% {' k: e6 Z# [2 c; M& K
* X* D( V9 T2 {& B6 Z4 Q MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);5 L% X% v: C8 z/ R
Memory::SetCursor(MiscFunctionsOffset);
, o \, O a$ `8 F% }: s Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块$ A3 j( H5 `/ u/ C% n3 v
* b" p& `# G' ^
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);/ y7 p2 C/ p4 `
Memory::SetCursor(MiscFunctionsOffset);
/ @( U' {5 v9 X y1 ?0 W* l5 J7 x+ H Memory::ChangeDword(0x200,0x299);//下边缘 299最大
# C. ~" o# ? Y; w& E) H: W
% T5 p4 X4 c a; T4 |8 _ MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
& o E* c# y/ f3 h3 ]4 N- R) i Memory::SetCursor(MiscFunctionsOffset);
; c, @3 `- d% K, e( E ^ Memory::ChangeDword(-0x280, -0x400);//这个不要动! i1 w. M8 p2 s+ l$ y( |
}
" o1 A: m" B+ @' T7 D2 c1 o$ m: h& T. E/ b1 z3 u
4、快完成了,是不是发现金币啥的位置不对??5 K# E r: V& \' K9 `) Z
' J1 L% }! F4 z% ]
//这里修正我们的装备栏
) B6 {0 C. [* Z: {8 ~' H offset = D2Client::GetAddress(0x99B6C);
" B0 V0 r4 |# A/ e Memory::SetCursor(offset);# B# j1 G, k1 K, z% X" H
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);. b( D- d6 T; ?% P
8 U/ q* O* \ _3 ^! s$ t& b { offset = D2Client::GetAddress(0x99BA7);
3 _, o, t. K- o/ M6 E Memory::SetCursor(offset);
( l9 `% O; I2 Z1 q Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
' V8 O/ v% ?7 p9 y1 G' r5 |/ a& S+ v7 [0 k
offset = D2Client::GetAddress(0x99BE2);
: s- x! Z# U/ u8 Z+ G ~( r: u7 [( F Memory::SetCursor(offset);; V$ h, G. C: Z
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);$ E8 v, I% ~# o- w6 I1 l1 [
( g8 N0 e0 d3 x- m3 B0 I offset = D2Client::GetAddress(0x99C1C);0 C# S3 L$ [0 v5 Y5 f" i
Memory::SetCursor(offset);
! I/ Q5 E* v3 ^ Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
& B! P2 a# m+ q# L+ j! |' w2 {" E8 S7 @* C
//取消两个popup,偷偷懒不过分2 V! m3 Y( q5 s5 d3 Z
offset = D2Client::GetAddress(0x9386d);
1 ^( I( `0 I+ W# A3 f Memory::SetCursor(offset);4 B; F3 w2 {5 a, n3 p
Memory::ChangeByte(0x8b, 0x33);
& F( Z0 j$ p3 J7 ]6 [ Memory::ChangeByte(0xc8, 0xC9);
0 u n( `* K& }) ^" E6 e offset = D2Client::GetAddress(0x9390b);
) J b/ d! Z) p Memory::SetCursor(offset);7 C2 i7 G G1 {4 K/ u8 j" |$ i
Memory::ChangeByte(0x8b, 0x33);
. j; x, o9 [1 S0 U6 H) b1 f Memory::ChangeByte(0xc8, 0xC9);) E) N9 h* J, U/ U$ y U ?4 J9 Q4 g1 N
$ C- B7 m9 }9 `& x5 M
//修正提取金币8 x9 W) n5 E* Y' H' S6 m4 ~
offset = D2Client::GetAddress(0x8D3E5);$ d4 \ ~: T+ P* N+ Q/ X7 k
Memory::SetCursor(offset);
7 o( T( D! G* v4 \7 D Memory::ChangeByte(0xA1, 0xE9);
[7 v5 b; S; J8 q0 {" P( l Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
& u1 O. }9 e [3 L- |8 O* e2 d$ e' C! D+ p N5 c8 ], Q) r( F
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);( v4 S0 o: N& m7 V5 l" G0 ~
Memory::SetCursor(offset);
( V3 `8 Q- S3 H1 i3 r3 | Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);9 H% w! K/ z' u7 f8 @, }
) ]9 G) F/ T' _/ p5 @ offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);, d1 W8 `) n% U" W, g. ` }
Memory::SetCursor(offset);/ Y' W6 X' h& m3 H7 P* ~$ W- g
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
i9 Z: x, @; Y5 L
- \1 q4 I# }* H9 p3 t8 \ //修正关闭按钮$ z$ U% K4 q# I2 p' M2 f
offset = D2Client::GetAddress(0x8BD90);. a4 E4 t; [' U0 e& u! B5 C
Memory::SetCursor(offset);
8 }; ]9 ]2 A# e. y- | Memory::ChangeByte(0xA1, 0xE9);. @$ K+ x. A1 i0 E8 W/ r
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
) Y1 z1 T/ i8 Y7 c! l0 ?" p3 S7 E4 P! G j+ E
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);4 ^2 y* Q; I/ S' A+ x9 O; ^$ |" T
Memory::SetCursor(offset);
2 P! z9 ~! ~# o; f$ g4 f; u6 M Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);3 Z, U. T3 M F
/ `, G# v6 k* F. s1 B e3 A+ j6 D7 x; Q3 H d( m+ f3 r- ~6 x
//以下是细节2 i& _# x# w. l2 w3 e8 T
#define getXGoldCoinFixBtn() RX(0x2d0)
3 S* L+ ]$ C/ @# s, w$ @* F( n6 b#define getLGoldCoinFixBtn() 32
2 a" y- y8 I" C ?" c+ C#define getYGoldCoinFixBtn() RY(-0x59)
3 K) x; Q% ]2 d#define getHGoldCoinFixBtn() 32
, P6 V7 l$ b* V5 V2 v#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())/ w2 E+ [1 i( ~$ k6 G
1 A. G( t& J3 m, |4 x6 U9 ~#define getXInvCloseFixBtn() RX(0x3db)% b0 R, a4 C3 D, f
#define getLInvCloseFixBtn() 32. r+ u/ k- s9 u& @: v; g
#define getYInvCloseFixBtn() RY(-0x63)& E6 o# z1 P" G' v5 T2 @
#define getHInvCloseFixBtn() 32
b& X% }1 b k. d: Y: M. J#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
! k# c2 A/ t M0 D$ u" K. P& ]2 h3 b; F% u" d( K# w) r1 |5 v3 a! V6 L
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
* H. A9 i9 V4 F/ u) N{) d5 v5 @# s0 J& M s1 y7 q3 D
DWORD mx = *D2Client::ptMouseX;% l' w2 D0 F) {7 ^; \) f
DWORD my = *D2Client::ptMouseY;
2 h0 R5 A# F& @/ w8 ~% r: Q# i8 R if(isOnGoldCoinFixBtn(mx, my))
' M4 V5 ^. g8 C3 w- o0 T0 [ return TRUE;2 d/ l3 a7 E: J9 j
return FALSE;. T2 z' H5 s9 I) ^0 |& n" k* D
}
$ B* E& z9 p( b; _+ G& B/ {__declspec(naked) void caller_goldcoin()
" k n* h7 X z# [8 y1 F. J{
A {; }/ L0 F6 p __asm
l- }6 o( N d( z5 {# E {5 [- v- {. ]; g# q
push ebx3 F* a/ ^: X6 H
mov ecx, esi! J* _' G: D4 o n
mov edx, edi
! g! k; O* I. p3 t6 v, k: h. _ call m_NewStatShow_goldcoin+ ~2 C c9 ^5 E- l. P+ ~
pop ebx+ d c* c3 g/ t, q
pop esi
3 ]" I3 N: R* G. s retn9 U6 x) `8 G# T/ Y2 C# K
}5 `% s+ j/ q2 T' g
}
& H; I# ?9 O, L% R3 o C# @/ ovoid __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])/ J" ?3 {7 K2 b" K; Q2 b$ P
{
# Z" a& `1 u' Q( l if (*nXpos > D2Client::ptScreenSize->x / 2)0 n' ?! `2 s+ ?) }. F [% }
{# ?9 A* k7 Z _6 {+ P- M
*nXpos = getXGoldCoinFixBtn();
: d% q) Q; p2 ` *nYpos = getYGoldCoinFixBtn();# Z7 L% W# w; s/ `/ S+ Y
}' w& V0 i( Q" W5 A! c9 W
}
" J( p# W0 u: S u) U0 l4 }__declspec(naked) void caller_goldcoinimg()
}5 u/ s8 }) @: g7 L{
" p4 Y+ c+ }5 Z, V" d4 L __asm
. ~1 P9 h6 v% L. k3 y {* G7 w& V/ H9 V
PUSHAD
' A1 S( {+ L9 @% d" ?; e lea eax, dword ptr ss : [esp + 0x38]+ z) k2 |4 P! ~% h2 [+ t
push eax7 R+ R1 t2 D! j$ t
push dword ptr ss : [esp + 0x38]! N+ @, w2 b h1 m8 E+ B V2 _
push dword ptr ss : [esp + 0x38]2 [2 q; \) d# V$ m
lea eax, dword ptr ss : [esp + 0x38]
9 D$ O% v1 h0 b8 }5 _4 C push eax
% ?) l% E, a. F& H- @+ B n lea eax, dword ptr ss : [esp + 0x38]6 E7 a6 ]4 }3 Z5 A* h
push eax, B( Q; A# ]0 C" R! {- C$ F
push dword ptr ss : [esp + 0x38]
6 _0 s5 B; l" K9 ?" P3 n call m_NewStatShow_goldcoinimg
+ N M& w8 s- O7 M POPAD: {3 S+ ]! f& g8 [2 h1 E. y* r7 y
JMP D2Gfx::D2DrawImage5 \+ f( K# [# R; _6 y2 D! m
}
% @- x+ Y# D; x! ~}9 O _6 U I4 H& i
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
5 Z4 u1 G7 i8 a0 \& m* L! x{
$ [$ g$ J; c; G& w- v if (x > D2Client::ptScreenSize->x / 2)" k4 y; U9 y4 r) D# @3 X
{
7 x) j; X4 u6 g; C6 D5 D3 |1 q2 y *y = getYGoldCoinFixBtn();
; T% o% P0 Q/ J$ S c$ L# _1 A return getXGoldCoinFixBtn() + 32;" u& N" g* y* U
}
2 K- ^, g( Z/ [7 N return x;
9 Y+ f/ U, a0 G/ V}
: D3 Q9 o) U2 S0 b__declspec(naked) void caller_goldcointext()" a9 J8 ^9 V6 A
{# O, N$ C( V9 X# F4 n2 M0 F8 z
__asm
, w$ H0 p6 Y o( R* @7 z0 k {- r! [6 S8 M( p- L# y- G+ K" h
PUSH ECX
) J" a( j& {; A. f. F3 E2 s" @1 A PUSH EDI, P0 |: Z" u# z. ~4 ]! k
PUSH ESI
# x) I" D. A; U6 U: | PUSH EAX: |; @# `0 ~/ X" c1 i
MOV ECX, EDX
* X( D6 [0 T. J: A: t LEA EDX,[ESP+0X4+0X10]
2 \, t# c) m1 ~# z, U7 c' M2 e CALL m_NewStatShow_goldcointext1 d( W* B; u. H0 A
MOV EDX,EAX9 ^# V; @1 S- W% l! p3 u3 m4 X
POP EAX- i- e. H! {3 r- D% W& l; |
POP ESI
6 j- q8 Y% c6 S" | POP EDI8 B: _# M/ P/ H6 x2 Z# z
POP ECX
7 s B2 U$ M8 F5 E* H5 p, p' k jmp D2Win::D2PrintString;
9 d$ k- _! x8 }1 v9 B }9 o% X8 ^4 S" Q/ g8 _8 Q7 E# V
}% b9 R# i( @7 }3 |
2 U. m: U p2 U: k0 r: nBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)* g$ W: Y# O" D( S9 Z2 J. |0 d
{
& e! k2 y s6 ]0 ~* F/ ^ DWORD mx = *D2Client::ptMouseX;/ N+ U+ H* J9 c) L1 |5 W4 q, Z
DWORD my = *D2Client::ptMouseY;
1 O. m$ g8 K: O- Q% |% C0 w if (isOnInvCloseFixBtn(mx, my))
9 s$ x6 T3 e( @ return TRUE;6 S% n7 |4 `" D& D( A
return FALSE;: }$ G" T' h# g3 [7 N$ n# ~3 l* J
}( Y- F# w( F. U0 g Q; e! |
__declspec(naked) void caller_close()
" }1 k# H2 i% N% w4 Q ~{" X2 {7 N+ ]- J
__asm$ A) l1 f6 n" w# g
{! }0 O2 e6 r4 j! a+ k
PUSH ESI
9 Y) v, _7 f/ p' D3 j6 z4 ? push ebx6 o# Z% y! j) c" {
call m_NewStatShow_close3 o+ K% ]; v4 b
pop ebx7 Q9 O5 \+ I, O+ N Z
pop esi
M B5 q5 d+ d0 Z8 g5 Z9 X5 W retn# M$ P7 Z( u# h: X' t5 K
}8 g# R9 R2 P/ g" O
}2 Q* l# {& w: V ?8 O3 i
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])1 `9 Q- y/ i3 i. E2 N
{
; c: v2 j. M; Y5 F: G4 x" D0 J t. K *nXpos = getXInvCloseFixBtn();
1 a0 d' c# h; l3 e5 |" o, e, r" _ *nYpos = getYInvCloseFixBtn();' k! q7 W0 k l( d# C
}& H) D& @) M: e8 ^3 W3 E. X
__declspec(naked) void caller_closeimg()
4 Y7 Z, f5 p5 C3 B ]{5 p s) w, E( e
__asm
b* H" j4 \5 z0 C) M+ x, S {
7 J$ \) U3 |' h/ X2 m, g PUSHAD
3 n7 l7 z+ E( T1 Z lea eax, dword ptr ss : [esp + 0x38]
& u! q; r6 q3 y3 Y; m push eax
7 u) o6 c& H8 V' S& r6 e: C% U push dword ptr ss : [esp + 0x38]
* _2 s+ h( W# F3 b/ X push dword ptr ss : [esp + 0x38]
$ C) e; K4 b H6 V; C. o lea eax, dword ptr ss : [esp + 0x38]2 W& N3 G/ I: `- Q" O1 t
push eax
' M$ Q+ R- w. g lea eax, dword ptr ss : [esp + 0x38]0 q' ~& h$ w O$ \7 }9 a; F. Z1 G
push eax
& [* k! S D# z2 l% _$ J+ b push dword ptr ss : [esp + 0x38]# F8 r! m. K1 }1 ~
call m_NewStatShow_closeimg9 v' R: d) c& n1 L Y P& Q6 i
POPAD
& b- [- n2 x. V: U+ I JMP D2Gfx::D2DrawImage- [& c3 s' |2 Q
}* ]$ T6 e9 N2 u
}3 u/ O9 N" |4 _& }; K3 ~+ M, x9 U6 b6 J
; J* o) d& n; w& x3 A% A; r6 T
+ ]4 m: g" g4 z |
|