|
|
转载
" H* \7 l# L/ c; M6 HBY SJ
, ^- \% d t# p5 c; y) J P# [首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
% Y6 _: Q# k1 O# N: v8 u' i1 _. K5 t/ I; J2 h& o7 o6 N0 e
D2Gfx::D2DrawImage-10041
0 M1 ]4 H% K3 ?* e1、修复技能的背景(不需要可以不要)
1 W; C" v! i2 ?7 boffset = D2Client::GetAddress(0x77AA8);+ W8 A5 O4 e# @, p8 h0 a' S
Memory::SetCursor(offset);. W+ i5 l* p4 d9 u% @
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
0 ]% H0 q R! \6 f& H4 B+ p: A1 a% e' r* S/ L, ^. x/ L5 H1 O
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
& e) f- D: n, V1 E) |{ A+ B% A Y( }6 P& j
//Init data for print image
% S8 [4 Z7 i( A @5 B1 t+ Z) y1 q* V sDrawImageInfo data;
, ? Q% g3 X* U ZeroMemory(&data, sizeof(data));7 ?- s+ I$ r# B! M8 A
1 w; J8 S; T" w1 l9 S l //print background
" l# X& B$ A7 D4 c* H( r: R setImage(&data, spellBackgroundImages);
1 z. a+ ?; T# u8 u+ D setFrame(&data, 0);
0 j" D: t1 F. s int fixx = 511;) x" c+ B5 g3 }* {# T0 ]' t) D0 E
int fixy = 9;+ T* S$ r$ {. `# G6 `' |% M$ [7 Y
D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);1 w9 d% \8 g- e/ x' g: u
setFrame(&data, 1);
- m( c1 O6 L$ V5 F& {! P1 \ D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
$ x# M* G6 ^0 z; [( y setFrame(&data, 2);
. [8 H2 N. d' `, K ^" J9 S D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432; w8 T9 O) j6 l3 M# h
setFrame(&data, 3);3 E! D+ J: a3 |) F7 D* X# N
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);5 A' I/ @6 y" _7 Z7 i
}' {9 K0 ]4 h6 B4 w1 ]
__declspec(naked) void caller_SpellBackGroundFix()$ q& x: @5 W. s! X
{2 \; c% m: m4 O4 L
__asm
5 |9 g! V% [! k" t& G# B {
# f* b& ^+ h* F w- q6 g6 l PUSHAD
. U$ v" ?% x P7 `2 W, Y7 ? lea eax, dword ptr ss : [esp + 0x38]
0 B8 _9 i% T$ a: t+ L2 |: ? push eax
; Z, `2 Q$ A2 ^1 w1 n7 m' N push dword ptr ss : [esp + 0x38]$ C$ x0 Q, Z4 e
push dword ptr ss : [esp + 0x38]7 }8 U' h$ f( R3 {) U! }# O9 ^
lea eax, dword ptr ss : [esp + 0x38]
5 |6 e2 L3 Q! _4 c. G push eax
6 L0 d9 h4 q% z+ c3 `. v lea eax, dword ptr ss : [esp + 0x38]
: A6 s3 b! ]6 f0 e5 n push eax
9 U* _5 P6 [5 v$ t+ q) M# K6 ] push dword ptr ss : [esp + 0x38]' l2 ~ ]) K7 {9 H5 X
call m_NewStatShow_SpellBackGroundFix; K4 V+ [* N3 n0 P. \% w
POPAD
. U e1 f0 t2 d. ?% o* w JMP D2Gfx::D2DrawImage
; Y9 q+ I' t7 y) {+ v6 s) x( o }
( h) \6 E" X, @% X% k}
7 V9 m5 J, P/ Y& j
9 f1 A% S; @' b8 j/ x5 K9 [2、我们如法炮制小站的背景
, P' ?) U% V+ u6 {, E3 h# `
8 T3 o7 r) j( ^. Q0 c* f( ^offset = D2Client::GetAddress(0xAB010);- T9 }6 ?& F# }' I1 k* H5 n P
Memory::SetCursor(offset);8 s' H. W, {' K2 B+ T% n
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
9 q0 I* C# e& L1 G: _! `6 `2 T
1 z. w K) ~0 c2 v& F* Tvoid __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])* m8 f" ^% @3 ~% Z( q% v
{+ v5 S8 m) [- k f" h, h) T1 ~5 @
//Init data for print image
& _! Y, @) z/ Z% Z3 X* T5 S, R sDrawImageInfo data;! ^- x; k5 O; w4 m
ZeroMemory(&data, sizeof(data));
0 q f; [: L" L6 m0 Z" y c( t# k; [
//print background$ H8 N. B6 k' b
setImage(&data, waypointBackgroundImages);& Y; R5 L# s. t/ C
setFrame(&data, 0);: h) T0 t- N3 _. g+ f
int fixx = 0;
+ n ^0 H. p+ j4 }6 x- g int fixy = 9;
4 E8 @7 w ?, l D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);4 E: c& J5 c2 }& c# j% E3 l
setFrame(&data, 1);8 W- }8 B7 L& d/ e9 Q
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
' L j/ @ J/ r, B. d setFrame(&data, 2);, x( q9 G \0 O! `& _) `6 }, V
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
d* k- d2 \, m) C. O4 Q4 W setFrame(&data, 3);
' B6 K$ V9 J" B& S! q" n* l; d D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);# h0 D$ |$ r" q" y; E# G2 G' y
' o* z" X8 C+ B
}
5 m3 x+ F2 l. e( v# l__declspec(naked) void caller_WayPointBackGroundFix()
7 h: w4 K8 x- W$ L/ M R{0 r% }0 @3 S0 I1 q0 d1 j5 b
__asm
6 M" s: f1 @6 f( m {
( I/ a9 a* V1 d PUSHAD
6 t/ K# }: Y b' [" @( ~* Z lea eax, dword ptr ss : [esp + 0x38]
/ }- @0 X4 f. D" F$ \, e" b push eax x+ \/ Q8 z8 G/ U
push dword ptr ss : [esp + 0x38]
; A# X o ?0 w! G; b# Q push dword ptr ss : [esp + 0x38]
, R* ?' g9 `" G2 y E( _ lea eax, dword ptr ss : [esp + 0x38]
2 V& ~! U3 o. Q8 ` H* o& p push eax4 W( d2 U3 Y* a3 P* s
lea eax, dword ptr ss : [esp + 0x38]
. u/ Q6 I' w6 w2 } push eax
* s4 Q6 [7 R9 ]* `+ a" \9 M push dword ptr ss : [esp + 0x38]- L+ M& `) B+ E, v( R
call m_NewStatShow_WayPointBackGroundFix
1 r4 [. Y; q1 w3 [2 ? POPAD
$ _* s. C5 u9 i. r JMP D2Gfx::D2DrawImage
; G y/ h. M5 T7 L3 s {9 K }
7 n' a: n% W" V4 f: s( w( v}4 Q" V, a n2 v! a; z
9 j3 ?& j) c& r9 J7 B+ m1 ]
3、以下可以搞16*16超级箱子-腾出我们需要的边缘
' g {* d# ]& f1 o) t* Y腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
. E1 Q) n9 d. F) H" q& D0 w6 ~ {* U9 `: v2 V+ h, C
class D2MultiRes : public Library<D2MultiRes>2 _8 n8 c/ @4 b8 S o- d2 U6 t C) B
{
4 k6 c1 |3 J. j# f public:
" P' ]! G9 t' J; x1 N- q static void Init()
# K d' N3 W& a- l6 T! ? {( S6 \2 e! [9 m. X6 _! B
Name = "D2MultiRes.dll";
9 ~" P4 n: K; q8 A0 M3 ` Offset = LoadDiabloLibrary();, F, d5 q8 J1 h7 F: }
}
% L( h$ Z# ]" T( R4 d };# Z8 w) Y0 f4 w: J( L% N% k
D2MultiRes::Init();6 Z7 W$ O. }4 ?7 [* B% f# p- S
D2MultiRes::HookLibrary();+ O6 F, D2 q) Q3 z
" b% [& C& i" X! U
' e; [1 l$ M j; g; l( I3 { j MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
2 n# V# u e* x, v) R# [3 m Memory::SetCursor(MiscFunctionsOffset);' h1 {8 A5 k2 J! X' p" P3 \% q* z5 }
Memory::ChangeDword(0x1b0, 0x200);
4 O) T0 V2 |) x( n R( V2 e$ K- V& U: T$ U
3 k" U& C+ {; I! e* I% K( O4 S* s MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
( I/ {) {6 T: ?) J Memory::SetCursor(MiscFunctionsOffset);
* }$ {' G2 h Y- v- ?" L Memory::ChangeDword(0x140, 0x200);
& E" u: Z1 T) L, ?. F' P% H
) I% R8 p9 f3 _# e. w/ Z: ~4 s" _, V; t. w9 e7 B" C0 b
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);' n5 s4 H- @* B4 Y1 B/ G. y0 [/ R
Memory::SetCursor(MiscFunctionsOffset);
& w+ M, {6 E& e Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
7 J7 E, r7 t7 e* r$ r
, S) r; R- J" V MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);2 u8 t& d9 @4 s: K8 F3 B8 I1 \6 _
Memory::SetCursor(MiscFunctionsOffset);( Q* D7 T0 N# m3 o, I' W
Memory::ChangeDword(0x200,0x299);//下边缘 299最大; d8 p+ U0 b7 F" |5 @1 {* Z* e
# ?7 ?, I" p% [5 ^# u9 n& F& r
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);6 ~0 T. ]! ]3 z/ O8 z
Memory::SetCursor(MiscFunctionsOffset);
7 C f) Z0 L7 \8 f Memory::ChangeDword(-0x280, -0x400);//这个不要动: j/ M# o6 Y" e2 ^" x+ N
}
& M- h5 C* C( ?7 D. y9 Z6 S3 e4 t( `2 s* M- t: G" u
4、快完成了,是不是发现金币啥的位置不对??
7 X0 W- T. L6 A& b$ P* @
$ m" I, j+ U# K( N//这里修正我们的装备栏
8 a* s/ D7 z8 I) ]! d; @! ]( f offset = D2Client::GetAddress(0x99B6C);
2 u- z- R+ x4 @4 q! p Memory::SetCursor(offset);6 M; _# I" `5 O4 m4 y7 e( u
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
* d3 s) a' V u$ ]- k' o" V
9 g, {7 n* K: Z8 u0 [4 U; @ offset = D2Client::GetAddress(0x99BA7);
- [" t' V/ Y) c- _/ `+ f3 `; K Memory::SetCursor(offset);
- R3 G4 E3 z' F Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix); u0 }7 z" h5 T' g4 i. G
& T3 t2 o& J* I5 a: ?" J+ B9 u# T2 K+ U offset = D2Client::GetAddress(0x99BE2);
2 h$ E" e3 u: g+ f6 l' }% B Memory::SetCursor(offset);8 [; g$ d* V+ ?" B M
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);2 T0 e/ B6 x) R* U& ~9 m# n% Q; w6 [
- G$ ?9 o6 P- }3 V, ]9 k
offset = D2Client::GetAddress(0x99C1C);, F9 I5 D7 y# B6 N; d' ^
Memory::SetCursor(offset);
; F) x# m a( P3 G Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);9 x8 f/ W: [; B4 o: F9 {
. C) ~- B$ {2 F W1 t' Z, i* u //取消两个popup,偷偷懒不过分
r! \6 r+ E% v5 Q+ q5 Y4 d7 L# Y2 C offset = D2Client::GetAddress(0x9386d);8 Q# K8 W; E) u" c1 ?
Memory::SetCursor(offset);
$ y5 W+ p; k9 ]& K- w1 L Memory::ChangeByte(0x8b, 0x33);
0 ^- o3 J% s) Z6 [+ E! L2 V Memory::ChangeByte(0xc8, 0xC9);
( T5 A/ x" t2 P0 M* ~7 } offset = D2Client::GetAddress(0x9390b);
! A4 Y0 E- \- ] ^/ v/ ?+ d5 \1 Z Memory::SetCursor(offset);
5 H* n/ }$ K8 ]$ R! u Memory::ChangeByte(0x8b, 0x33);
3 ^3 q: q% g3 \ Z5 t Memory::ChangeByte(0xc8, 0xC9);
; A8 Y9 b. b" {. H! V1 I& T3 h7 B( y S$ u$ l
//修正提取金币! A) `, V) ] y. c
offset = D2Client::GetAddress(0x8D3E5);
$ G; A G1 O1 |, c# e Memory::SetCursor(offset);4 c5 S# l/ b& h* t6 r& J
Memory::ChangeByte(0xA1, 0xE9);/ Q$ Y. B7 n5 |! G$ ^) e
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);
9 J; Q4 Q5 p k8 }
& K' U- W9 h" r9 q offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
' @% [, Y& V2 ] Memory::SetCursor(offset);
. j' L5 a6 n/ f o3 K Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);
# l9 G" C% v/ E
" Z& F, t& w- s! b3 Z6 O8 B2 W offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);% [2 M# G8 Q7 {
Memory::SetCursor(offset);, s' X v+ u" A3 f
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
2 ^; w2 [. b- Z* S
) ~0 g. w1 V3 | //修正关闭按钮* Z6 `8 {& u0 q- V
offset = D2Client::GetAddress(0x8BD90);4 @0 Z9 T' e6 o1 h8 H" ]
Memory::SetCursor(offset);
" v; p- ?0 h8 y: y! ?* v m. G Memory::ChangeByte(0xA1, 0xE9);
# x! E1 o) B! P- [* F' z$ Q Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);: j6 T. F$ W P O
- c* w7 u; L4 t6 m2 z; E offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
( p- i' M1 P4 F Memory::SetCursor(offset);; C/ v1 @2 Y( R* i
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
. `/ Z5 m5 S' `/ M' B/ M& `3 d/ K
8 c, m+ a" V# h: L* _
//以下是细节
4 G: A# V7 A8 \4 |2 t6 P#define getXGoldCoinFixBtn() RX(0x2d0)
! I9 W' M+ @* n7 J; }9 ^#define getLGoldCoinFixBtn() 32/ W e: P) P I8 _1 h) ` ~/ p q
#define getYGoldCoinFixBtn() RY(-0x59): x1 Q8 k: v* u _! m
#define getHGoldCoinFixBtn() 32
; E5 u& U/ `% |5 @#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
6 y( T* p# x1 `" e# A
2 [* r& h% p V6 d! W! e2 f#define getXInvCloseFixBtn() RX(0x3db)
: Q, _8 p4 @0 f! J. L" W H) w#define getLInvCloseFixBtn() 32# J7 _. T/ G6 v' D0 [8 B
#define getYInvCloseFixBtn() RY(-0x63)
) J! m9 l7 P* d- Q3 y' o' o* h1 j#define getHInvCloseFixBtn() 325 H9 I! g$ |4 y
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())( ]; P0 ^8 ^- t$ }+ k; o6 p
9 T) Z& ^; A& z, o6 a% U: R- l4 R! A
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)# i b M* {0 y' p4 n, B
{
: r5 R; Q9 }+ L/ B DWORD mx = *D2Client::ptMouseX;) T7 s# e' K- {0 k
DWORD my = *D2Client::ptMouseY;
1 N( p' M2 Q, d0 r- |+ R; J if(isOnGoldCoinFixBtn(mx, my))
b# \% K+ C& j; ^% u) I$ x return TRUE;
9 S: J- b1 d" ]7 x- G return FALSE;8 I8 M! A' S! g! [
}9 {* O! r5 ]" }# V8 n# w; T3 L0 [
__declspec(naked) void caller_goldcoin()
# x }( u3 a- k" R. B{
2 ^4 q( P# g0 X0 i! d3 z4 }/ j __asm7 n! m: ?) g1 \* x5 s
{% R5 z d% f6 m: c( p& h) C3 ^
push ebx- Y. Y( y' o- Y1 h/ Q% k
mov ecx, esi9 V6 s7 U) j% ], v% M; I
mov edx, edi6 Z* w& o7 t* o; z" n
call m_NewStatShow_goldcoin
, L( ^$ H4 K( k3 y; u; f! F" b pop ebx
4 d$ k( u2 w9 f5 j2 G pop esi
, b. W6 I, U, H) Q. n7 i: w% a retn
2 G1 g( N# ~& |( \# m" N) A, R+ j w }) i ~8 J0 Z% E! w
}7 I3 |5 o& x* {1 B8 ?
void __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
* }% T+ p, q4 ] Y- K5 x0 L4 }{4 w5 u$ a2 c' |! x s. l( h# E
if (*nXpos > D2Client::ptScreenSize->x / 2)
- Z4 t h1 U" ?" l# C8 d {
6 d6 l7 ? E! `& ~5 O( G: }9 I0 C0 X7 H *nXpos = getXGoldCoinFixBtn();/ D* m0 W9 Z9 F F- I
*nYpos = getYGoldCoinFixBtn();
L2 q5 y; P' y }
3 H0 Y7 z2 u4 ?- O}( j$ w: H3 Z* y' K
__declspec(naked) void caller_goldcoinimg()- O9 _$ [" S! [3 n2 n" I, w* i$ y* [
{
1 E; ?% i. n* U I. w __asm
$ z. ?) F3 p8 V" g% n& l6 P {, s' F4 ^& p& H, d% A9 z+ O8 _
PUSHAD
+ [3 T( \/ S6 [# \4 D lea eax, dword ptr ss : [esp + 0x38]
- x4 Z/ b. U# p& h9 y push eax
% Q- f" w( X3 [ push dword ptr ss : [esp + 0x38]
" W/ h( v: `: H! K$ |0 ] push dword ptr ss : [esp + 0x38]& D6 Y4 t- ~/ F7 N1 W# r
lea eax, dword ptr ss : [esp + 0x38]& {, z8 ?3 T9 u4 `6 Q B4 }& Q
push eax
$ r- q; E# a) _5 k+ }6 X* ^5 _ lea eax, dword ptr ss : [esp + 0x38], c/ z2 t+ h9 I1 m0 \
push eax' X. e' d% G% T$ U4 T6 `) U0 N# ?
push dword ptr ss : [esp + 0x38]; m$ g5 e, Y& K) O4 i% N
call m_NewStatShow_goldcoinimg
, m9 ]; E# C& }0 R; W0 u4 S POPAD7 {9 K4 f* |& @- W% ]
JMP D2Gfx::D2DrawImage4 Y) {; b% ~4 V+ X( L
}
5 [+ p( p" _- u+ u; @, G}, v! B/ ]- ?" [6 | P
DWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标
% O `6 Z+ C, } D% h& H{' _ c3 k! ?" h3 i1 U
if (x > D2Client::ptScreenSize->x / 2); e4 e7 H) `' D4 {) R
{ I. n4 e% `" l; T9 s+ o
*y = getYGoldCoinFixBtn();
% \& ^6 O- ]; U- t return getXGoldCoinFixBtn() + 32;7 n. ~, g( \% N4 ^: e0 O
}2 T0 ~; G. T! J, R/ }
return x;% F+ u8 G2 \+ D4 E% r8 }: h+ @
}
; k- y6 s9 m) w7 z; n$ [__declspec(naked) void caller_goldcointext()" U, _$ f* h: J* n5 |
{
: C: C% w( r8 H3 m, \# a3 a8 y; e __asm
/ Y/ o) {6 ]% H* C) y* w6 b3 P {+ O$ E% p1 ~; |9 Z, k( m& H
PUSH ECX
" f" p- I; x! \- a2 J PUSH EDI
, c6 \( v7 R: ]; ?2 N! p PUSH ESI
C/ P* s7 t: D; h% r$ S PUSH EAX/ a8 j' }5 p4 Q- }4 \, S' o
MOV ECX, EDX7 F4 {" @7 F, ^2 ?
LEA EDX,[ESP+0X4+0X10]9 _" H. N) ?* i4 y
CALL m_NewStatShow_goldcointext* ^/ S: ^7 K6 ], F# a, x
MOV EDX,EAX
: H8 u1 W' G6 b( C5 E% h POP EAX
" @+ f$ j! ]/ M, m9 B& t1 } POP ESI
8 D( @# x7 J& S3 {; X; S+ \# w POP EDI9 w+ v( f% ]: B
POP ECX
8 C& J+ w9 I% [) c w; K" H jmp D2Win::D2PrintString;
5 G* }2 t, s$ J5 a6 A U) Q }
2 \- B" r4 L0 V7 a}0 d$ L7 A& `" U- Z
1 ? p* F5 X# Q
BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
" Y; ?; o( d1 m/ ~6 s+ _3 }{
' W* e: H1 s! U( N* w DWORD mx = *D2Client::ptMouseX;/ X' b4 v2 t ~% h1 U: p* t. z( V
DWORD my = *D2Client::ptMouseY;
$ j& }! D% _8 Y( {2 C2 i; g if (isOnInvCloseFixBtn(mx, my))
$ Q- f2 K' N# y1 T! H return TRUE;
1 p( k8 C. Y/ p ] return FALSE;% t" T' U/ j7 d+ S1 B, P
}
! q1 i3 }. A" u' O' m5 M h6 F__declspec(naked) void caller_close()9 T. D, h5 E9 D, [- x
{& w% y/ z7 a3 x! g
__asm/ A! U5 l' o3 L/ J5 w: e1 ]9 q( B& x
{
* V/ m K$ G& s/ b; M PUSH ESI
: w) e$ }' I2 D push ebx& ~5 T, ^* F7 W& m, p
call m_NewStatShow_close
5 d% u; d1 `6 X2 ^* |0 T' B pop ebx2 H8 W3 k' G6 ]7 o1 ?' o: ]+ u- n
pop esi
' N4 l& u- X, l' T5 g. K retn
4 K$ T; r3 \8 U0 ~; S5 e }
; e, U# s) C, N) |, H/ W$ ^; j; Q}
$ i$ I' u) k, U0 s7 [void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
' j- m- w# {! x' I{8 j+ v2 a0 d( J
*nXpos = getXInvCloseFixBtn();: x7 A9 r; G- [5 f6 b
*nYpos = getYInvCloseFixBtn();
# O, \/ C1 v" _: o3 G& o: v}1 y% o. c+ \) l5 ~
__declspec(naked) void caller_closeimg()
( l- K/ `, {( x. S* _' z+ _{
" `! B j3 K# a2 j( G) i9 l/ J8 O8 R7 P __asm+ c- C. r2 Y X/ N
{
+ @3 K9 P# k# s! Y t( ^ PUSHAD: d% r- [1 y" b% Y7 R
lea eax, dword ptr ss : [esp + 0x38]1 O6 r4 {- c- `& n9 B) x
push eax
5 M* u/ {; `4 ?! _ push dword ptr ss : [esp + 0x38]0 r5 V5 W2 L* E1 _* c
push dword ptr ss : [esp + 0x38]
" p3 X3 t0 |: y" S lea eax, dword ptr ss : [esp + 0x38]
% o3 R7 M5 T0 ~1 o& e2 S push eax1 i# p+ u% T7 `' X7 Q
lea eax, dword ptr ss : [esp + 0x38]
6 J9 Z; H. b+ p% r push eax3 N. G; w% r4 [" q* ^3 @% r
push dword ptr ss : [esp + 0x38]3 A8 ^ r; X# | {5 s8 I* Z0 R
call m_NewStatShow_closeimg ?# g5 C6 U0 s1 |; v+ j9 ^
POPAD
$ E1 K% h7 q- T% V9 R JMP D2Gfx::D2DrawImage
: K8 |) \' G8 G: u$ n3 b9 r }3 j ^9 V1 u- b5 W
}
# h3 e7 K3 Q6 T4 W: f& I6 A. z" m5 Z& s. E
' w2 w9 x+ n5 j. M! c u |
|