|
|
转载
( }4 D7 l& A1 A2 gBY SJ6 J0 }3 [7 S2 |' Y
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)0 Q5 B% I* ?( r7 Y( \3 ` K( \
# F8 v( I/ A3 v/ ^% E% Y! xD2Gfx::D2DrawImage-10041
5 c4 r5 _( p2 i7 P1 b* c, G1、修复技能的背景(不需要可以不要)
$ T X0 l) d L3 z' aoffset = D2Client::GetAddress(0x77AA8);
: |9 Z6 P4 s# rMemory::SetCursor(offset);
) ?+ l. u1 [* l2 f& l6 F5 ]3 ^Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);/ v3 M! e: L" }* f. S$ X; A
- J6 y }+ M) ?- u$ f% b/ J
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
1 x8 Y5 A {4 X{
* F( e3 n7 O- ^5 ?+ ~ //Init data for print image ]9 X& H0 M- B" r. [0 f# b( x
sDrawImageInfo data;
) ~; u/ l/ i2 ~$ C' X ZeroMemory(&data, sizeof(data));# V0 Q S+ N. H1 Z. ?0 m+ c
$ a L; S2 H* `5 c
//print background
& H6 I# a1 P$ J# c) N" k J k setImage(&data, spellBackgroundImages);
+ e# f8 d) s, t7 c$ C3 Q L& ]: c setFrame(&data, 0);
7 f% m" k) H3 Q( Q4 E3 ? D int fixx = 511;, p+ V2 T# h9 N5 B2 `, g
int fixy = 9;
7 W8 h1 ?/ N6 h( ^ V D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);& B6 h6 d' m# F c, Q
setFrame(&data, 1);! i( l; A! e6 E5 c% w7 Z
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
" V, h' Z. U* O/ L' g setFrame(&data, 2);
" y( k' r7 C* D7 Q; ?9 K: S1 h& n* U& } D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432* e0 `+ ^; I0 ~2 d% h5 S, k
setFrame(&data, 3);
! F- E2 q+ Q6 }2 K/ P D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);, _' z/ p7 Q) W& J: U% W
}7 h7 \' r; D7 d5 U w) ]
__declspec(naked) void caller_SpellBackGroundFix(); C/ n% {" \0 G' F2 t' j/ G* e# K V( L
{5 G+ }& B1 b$ N9 o3 {3 [
__asm+ ]" z: H/ b& U- \; v% q; x
{
3 K0 I4 r# C2 N% m; x PUSHAD" e! Y+ k. V5 L
lea eax, dword ptr ss : [esp + 0x38]
' M7 k3 U# C5 \& E push eax# b% X/ }* H3 `2 e" \% R
push dword ptr ss : [esp + 0x38]. a, y! f7 Y) U) f5 {; B! z& X N
push dword ptr ss : [esp + 0x38]
2 j. i( y: m1 K6 w lea eax, dword ptr ss : [esp + 0x38]4 R+ f; W9 }6 M4 T$ S+ h
push eax' |4 j- W# z6 [ S
lea eax, dword ptr ss : [esp + 0x38]. I, B' S9 P! W( v% q6 F
push eax( e& W1 ?7 l0 O, `$ q
push dword ptr ss : [esp + 0x38]
4 G1 Z5 h O5 F I call m_NewStatShow_SpellBackGroundFix
1 D, d8 ? T! r# c! c POPAD
2 ?) H) H1 b. N1 ~+ Z' z! H! | JMP D2Gfx::D2DrawImage* T/ z6 ?+ P1 N( }, l2 s
}1 E# n6 m& |; h9 S9 m0 k1 o
} q' Y3 C# v m1 z
/ h7 L5 T8 N* v2、我们如法炮制小站的背景 ~+ _ V1 }& B8 C% H+ O* g! q* O
1 \ r% ]+ H1 h7 ?1 j3 k$ V9 P8 [
offset = D2Client::GetAddress(0xAB010);! F. S' h: T' y
Memory::SetCursor(offset);
) o9 W' u, z) \1 H i0 SMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);/ i$ s& T& E9 y' c' \
6 m' S( Y% }# P
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
/ } z+ z2 c5 B( i{% ?' ?* F( S6 W9 j! u
//Init data for print image2 p! c" Q' {3 T, }) F$ }
sDrawImageInfo data;* X6 G) q" s$ o- l8 H# |
ZeroMemory(&data, sizeof(data));9 ~! m; ^" k* e2 {; X" R9 C% s7 \
+ k* c% V. S8 P. ^+ ~. ^
//print background
- D; D8 i0 X) p setImage(&data, waypointBackgroundImages);
: P2 l3 C1 i9 W: g" l5 ]5 u& [ setFrame(&data, 0);: {6 j; R' U1 ?# j v$ N
int fixx = 0;3 ]! F- F! K: P
int fixy = 9;5 d% G4 }3 a9 v9 o7 ?, F& H! b
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);
4 C/ \5 ~! b2 P setFrame(&data, 1);
0 x% }( u q. W- o! t/ b* ^' Z D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
# V5 n: N6 @1 I& x1 m setFrame(&data, 2);7 r3 B# I' l5 w2 U. ~* _+ D2 A6 A
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432$ v- H4 Q* b, F) k4 _
setFrame(&data, 3);
- x+ |1 q- d- C/ ^: a( Y1 F D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
$ h8 p1 s) }5 x. P7 E' P* a3 ?) f; F2 n0 o9 p) C$ [5 d$ ~" l7 W
}
2 x) ~; F/ F2 H z3 b) o__declspec(naked) void caller_WayPointBackGroundFix()
% w7 c# _* O& x& c) V. o% t{: e* l- Y; \' h
__asm
( T X! c4 j: Y$ Z {3 [. ]2 ^" g$ c
PUSHAD1 u9 T+ p; O" w' H/ U& T8 q
lea eax, dword ptr ss : [esp + 0x38]
" n7 B3 k2 y: f% }. U push eax# y" q% T! T6 V6 L+ X& X
push dword ptr ss : [esp + 0x38]
& I9 L8 t6 E x( G push dword ptr ss : [esp + 0x38]6 I2 G- s ~; d1 F5 Y: ^
lea eax, dword ptr ss : [esp + 0x38]
7 v0 q3 {( k1 k4 _: h# R/ O push eax" x, v$ s7 K, _! r
lea eax, dword ptr ss : [esp + 0x38], h; T3 n# K/ J& X9 Z( i
push eax
5 Y/ b4 K: B' R4 ^' w4 k push dword ptr ss : [esp + 0x38]
1 _ [* n- M; A: v# ?) E call m_NewStatShow_WayPointBackGroundFix n& ~2 Z7 U4 {; P
POPAD$ z, H5 n' N+ ?) z( d* t0 | s
JMP D2Gfx::D2DrawImage
/ p+ E/ |9 J. R U' u( Y) l/ n( V, i }
9 U4 D: L: I! v$ N2 V% A, r, u}
% n$ o* K) {' A8 {
3 b" F# \! y6 @1 _7 m3、以下可以搞16*16超级箱子-腾出我们需要的边缘
* B! t( U* T) }2 M腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)4 Q8 M; {, N. k1 b q+ N, Z
{
3 A- E7 R* C, v$ f* \ class D2MultiRes : public Library<D2MultiRes>
5 x4 q% Y. I0 y' P( ~2 E4 Z/ { {5 _+ T% p0 i5 ?* h8 \
public:
' }4 `! z# q: M, s& l( F1 I2 K static void Init()3 n0 z3 P3 q+ D/ n& e) [, j% J
{
4 m, V/ Z$ r- |# K Name = "D2MultiRes.dll";
) @ e, R* i! c0 x" o Offset = LoadDiabloLibrary();' Q$ H2 [9 n1 h, \7 W
}! n2 f U8 a) O, {9 Y0 X
};
6 T- x9 ^ p7 A% `* e" k D2MultiRes::Init();
) i* u* }3 U( x4 W, w. i+ z D2MultiRes::HookLibrary();
! X! N v, O! P( v* z4 v' S
$ q- z' K7 x* H. M! ?% Q
, _9 ^* H$ g& B- y! d MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);- G2 R- U9 [! _
Memory::SetCursor(MiscFunctionsOffset);
/ v, E; ~0 E. Z$ U Memory::ChangeDword(0x1b0, 0x200);
# x" p( d" \' b, E7 v
' C# Z z; }4 [/ P0 U" c' g: w9 q: K/ V% |' [3 c! y" [; M6 L
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
# K1 @& V* x" i& j* U$ a6 N2 b, M Memory::SetCursor(MiscFunctionsOffset);) s8 ~% O* m6 U, e% ~
Memory::ChangeDword(0x140, 0x200);
2 M0 e- v9 E6 z3 _
% z5 C9 x/ j4 o7 x) B1 \. z$ ^6 {: E% y; A4 s5 z m# f) W
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10); u7 i8 ]; y% b2 m: k
Memory::SetCursor(MiscFunctionsOffset);) |( W( g5 _$ V8 @
Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块' w2 @* q# G7 N6 O( X* L9 f5 b
; C8 `: e1 F' Q9 P+ u MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
( [* S0 X9 s% O& d, M* A3 l7 n Memory::SetCursor(MiscFunctionsOffset);
" P( o- P6 h1 r1 Y- u1 R& V Memory::ChangeDword(0x200,0x299);//下边缘 299最大
6 T3 M. T$ N/ E' H o5 ~( a/ e
+ `0 g1 b9 b$ T2 p! F MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
( v. g/ I+ f+ N# D1 v6 P ^5 u Memory::SetCursor(MiscFunctionsOffset);
% M1 W, S" E0 n. X Memory::ChangeDword(-0x280, -0x400);//这个不要动
8 U( h, _2 |: f6 f6 H& g }
0 X$ z( R# L" r: G7 {
/ \5 ^' {0 x4 J/ W3 Z8 k+ B$ E+ C A4、快完成了,是不是发现金币啥的位置不对??( ?# B0 O- Q w& O8 Q* ?
. ]0 g5 |7 Q2 Y//这里修正我们的装备栏( Y( q9 ?, j0 q. i* e
offset = D2Client::GetAddress(0x99B6C);; H0 c8 ^( E" A w" Q1 {- u0 w' t: H
Memory::SetCursor(offset);1 L1 V' s$ j2 ^; P0 a' t3 n
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);; V# F8 V k4 I! K# X- B
# a2 e1 ^! _! i. E3 I6 D) z" g offset = D2Client::GetAddress(0x99BA7);
- f6 y) T9 c% {2 s2 C6 I. y7 a# `$ e Memory::SetCursor(offset);, N* u& |% W: g; _2 [
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);$ s* \' b8 r& B# V* ~1 f, U
3 E, e, Q9 i6 S4 t offset = D2Client::GetAddress(0x99BE2);. i5 H7 H' q w/ r$ m" C( l! q
Memory::SetCursor(offset);$ P+ s8 Y% ^, [) c% E7 i' Z- h
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix); i- w1 j/ N+ `* w' q
( @; b, } E$ L# U offset = D2Client::GetAddress(0x99C1C);* E9 n+ M9 U |
Memory::SetCursor(offset);% M) X4 F0 A# I
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
# X, n2 l4 K, @) Y9 C( ]) O
& S/ m: z6 h& ~3 d W //取消两个popup,偷偷懒不过分) ^6 @; {2 [# `( M* G* v
offset = D2Client::GetAddress(0x9386d);
8 y5 ~3 ]$ a; ~9 G# s9 c Memory::SetCursor(offset);0 s x- L) N7 J$ p5 y
Memory::ChangeByte(0x8b, 0x33);
7 p3 s; G4 I: ?1 | Memory::ChangeByte(0xc8, 0xC9);
' i, @' _2 a$ R5 D% C offset = D2Client::GetAddress(0x9390b);
' T3 q U, v& f# L, D Memory::SetCursor(offset);& Z$ n5 u3 w/ Y7 Y- m
Memory::ChangeByte(0x8b, 0x33);
/ V8 S0 A; |0 G B5 q# v6 \+ \ Memory::ChangeByte(0xc8, 0xC9);: n @' ^/ u, P* j# K( m
, l' Y" s1 ~7 v a2 X //修正提取金币' i& m. T% ?# m0 D
offset = D2Client::GetAddress(0x8D3E5);
# q- [" v! m0 O4 a Memory::SetCursor(offset);
/ B6 l- ^; W H$ d& u5 h: s Memory::ChangeByte(0xA1, 0xE9);. Y% s$ B& Z- m* Y
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);; }8 n2 b4 ~* f4 m0 ? n8 H
& |, ~$ K4 x4 f! I1 k" t; K
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);! ?! V/ K& R8 c
Memory::SetCursor(offset);
; ~! H' L. p1 e' P% H Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);' t3 ?& M+ \, \' f% o( v# ?4 r
/ c" I [7 j8 ~7 Y3 J, m offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
$ K e6 q; E* t Memory::SetCursor(offset);
/ {+ _9 `8 R' V7 w; ^ Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
. U. g* u0 U& [/ d' `+ C' M4 s8 q* @' @& V
//修正关闭按钮: X" L9 S7 I- x+ e
offset = D2Client::GetAddress(0x8BD90);
. R0 p; w$ z/ }$ s2 I! i$ w! F Memory::SetCursor(offset);
9 [0 B& ~, k% ]+ u Memory::ChangeByte(0xA1, 0xE9);7 u: l0 e# x" U' o; G, Z
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
# J3 y# l5 g% C% X5 Q1 T2 X* S- [9 ^5 J$ R' w$ A3 N! L2 \
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
( }" h9 M" n5 X$ a( ? Memory::SetCursor(offset);$ Y. D: h; u) Q$ l; p
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
4 q1 O, ]# }. w F
! [* n+ M! H& X5 V& j, s, H r
, S! u2 Q& Z# I) P; S y; h//以下是细节
4 V5 ~! J' T/ z#define getXGoldCoinFixBtn() RX(0x2d0)4 ]' W, d% n' X& `$ E5 {
#define getLGoldCoinFixBtn() 32$ V( l) L) G5 C/ {" C+ x- q* y
#define getYGoldCoinFixBtn() RY(-0x59), A$ v9 P, d+ B! K3 t# i- ^+ E
#define getHGoldCoinFixBtn() 326 U4 b9 d- }+ n: v& ?8 I( {" M8 z
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
; F7 M3 _ g O" ^* S' [+ d5 y* T+ S0 ?! F+ C3 j. R8 o* m
#define getXInvCloseFixBtn() RX(0x3db)
1 V8 _' ? h1 R9 X, t#define getLInvCloseFixBtn() 32
& a1 N0 V5 z% Q/ G#define getYInvCloseFixBtn() RY(-0x63)& V* _! P P3 Q! d1 D( h
#define getHInvCloseFixBtn() 324 e2 X& t6 _, Q0 o
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())$ H! a! e& C q7 W1 S- b9 o
% U3 `5 U7 v- d6 z' M: r
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)+ z& k. k$ z9 f: m
{* ?& G' C+ `/ a6 a9 C, P) y4 R
DWORD mx = *D2Client::ptMouseX;# D! n- ^3 x1 p" m4 J1 W
DWORD my = *D2Client::ptMouseY;
3 V( [* R1 _9 e. h. ~2 ? if(isOnGoldCoinFixBtn(mx, my))! Z5 L2 I! {$ v: D G
return TRUE;
9 C- N2 H: k( V4 b- Q& ^- c c return FALSE;
! L2 r' w$ Y; K' w: }. }}% c" j2 {( f, ^( p( C; ~/ }6 {
__declspec(naked) void caller_goldcoin()
/ F6 z5 n" }7 y0 a{! `, E Y5 N+ Y) v
__asm
- @: G; \: t- }# D1 V {
* A6 {. ~+ c1 _3 a1 O, { push ebx) j5 o% e* }4 q
mov ecx, esi
, v' g/ T7 K" e: l/ e) F2 U mov edx, edi
h2 e% F0 ~6 |9 H# A3 ^- S call m_NewStatShow_goldcoin
" \8 z) b8 ]. p+ [' {7 J" r. [: m$ g pop ebx
6 r+ d! Z+ m+ c% f0 I) v9 F. F' t o pop esi7 @9 ~8 |7 {0 f0 t$ L, P+ C* A9 G! t
retn' U: ?7 w+ `7 Z: G! K
}
5 t0 R# W8 A* s! o5 l+ X4 y}# h3 R5 G; y n4 ` m n
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
4 d8 [8 u. p4 D2 C# u" l+ H/ ~{% ?% i* m# E7 G8 U" }
if (*nXpos > D2Client::ptScreenSize->x / 2)
& H: @3 |5 y$ k' q6 r g4 V5 M9 ` {, X! L+ D3 `# D0 p6 j
*nXpos = getXGoldCoinFixBtn();! _7 q, e1 M3 R1 R6 c
*nYpos = getYGoldCoinFixBtn();0 U3 ]+ y# v" S
}3 G1 o3 K5 T5 O8 v2 H
}
D% g6 c( y% A4 c# M8 ?__declspec(naked) void caller_goldcoinimg()
4 Z3 V, H, R) E" i3 O; ~$ l; D{
" R4 T1 z2 o* d, \/ |3 T# u' l __asm) u# T! e" s. V" b& l% n
{/ Q5 C7 u$ o; |
PUSHAD
) ^( a/ m' y. _+ O9 s lea eax, dword ptr ss : [esp + 0x38]: z8 _) k6 k0 F' u6 J( z, H
push eax p& H( b3 C* I
push dword ptr ss : [esp + 0x38]7 Y( r5 y" A9 o9 I
push dword ptr ss : [esp + 0x38]: l/ I; O G& g, B/ }3 y
lea eax, dword ptr ss : [esp + 0x38]
+ L+ Y6 T. A0 f: P push eax
5 w* o, P2 I% ~. |2 y+ z lea eax, dword ptr ss : [esp + 0x38]! a: V" ^, G9 h
push eax H* W* G2 n$ Q x& l- F9 ~
push dword ptr ss : [esp + 0x38]$ Z$ u: E# w8 r
call m_NewStatShow_goldcoinimg
7 r: Y' v, i k5 T4 v POPAD
* r" W' @4 q2 G! T JMP D2Gfx::D2DrawImage
" t& t; @8 @/ P! T6 A }5 ?4 w8 c: F# `3 R# r7 D
}
3 }3 y% U5 Q& Z7 X7 ^9 b! z: VDWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标$ W7 `+ a; { ^4 J2 v$ D
{4 O0 s5 j' g& i( K- L
if (x > D2Client::ptScreenSize->x / 2), G' ^& E6 V0 P9 P' A2 e
{- g Z% \; G( `+ M( [, j; v% f
*y = getYGoldCoinFixBtn();
+ Y7 P0 p. x+ {' ]' X return getXGoldCoinFixBtn() + 32;. K/ n+ _4 D# s$ N# L
}
Y( X' l: t; R. G1 S return x;
+ d, z/ g8 g8 N! {}; J1 D7 g5 x8 N7 _- Q
__declspec(naked) void caller_goldcointext()' W8 ]$ D: i. a! _. r3 L# v
{
7 m7 T9 _& H( c; s6 b# s$ N __asm3 v2 T# b J9 F. P
{' t8 h6 j7 ~4 m/ w6 o7 K
PUSH ECX2 ? s% R/ S: }( g. u/ ~
PUSH EDI8 v) B8 b; s0 c w0 X7 d( a
PUSH ESI
1 ]/ A- l+ Y6 w& l PUSH EAX# M* d7 R/ n% S5 C1 a
MOV ECX, EDX) m& M; w: k2 X: [. ^+ V7 _$ c/ \3 }0 X8 k
LEA EDX,[ESP+0X4+0X10]1 R9 @0 g+ ^, s5 C# C
CALL m_NewStatShow_goldcointext* K, O; W5 D5 G1 i) [9 l& w% @6 n
MOV EDX,EAX# \6 p: Q) b( _& \+ t* N1 Q* d
POP EAX
. ^( U, G+ F- b8 u B' D. @1 h POP ESI
+ }; T0 u8 }; { POP EDI
" l) z% d+ M- a) \ POP ECX
# }- Z7 E6 H: I* l- ?7 P jmp D2Win::D2PrintString;7 V3 I. N+ Q$ N6 ?
}
1 G* m* d. @ E+ {8 S}# E5 k1 J4 ?8 q. z5 r; |8 `0 ^" E: K
* T/ W, C' e1 K! B8 UBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)) q, _- K" s5 o' Y5 V9 U* ?
{
% ]5 @! L' W9 l- W0 Z* X DWORD mx = *D2Client::ptMouseX;1 w- e& O9 O* n J( Z! Y
DWORD my = *D2Client::ptMouseY;* R7 s2 R- q, w B$ s
if (isOnInvCloseFixBtn(mx, my)): y7 w( j6 R3 ^
return TRUE;
# Z: \3 J6 e# {4 l5 @3 @$ i return FALSE;
}- B( |" r* W9 @* j0 Q}% G" i% s- V8 v$ i% r; {# l' T
__declspec(naked) void caller_close()6 A% ~# z( q$ y* a3 G; F; e
{1 T9 H. X$ q/ c$ p! _
__asm& R7 p8 A* ?5 F$ g* q3 J& J
{2 z3 \( f) }2 j0 Q8 y5 N2 ?& F) k1 Z9 D4 a
PUSH ESI& a0 ^* [* Z9 y5 p
push ebx
X3 A1 O3 S6 q call m_NewStatShow_close n- ?' C! G% `, _
pop ebx
' v; Z5 `5 _ m, l# J8 @$ _8 B pop esi7 ^+ H0 [/ f8 P3 |5 q9 `8 ?& G
retn
& r1 a1 A% J$ D( S1 {! R }. k, d" F" _4 S% l. H7 m1 k! s( R, Q
}1 |/ x* r* d! i( T1 R4 p u1 m* Y# O
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
2 d& W6 G$ s0 E{, ?2 I' _1 Z; z% c
*nXpos = getXInvCloseFixBtn();+ z/ Z$ c# s" e" G* `) ]( B
*nYpos = getYInvCloseFixBtn();1 X0 s, ?- ~$ o- n. G; M
}2 E L, A- v6 E/ A$ {
__declspec(naked) void caller_closeimg()4 T2 R$ M3 p. U( i% M4 L3 q
{
9 Y) t9 S, ?2 I6 l __asm
5 @( H9 `+ Z6 v3 y' G0 { {; P% a# F6 V8 P: l9 [
PUSHAD
/ r* e7 V( J" p a) X g lea eax, dword ptr ss : [esp + 0x38]/ i+ `% _& X9 E- U' b- L% V" F
push eax
# q" W( F! X3 t7 D# T( V push dword ptr ss : [esp + 0x38]
; c) `( V6 b2 {; D6 e push dword ptr ss : [esp + 0x38]* r7 C+ O- X# o. I
lea eax, dword ptr ss : [esp + 0x38]
" W; c7 F* G: u J9 x2 n8 O. T push eax4 w3 K, `2 T% h8 F d
lea eax, dword ptr ss : [esp + 0x38]9 K: f9 O; J0 `6 K3 I- B
push eax% E0 _% o& L; _
push dword ptr ss : [esp + 0x38]2 N# l! g) u. O- w/ ?5 _
call m_NewStatShow_closeimg
! E A- P* ~% x" I# H$ O POPAD1 u6 Q& q0 i. O5 V7 Q/ D& B
JMP D2Gfx::D2DrawImage0 H& w/ l. t9 N2 R
}: `1 z: K9 Q: _4 J* g: G6 n8 n
}
% `6 x6 v7 {( d; ~5 `1 h+ R* }4 m% q! x7 e/ U9 F5 W
7 f- t& A! s" ?$ S3 C5 e! b |
|