|
|
转载4 h- [' j& e8 C
BY SJ
2 c9 Z X$ Y' I5 \4 H' Z首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
5 l @. d: L" E; r$ Z% J
9 b7 n9 ] v+ `6 \3 F$ TD2Gfx::D2DrawImage-10041
1 @# v. H; s; V8 Y: T- [5 y1、修复技能的背景(不需要可以不要)+ o3 O+ D( O9 j0 u9 A) \ X/ X
offset = D2Client::GetAddress(0x77AA8);
, g4 W* T! [) b% L. ]* ~Memory::SetCursor(offset);
. a9 L' k7 a0 w9 |" |Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);8 J- J- |1 q! U9 f+ c% E, i
' ~4 h9 _7 }+ ` @
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])0 U6 V* Q+ m. V: f4 N8 v' g
{, k/ s$ [3 W% M5 j! L
//Init data for print image
' n4 X2 }* I+ k sDrawImageInfo data;
P! f$ q* { X5 g) R1 [ ZeroMemory(&data, sizeof(data));
2 n. u. S& }( k3 h+ U$ n
- Y$ R% K/ Y4 N //print background
3 L8 e# U# ]2 s3 ]) b# _) f( g& ^ setImage(&data, spellBackgroundImages);) U0 B7 z& ^7 U' N- B
setFrame(&data, 0);
( Q! j F0 z8 l int fixx = 511;. N6 y+ D+ E- u% `7 ^
int fixy = 9;3 [! s2 ^3 v3 i$ q
D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);
- K4 I) _7 M+ i7 B) Z& {3 i setFrame(&data, 1);3 j$ d9 d! A% I) G0 [
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
( [( |# a( u8 U% c! R- m, [ setFrame(&data, 2);7 k" w# @+ n. C, L3 @
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
! R# u% R1 N1 ] setFrame(&data, 3);3 Z1 o" l# d6 C
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);) y8 }4 v. H+ V& f9 ]3 n3 L
}, X) I( k) m0 M" i3 N
__declspec(naked) void caller_SpellBackGroundFix()
6 J( u% X) }7 e3 c, Y{0 W+ @9 j& b; L6 \7 A: @( h/ E
__asm/ }6 a! M4 f+ x! r1 `) p
{
1 a5 n3 s4 \- M9 f4 J. M) I$ z) @ PUSHAD
2 ~' M( ]+ h6 `1 V2 P- N9 e lea eax, dword ptr ss : [esp + 0x38]6 k( G/ h1 x; F4 n+ {" F
push eax$ J* [' Z$ F+ U: Q2 Y6 R9 c4 r, G
push dword ptr ss : [esp + 0x38]$ A1 r' j6 \8 J
push dword ptr ss : [esp + 0x38]4 A* Y2 t! w; C6 G$ l' g: u5 \6 T( M
lea eax, dword ptr ss : [esp + 0x38]
" L" m; Z2 L' e- ?$ k push eax- s, }! f* o3 s! b! b' E
lea eax, dword ptr ss : [esp + 0x38]
% i2 I# ~: |9 K3 X# J" J8 X push eax' _) W7 t- J% {# s! s; c6 v
push dword ptr ss : [esp + 0x38]; n7 |0 W1 B" x
call m_NewStatShow_SpellBackGroundFix+ e4 C# y4 X5 C. \) l; n
POPAD
$ n- ]( L& Z, _9 o; W9 t3 x1 \ JMP D2Gfx::D2DrawImage
0 t5 t, Q: j) r% h0 t8 }* Q0 Y }; n, P! X4 u& @3 | e
}$ U7 v8 P+ n( q# X
' j8 m }& e7 C8 a D. L+ V
2、我们如法炮制小站的背景
; U( P. `7 g3 j) T4 F6 V) w9 U) P1 {# W4 Y |3 ~
offset = D2Client::GetAddress(0xAB010);
, C/ |& B# Z; r& JMemory::SetCursor(offset);2 C Z& b, p ]; I
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
3 P# z% _& _, R* K6 a
3 t/ h8 n2 W Z4 r# P3 Xvoid __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256]); E6 X/ T4 n" t* b4 h, k3 s# x
{
5 m6 v1 A5 x4 Q+ m* d //Init data for print image7 y: E! j- [& f
sDrawImageInfo data;2 x8 k+ _5 h! |
ZeroMemory(&data, sizeof(data));& z; Q2 y2 t* a; b- g7 [
9 f1 \) G# |8 Z- l4 o, }7 }
//print background
( H" F. Y: {. t7 ~/ h setImage(&data, waypointBackgroundImages);/ l$ d/ }5 x0 g/ a& m
setFrame(&data, 0);0 i- N* S# _- p: q- d
int fixx = 0;+ x+ C/ e9 f/ F. E" }+ j7 D
int fixy = 9;
$ q2 V, J: T* @7 \ D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);
, G/ M" [/ A) z0 h setFrame(&data, 1);
3 m/ T. p6 X) U2 a D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
" j: z5 O( ^+ L7 b1 j" G setFrame(&data, 2);) I4 v' ^9 y/ i' S9 u
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432+ C$ ^! f+ q# X3 Q
setFrame(&data, 3);
$ z6 l5 s" v5 _ D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);' ?/ U& |8 l; M
: P4 \: J& D) j" w2 r" `# ~
}
1 i4 @/ z4 E# B' Z" U3 h0 {' t__declspec(naked) void caller_WayPointBackGroundFix()0 \! L4 S5 h/ a0 A( N
{" m- f8 ]8 _( o
__asm) }. b* C- y1 P: k6 o- @
{- {( R, e$ p5 i* w" O
PUSHAD/ u7 D6 A! o7 X, f+ j
lea eax, dword ptr ss : [esp + 0x38]7 G. `& r& q6 b6 }3 ~0 K- Z
push eax
3 g% s: ~* C5 @% M/ \ push dword ptr ss : [esp + 0x38]2 b) c o* d; D
push dword ptr ss : [esp + 0x38]
2 H# {+ \+ s& Q lea eax, dword ptr ss : [esp + 0x38]4 k1 X% ^" C4 N2 Z+ K! e0 d
push eax) T! I2 E$ t _, p) ^9 ?! d) i
lea eax, dword ptr ss : [esp + 0x38]! y4 M2 N$ ~9 Q" i. H+ |, I( n
push eax
- x& n/ E& v. v9 a/ o- U5 p- H push dword ptr ss : [esp + 0x38]
& a, W/ U( V: }! x4 c' W; p2 E5 b call m_NewStatShow_WayPointBackGroundFix
, c. e9 v; D) F" h% t. o. l POPAD
, n8 @1 ~- X) V( }7 K6 p. v JMP D2Gfx::D2DrawImage% n; D$ h! I1 v/ @6 ]6 m& F
}: ~8 n, v' V1 x2 r9 j0 x
}# J2 Y/ Q, I; \, t7 l: I
3 l2 c6 W0 C5 c5 k7 P% E& }3、以下可以搞16*16超级箱子-腾出我们需要的边缘
. {8 |: J( Q$ b+ Z! s腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复), z$ L/ O9 z0 j2 {
{- e+ o4 I4 r4 V& Y
class D2MultiRes : public Library<D2MultiRes>
1 i' |2 P7 F& Y# s) n0 x/ K. @ {, e; ]& n/ U' B( q( ]. Y* I- @
public:
* Z3 v" d& H5 P$ B5 ^0 ?" c$ t static void Init()
8 \7 B5 \2 F; ~* s- K# r) M {- C4 o4 l0 J3 I' j+ K; L, Z7 `
Name = "D2MultiRes.dll";
& T0 o( o9 `2 I# L/ F. \ Offset = LoadDiabloLibrary();
6 s4 s+ E j0 |% j2 n0 E3 G }
8 n% Y2 ^- x( I0 b/ r };( F( z8 c. Z$ W5 s" O0 A
D2MultiRes::Init();
, C! B/ b; D! w D2MultiRes::HookLibrary();
$ N8 s; F# v' x( O, C( |3 j' G0 {3 R1 W M1 k7 w( Y- |
! a5 G+ N( A, w" V$ k
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
( o/ x1 j) }$ l* R Memory::SetCursor(MiscFunctionsOffset);! u! \* R7 O5 x$ p; }$ D
Memory::ChangeDword(0x1b0, 0x200);
! `, D0 D& x7 C$ C& ^9 Y$ W6 T9 x3 B% f+ P2 E# s: R0 D. B
& Z% T) s9 L+ C MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
% N- K9 a" M" S- v0 M Memory::SetCursor(MiscFunctionsOffset);
& Z6 Y# m; C% r0 Y/ i0 L& Q$ A Memory::ChangeDword(0x140, 0x200);' B1 H1 h* l7 x2 a& A
9 _9 q* n0 F! T! `/ R+ X* ?1 l% Q
% E' a7 Q# R0 D& L4 e T
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);- K6 n, z% d5 F s6 v {8 w B9 ?
Memory::SetCursor(MiscFunctionsOffset);
. l, k3 o1 [( u( j& e3 a$ g* T' y Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
7 n% Q) y8 j. b" Q% s( W" y+ I6 C2 [
/ q8 X* {8 {6 z+ l7 N* n* m MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
" r5 F3 R4 \* ] Memory::SetCursor(MiscFunctionsOffset);
/ h6 _1 q/ M/ b8 A$ B5 @ Memory::ChangeDword(0x200,0x299);//下边缘 299最大. }4 E5 i7 J) `9 L& r
( |3 d& H7 E l2 ~9 o+ J5 P, O% L
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);; s3 k' Y3 g# C9 R5 q
Memory::SetCursor(MiscFunctionsOffset);
( @# Z0 {: _- m# i3 o& ` Memory::ChangeDword(-0x280, -0x400);//这个不要动0 Q+ \% Z1 y8 d
}. D* H/ ^+ ?) { G5 D) _, U6 y3 g1 i
+ v9 i, V/ G$ k# o# r4、快完成了,是不是发现金币啥的位置不对??2 \# D; v0 K9 G& n/ \
, k* X9 u2 L" v: p4 Z/ r' T6 p//这里修正我们的装备栏
; k, G$ @$ {: w: z$ i7 x! M" Y* z! n offset = D2Client::GetAddress(0x99B6C);( ~+ ~! s5 a" r/ Q! o
Memory::SetCursor(offset);
' F! A z% |$ s0 a Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);7 O9 }0 y* P% [% E
, `4 Q2 b$ P o
offset = D2Client::GetAddress(0x99BA7);
' t% f2 ~1 @- |( j* C, \9 u- r Memory::SetCursor(offset);
0 T6 T5 m) Z2 Z3 D Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);2 W% `$ m9 q# m$ s3 Y8 S- H
9 L- A8 U. F4 r9 G! h0 k3 ^ offset = D2Client::GetAddress(0x99BE2);. m7 ?9 ~3 F+ k& `- F
Memory::SetCursor(offset);
! @) O, R5 R& s o( k Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
$ n+ R9 Z" i/ w/ I9 y3 f( _% K O% D7 f4 m6 Q. \' l
offset = D2Client::GetAddress(0x99C1C);, ~ u1 u& I5 I' z7 D% g! L7 R
Memory::SetCursor(offset);/ V& e$ c4 C4 u
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);$ P/ ]5 L) Z$ |4 U0 ^
( X. I$ M% A" M }' r I+ S
//取消两个popup,偷偷懒不过分
) _+ B3 p5 H7 r4 }' F3 l9 b offset = D2Client::GetAddress(0x9386d);/ G) Y, M* l( M
Memory::SetCursor(offset);0 z9 |/ W2 {5 ~+ T5 W9 ~# ]- W
Memory::ChangeByte(0x8b, 0x33);* w8 J+ F# q- J9 \' r
Memory::ChangeByte(0xc8, 0xC9);4 Q5 I5 T: }4 U. Q) z" D
offset = D2Client::GetAddress(0x9390b);5 i5 v- N# B) D' q
Memory::SetCursor(offset);( A& v% ^# V- v$ S2 |" t4 z6 A
Memory::ChangeByte(0x8b, 0x33);. q" _7 F3 R# N+ k& f: n9 \& I" x$ c
Memory::ChangeByte(0xc8, 0xC9);( e0 @0 a b; p1 Z5 R& F
, M4 j; y9 j. Y& J7 h( E
//修正提取金币/ o( V4 `) O g& N3 S2 h
offset = D2Client::GetAddress(0x8D3E5);# Y$ F6 n! |$ @( F
Memory::SetCursor(offset);( G$ Y3 H2 B% \, n1 }& ~
Memory::ChangeByte(0xA1, 0xE9);
5 w, }6 p8 X4 J) ^ z Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
/ i6 K ?) Q# B' l# |0 [, F7 b E6 q6 ?& T
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);3 H3 s I, ^3 ]1 j' C
Memory::SetCursor(offset);
( g- a, k. \5 N- o' d. J r$ f( o. z Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);7 _6 q! o2 s+ O/ V
( f3 G2 t) l5 A6 b- q Y/ H0 {
offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);9 T) B# `. Z7 W9 K+ d N
Memory::SetCursor(offset);+ ^$ x0 A% q% G6 F
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
, u6 ^% s( d- ~, m& ~
/ s0 X( H1 c) I4 Q //修正关闭按钮7 O8 P, R; Q+ h
offset = D2Client::GetAddress(0x8BD90);+ R% v5 g [5 T: P3 z C4 q$ U/ J
Memory::SetCursor(offset);1 \: ^2 V9 T1 L% e: J& K
Memory::ChangeByte(0xA1, 0xE9);, r! i, r0 [6 m5 |
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
h1 T. I6 o! Y3 e6 ]: J# K8 l q Y" Q/ H& d4 W& y- H3 ^
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
1 ~+ l8 E5 R! C, k: J6 x6 a Memory::SetCursor(offset);
6 G" q8 |& f; |3 b8 H; X Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);8 `/ W8 @3 y( \$ T' |% H
; n$ O3 }1 k( j4 W, |5 g
' z" D/ N- O5 z1 r. Q
//以下是细节- W) _6 I k+ L" h4 T! N
#define getXGoldCoinFixBtn() RX(0x2d0)0 u0 z& Q) b! E4 V7 I/ J
#define getLGoldCoinFixBtn() 32
1 `4 _- k! E' d#define getYGoldCoinFixBtn() RY(-0x59)' @ K; i) ` n, q
#define getHGoldCoinFixBtn() 32
6 A5 ?2 m$ i7 I A/ [& p1 u. Y#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
* }4 c0 o5 }6 @$ T! K5 {; I# n+ I- \
#define getXInvCloseFixBtn() RX(0x3db)/ D! k0 g* a: t7 W% p( }' X
#define getLInvCloseFixBtn() 32
- n3 o% M: p8 a$ n. U$ Z! V#define getYInvCloseFixBtn() RY(-0x63) g! q2 b2 h7 O5 r3 a
#define getHInvCloseFixBtn() 320 P. t0 a& ^( l6 i: v7 E- H% F
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())& ]/ |) T$ _0 {6 k; y5 C% v8 j
0 C* w3 U2 K' |$ Z# J
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
, _0 T c1 X" p7 J# a) g O$ h{4 ^9 p2 r" x1 U4 R
DWORD mx = *D2Client::ptMouseX;
# Y& y/ L8 v$ e DWORD my = *D2Client::ptMouseY;: h" `; {& Z0 Q& l" z( Q
if(isOnGoldCoinFixBtn(mx, my)) h0 [9 S' x; J% s, R! w
return TRUE;
3 ?& t& Q6 ], u L; D- g return FALSE;
3 ~/ l5 s; m: b7 e4 Z5 \% h}# n7 p& m$ I! ]* E4 Y" j
__declspec(naked) void caller_goldcoin()
% x( E- ~5 _% p{+ ?' C2 ]* j% H; C7 a
__asm+ i9 T* |, {9 I l5 C
{
7 y, R5 G% [9 E0 J$ O push ebx2 Z8 b. j& s7 ^% L
mov ecx, esi- \8 B* c' I3 L: o9 e
mov edx, edi X4 R' e- K* j6 `
call m_NewStatShow_goldcoin1 f# |2 h' s% c' h& x4 H
pop ebx4 K0 o, p' K8 h5 Y) h; @! `
pop esi
- J C B* U- M. c9 X) X retn+ u/ v: m: @. q* @3 d% l
}
8 Y) q! e N/ ^4 ?}
# \* z, h V0 D4 F, Hvoid __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
2 Z8 U1 \1 z: T/ v, e$ Z{5 v' k# k3 x. f8 a
if (*nXpos > D2Client::ptScreenSize->x / 2)
( e& ]. ]1 S: [0 v/ n {" w) h& I0 b( |7 i( r- ?! y
*nXpos = getXGoldCoinFixBtn();9 `8 M. j5 @ Z. C+ l3 Z( ~/ q
*nYpos = getYGoldCoinFixBtn();7 N( b& B. f+ N: F' M. z. r
}
+ Q; X s& ~( Q A! o6 S9 ]3 e, T}
( N( Y* v6 u% F: w6 p1 E/ s+ W8 U# E+ f__declspec(naked) void caller_goldcoinimg()
; l3 X9 u5 i$ b; _5 @{( c% S5 ?% {/ ^% H' @5 K0 u5 b6 c
__asm
$ R( f5 S+ _1 W+ l7 X- q# q1 z+ v {( c1 ~# j+ z1 J% m3 k# j
PUSHAD, v- X$ Y$ g* ]1 X1 V' ]
lea eax, dword ptr ss : [esp + 0x38]+ y+ n1 e8 [+ r9 s. ^5 {4 h5 n! X
push eax
7 E! {8 a7 D3 \. ^ push dword ptr ss : [esp + 0x38]
% |# t* F: ]# o& [4 Z' g- t push dword ptr ss : [esp + 0x38]
, s; Z/ h/ R+ B5 P5 V0 \; y) D lea eax, dword ptr ss : [esp + 0x38]7 D. P* m, f4 K4 Q
push eax$ Y! S4 C2 ]1 e
lea eax, dword ptr ss : [esp + 0x38]8 W4 ?' U8 K' q, \# k5 c
push eax! n* M/ d5 m& T; n
push dword ptr ss : [esp + 0x38]1 G5 r0 E* ^/ r; E
call m_NewStatShow_goldcoinimg
. w# A: j. l5 j" R POPAD) A, |: M& o# E6 w/ z) D
JMP D2Gfx::D2DrawImage
q* r( u) ]# G, X }
' d4 a' y- p6 J4 c v}
2 L* p# ~: }# @+ X+ p, T2 Q- @DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
8 ~+ g: Q/ @8 l( ]{
# V: B. ^& W* t5 j6 Z if (x > D2Client::ptScreenSize->x / 2)( T8 L; }- \9 R5 O! [* O l
{7 C3 ^! x) j( @* `9 p2 B
*y = getYGoldCoinFixBtn();
; l9 B. u. D5 g7 R! K( r/ A/ e/ ^ return getXGoldCoinFixBtn() + 32;
4 M0 e$ q0 d8 Q }
$ |) n4 d J! s( z" B return x;
; h9 o3 \. }; _7 w" D}! C( L' j& I% p8 f5 H8 G1 m
__declspec(naked) void caller_goldcointext()0 [( J; e0 ]8 L/ A# h% H: x1 l
{2 D5 x( ~$ N q7 T
__asm) T+ g4 J( T2 U; X1 O# Y
{7 x* l& ]' Y9 z7 E: @
PUSH ECX
3 i% `! V- A4 e$ O7 s( L g PUSH EDI
1 [ Y \1 p7 y6 G% P1 K! e PUSH ESI
3 [! U2 T5 T$ ~: z: N1 d PUSH EAX" G1 |" X0 L% k( w: G8 D+ Z
MOV ECX, EDX
/ I/ B5 h7 n& l+ K/ ~ LEA EDX,[ESP+0X4+0X10]& g1 O6 s3 `' x! m$ H9 p2 E
CALL m_NewStatShow_goldcointext
2 R6 H+ g( A) V: W- f* @: B& F MOV EDX,EAX
* k' R6 c3 Q0 I0 s POP EAX* w; ]# T& k# w0 l
POP ESI7 u) Q$ z; m8 I: B! `
POP EDI
# L7 O5 ~: ^% \) ~- @ POP ECX
7 N! G7 n, |/ B, G" h8 B jmp D2Win::D2PrintString;$ V$ d D1 }: y7 m3 w
}" e X0 W- v. M# z U W
}2 O7 x2 `% O9 u" W
3 E6 y+ L) \ g$ u0 D+ M& d( yBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
7 E) v( R: {: h; v! H{! d ~) q9 q) C5 w0 E
DWORD mx = *D2Client::ptMouseX;4 o. p# X9 |1 e- j2 h5 W" W* e+ k7 W
DWORD my = *D2Client::ptMouseY;
$ b2 e0 t4 L. D0 S" T6 o if (isOnInvCloseFixBtn(mx, my))
8 y: u1 p5 p7 S4 F return TRUE;& i% z& V$ d; O7 Q3 \( O
return FALSE;
/ L, b, u) \- A/ D* d' A1 {}
& T. o: n; z. ~6 b7 `__declspec(naked) void caller_close()% X/ A# w. L3 m
{
% m- e3 v% p( u) ?* m& k) d __asm
! K% D9 L) }7 Y) H3 j {5 R) t' } K) e$ X0 ~/ e
PUSH ESI
" r- U# j* u% O+ Y4 @5 Y! I" | push ebx/ P+ W; V6 z9 Y8 B
call m_NewStatShow_close4 K- B" f( h" T7 D" J6 J7 y
pop ebx
8 x h/ w( D0 @ pop esi
( E6 H' B/ L, f: d5 i/ V. J1 B/ o# T& s retn( w! L* }8 L' P" E
}
: Z* ~, Y$ S0 U! |}' o) T: \! ^/ Y) b
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
& T/ B' {7 B) s* R: H{
0 N" P# e/ K6 p" b7 u' D; ?* C *nXpos = getXInvCloseFixBtn();
" j/ P4 F. u1 j! y G( r7 Q *nYpos = getYInvCloseFixBtn(); b% x3 F1 ^0 N d. @
}. h, d# X( B! ~- w8 p
__declspec(naked) void caller_closeimg()" y$ ]* v: \- X; g' T
{+ \! r8 H& E, G8 W/ i
__asm
- A. o7 F% ?8 p: w {2 z. z5 W9 |. O$ n' Z
PUSHAD
" L, U8 v# p& c) b) I5 O lea eax, dword ptr ss : [esp + 0x38]
) S: O7 l$ a" M7 Y7 t- T push eax
7 @3 E, q; ^5 v; o' g1 u! m z* B push dword ptr ss : [esp + 0x38]0 v5 P. L' F" h
push dword ptr ss : [esp + 0x38]
7 r( j$ C+ `& X# x* D5 I) X0 g lea eax, dword ptr ss : [esp + 0x38]$ [8 o' F* D/ n: R7 E
push eax/ I( k I% M3 C5 r
lea eax, dword ptr ss : [esp + 0x38]3 }) { @' y% Z2 t2 p% l
push eax
0 C1 W5 f$ m# d push dword ptr ss : [esp + 0x38]% O# D8 c: ]6 |8 ~
call m_NewStatShow_closeimg g. T. x5 h8 L& v( K
POPAD
' Z- e+ M+ ? Q, @. d JMP D2Gfx::D2DrawImage
1 Y G2 Y4 O* e( O6 { } n# ^5 b% S/ e5 E
}
- D" c) X; c3 d% Z9 ?. q9 w8 F6 P. p7 t9 @( F$ E$ l% `! Q# u4 `
% C9 X1 k" l0 e8 b- X0 M! ^! ?: H |
|