|
|
转载
% R6 Q( x9 S) N" h% k: G, w+ P, v% bBY SJ- Y' K. X6 R& I& t0 F# }
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)5 @, F& P3 o7 a; \
4 k- x5 N5 b! g# g gD2Gfx::D2DrawImage-10041
4 }, x K* n: W+ D' b1、修复技能的背景(不需要可以不要)+ H% S9 O& `6 T0 G; h9 l- s
offset = D2Client::GetAddress(0x77AA8);
& @4 Q) F6 M' Y& h' E1 F0 e% XMemory::SetCursor(offset);
! C5 y) W4 L1 I) g& H1 LMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);1 e! n K" K' R+ M
2 i: f0 w5 P( k5 z7 W" o
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])1 \3 P6 ~- y7 H S d7 {! B/ C
{
, t! c" {5 K& L) _ //Init data for print image/ ?1 w7 S; S4 Q0 L1 Z
sDrawImageInfo data;! }! F9 E# [; w
ZeroMemory(&data, sizeof(data));
9 Q7 V+ V% q2 c/ c6 C
$ X# f0 D% C+ A3 ~ //print background- ], W5 s) ^" E/ E
setImage(&data, spellBackgroundImages);
, }% Q* N2 \ G6 E- V) s+ k0 L setFrame(&data, 0);% P% [$ V$ y) Q5 p+ s2 v: r" l
int fixx = 511;
7 @2 Z' G" ]' O- O2 s" l int fixy = 9;
' Y Q1 K9 C& B+ Y0 V D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);8 \" S( `4 h3 u0 Z8 I) P
setFrame(&data, 1);% u7 r+ d" F3 T! h
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
7 v6 B3 j& s# O3 s1 Q setFrame(&data, 2);1 _- U# }$ `: H
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//4327 {4 k$ l1 Z7 M" i! l
setFrame(&data, 3);, l7 e, q5 X, i. g ]8 E
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
g5 ~; M V% G, U}
5 D& T! U3 O5 u( r" E* @__declspec(naked) void caller_SpellBackGroundFix(). c+ t3 o4 r! |+ z' t
{' P1 R0 S8 M/ z& @9 Q
__asm
5 `7 c0 S+ X; f- x+ m% s' k0 P3 n {
2 _* p# ~/ Q0 C/ Q2 \ PUSHAD; V1 x6 K1 E3 ?; a% k: k! x5 ?0 ~
lea eax, dword ptr ss : [esp + 0x38]
& c5 M2 `) k( n0 E push eax
6 }* r% ?* ]! w, [3 Z3 T1 \6 b push dword ptr ss : [esp + 0x38]4 Z u& i4 U" |8 g# t
push dword ptr ss : [esp + 0x38]
$ J; _: V) e# J lea eax, dword ptr ss : [esp + 0x38]
6 [ g1 q1 U8 ?5 ?1 ?& J push eax
; E' d5 \( U9 f- o: y# f" [" _ lea eax, dword ptr ss : [esp + 0x38]# o9 s4 N) O; p
push eax
1 ?* F, B0 T3 u! ^' O. W7 W" J4 v push dword ptr ss : [esp + 0x38]4 e8 o! J* I4 t$ f
call m_NewStatShow_SpellBackGroundFix0 d" c5 g( y c3 L8 y4 b6 N' V
POPAD3 W! z3 R% ?4 I5 `( d2 i
JMP D2Gfx::D2DrawImage+ o2 i8 r1 P) Z3 l$ M
}6 _- O+ A$ ]/ u I
}7 x0 R, h: g' c/ r) r$ C/ \. r: {
$ }: u" v; g7 D& _; l/ @2、我们如法炮制小站的背景# G. i3 X$ U6 z* Z) X
# x* k# T+ \( z
offset = D2Client::GetAddress(0xAB010);
$ T" j- W9 P* t) RMemory::SetCursor(offset);
6 @. N5 i7 \" _( b" L" t }Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
; E7 p6 w" o. O2 ]9 T# n
. {# D J$ H Z- J5 |void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
$ Y2 q: i* i+ x6 F! U! U{( R- C- H8 Q& _6 `8 y
//Init data for print image) K E" ^& c5 V
sDrawImageInfo data;, I( |; c- t& r# t( N4 l# V2 \0 r
ZeroMemory(&data, sizeof(data));4 k7 W; p# d. J v
/ M- J6 G. X5 K //print background- E w, f. K' q- N& k- g
setImage(&data, waypointBackgroundImages);, I1 v' E3 h% E A: h3 L
setFrame(&data, 0);; i8 h. K" y% q* l. f! {
int fixx = 0;
8 I# [6 p- w8 b0 h @ int fixy = 9;
1 y$ l k5 ^; h# | D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);
! v' s" L$ [+ Y/ D setFrame(&data, 1);2 q; W9 n0 E# m4 _) ?& s
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256% Z& e D# ^) _8 w+ W
setFrame(&data, 2);
& T, b# @2 a5 R6 L, G& z. U; Q D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
( o+ g4 L" S0 W$ V setFrame(&data, 3);; |. g" T! `9 P6 ?' o* t
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);4 ~- B9 N4 m" W& d% r: C
" X( E3 m! D7 e}
# d- }) K+ ?; ~5 t__declspec(naked) void caller_WayPointBackGroundFix()( O3 t2 r7 G# z! T3 z8 @+ Q
{9 R" X9 D E: N5 T- E
__asm. T. K( ^8 {9 H W8 c
{7 h2 Z6 ~: S, {+ Q/ d. F' S
PUSHAD, C6 k; n2 L0 J5 e: e6 Q
lea eax, dword ptr ss : [esp + 0x38]
. y" m: R, Z" o$ ~$ F1 M6 I push eax
; o& f0 i( D% X5 {& F) n push dword ptr ss : [esp + 0x38]9 N: x/ ^& q1 h5 Q% C E. H
push dword ptr ss : [esp + 0x38]4 ~ b! ]" j9 E# h1 Q
lea eax, dword ptr ss : [esp + 0x38]/ c9 H0 T1 D) E4 i, U% w5 R1 e% p ?
push eax
; |6 L- Z% i% G e lea eax, dword ptr ss : [esp + 0x38]
1 z# ~ F2 E) @1 I0 A0 u push eax5 U% ?7 h" u; J' w+ {: ~( r$ J B
push dword ptr ss : [esp + 0x38]
" l/ G4 o& }- M* Q. u) R call m_NewStatShow_WayPointBackGroundFix
4 M8 b! X; B& J- ]% }. E POPAD3 l$ w7 N( E1 `; i/ G( ^( w o
JMP D2Gfx::D2DrawImage
2 V# j7 O( Q( Y8 j4 b* B2 D. Q }
& y5 b6 Q; A" s% Y}
% W2 N+ n1 Q; h0 u) S4 U
( ? m! N# O8 h4 k6 N3、以下可以搞16*16超级箱子-腾出我们需要的边缘% b8 _ D! R# a2 |
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
0 p" N0 U$ l+ q5 P {
1 J2 \# C% j7 V, `5 W3 i class D2MultiRes : public Library<D2MultiRes>& ^% z1 k+ }& f' M0 J$ j/ w
{
$ w& n- M) q; M1 Y; f$ ~ public:
8 A8 i' Q: Q3 l/ @' S9 p% B o static void Init()
7 }3 u! [! t) \% d {
5 t( u1 ?# `) p; d+ j Name = "D2MultiRes.dll";! X% j) x T) ]
Offset = LoadDiabloLibrary();
. y$ W5 [: q& e3 Y7 i }7 H+ e( r- u' N' y- o( s$ Q
};5 Y( ?) g) k! W
D2MultiRes::Init();6 b- t* w) T( U2 u
D2MultiRes::HookLibrary();
/ ~+ k* W; L3 e Y% V" A' C. E! b) w: H V4 |8 C# m" C& Q' u, ~
5 P) p3 W' G1 h2 g% e( ^ MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);4 x' n2 B) A, K# J' A
Memory::SetCursor(MiscFunctionsOffset);
" w- d) F$ `- ~3 ] ] Memory::ChangeDword(0x1b0, 0x200);
7 M" L5 Q. D3 {. L
' e( O, L# a; I. w. S$ n7 } Q% T# J2 v1 B2 U8 l/ ~2 m
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
. C8 P$ @+ t4 \( K7 p7 P& M Memory::SetCursor(MiscFunctionsOffset);
* m( F- e! M( i5 o& g% u1 [ Memory::ChangeDword(0x140, 0x200);
+ M; t8 \0 f9 E3 C3 {0 P* X+ r0 C9 n
, H' a2 F) X M! [ x
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);$ N5 G. b. e- Z
Memory::SetCursor(MiscFunctionsOffset);
5 k6 o& h8 H7 @! N: S, O! [ Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
% {# l3 y) k+ ?- y# B. E
- h" z4 z8 d5 K% K0 c) f0 { MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);' v8 `1 D. v3 N) H& H% o: v
Memory::SetCursor(MiscFunctionsOffset);" [! u" E' ?9 X+ s8 v: H1 Z$ p
Memory::ChangeDword(0x200,0x299);//下边缘 299最大
: i7 x$ v/ t* o7 q# e) M: \
. t: }4 a+ j, S- t4 [' A MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
, n7 E- B4 R, { Memory::SetCursor(MiscFunctionsOffset);
/ v2 p/ ^5 R% q2 ?$ W1 n Memory::ChangeDword(-0x280, -0x400);//这个不要动, m9 b; @5 i% w( L3 B3 l
}. O, F: D) Z& ?1 J' X6 `# ~
1 T! x) q* l' ~! J6 ?, d4、快完成了,是不是发现金币啥的位置不对??3 T' D0 _7 j2 U2 V# r% R" v
# p: l: `* A9 d4 o9 x
//这里修正我们的装备栏
4 ]3 O" O7 u" |1 [( b- q offset = D2Client::GetAddress(0x99B6C);
6 G* c# m4 j; B: A9 d9 N" C Memory::SetCursor(offset);
; u {+ m* P f" _, O+ Z( o0 o" P! \ Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
: `8 n+ r% p V7 h" y6 d2 V, e! q5 W3 ^6 v
offset = D2Client::GetAddress(0x99BA7);3 e! n6 r' d$ W
Memory::SetCursor(offset);# Q, p$ O7 q3 j4 w* d d4 c
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);! A+ [9 T8 h( p* A) N
5 `9 h0 ?2 b# b' a, O offset = D2Client::GetAddress(0x99BE2);
) B1 `( J5 o% d1 G2 Y Memory::SetCursor(offset);
U1 N8 l# @; M! ?6 r5 A; p! }! V% K Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix); }5 n" O; a3 \" N% `; @
) }! [$ [1 |3 \9 q. W- p3 ?& Q offset = D2Client::GetAddress(0x99C1C);
1 _0 C0 v: ?, h Memory::SetCursor(offset);
h" \0 J/ m/ i. s6 k Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
* g, P8 A3 O0 S% W
# y: Y6 k$ ?1 D( _! \9 H2 a //取消两个popup,偷偷懒不过分
Y! X; N8 S0 P+ N( |( H/ z# K offset = D2Client::GetAddress(0x9386d); [1 Y4 b, c" L% O- I: m i7 V( T
Memory::SetCursor(offset);
7 [4 w6 P1 ? |! K: w. B Memory::ChangeByte(0x8b, 0x33);
) K& Q: F, s/ O' g Memory::ChangeByte(0xc8, 0xC9);
$ e0 O/ v" x- n( K7 c+ ]# s offset = D2Client::GetAddress(0x9390b);$ q9 L: o% `) I7 ~5 I. M
Memory::SetCursor(offset);
- F! W' c' X9 H c0 X Memory::ChangeByte(0x8b, 0x33);
( B5 i6 _+ s; W+ s1 j2 g Memory::ChangeByte(0xc8, 0xC9);
5 Z8 P6 I& S6 h) Q; ~6 J A8 W+ R; L' w. E# u2 E9 w
//修正提取金币7 [$ Z& @; N, b2 Y! |9 p
offset = D2Client::GetAddress(0x8D3E5);1 P! b8 A5 W0 r/ @
Memory::SetCursor(offset);
. a) H) D- o; s: n5 M0 T Memory::ChangeByte(0xA1, 0xE9);
0 {' h$ {6 @: Y- V$ } Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
4 r) T) J: t, z5 L$ V3 t6 d
7 t d" v+ o1 R1 N7 ^8 t offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
" `2 V- n& H v8 \" @( S E. ^ Memory::SetCursor(offset);0 `$ [" b! t) {1 J9 k9 b5 J$ }
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);' @. `7 L6 `0 j4 @/ S8 z8 g
/ K! t# G2 f8 j
offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);8 r6 u x, E3 U# \
Memory::SetCursor(offset);4 O4 ^% A! Y+ O7 {1 s* d1 f* q
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);2 N* @) L) Z. c* k+ Q- D2 ?* p
. E) d$ A: J! f2 v3 P/ K( i. w e
//修正关闭按钮+ ]* L$ [+ ?' S1 _7 v; e
offset = D2Client::GetAddress(0x8BD90);' |* u3 X, Z s0 b
Memory::SetCursor(offset);- V- L2 D7 q9 H# f
Memory::ChangeByte(0xA1, 0xE9);2 |. U- X$ t6 I5 [$ N8 H H2 }7 y
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);, ?! F/ L, Y; J. h0 ]
6 z# E: g; S. E$ ] offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
5 O- x" j" L- O- B! s5 b Memory::SetCursor(offset);5 T4 Q7 L3 z) p- E" Y, Q6 W" z
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
* \+ ^7 ]- @% r' v# i9 I: s, x2 V9 w: r3 [( f( k8 d6 Q
3 h) f* A6 s8 X2 m
//以下是细节
D' u1 Z1 S1 {#define getXGoldCoinFixBtn() RX(0x2d0)- J& V5 z+ T( S/ D; w* S; `
#define getLGoldCoinFixBtn() 32- b, L9 Z+ g1 u
#define getYGoldCoinFixBtn() RY(-0x59)+ B6 ~, G/ I# S9 O
#define getHGoldCoinFixBtn() 32
% w/ {7 J4 G3 l3 c; [2 G$ N0 q#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())+ P4 c3 k* H; p, [! V! s
0 y, F6 m1 |- N9 _& y
#define getXInvCloseFixBtn() RX(0x3db)$ c& U& M. i j& k# \
#define getLInvCloseFixBtn() 32
. a) _7 u: l1 R) x, r3 L& U#define getYInvCloseFixBtn() RY(-0x63): t6 a" O5 |- X+ d' F
#define getHInvCloseFixBtn() 322 P3 U. R( }3 [3 i5 ]3 E5 I
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())0 e8 [. |3 W9 e- u
$ o4 T2 I" i- t- u0 @- j% `
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
+ Z# V9 \( m6 a& j3 w: q, |{! ~: G$ W# A+ k/ E0 v! G& d5 G
DWORD mx = *D2Client::ptMouseX;
7 x) _: g1 V# Q* p4 } DWORD my = *D2Client::ptMouseY;
3 W; [/ i7 M+ Y- D" H$ O if(isOnGoldCoinFixBtn(mx, my))* d9 z. H8 B& {7 e w* _* J
return TRUE;
. r; `0 n/ s6 [ return FALSE;; J2 D3 Y1 T& Q8 p5 }: H
}
) W5 Z6 m7 B0 R: s4 |# Y0 O6 C9 o& h- F__declspec(naked) void caller_goldcoin()
- w1 i! z9 X( ~; A" Q2 B( G{
/ r0 F9 G' I& h# L4 c# o6 M9 X __asm4 |; r; f7 B9 r9 ^9 Z( v& ^- m
{
h2 j# C5 _1 t! r* M2 L$ ]0 x1 y push ebx
5 b( Z7 J8 \! Z3 N3 y( a1 V6 p" ^ mov ecx, esi
( \3 ]3 h6 G% x# h1 b+ W mov edx, edi
9 E: w; ]% K3 C( M! z# H call m_NewStatShow_goldcoin
- Y1 b9 a: w! W! P0 ?& ? pop ebx
" s- Z7 i* \7 C1 S pop esi/ C2 ^* B5 C, H. g# E5 w
retn: F* q: P! U9 q1 D" [" J
}
4 l# j" f$ F& t5 a. }' I0 y8 X}# Z( {- Y" g2 C" @3 S) ^9 _- U
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
5 H* L, \! O9 R0 n. M: d# R3 P& ~{
- O# \9 ?! M G8 t+ d' C if (*nXpos > D2Client::ptScreenSize->x / 2)
5 ~% B# x1 N$ m. F2 N {
( b& W% B* k7 ` *nXpos = getXGoldCoinFixBtn();4 v& M' h- s+ L1 @ z
*nYpos = getYGoldCoinFixBtn();1 h8 Y/ L: l" I/ o/ e- ~: e( M
}7 V# ~( h; s: p D! m
}
5 n4 w: H6 P: C+ f g2 A6 x7 @__declspec(naked) void caller_goldcoinimg()* C" w7 d8 |' Q, |1 B7 t
{
' i- @7 F1 ?& I& f1 h+ x __asm8 D& F2 ]2 A U) S: u3 j/ q4 M
{
$ U q1 Y0 p0 [ PUSHAD
7 e5 V9 x& |- r5 z% n lea eax, dword ptr ss : [esp + 0x38]! l2 l$ Z _+ \6 l& H/ E
push eax
, O: n! h' M2 A push dword ptr ss : [esp + 0x38]
. g7 `6 E) B+ e- c. F- @ push dword ptr ss : [esp + 0x38]
) i% l; U7 [" H) q6 y% W lea eax, dword ptr ss : [esp + 0x38]
* j- b* b Q1 K- H @0 K# u3 a push eax
" F1 t; {' K+ x7 d; z9 r lea eax, dword ptr ss : [esp + 0x38]
+ F2 c$ `9 [% I* s push eax% e M( u$ X. b
push dword ptr ss : [esp + 0x38]/ z- }4 v2 g& p+ h5 U) W% d
call m_NewStatShow_goldcoinimg) A+ \7 w, T' j) M* p, |0 u
POPAD
* W! w) F) i8 B$ f7 I JMP D2Gfx::D2DrawImage: k0 b: ~! \0 s0 M2 y
}
: {& w1 M1 ^+ o6 s! K# W& o8 H. x}& x$ {+ _7 f: Z6 h ~
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标) Z- k8 K+ G& ? @& F" i
{: M! y& Z4 D/ v( n
if (x > D2Client::ptScreenSize->x / 2)* O- ^8 W! g* J$ x0 E1 X' f1 ^
{
- B0 R0 P& r5 b4 Y L6 J* z, L9 f( k *y = getYGoldCoinFixBtn();% j* D. u6 `# J$ P8 [) F' @( U) K
return getXGoldCoinFixBtn() + 32;
" z+ |' G0 v! z( i4 P4 W* ^2 A }
) W5 _3 t5 n4 {* P4 Z, C return x;
# _6 {. _) B5 e}
7 w# i& @; v+ B9 o7 b6 W: Y" @__declspec(naked) void caller_goldcointext()
1 l# V6 A' l8 i% q- r- x9 i{, Y. Z9 M$ H H* t) f# o5 B4 a
__asm
4 `* O8 R) F5 U: D$ \3 ^( c {
( F/ N$ Z' \% ~4 j) {; Y; k7 C PUSH ECX
# @9 S5 e; U7 n PUSH EDI
6 T! D+ U8 Q6 |) J* ] PUSH ESI' f" S7 ]' V( M- a7 M0 V% V
PUSH EAX
; @8 ?: q# D8 a. b( k r& g MOV ECX, EDX6 y! @8 Z8 E$ {( y1 h2 F H2 o+ R
LEA EDX,[ESP+0X4+0X10]" L0 c% h2 _( w# l* S
CALL m_NewStatShow_goldcointext$ { ?9 w6 H$ h( i. w
MOV EDX,EAX1 e* h5 P* | b, }: q- y( v
POP EAX/ M2 D. C o, i% ^
POP ESI
$ V1 a: A* z [: ? POP EDI+ Q. f& T! w0 a3 X; [, \% a- k$ U
POP ECX2 j% `0 e: @% ~* H+ T& z7 x
jmp D2Win::D2PrintString;
F x# A/ _2 K" e5 p% } }" Q2 g1 u& o* n c( N5 D6 n$ ^
}
D3 D/ @( K- l8 D3 e/ j# D+ @# b) J' c b
BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)+ M4 H/ K0 a* Z7 E; m
{
- m* S8 f+ ]/ e) E1 g4 O0 o DWORD mx = *D2Client::ptMouseX;
# ^% j. ^; w5 a% n+ G/ B DWORD my = *D2Client::ptMouseY;" I# D, Q B/ \" B
if (isOnInvCloseFixBtn(mx, my))
9 V+ k3 w* X0 G) I; _) _3 w return TRUE;8 p; e ?! n% P8 b- J8 O
return FALSE;+ `* O; v" j5 b4 H3 U
}
, N- h( K3 }' v/ o0 \7 ] M__declspec(naked) void caller_close()9 B# f$ Y. X$ b! ]( U
{
1 A2 b% G k! E! S __asm9 s$ c3 Q# b) v4 e+ M0 a) `
{- {+ A2 f& _" G$ }: Q: u
PUSH ESI
) b" a3 d! [) w5 j push ebx# N/ i) c1 H3 J9 H
call m_NewStatShow_close4 `: A4 o1 c( J, ^) Q
pop ebx
2 [" H7 r8 h4 C, q$ w6 Y9 e3 y pop esi6 p! S! L$ ~ Z* N5 d
retn
1 q# q$ Q! l4 Q }
& E- t8 w4 W( @+ \6 Q! Q. a0 D}9 _4 l: d( ]7 Y
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
9 u+ i m+ y- Q( T' W* \{
: E' h& [/ \7 r( } *nXpos = getXInvCloseFixBtn();
8 A3 c1 G% ~: Y6 j! s, I: o *nYpos = getYInvCloseFixBtn();
* Y# }5 z5 b. J3 [3 N* z}4 ~8 J- v, L6 ]9 f# A% `, c2 T
__declspec(naked) void caller_closeimg(); ]: [5 W( K1 e5 b8 C) V
{, Y; e% D) I* ]: Q* a
__asm
# t5 p7 U/ @. J0 s {$ m2 S% W! s+ H r" D! s
PUSHAD, v, l7 d- f* Z; ?- K4 I
lea eax, dword ptr ss : [esp + 0x38]
/ q; x/ I# ?" k2 G* ]0 o# k push eax' ~6 t# }/ B4 I+ F
push dword ptr ss : [esp + 0x38]
3 ~8 l3 q$ l9 Z push dword ptr ss : [esp + 0x38]& j. x& E& `" X; t+ j- H1 @
lea eax, dword ptr ss : [esp + 0x38]9 y! Q, C; ~" a8 X, V
push eax
0 s$ b% U# j7 a% j, P# o$ M' t lea eax, dword ptr ss : [esp + 0x38]
, E, p- E$ x8 s5 \% E: {% p i/ d- p push eax
& R. T6 W4 s7 \, N push dword ptr ss : [esp + 0x38]6 ^+ O8 Y# |; D$ [! {: \& n1 [, M
call m_NewStatShow_closeimg+ x7 }( f {$ D% \& t5 Y9 _
POPAD+ V" g3 |" f& C
JMP D2Gfx::D2DrawImage
' p& D- q5 \8 Y" w; @- F6 t }
, L- t3 U+ B$ h+ |; t+ a# K}
+ y9 p/ H/ D) L. O3 Z1 E, c# l, ^, l+ V
2 e/ g+ H- F! c |
|