|
|
转载
`- v# s2 j. E9 o) W* \! {BY SJ) |$ T2 B& c& B* ~
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
! s. B6 V8 R5 m& X1 ~% k( [5 g9 C9 {' |5 k# C# O# P
D2Gfx::D2DrawImage-10041- Z- M/ q: u( c5 Y# a+ ]1 c
1、修复技能的背景(不需要可以不要)
0 }3 V4 @; \0 t# T" noffset = D2Client::GetAddress(0x77AA8);
9 i% ?; n* M, n, B8 R$ oMemory::SetCursor(offset);
/ F) ?: V: x% p2 K, h- vMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
) v T# }( I1 {7 n$ f* a7 i) `0 Y4 J! R! J/ @3 `5 l/ O% t f# F) {* m
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256]); V1 L3 U0 ]1 S5 K4 }6 R
{
5 P8 k2 N$ C1 k$ p //Init data for print image( {8 q2 b0 r4 U5 r
sDrawImageInfo data;
1 C% O6 f9 W' q, G; p ZeroMemory(&data, sizeof(data));
9 p9 M- U& b' X" e. W* |' w# v R$ m9 p f' Q. B Y6 W
//print background; Q: P; N1 K' [9 V9 I
setImage(&data, spellBackgroundImages);
" G5 r2 E! w# c setFrame(&data, 0);
, h/ I, w2 V0 {3 `+ D9 K int fixx = 511; L8 y# k; K) t( h( ?" @* A
int fixy = 9;0 n" J( h r* O7 x2 p
D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);
+ N- i' p8 k3 V: ^4 {' }, z setFrame(&data, 1);' }1 ]1 O' x9 f
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256: `( _' T% J4 u0 [/ T' P6 y
setFrame(&data, 2);
. k ]. O2 e) g- ] D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
/ L4 [5 F% B- K3 C setFrame(&data, 3);& u' q: C/ |: O1 b! r' c+ F" e2 ^
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);3 I( P) l8 y) }- x5 Z& n
}
' p9 j1 y, t0 b" O# L__declspec(naked) void caller_SpellBackGroundFix()8 I0 g8 v8 I% Q {' _* _
{5 O f0 z( Z+ M. {
__asm! L1 ?, w2 a, u0 v
{ o# O, J# O" Y% E) B% q$ e7 {
PUSHAD
n/ n1 O# D) z' k2 d lea eax, dword ptr ss : [esp + 0x38]4 s- Z' u/ R" K1 O6 K5 I: e
push eax
- o' a7 o" t9 ^8 ~0 @ push dword ptr ss : [esp + 0x38]
+ Y' c# r' l5 A% w- a" E push dword ptr ss : [esp + 0x38]+ h6 O; o: a$ g- H5 \; R W
lea eax, dword ptr ss : [esp + 0x38]
3 ~$ \: e9 Y. R! h7 q* _ push eax7 V* c& M- r" K( \5 |/ q
lea eax, dword ptr ss : [esp + 0x38]
, S( o3 Y: O$ V7 N( t* A push eax. [( i5 Y6 z( v) [
push dword ptr ss : [esp + 0x38]
& K7 o9 A9 \( _% _- n2 n call m_NewStatShow_SpellBackGroundFix% t" w' u5 ]) k" \, q
POPAD
$ r0 P* g) o1 a- t2 `: i JMP D2Gfx::D2DrawImage' [: p6 P: W: @
}6 _3 H: `& N+ N5 M# S/ J w
}/ X# i& L- j1 H) y4 z5 [# C
! D* K% W) S0 T/ W% C3 F3 P' a, N! a3 g2、我们如法炮制小站的背景
3 d" h! q! z: Y# W
3 D* T. q! l; a* r2 u) J7 B& ]offset = D2Client::GetAddress(0xAB010);, \! R, |& b% z: h/ z* c
Memory::SetCursor(offset);) `8 r2 g, V- r" B4 v
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);4 I/ s. j: w% d$ e3 w/ P
, P5 w6 [: O6 r9 s
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
. b; J, _5 f% b1 @' C, L2 m{- x5 u0 t" }0 j* c% t
//Init data for print image5 B _0 O" }0 s- L! V
sDrawImageInfo data;( E5 `9 Y. e8 b0 {. s) L
ZeroMemory(&data, sizeof(data));
$ B5 ~" R$ b1 x( t) D7 y
& E& j, }) [6 r/ W3 ]) O+ V //print background( R" m4 D) F2 h: C$ B# j* Q; ^
setImage(&data, waypointBackgroundImages);
' B: O; c4 C$ u! G7 x7 x setFrame(&data, 0);" D* h6 p) d- P! B6 R
int fixx = 0;/ e5 i1 v1 [& u- z. ^
int fixy = 9;5 ~; C! \4 Y2 I1 l& L7 Y3 G% P! X: \
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);9 H' h7 ]) s+ ^8 u7 I
setFrame(&data, 1);
# W, V3 J& W3 M; v+ @# b% @$ K. I: | D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//2569 M- \: Y% X+ }( A& m3 w, K8 V
setFrame(&data, 2);$ f# r. }6 b" z6 q9 [. n' s
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432( A" e4 g v5 K. `
setFrame(&data, 3);
' k' ?9 m" s3 g D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);+ o9 q' L' e; u% o
1 s$ i" `1 t& `3 g+ G# \}
4 f; W3 a d) u/ b1 S) D__declspec(naked) void caller_WayPointBackGroundFix()
; Q4 l/ P, D2 b! D2 w M f{: I1 K0 R' A- ]8 R x
__asm! [# ~5 N: ]; n3 a4 T
{
1 |8 r2 { f/ Y9 q PUSHAD
$ U; Z4 i$ S7 |( D0 ? lea eax, dword ptr ss : [esp + 0x38]
" n6 r2 Z1 f( K/ ]( V( }3 c/ V push eax2 ^: \, k3 f! c _% n
push dword ptr ss : [esp + 0x38]
! W, d4 |. W# x push dword ptr ss : [esp + 0x38]. x- f# B5 p# o: o$ k
lea eax, dword ptr ss : [esp + 0x38]9 D6 J1 ^: T: w7 }$ }8 _
push eax$ U0 v' r$ f" Y a' M
lea eax, dword ptr ss : [esp + 0x38]
' H. ]- c3 [. t1 L0 w% g push eax$ w' x0 D6 M6 ]$ C
push dword ptr ss : [esp + 0x38]
& z7 D' J! Q# d" p) O! b8 S) t call m_NewStatShow_WayPointBackGroundFix4 R- _5 V4 B w! s+ y6 s: X2 Q
POPAD
+ z8 e& v0 [% J7 f; C% ?: ` JMP D2Gfx::D2DrawImage
9 G& |1 w/ \, n, a- M }& m! D9 j! B U, d6 g
}& K% E5 z" L8 b5 r: H
6 s( p- p7 v) F) y2 g! j7 l3、以下可以搞16*16超级箱子-腾出我们需要的边缘) g0 k" _4 C( q( z
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)4 j. o& w+ Z/ S a7 ~
{
& }$ b+ O- S% A) A ~4 j! r7 A) g. N class D2MultiRes : public Library<D2MultiRes>/ G3 N. R+ S7 }, S! Q# j2 i# M
{+ Q8 i6 t5 |# K- n
public:/ V, M, ]* I q% _* u
static void Init()3 @1 s0 T% H' i, g0 q7 @4 C9 @& Q+ b( w
{
/ { O5 Z1 [. A/ e" N8 o; I! } Name = "D2MultiRes.dll";* W; S, }$ ^" A1 M# j* R4 ~
Offset = LoadDiabloLibrary();
7 }& I7 j. i7 `7 h }
6 Y% I$ j6 k- k& O: x; k4 G };0 T+ m6 m% |" V+ p6 {9 u- N
D2MultiRes::Init();
0 t' S0 @9 Z2 z: l# {! z D2MultiRes::HookLibrary();* ^' m9 {8 U9 U% s
0 U7 ?/ r6 B* A5 d g: n
+ {0 b: U% d# p* e
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
. o) n; M# }: p+ N/ H" G Memory::SetCursor(MiscFunctionsOffset);
: ?( k7 n: N" e2 C" W0 D& @ Memory::ChangeDword(0x1b0, 0x200);# _! |! ?, p) r, ^$ v
8 I3 ` s" D1 g: x8 d
" @3 N) Y! m( f
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
( r+ s: q3 z+ }! }1 R Memory::SetCursor(MiscFunctionsOffset);: J% n+ m& ?4 B
Memory::ChangeDword(0x140, 0x200);
+ w6 ?1 Y4 S( q7 f: _6 B9 m- j! y* S7 e6 q# E8 _( w t
! K) V+ z. K7 ]3 N# I% G' U+ ~) N' b MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);, E' l: \# Y2 }
Memory::SetCursor(MiscFunctionsOffset);
) A j6 R& I& G( P2 o Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块- f- C- h7 k+ y# ~/ g
2 l! z" b/ B W MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
' s! L8 |1 j% {) D& j+ m7 H' m Memory::SetCursor(MiscFunctionsOffset);
6 p# V3 x/ m& K# h7 b Memory::ChangeDword(0x200,0x299);//下边缘 299最大
6 ?( q8 M& B8 Z4 k# I
' i: r3 R' g1 @ @7 b O MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);7 f. S2 g5 q+ \ T1 F+ g7 e; z% L. B
Memory::SetCursor(MiscFunctionsOffset);
0 j# S* Q& Y0 T0 }/ Y Memory::ChangeDword(-0x280, -0x400);//这个不要动
8 s$ Z' w8 y* i% V& ~+ E5 n7 O- L }
9 O& w' S) c+ E E- n- ]- o5 i# H# U' f4 L) ^1 z5 l
4、快完成了,是不是发现金币啥的位置不对??% l9 m; p' _" `, z8 o
J ~, x+ M. c//这里修正我们的装备栏' g9 W+ P+ J9 Q: S
offset = D2Client::GetAddress(0x99B6C);
6 x' Q0 b) Y5 V8 F3 N3 A2 h Memory::SetCursor(offset);
w" p4 r5 p1 I, d! F Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);. }' e3 {* p; Q1 M
{: f9 H% H2 l4 {) a2 |. {: O offset = D2Client::GetAddress(0x99BA7);; k$ e ~9 x) B9 e
Memory::SetCursor(offset);
0 i4 i0 I9 f2 N( F( b5 ? Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
" _( _8 Q" d5 a6 \3 ]; {- Z' s, f6 y9 M& X
offset = D2Client::GetAddress(0x99BE2);
0 }' M8 {. Z$ b Memory::SetCursor(offset);
% V x7 I& R: c1 O Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
6 Q5 W/ Z4 R3 W! \( a) |4 q6 n3 q9 n
offset = D2Client::GetAddress(0x99C1C);
% I' e+ [) {9 G/ z! b# W5 o Memory::SetCursor(offset);
V& m" d3 M! S% H/ B Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
, K8 X( c8 g k0 L# n3 q
5 y, A* A7 T' P8 P //取消两个popup,偷偷懒不过分
N/ A+ ] P0 D offset = D2Client::GetAddress(0x9386d);
, o3 ^' m R) T5 R Memory::SetCursor(offset);+ {- c6 f1 H0 `
Memory::ChangeByte(0x8b, 0x33);+ I2 V0 v& V9 ^0 q4 S
Memory::ChangeByte(0xc8, 0xC9);
. a4 T# I) \; \- Z offset = D2Client::GetAddress(0x9390b);: R! P- A0 } j1 {9 @8 i
Memory::SetCursor(offset);
4 k; y; R4 N- {5 g Memory::ChangeByte(0x8b, 0x33);
0 B. [" p: F d2 P+ p4 C Memory::ChangeByte(0xc8, 0xC9);
7 w5 b- d0 n: O7 Q+ e& ^8 G5 u9 `$ A# C
//修正提取金币* G, o/ O5 G o9 u1 J7 D
offset = D2Client::GetAddress(0x8D3E5);- X9 U0 {3 c0 A5 t0 B( x
Memory::SetCursor(offset);7 t4 ~: B, l/ q8 t9 Q9 F
Memory::ChangeByte(0xA1, 0xE9);# |( P! c. W% O8 h7 B) N1 Q" _) I
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
. S2 G, ]4 E$ g1 A4 X
$ |( M, }/ n( V. A. T" |/ m7 q offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
c) @5 \+ A( a. ^$ m Memory::SetCursor(offset);# w9 H0 B8 H& z5 Q
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
5 Y7 f0 r0 c5 @3 C, x. [5 S) Z6 V+ Q5 u% a
offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
- X4 E- V, B o& H Memory::SetCursor(offset);8 U% N4 V2 X8 k6 A+ u6 Q) F
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);! y" S+ U1 K- i+ e; E
+ {) d$ k- [" ~- E
//修正关闭按钮
- ]/ X3 o1 h6 D. m% E, Z& \' s offset = D2Client::GetAddress(0x8BD90);& I n% F' e' B- Q$ w; d
Memory::SetCursor(offset);8 }& |9 o1 j( r- {: A' f, O/ _& o3 @( h
Memory::ChangeByte(0xA1, 0xE9);2 Y; ?* n: b7 {
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);
6 {% K; ^ M6 d) F' w H
5 |9 U+ X" I Y0 m/ D$ ]% S/ y( g offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
8 J3 L" Y' G' k9 Z/ {) _ x Memory::SetCursor(offset);; {8 q6 `0 @7 e! ~+ G7 C. D% U. i6 v( m
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);5 H9 J5 f* I+ Y! P4 x% \$ B
4 Z7 l2 I, L o
7 e3 l! ^9 @8 E$ F//以下是细节' T* _4 U" i7 O, E
#define getXGoldCoinFixBtn() RX(0x2d0)
- C5 X. j- l& X1 z#define getLGoldCoinFixBtn() 320 Z( w; [3 A% |( ~! {
#define getYGoldCoinFixBtn() RY(-0x59)
3 b: Z; c& G* q3 e ^; u#define getHGoldCoinFixBtn() 32
f7 L: T& p$ ?#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
% j; g- h0 Q# V- d- ?% a- Q2 w* K5 s$ u; W; ^
#define getXInvCloseFixBtn() RX(0x3db)* ]( U( ` ?( M' f, r; J- P
#define getLInvCloseFixBtn() 32
5 @3 {, K. N [% g1 X#define getYInvCloseFixBtn() RY(-0x63)* a7 S5 F' [3 L0 m" [: x% ?1 ` G
#define getHInvCloseFixBtn() 32$ I. W8 x4 N* l7 y5 Y8 r7 D
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())5 A6 E w0 r( r, {
% [$ w" a: c+ ~2 q9 @6 [BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
) c: `5 X6 O3 {3 L: @+ Z1 w{
5 Y' a& `# L$ E* ]5 }4 a& s DWORD mx = *D2Client::ptMouseX;
: F$ u. z# R$ |1 `7 ]& L9 k" A DWORD my = *D2Client::ptMouseY;
# F' h2 `. S) @4 t! W6 z( z if(isOnGoldCoinFixBtn(mx, my))
6 J$ o! q, U+ g' n W% p return TRUE;! [2 t) _/ v) ~. m
return FALSE;
) o5 C. H4 Q8 M1 q k! [1 n}
' @) W3 j5 R( u, Y__declspec(naked) void caller_goldcoin()$ l: H# A, r8 N" ^2 P$ L
{
9 n$ l- ~0 l, I) H: e __asm
* q2 @! h# n' I- Y+ K; ? {. E+ p" q0 X0 R) d
push ebx
* ]. ~& Z$ M+ J# Y* P' C5 o5 M L mov ecx, esi
6 K7 x1 @# x5 v$ b mov edx, edi
+ |- k5 m. S* T call m_NewStatShow_goldcoin
: n" h6 l$ A9 l6 t% U+ M' n pop ebx; N2 i6 k" r# U0 J" z; t4 P" m1 S
pop esi3 k. s1 Z1 ]. [) v3 m
retn7 R& I$ M7 |! ~( s
}: y2 {. ?. O% [
}
" p, c; k5 B D( T* m7 N+ wvoid __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256]), M/ I$ y1 _9 _* h5 o
{: Z5 `1 l: B8 e
if (*nXpos > D2Client::ptScreenSize->x / 2)
$ d; W% ^ ~. l {
' W/ i* j8 x, [/ { *nXpos = getXGoldCoinFixBtn();
% g% N/ Z. I( A/ B3 D7 S! ` *nYpos = getYGoldCoinFixBtn();2 s' ~* O. n( [3 J
}& M& K) ~/ W5 u( B4 J" r
}9 ]* y9 p) Z( S
__declspec(naked) void caller_goldcoinimg()
) `, N4 v: d7 Q6 R; ^6 j{
. I/ B2 @4 v7 Q' v __asm
5 }, X2 \1 \/ Z& A3 Y7 t$ G* Q% r {
; D1 c6 y* _9 _$ k' ]6 L3 m! m: x, O PUSHAD
" Y. \/ h, F% q+ W' Y) e0 k( k% R% _ lea eax, dword ptr ss : [esp + 0x38]
1 R: R1 @0 |6 A- G" z" \; [ push eax6 y( g5 d: x2 q2 r
push dword ptr ss : [esp + 0x38]; l- q/ b W, @
push dword ptr ss : [esp + 0x38]
% ^: y( H1 M4 [: ^3 l lea eax, dword ptr ss : [esp + 0x38]
0 U- d/ Y' b6 T5 \ push eax
$ V7 j8 c! k/ u( A' a( R+ ?7 ? lea eax, dword ptr ss : [esp + 0x38]
( y5 c8 R' Z) k push eax" ?, w+ D( ~# V" M3 o: u- ]) G5 \
push dword ptr ss : [esp + 0x38]
, |, `" Y; z8 y' F8 T9 T call m_NewStatShow_goldcoinimg
# [4 f9 K; p3 ?/ j. c: Q POPAD. \" I G9 X2 J) ?" Q
JMP D2Gfx::D2DrawImage
5 g9 r) Y3 T k" L8 q' ~2 \8 g( k }
* c( Q& c0 q. d7 F, Z$ x( s}) q$ n8 j$ l+ \8 O
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
% q7 P& H( a6 |; G7 [/ v{" O# W4 u7 Z& o$ ~7 ?
if (x > D2Client::ptScreenSize->x / 2)& `. `& U' p; P% a; h/ z* P2 ]2 z
{
+ U! C" b$ e* E2 d9 q *y = getYGoldCoinFixBtn();) w$ z1 h" d3 W% y4 Y/ Q
return getXGoldCoinFixBtn() + 32;
7 a4 o+ K) I: C$ P0 i- K# ~8 b8 H& w( z }' ~$ c0 [: J# e8 U, V; K
return x;( J# O, I& L/ g1 p& W4 m
}* g1 U' q9 l% c7 k. x
__declspec(naked) void caller_goldcointext()
\. @- ^, I( V9 x7 j{
, V/ z# F! e. G- g: p: S; x7 S. N! Y __asm
; Q6 E) c$ N" D5 ? {
, e! \: j2 F- d! h PUSH ECX: @$ t$ U, J$ b! s' s8 \: G
PUSH EDI
! `5 E1 }- f6 V0 h( t5 z0 p. y2 n$ ~ PUSH ESI
7 x9 P. T2 `; ] k PUSH EAX
0 r1 g+ Y' o+ q4 ~3 W MOV ECX, EDX
' A. [# c6 w& D* ]% S% U LEA EDX,[ESP+0X4+0X10]
# @1 {6 u# h5 A( F' D& p' e5 L- H9 r CALL m_NewStatShow_goldcointext
+ [; V# E( {* { s6 z MOV EDX,EAX. I) r% |& f" }% v. Y5 Y" i
POP EAX* T S, ~- a' S% I' s
POP ESI
E: n) ]* V3 m POP EDI% C' V5 \' w3 x/ H
POP ECX0 x; o/ z- _8 n& k4 s9 L
jmp D2Win::D2PrintString;* Y1 y; _4 }; f4 [& P7 ~
}
. c5 Y# N% p: m5 d& p; I! C}
0 a V8 ?2 b: }0 Y. L& e, _$ j; F' U& c* I0 d
BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)( e2 `# @; ]. a( V, {2 X
{7 m7 U% n) u2 p1 F% I ?
DWORD mx = *D2Client::ptMouseX;
0 R$ @) b9 }7 Q# \* N8 \- Y DWORD my = *D2Client::ptMouseY;
# V3 n6 t4 ]# w: S$ N2 m. v0 W if (isOnInvCloseFixBtn(mx, my))
8 b5 y6 J! B7 H! c4 i4 \ return TRUE;! {6 Z! l4 u# J3 S3 K
return FALSE;
. Z$ N7 O3 Q' R}# O6 \9 w( x- Q0 I1 Y( V& _
__declspec(naked) void caller_close()
" k& T5 `( i: o; p x{
- V+ ?, I# R4 N; ` __asm$ O( m/ i) P9 W" a1 V& a4 y+ v
{
x0 C F6 A( x0 r! U+ { PUSH ESI( q2 U* H; ?! ]: e2 Z% p% D
push ebx
/ V; M( G, Y8 g call m_NewStatShow_close
) t; ~3 `- Z8 ]; x! H pop ebx
$ u' g' h7 A' C3 X, ?7 V, B$ _" z' y pop esi* o7 `' P9 ]4 C! u9 H: i
retn% C% ?0 l' z7 W7 {# l) O( U
}1 E1 r% O: x( T' G; k% c! E
}% y: O1 j+ L0 _/ A
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])$ |( y/ |9 ^" c( s& `& Z
{
( Q) j# Q( r/ T *nXpos = getXInvCloseFixBtn();7 N" ^" \# E( t( o
*nYpos = getYInvCloseFixBtn();1 T/ p6 a/ \/ c6 @& ^ w/ v
}
' s8 t$ H4 O. b- C6 q# [/ Z4 ?, q__declspec(naked) void caller_closeimg() s# a \ i% s8 Q
{* x, p! v: H' s
__asm V+ _; F& r- o" K& _7 O( q g
{
4 r/ Q5 E6 G8 A9 w. j PUSHAD0 [) b y1 L# _( r: @: e, l
lea eax, dword ptr ss : [esp + 0x38]1 @5 k- y3 J, K; }) ]$ _- ^
push eax
/ P0 Q9 @2 n0 R' l3 u; B push dword ptr ss : [esp + 0x38]9 N! S8 t& p' V, ^
push dword ptr ss : [esp + 0x38]
, b5 W7 u+ E& ^: ]1 x lea eax, dword ptr ss : [esp + 0x38]1 V) y. o( e6 c% Z
push eax& T6 v% v* o" G
lea eax, dword ptr ss : [esp + 0x38] f" W" H1 X: ^( @1 @- J
push eax
. i8 C$ e( U( J push dword ptr ss : [esp + 0x38]
" N& G* H5 e3 z A call m_NewStatShow_closeimg
: a- ^! ]6 U, C POPAD: e& p1 ?3 C E* k$ h
JMP D2Gfx::D2DrawImage
( t5 }1 U: V1 _ }( M- d4 Z5 F- |( j6 {- L$ U
}8 ?+ F( Q/ b. p. N9 P" J6 F
% ~4 ^* Z: H2 F
1 j% Q( n1 P/ ]0 L0 T6 G
|
|