|
|
转载
0 l( P+ w4 a3 I% P( k/ W" P3 e$ yBY SJ
* J3 a* W" [+ \首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
6 h) U* E U8 T) ]9 F2 K- J+ P8 q0 O* y% t
D2Gfx::D2DrawImage-10041
; N$ z2 o D* t' ^1、修复技能的背景(不需要可以不要)' }3 W2 s: c" ~& Q: \ D# q
offset = D2Client::GetAddress(0x77AA8);. n6 q4 M7 E4 K- o( W
Memory::SetCursor(offset);3 h ]/ C P6 w. l) H" L, G
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
: N- k7 i3 G" t( e8 m4 H! [6 u# y, h2 V0 I& L: q( ?
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])) z0 j* |: X& P4 g+ V
{* S% V- Q- J" u/ {$ |% q& d
//Init data for print image8 g1 f6 S3 ~) O4 E
sDrawImageInfo data;
P1 u8 t6 p1 g# {3 y' X3 J ZeroMemory(&data, sizeof(data));
& F+ o3 h( I. W4 _2 n0 w3 k1 Q, }/ T$ J
//print background
! q2 h' q* R5 n! q- L: E: _& F4 } setImage(&data, spellBackgroundImages);! B: d2 O2 ~ X3 g' z; ?: Z; B
setFrame(&data, 0);
+ t5 e! w# y# W/ u7 J. P5 _( B3 P int fixx = 511;
- n$ k* a/ Z9 F! z7 c Q int fixy = 9;
$ U1 y4 z) x7 e+ k D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);6 }6 I+ d( q& V. Y4 ?* Q
setFrame(&data, 1);2 Z7 ?; v( q; v* [' _7 N
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
7 G8 _" B2 A1 E setFrame(&data, 2);
9 k8 }9 Y, J; J: V4 H# W6 b D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
0 u! _* k$ N- g) Y/ Q0 y) p setFrame(&data, 3);
4 E& W' Y, K1 r9 b6 R% }5 w D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
3 y* w+ L. i+ `}- m" Z | J, S0 z; i
__declspec(naked) void caller_SpellBackGroundFix()" L; C$ B. G3 C( t' `
{
0 C% z% s" H8 ~3 b! a- V __asm
, H+ q2 c" u$ v' C( |3 D/ u& n {% x" Y# B2 Z9 |* ^6 O* d s
PUSHAD
1 L% O+ w% y& p1 z$ }- d: z. S+ } lea eax, dword ptr ss : [esp + 0x38]
6 Z( C2 q5 E- d. Y% o. C push eax
2 n. z y( f) D, ]/ ~5 V% b9 A push dword ptr ss : [esp + 0x38]" z; h) y6 k5 H7 I
push dword ptr ss : [esp + 0x38]
: R* A/ a0 q% {) z- F/ Q lea eax, dword ptr ss : [esp + 0x38]' e$ Z: B! O$ z: Y* T
push eax' j2 d3 c' X9 G( ^8 }' @5 |. P
lea eax, dword ptr ss : [esp + 0x38]
9 V3 ^% [6 ~6 T8 f$ [! h; v push eax3 n+ Y- v t$ {% L8 |
push dword ptr ss : [esp + 0x38]
2 O1 q, J( u8 j5 i& g! X call m_NewStatShow_SpellBackGroundFix
% s/ |- c$ C8 S7 h POPAD( c4 S5 C! E( a( S2 y
JMP D2Gfx::D2DrawImage
/ d" E% e0 B! A/ Q2 L0 C }
6 a: } R, J2 ^- m n V}& q8 g: f% X5 t, h, {
$ I0 X4 A& Q1 k. w7 F, W
2、我们如法炮制小站的背景
& R. G+ \* v7 X3 G& i0 r* D l7 n' k* P5 o3 B
offset = D2Client::GetAddress(0xAB010);
4 j! z! |9 W: e+ ?6 w6 v- {$ DMemory::SetCursor(offset);
) X6 t% I- d/ G9 F- a1 eMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
~2 r8 V6 j. x0 k2 r/ M6 A/ h4 C7 Q8 x
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])+ y! L7 I4 G0 y8 d% J
{
. n% v0 p6 M: K5 H N" W9 x# k; f //Init data for print image
* Z, w$ Z) b0 ~. u sDrawImageInfo data;
$ v6 k* g* C2 I1 @0 r ZeroMemory(&data, sizeof(data));
B2 M" d1 \/ [/ _ D/ m6 D! P @0 H& [, Z4 j# O
//print background; w( V3 Y- K' s! f2 s
setImage(&data, waypointBackgroundImages);
" p8 [! v4 J, h0 S, D" W setFrame(&data, 0);
5 W* P6 `# X1 B( ` W. a int fixx = 0;) @, N& _: W' ]: R6 _. q \
int fixy = 9;
m' n) U, c! K! l8 p D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);( w. W7 q7 i4 l* W: |6 L: N2 I
setFrame(&data, 1);: r' A( K* ?0 e1 {" t
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
$ |% O7 ]0 E# v setFrame(&data, 2);( k3 t9 t- Y7 w$ D: x1 y
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432$ J; {2 }4 C c1 Y* u
setFrame(&data, 3);0 Y) V" k+ i5 f% U' j. F9 N1 f# n
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
% G4 Q H# a7 k. \0 a
. f- u: D3 c; c& R9 e}
/ Z% d1 Y g7 {__declspec(naked) void caller_WayPointBackGroundFix()5 X2 j$ B2 f% y+ E5 d
{
, v: H0 [0 W/ @7 Y4 t/ [2 ` __asm
& V9 t8 T$ x) ]4 ~' G! f+ ~. K {% h% r. |" h5 F
PUSHAD
}* t6 l( v- X) m; i8 G/ c lea eax, dword ptr ss : [esp + 0x38]" ~8 |* Q0 V. h* U) S3 Y- [
push eax
( J1 B$ e/ C# n$ q, I push dword ptr ss : [esp + 0x38]
4 t1 A6 h" d# [7 x' W p: O push dword ptr ss : [esp + 0x38]
# Y. L6 V) g0 w( q% } lea eax, dword ptr ss : [esp + 0x38]
! x0 T% Y1 O$ I6 S1 A push eax
0 l1 \" D; d* o& w( p lea eax, dword ptr ss : [esp + 0x38]) y' S3 O# P X" x$ M x
push eax
0 ]3 Z; o4 d0 n/ V" b push dword ptr ss : [esp + 0x38]* T; N0 L P4 ~, S: }
call m_NewStatShow_WayPointBackGroundFix4 j) F1 [' ]; \) G. g
POPAD
4 O3 l9 ~& x: d+ @2 J- g9 k( d) S JMP D2Gfx::D2DrawImage9 c) m' `# s; h' j
}
% n6 s* F1 h i9 O. Y}/ J/ Y- U5 q) V R% X" E' S. k
% t! S, n4 }6 D6 {* L3、以下可以搞16*16超级箱子-腾出我们需要的边缘
9 R7 a2 I8 I# ?; m) M腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)& A/ ~1 P" \0 K% F
{/ b( m% R% y" D0 v m3 T* {- y- D
class D2MultiRes : public Library<D2MultiRes>
4 e! l6 M7 S6 M0 c. A {
( l+ Z% q( A$ J% T public:* i4 w0 P1 C' ~ O
static void Init()1 B. E4 S9 B# E1 F$ U# O4 K
{
$ }% q* T! {9 B0 Z Name = "D2MultiRes.dll";# P( z! q4 U9 a8 B
Offset = LoadDiabloLibrary();
' v9 Y1 Y5 Z6 f. l* q9 g8 N }
o( b- J% m8 g6 ?( J$ J* \ };( j+ h0 V8 o6 H* u% ]
D2MultiRes::Init();- N* X1 _1 h5 w- U6 T( O8 M
D2MultiRes::HookLibrary();
2 y% h$ L5 r* ` U8 n5 B: I. E: M0 X5 C G, j1 C7 B6 }
1 O2 F: l9 i5 o
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
: `) d1 c7 S" s* H Memory::SetCursor(MiscFunctionsOffset);
5 y5 S; s/ F1 b Memory::ChangeDword(0x1b0, 0x200);9 n" C. X& E+ t7 k/ Y
& [ b+ i& ^# K; n
; }/ }, J4 d% a5 e! a% D u: {" _& t MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
# f2 U* @/ {4 @: V Memory::SetCursor(MiscFunctionsOffset);; H4 E c. V4 q7 g# z& V3 w
Memory::ChangeDword(0x140, 0x200);
3 M/ b$ H' e# ? p, M- S; }, E
, H! M# N' v9 i( ?9 r, s9 y. v4 v" z, q
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);9 ^$ X9 [( E3 X! a+ n- E
Memory::SetCursor(MiscFunctionsOffset);$ U) O1 ]' j ~1 t2 {0 O. f; a
Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
F5 M. Y; Q% C z7 \) H0 _/ ^ e" @' u: ?% f
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe); z/ [6 |% B+ f1 e9 R: I6 ?
Memory::SetCursor(MiscFunctionsOffset);
3 r6 `/ `0 V$ `6 D1 X Memory::ChangeDword(0x200,0x299);//下边缘 299最大; R3 `" `1 m% y
% t O/ v9 |- T1 w
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);$ [6 ?" w/ t& N6 r
Memory::SetCursor(MiscFunctionsOffset);
% U) A6 Q' W" } Memory::ChangeDword(-0x280, -0x400);//这个不要动
3 k8 Y2 J+ N9 o, u }: o% q) }6 F! M
0 }9 Q- B) @# O3 w' h$ Q4、快完成了,是不是发现金币啥的位置不对??/ Y( [, I7 V; \9 z
9 U: Y- A1 v" K. ?$ j, k, V//这里修正我们的装备栏
/ q( X& n. O, |' H5 T1 } offset = D2Client::GetAddress(0x99B6C);
& R/ Q& z5 v' E Memory::SetCursor(offset);) |8 }/ I8 M3 r* k7 p7 P5 g! ?" w9 n
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);* H- f6 I2 H. Z+ B* w- w7 r
1 a7 J! k" @* }9 u! s1 T0 D S& h
offset = D2Client::GetAddress(0x99BA7);
1 {* E3 c) i/ A' m4 x: Z* ]" a Memory::SetCursor(offset);7 ~7 x$ p, E, y3 t
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);4 ~0 \: O/ b9 y
: Q+ r4 ^3 ?" ?! d
offset = D2Client::GetAddress(0x99BE2);9 D1 k5 J8 V' T0 Z( ~4 Z* V
Memory::SetCursor(offset);
]' O j) B; P Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
$ z5 H* ?8 V* y* k8 _$ p- [+ `+ S0 e% q W/ O5 H/ ~
offset = D2Client::GetAddress(0x99C1C);7 R& O1 s9 S" @, t6 j( X4 D6 o
Memory::SetCursor(offset);; Y6 _4 o% x7 y( M
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
4 q& M$ e7 F9 Q0 Q! ]; C1 c- k3 @& i) ]
//取消两个popup,偷偷懒不过分" H+ Y Q1 [8 D, j [+ K; E- S
offset = D2Client::GetAddress(0x9386d);
0 g7 \& k# q2 j& L: s3 r Memory::SetCursor(offset);6 z- C: i" q+ T$ W9 k1 [
Memory::ChangeByte(0x8b, 0x33);
2 R; z$ N" o8 U- f/ S; H6 u5 q Memory::ChangeByte(0xc8, 0xC9);
! u h. E8 J& H2 t offset = D2Client::GetAddress(0x9390b);3 h- R4 j9 o, Y) D
Memory::SetCursor(offset);; e& d" y# K& W2 ^
Memory::ChangeByte(0x8b, 0x33); L# d" b+ X3 S5 a# X7 |
Memory::ChangeByte(0xc8, 0xC9);
" @. n) |/ z+ o0 a0 ^" c# R9 a. ]2 I& T1 _# P* s# s
//修正提取金币
& H& c `# l* p+ g Q/ G offset = D2Client::GetAddress(0x8D3E5);
: d2 b4 @* L3 d% G9 A Memory::SetCursor(offset);. R8 p- W5 S7 y
Memory::ChangeByte(0xA1, 0xE9);4 ]7 T6 W8 E6 }1 v7 {( \/ B
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
" h2 v1 q0 ^7 ?1 c6 W" H$ d9 M1 `( D! r& l6 }% A
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
5 h3 `# B; V n: d0 u/ F& F) } Memory::SetCursor(offset);, i$ e& h1 L$ d' }% N8 Q
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
# C' m9 X+ a+ m9 C) D! X# M8 m
* o8 P1 ?& k0 _+ c$ ?8 W/ U offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
8 ?4 |% C. ]5 o# \" |9 u& z Memory::SetCursor(offset);0 {2 n! A: M/ i4 p, d' d" w
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
$ p' O j6 H1 a0 f8 i9 w' Q7 ^, j. e4 o: ~" i8 q( d% L% Q1 `: n4 D' p
//修正关闭按钮2 g) ?4 q3 ?) S7 G# p
offset = D2Client::GetAddress(0x8BD90);
5 h7 n! ^/ N7 G6 u Memory::SetCursor(offset);
: T0 e9 g- O$ X7 y Memory::ChangeByte(0xA1, 0xE9);
: g3 e E9 {1 { Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
* _# G S# K% P/ J4 a& S
& \6 n+ Q& ]2 }8 [+ } offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
. w: L% }% o/ R3 o Memory::SetCursor(offset);+ J% j" N7 J! j
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
: j$ \3 \( v* x& h3 u( [# [7 B- F* T3 X5 s7 ~9 P8 G g+ p8 a- J
$ B$ r! q+ ^# d+ c# O# ~' j
//以下是细节8 _# M7 \7 W3 C4 ^7 }
#define getXGoldCoinFixBtn() RX(0x2d0)5 ?% w$ d. H+ t
#define getLGoldCoinFixBtn() 32! I- L- v$ I2 u
#define getYGoldCoinFixBtn() RY(-0x59)! x% c7 [3 y* x. u
#define getHGoldCoinFixBtn() 329 t9 _& R! T% U6 H m
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
4 s/ f" S1 a5 K7 A {+ s8 b
' b4 N3 ]" Q) s. @- ?! E#define getXInvCloseFixBtn() RX(0x3db)
7 k$ p. W2 @1 B1 A0 K1 k; B4 Z#define getLInvCloseFixBtn() 32" n) j3 k2 b) D& ]& s3 b
#define getYInvCloseFixBtn() RY(-0x63)" Q& X; Q4 H% }( ~$ b0 n4 t+ F
#define getHInvCloseFixBtn() 32
5 }* a8 V5 J; P! V: O& f#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
$ q& F9 V; s0 r! K7 H4 n
. c. v; i1 c4 I7 m | TBOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
/ X+ X- {$ v. a2 i- {{
1 r" T7 T5 w. F5 `! K/ H2 O DWORD mx = *D2Client::ptMouseX;6 z' A3 w8 B( c
DWORD my = *D2Client::ptMouseY;
& y' G" t7 F. I* ~. d if(isOnGoldCoinFixBtn(mx, my))0 q! E) S2 ]8 Q
return TRUE;
K* q# O6 u, Y7 H7 D return FALSE;
3 H/ u: \- v1 `- _, Y) t0 K2 N2 k}
c( a' D6 y% b9 p2 W0 g9 ?% d__declspec(naked) void caller_goldcoin()
* @2 k' Z9 D. j" { e; k1 N{
" P7 P3 q) p1 H# R5 X% M8 [! ? __asm
! n* \0 p1 W2 N7 j9 P2 X- i ` { r" D( h+ W4 |% t
push ebx# S* S8 w# i% W
mov ecx, esi
0 _5 P8 g4 a; `5 H- X) h mov edx, edi3 X; ]6 I0 J6 C" R3 a- b
call m_NewStatShow_goldcoin, w* `5 p1 \' r0 G6 @: i
pop ebx% W6 m: Z1 f: B/ l8 S4 B; K
pop esi
! k/ @: q7 l1 `4 Z9 d9 ] retn0 r( L' q8 _6 F9 e8 C2 q9 E' S( P a' O
}
- L# [& i* Y; ?6 h* V: b' O}
5 c/ F+ f& v# ?void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
5 r; o- o0 b' }- j! M: ]6 X{
; Z2 s6 H4 ~. S( t& z% K1 B0 x if (*nXpos > D2Client::ptScreenSize->x / 2)" T" M0 G" H( M2 I6 l( S0 U
{
9 V s5 y, l {( F1 ? *nXpos = getXGoldCoinFixBtn();( H8 Y: C( Z, V! |$ j
*nYpos = getYGoldCoinFixBtn();, w7 R7 ^/ l! `, F0 I# r
}
! j) ]' ?$ N. N. l}: a) T' I5 m1 F, Z5 [ V4 S2 B0 y
__declspec(naked) void caller_goldcoinimg()
! Z. F9 x6 N# z1 ?/ O8 G0 m{
. H: f2 u4 z" ]# T- I# n& s __asm
1 z" Z0 D% O: h3 M0 G {- g; `1 N3 ~' o/ E' i6 d
PUSHAD
8 Y# w$ b1 H9 M7 s lea eax, dword ptr ss : [esp + 0x38]+ G$ V1 \4 T; I6 Z3 W! N
push eax
: G+ `& J$ X. p* g: X$ @ ?: N. m8 I: Q push dword ptr ss : [esp + 0x38]/ e3 N2 L6 [5 @
push dword ptr ss : [esp + 0x38]5 v( V0 s! k# H1 _
lea eax, dword ptr ss : [esp + 0x38]* G9 q3 L, S. O' j" W( B- n J2 J
push eax
4 c" Z4 R4 F. l! I' A/ d lea eax, dword ptr ss : [esp + 0x38]
$ D# \" H6 S# g$ ^+ c$ f) q push eax
$ P( k9 i! K8 n! O" r- v( n push dword ptr ss : [esp + 0x38]
. l4 m8 H7 A: `5 s+ k; ]6 a# f call m_NewStatShow_goldcoinimg
+ [0 ~: K# n2 c/ X: S+ Q POPAD& q: L8 z4 D1 S9 L" a/ M$ Z
JMP D2Gfx::D2DrawImage
# V; o0 E4 n. @% q }
# t; n2 Q% |/ k( X. [1 Y2 @/ g}5 f3 d; \" j _: Q1 S2 o) K: l
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标( L( _4 R7 c$ q$ D% u; K. [( L5 c
{9 _: w0 D' V$ C; ~+ l
if (x > D2Client::ptScreenSize->x / 2)0 Y& x, x3 d1 R( d
{
7 N! q3 O9 G/ e; r* a C! f! l' w *y = getYGoldCoinFixBtn();2 s& `+ a" G# m! O" C- i: N# M8 r
return getXGoldCoinFixBtn() + 32;
9 g; [% V7 E4 M$ N; b7 h" P8 x! H }* m0 i0 @% n: A/ Z3 L- y w3 h
return x;% Q+ ]: T6 S B* ~0 A
}6 a+ W6 k1 u, p* m2 W, k! @
__declspec(naked) void caller_goldcointext()
& b/ Z4 Z+ G9 {, W{) h4 E0 n/ H5 f$ L
__asm' I9 X: E% H& i ^: V# J) x
{
- m5 \; C: H8 A PUSH ECX
, U) K# _* s* B; K PUSH EDI
, G( j `6 g" w! \3 O6 r5 a; K PUSH ESI
0 [) w+ C& `' O. @1 m PUSH EAX7 C/ [+ r: y6 v+ Z; _3 o
MOV ECX, EDX1 I5 D. m( r; f0 K
LEA EDX,[ESP+0X4+0X10]
; M u5 p* f8 l CALL m_NewStatShow_goldcointext" [7 Z7 z4 |- G% v
MOV EDX,EAX8 x- C- |+ R9 _- j' P6 i, X% Y* R
POP EAX: C/ ?1 Q0 s) N5 _" }7 y$ U
POP ESI; z6 M, ]8 _8 {
POP EDI% b: `8 A% b# s' t9 W% _. G
POP ECX9 n$ {) n: @# l8 \, r7 k% c Y- N5 I
jmp D2Win::D2PrintString;
6 {8 d h6 c# X }8 w2 K' H( z _) R. [( W0 u
}
* ?% T# U% Q- k, ~- q3 Z0 @
( k+ ?, Q8 l l; UBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
* w! n" j. ]# z1 E7 h- r0 c9 b5 _{8 B5 m z* y2 g& \
DWORD mx = *D2Client::ptMouseX;
. ^7 j" V0 V2 k- {3 s% a6 b! V6 [5 i DWORD my = *D2Client::ptMouseY;+ h7 A- B6 @- _- F6 r* Y
if (isOnInvCloseFixBtn(mx, my))& y9 R0 m; f8 h5 |. |, c
return TRUE;
4 M$ ?9 L3 d* Z8 _, c) o7 W1 @ return FALSE;' p6 G& B1 O4 ~/ i
}
# ~; a0 K, P2 ?8 _6 n J8 e__declspec(naked) void caller_close()
; z: e' J, i4 v5 }1 r+ a{
. e- L I* s% J( M5 ? __asm- U- d" U2 a. U" D1 k' Q: J
{
0 I, B4 G9 P9 V! { PUSH ESI9 K3 s( P% g3 R
push ebx
! ?& ] R4 @* f# H. O) T, c call m_NewStatShow_close! r7 q4 [' U2 }4 E6 A5 s- @% Z( j
pop ebx
- `3 V& o# `7 ?6 j! F- Q2 |0 M4 e pop esi
. z- U+ O: _( I) V0 W' B retn1 H5 S" N) t- U
}
2 E$ K5 O2 F- c& j1 U; m8 ?}
- x3 }1 i9 }1 zvoid __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])4 J' F# G, R* B2 E7 u; h: B
{
( f0 e$ \: } k4 B *nXpos = getXInvCloseFixBtn();3 |. u7 ]) X) h! E3 ]
*nYpos = getYInvCloseFixBtn();" t9 O% o- b# m) ]/ v
}
* h7 f& ]5 W1 q9 h__declspec(naked) void caller_closeimg()
8 h2 b1 Z: a. V{
/ V w9 w0 Y9 ~: _7 p __asm+ I$ a3 V1 K+ L1 E
{
3 Z" G. A& f) p& i$ o4 ?! g n PUSHAD3 `. o' ]& v* [+ G% a& p
lea eax, dword ptr ss : [esp + 0x38]( v# \4 e! i) r: F$ d
push eax
- b# {) J5 m' T0 f3 d' A4 j& u. E push dword ptr ss : [esp + 0x38]. }' f1 D7 X% @2 q+ T3 ^- F
push dword ptr ss : [esp + 0x38]
* o6 _( q# {) y lea eax, dword ptr ss : [esp + 0x38] |, q; I* V8 r5 R5 H# i7 k
push eax# Y& E( G4 b C
lea eax, dword ptr ss : [esp + 0x38]6 z# x8 z1 Q8 G8 |9 B
push eax
& b- ], m/ Z6 R5 n; U* A push dword ptr ss : [esp + 0x38]
6 S6 D3 v+ @3 e0 c; u/ ^* { call m_NewStatShow_closeimg/ g6 S8 G$ E8 y
POPAD
4 O" t- ]! c5 {6 E- M. m. A JMP D2Gfx::D2DrawImage9 ~, q) D# \7 r7 s5 J
}6 W: f2 r; h5 _" ~! R8 Z
}% v6 N2 O( S1 K& T7 A d" K$ Z! M
8 ]) @( `, ~8 }) g- c. q' g. q8 u
" }) [! J" J, d& |% j; X
|
|