|
|
转载0 T8 I, Z2 E+ \& q% m
BY SJ; B/ C' {. k! s8 K2 `2 b' R
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
, i6 T/ i3 L5 x: g& k, X
# g( ]" w4 R8 D* @5 l5 iD2Gfx::D2DrawImage-10041
% p V- }; ?5 l" G- g1、修复技能的背景(不需要可以不要)
4 N' B% r9 d( E" U( k3 coffset = D2Client::GetAddress(0x77AA8);+ z0 [" |7 z6 Q9 z; R
Memory::SetCursor(offset);
( X; \8 i/ S q) `: i( f- {9 B9 dMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
, w# w' ]3 u8 ~/ `+ |. a
' g7 J% x9 l' X7 W" Tvoid __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])* ]; s6 ^2 j |0 _
{4 U& E3 j' K7 {$ f$ d
//Init data for print image
- J* t! k9 e- z4 {" [ sDrawImageInfo data;
0 ?$ o. }1 X, \% I I# K3 O ZeroMemory(&data, sizeof(data));
0 \) T0 z) o. o0 P, a5 F3 F `0 U% V3 _- c8 {, p
//print background. P4 \. d- w. U @
setImage(&data, spellBackgroundImages);& h, j) J& P/ w2 w: j' n
setFrame(&data, 0);! T& |' R! v- P) b
int fixx = 511;3 ?+ M* h5 x4 e+ @7 b: U
int fixy = 9;
8 T! G$ q: ?3 ], W C3 N( ~ D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);
# X4 N5 T3 r+ q# w setFrame(&data, 1);
/ p0 g8 Z. K0 q! w, [! H, i. s D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
+ M: X, _" o; B# d4 l O' d' n! M setFrame(&data, 2);
" G2 y( ~7 Q& @2 h, g D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432: ]' C5 _6 a9 S
setFrame(&data, 3);+ k, G k a% m
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
_2 Z8 i" v& s/ k}
. o- v- n, j+ z" a/ k% }# W* d, ^__declspec(naked) void caller_SpellBackGroundFix()
/ t4 w/ R/ F8 t+ ?! g6 D{
$ T7 ?5 q) O# v& s% L7 [ __asm v0 y" U5 H) }0 R" K
{) J; t/ L3 Z& K! C5 Y4 V; O
PUSHAD2 a% V k* j) M" i) P) p
lea eax, dword ptr ss : [esp + 0x38]. L( }% m$ k" f, o
push eax
* H: ~, [6 s$ n# z2 s push dword ptr ss : [esp + 0x38]2 J4 T! \' x% z0 E1 Q( P
push dword ptr ss : [esp + 0x38]
+ i9 S1 t' d( L2 M' D% h* D8 B lea eax, dword ptr ss : [esp + 0x38]- o% z; F& ^6 J% P: J% {3 Z
push eax
! i1 B& M5 U* M* F" w lea eax, dword ptr ss : [esp + 0x38]6 ]. N5 u, t, f% e! u
push eax5 N' \, a: y$ A; G/ b
push dword ptr ss : [esp + 0x38]! g$ ?& n! X* b2 q2 B5 \6 N8 m
call m_NewStatShow_SpellBackGroundFix
" S$ x+ c! g' W2 f! W# X5 { POPAD
* `2 Z+ `0 R5 q& n. E JMP D2Gfx::D2DrawImage* v. Y, N& G5 a h0 u
}, I9 b* h* D6 U' t/ f0 `5 Y0 E5 I2 J
}7 j2 H2 b% ^6 ] ~' \9 \3 W
; d. d& R% `' R+ o( T
2、我们如法炮制小站的背景
6 f6 q+ V" t- N/ M+ S: T
" b7 H! a; [3 F' B2 B. joffset = D2Client::GetAddress(0xAB010);
. c5 H1 a4 x2 f- c) F3 n5 _Memory::SetCursor(offset);
* A. y' C! t! T# a- f9 U4 BMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);6 e# C, Z1 e, T( Z4 u& s' W
/ c' n8 s+ H4 T: R1 b& m$ D0 tvoid __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
' r2 R& `. M& {/ l/ e) p{; @, `! _7 \. f! h6 c% p
//Init data for print image3 d4 G% m: B' ]. `( i: I7 t6 J
sDrawImageInfo data;
5 L8 h! x; s' F# C ZeroMemory(&data, sizeof(data));" `# e' e# ^1 U5 j
3 Q, ?* d5 y; }) A% Y' H
//print background: I1 l4 {7 V# q- j9 {7 r
setImage(&data, waypointBackgroundImages);
3 @' x G* z' P2 K# L3 T setFrame(&data, 0);" R7 j* b' h; |2 f1 @
int fixx = 0;; x1 U( m& Q+ g
int fixy = 9;! ^! w; w5 B9 n
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);: I6 n/ I b( l# c
setFrame(&data, 1);
% V- A2 }" E8 a( D0 O! ]5 U w4 C D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
8 `4 h7 S# W6 s3 u setFrame(&data, 2);
) ^6 n' Z( o. b0 m1 b D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432 \( a) `" y- ^/ Q& C& V% z
setFrame(&data, 3);7 D) \7 A" L- [. R' ]3 P5 S% G6 H1 U
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
1 L) v7 Q% V3 e
1 w6 w- v0 a N$ g. u}
0 V% G) Y H+ Z5 T- F G% `__declspec(naked) void caller_WayPointBackGroundFix()8 r7 E3 z0 ~, S' j4 E2 ~
{
: ?+ C' H0 @- B# n# U __asm
1 C# J& k" E S; s# c {8 n/ \' t/ | D& Q. a
PUSHAD1 f# y3 i3 T9 a, j9 T& @
lea eax, dword ptr ss : [esp + 0x38]
7 C. c$ E5 Q# v+ K" v" Y" t# t push eax' }4 l0 m8 J: V$ P, Q
push dword ptr ss : [esp + 0x38]; C; C% g) Y) ^: U6 K5 b, J
push dword ptr ss : [esp + 0x38]
3 Q. M. k& i {' f. [ lea eax, dword ptr ss : [esp + 0x38]8 b- m% |3 S' Y5 W4 \9 a. N
push eax
: ^; o, J: m' n7 h+ Y: a lea eax, dword ptr ss : [esp + 0x38]
, q3 q- M2 L7 e6 `* J push eax1 g$ F: M& B; ?" ?7 z
push dword ptr ss : [esp + 0x38]+ d7 H( N2 K" A4 n$ N
call m_NewStatShow_WayPointBackGroundFix
) e$ J2 f; X6 }1 P1 t) } POPAD' {" R/ O3 W7 P3 d2 g! O5 j' L: F5 y
JMP D2Gfx::D2DrawImage
$ {) ]: F4 v' M8 M }- ?1 T5 q% Q4 J. h
}
' q7 T/ ~0 `" [3 S9 _% Y, g" R
( N& E5 Y: Q3 t/ F* c& v5 H3、以下可以搞16*16超级箱子-腾出我们需要的边缘! S/ p# \8 O9 B$ L- F9 E1 B
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
, n9 T1 q7 e: W) z/ D {
7 T6 U! a3 @/ T* m/ ?! n. ? class D2MultiRes : public Library<D2MultiRes>" `! H% E5 ?6 U
{ ~2 N/ e8 c2 U7 k8 c# _6 Q; N
public:
4 P1 P) A! T# N6 F# ?- F4 ` static void Init()
. A' ~! [6 f1 H, _7 j- z8 H {, R4 _: i+ ]3 R' r& d& ~; p" a
Name = "D2MultiRes.dll";% c; N7 R# M6 O1 p& z# b( I
Offset = LoadDiabloLibrary();
# v F L% @% ] }
% j+ r9 A ^& x3 G };. O: `5 P* L# c( L1 T
D2MultiRes::Init();' J. t' T+ Z0 q( y4 w" A+ J
D2MultiRes::HookLibrary();
: `( B0 w3 ^" S9 O
" S- _. Y0 }9 H2 i, q3 Q. ?
; B/ @. h" g- c: i MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);
! Y" Y3 c7 S) z5 V I7 P Memory::SetCursor(MiscFunctionsOffset);
. k' k( u s+ W" ]& ] Memory::ChangeDword(0x1b0, 0x200);. X I% Z; k3 K- R( ~* d& M
F( l) L/ A _; f1 b1 c, v6 j
) x% ^6 f/ {7 }) p7 e* c MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
( N; S$ [$ K6 v" o Memory::SetCursor(MiscFunctionsOffset);# z4 y- U/ \) a5 O
Memory::ChangeDword(0x140, 0x200);
1 O. j, t4 I' o/ \- l! z. ]+ ?- L1 b
3 ^( O% W+ M0 H) n( g$ R& I/ b% q; L; {! c, N+ S/ ]
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);
+ ~2 B4 Q5 \& n# n' ~" a* s! g Memory::SetCursor(MiscFunctionsOffset);( C7 P1 C: ?7 \0 Q3 v# H
Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
) r6 Y" ^( I& A- V7 V8 c- {& F+ {, R0 O A( ]
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);" u4 o& J$ S) T. {9 E t3 l
Memory::SetCursor(MiscFunctionsOffset);
4 q2 I2 b% J( F Memory::ChangeDword(0x200,0x299);//下边缘 299最大# m/ N" ~2 S' f' W4 y: F( U! t
' x) V$ b5 L. z& R% y
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);' w; C e+ E* r5 @5 \5 w
Memory::SetCursor(MiscFunctionsOffset);
$ D5 X& S, M3 T$ q5 L. [$ q$ d Memory::ChangeDword(-0x280, -0x400);//这个不要动$ X* |: C: {0 Q& ?1 y9 B% K
}
' y& V5 r9 P! T+ @ j. s
0 |+ \/ [& z5 o; q/ y# V4、快完成了,是不是发现金币啥的位置不对??
' g r$ w: z0 h6 s2 f, W/ X1 @3 O' O K' b$ [
//这里修正我们的装备栏) m; `& r+ k6 q; s2 }
offset = D2Client::GetAddress(0x99B6C);
+ z" g5 n( W0 i2 v Memory::SetCursor(offset);
0 [( K2 Z; Z, _5 w1 e% d Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);5 z# y( N5 T8 c7 t$ J0 Y. v% q
, B2 f' C6 {! v( _) { offset = D2Client::GetAddress(0x99BA7);
# A1 Y5 C- o, ^# D" ~ p5 i Memory::SetCursor(offset);* o: |$ k! r; \2 j4 |; _
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);( G& R' q+ n5 Z3 w+ `
4 A) i- a. S' Z. ^# z5 S& A8 t C offset = D2Client::GetAddress(0x99BE2);
6 J% z7 P4 [' [7 g" U. L Memory::SetCursor(offset);+ b7 m) y( ~( r$ @
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
; q, ^3 H5 y( d+ |- @
j; G& o3 a1 R% I! e offset = D2Client::GetAddress(0x99C1C);
$ o0 o8 X; O( G$ Y3 k Memory::SetCursor(offset);
" L i0 g3 V' S1 w6 n3 Y- w Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);( _% {4 x0 X- m$ W
) H* E3 T0 F$ u$ g; C( p //取消两个popup,偷偷懒不过分4 ?0 l( k6 f) N! u4 c7 m, j% `
offset = D2Client::GetAddress(0x9386d);2 f7 ^+ g& s5 C' [( M+ r
Memory::SetCursor(offset);
7 z) y& L7 k; \: G3 l' k4 q Memory::ChangeByte(0x8b, 0x33); J" H+ L' E* d: I( {
Memory::ChangeByte(0xc8, 0xC9);
3 r2 k( G; D5 C, m$ Z0 x8 g offset = D2Client::GetAddress(0x9390b);. N1 K: Z% e: t6 ~* K
Memory::SetCursor(offset);; H9 z7 l1 f! U* M J
Memory::ChangeByte(0x8b, 0x33);
1 f H! d t# P0 r8 y+ [ Memory::ChangeByte(0xc8, 0xC9);
% \- z, H- N _4 j: q; \6 M6 | [3 Q, d- R) b! F& }) |
//修正提取金币& G+ p7 x5 n- x
offset = D2Client::GetAddress(0x8D3E5);
6 W2 a' v" f: x. D" Y+ U/ X2 ? Memory::SetCursor(offset);
" O. G* r% Z; o5 E Memory::ChangeByte(0xA1, 0xE9);$ i/ f5 ^* f2 J$ Q
Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);2 @& H/ W* R* r' k) Q- e9 L3 a
1 I0 Q5 y" \# K" \# P offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);+ M5 F7 C% c5 ^8 Z
Memory::SetCursor(offset);
# P8 K: r/ y4 v' q0 r: l Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);8 a1 L$ g2 F0 r/ b6 y' V/ Z
: k* z5 t( ~/ Q& j8 C% Q9 S offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);3 J) x* \! ^, s5 \9 P- \8 J# j% q
Memory::SetCursor(offset);
' N& P" O7 i" J3 V Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);
" B p& r$ N) T( D) R1 ^0 C# b Q! ]/ W+ q5 I+ n, E5 x$ h
//修正关闭按钮
' k4 E: r' }5 U9 O. j offset = D2Client::GetAddress(0x8BD90);
0 S7 x) i4 Y" _) n) r u' Z- g Memory::SetCursor(offset);/ ]7 k6 t B& b
Memory::ChangeByte(0xA1, 0xE9);
3 v, ?2 M1 @! {; z! J Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);& @% \: w; F! P' Z# j
; Y" @7 U' P& n8 v; v5 H: J7 r
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);+ {2 b* W7 L$ ]9 c2 q& `3 c
Memory::SetCursor(offset); M" \" h4 e9 H& u; b; f! Z
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);8 A* C; t; v, ^+ H& A/ x
0 p" U H2 n; v
, j: |7 ~+ C1 B; P' k( t, I9 ]//以下是细节
1 w) x( z( i% u2 m+ i, Y$ ^#define getXGoldCoinFixBtn() RX(0x2d0)( K0 S9 r0 j/ T; R# p4 r9 Q
#define getLGoldCoinFixBtn() 32
- ?6 @9 ?4 Y* K1 \/ @#define getYGoldCoinFixBtn() RY(-0x59)' [: j5 R6 @5 }. I4 @: R0 `5 l3 h
#define getHGoldCoinFixBtn() 32
9 k/ S( q/ \. p0 r M* A9 d2 i#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
4 Y4 C7 C2 D( i# C. u; B; V( }* D. e2 Q: _& u o* t7 O. I" A1 q
#define getXInvCloseFixBtn() RX(0x3db)
+ f4 b9 W2 G1 E/ x4 Z6 U9 c b#define getLInvCloseFixBtn() 326 u$ V) M4 c' i) A" Z, O e+ ]
#define getYInvCloseFixBtn() RY(-0x63)( O5 ]. d* _6 ~8 K
#define getHInvCloseFixBtn() 32) B. N- h( D+ u2 ^ o7 r
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
2 d. F4 N9 d1 Q% S7 q! e Y8 x, G1 a: i" v" c: c7 P
BOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
( v# d% R5 X3 i* _6 ]& M/ }* p{/ F" A9 X) S1 l
DWORD mx = *D2Client::ptMouseX;. Q' t6 }! O" g6 E. M! k1 [5 {0 Z
DWORD my = *D2Client::ptMouseY;4 |1 n: y' ]3 W* m* v! O$ D
if(isOnGoldCoinFixBtn(mx, my))! Y5 C7 N9 F6 G4 M' o6 {- F% g
return TRUE;
5 U, Q" a& ?$ h8 T) u2 H return FALSE; Z3 Y1 m0 G3 M* [) N
}5 J: Y s& O# Y
__declspec(naked) void caller_goldcoin()
. \ _0 V/ r! G* h: U+ R{
6 g1 u& `! ^6 Q5 u; u __asm! m5 g: t0 e4 M7 S
{9 F. F$ M3 U3 n: C
push ebx5 c5 N2 J4 K/ M" ]
mov ecx, esi7 k# }# e [4 C7 X( r/ Z4 n
mov edx, edi. ?" [$ x: Q# N% N5 a8 x) s; W
call m_NewStatShow_goldcoin5 w3 w0 x1 R# g- C9 |( X/ f
pop ebx2 H9 X% T7 {6 |6 G5 C5 _
pop esi
0 D2 I) c% B/ [4 N1 S retn
- Y: `4 ?' G& c, }) G }' Y6 c! W2 q# i* Y" h" R5 X
}
+ h0 b# _$ i6 Y2 c8 W& Kvoid __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])% w& y9 R% d4 t) z
{
. K1 n5 h, Q9 ^% S( E t& B1 F if (*nXpos > D2Client::ptScreenSize->x / 2)$ i9 d& ~- M6 Z6 O
{& V8 T/ N3 ?4 Q& n% V
*nXpos = getXGoldCoinFixBtn();
2 _+ F0 \1 S/ u- M *nYpos = getYGoldCoinFixBtn();6 d8 \& I) T8 ]2 ^( F$ s
}
, L2 e2 q6 R7 x I" [( c7 {}4 C+ }) [: R9 W
__declspec(naked) void caller_goldcoinimg()3 R/ Z8 q& j% D9 O
{4 I) M4 Z9 z: W+ G
__asm
* v6 Y7 X$ H% y/ J4 N$ ?4 u { }2 x6 E) f! W) ^
PUSHAD. i0 N9 `4 F, Q+ ]# E* {$ ?
lea eax, dword ptr ss : [esp + 0x38]
* s3 J: g! V+ i! ]0 E push eax. w! [% p7 n% N# A7 H4 g
push dword ptr ss : [esp + 0x38]
+ P, h9 t9 ^) K' N: a+ M7 u push dword ptr ss : [esp + 0x38]1 z1 I2 |# B5 v+ _6 R
lea eax, dword ptr ss : [esp + 0x38]( S6 M8 m, z& t) E! Z1 v/ e7 y6 [
push eax2 D$ ^2 v! t- {7 _- F& q# ]8 W
lea eax, dword ptr ss : [esp + 0x38]
& r D! i! Y* n( U2 n" @; {+ K) Y! O push eax
9 F+ f+ l4 A$ E push dword ptr ss : [esp + 0x38]2 u8 @& u' N a# e
call m_NewStatShow_goldcoinimg
/ M& v o1 P) |1 S POPAD
, }) |4 j: A6 \& ~4 n- ?) R JMP D2Gfx::D2DrawImage
# Q, Y+ ?3 y7 `! a }+ Y; x$ k: b, x j$ ~2 J7 ]4 Y
}
: m: S- a4 K5 n) x6 nDWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标) u( F" M |8 L/ Z/ e
{, e2 v0 _# G; K6 q$ H5 d9 X' f
if (x > D2Client::ptScreenSize->x / 2)
& u1 A) l7 N$ T* Y7 ^1 G4 R {. S$ N, y$ @* ~
*y = getYGoldCoinFixBtn();
" b6 b4 M( U2 T return getXGoldCoinFixBtn() + 32;& M' n, G# `' e+ h# p0 x- h9 M
}
5 d) L1 m- N+ f& d" N return x;1 g5 m' d9 k( S$ F3 Q, ?5 d
}' \; } `& \9 ~) H+ e9 O
__declspec(naked) void caller_goldcointext()
6 Y. R: p0 ^4 O! l{
0 ~9 X3 j/ v$ X4 w __asm
+ Z& V) J6 L U2 h2 \2 \7 s {
( I! y7 r% l$ Q3 L4 S- H( B0 L PUSH ECX$ }7 b, n7 D$ h
PUSH EDI
& q" _5 Z1 d. j' D( N4 `, M5 v9 R PUSH ESI$ X; P; ~4 K- x/ j$ Y: p# [
PUSH EAX
% z( Z# ?0 t8 L: L MOV ECX, EDX
+ k* }0 L. K: U LEA EDX,[ESP+0X4+0X10], K' ?( p- g6 [$ {6 P) v& d
CALL m_NewStatShow_goldcointext
7 P% ]; _1 M& h MOV EDX,EAX9 e& o' F- r2 M; |0 ~
POP EAX' B8 C# ~( ^* A# t' K/ d$ J
POP ESI8 V7 H# S# B* o6 e4 p& v
POP EDI' ]/ o0 z1 g# r) `/ W
POP ECX2 q+ _. ]6 ~# R
jmp D2Win::D2PrintString;
: Y; h) J( A2 J }
; `7 o2 k0 f6 e- v; t' a X& }}4 \- }4 g/ `) B# B( J- J
8 }8 w, ^# y6 ~% Y! w+ y2 W0 Q
BOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
2 f" H# @" w- q: `* q/ |{
1 D- M0 Q1 N Y8 B$ y0 i DWORD mx = *D2Client::ptMouseX;9 R) [" Z- M% I* F' e: H% Y, a
DWORD my = *D2Client::ptMouseY;) A7 l! w2 c! D) h0 j! N
if (isOnInvCloseFixBtn(mx, my))# w( j& p4 j# M. J3 q# T7 D
return TRUE;% \- O9 c8 w/ M' L& A
return FALSE;! G% ?- l4 p' _6 Q" V& ?
}
( {7 j7 [) j( o- @3 G4 l3 Y5 h__declspec(naked) void caller_close()
) D& M# g# M& y$ B7 R{
, M; ?) M; Q, ?7 v7 P4 w& P __asm' W8 i1 ?+ @* U2 h" \ s" o
{
+ t, W! Z4 f; R$ p2 w: g. ^0 I PUSH ESI% @" d. I6 O; X; o
push ebx
; E) _+ C7 e, w, m0 U. \) h& E! h+ y2 o call m_NewStatShow_close# z! Q4 J' G5 O7 r
pop ebx @9 q7 F/ S+ p, x0 B2 u
pop esi
& B) ?9 z4 S E$ V1 L- S retn
8 k) e% p8 N$ f5 k$ W }! e3 r$ G; n9 N }, p4 [
}
" h6 t L# s& U& @- Jvoid __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])" C# V0 v7 h& _( [! m! Q
{
7 C# K+ G4 J" }9 S4 M# t% D *nXpos = getXInvCloseFixBtn();
5 T0 y5 t) S( L+ o *nYpos = getYInvCloseFixBtn();, [, E8 h' A+ R" F+ P5 `" Q- k
} X' D: `4 T5 q C% s
__declspec(naked) void caller_closeimg()& n1 X) f( i4 O+ w; w' i
{
) T; o2 X) }8 x( j7 t, C1 p __asm: Z+ Y/ t& H. W$ K. h
{! a2 Y: l& ]9 ^ U/ H) S" j1 H
PUSHAD
+ t2 Q( }5 H, e: y- \ lea eax, dword ptr ss : [esp + 0x38]0 p( q6 F" A' z0 V6 B0 L
push eax6 E* Q9 H% z$ `) t$ K
push dword ptr ss : [esp + 0x38]
, z6 U9 n: y1 A) H. p push dword ptr ss : [esp + 0x38]! b% }* k5 I; O( l0 I, p# b* E' h
lea eax, dword ptr ss : [esp + 0x38]
% ]' n' v. A. R q& _6 ` push eax
7 y0 q! d+ f. l0 V ]: E lea eax, dword ptr ss : [esp + 0x38]
5 J6 |3 Q5 B% J5 D2 V7 ? push eax
& |' [0 L/ t9 m; a9 } push dword ptr ss : [esp + 0x38]
5 v0 d) G# T% c4 w r- a call m_NewStatShow_closeimg2 c/ d# H5 J1 o. w6 h+ @2 i8 h2 m
POPAD- W) g% Q1 m$ t7 q. Q$ }' A6 T
JMP D2Gfx::D2DrawImage; q. i2 B7 o# s' H( o
}0 p; I. W9 X4 F
}
' D. h3 m, r: \3 o' f3 C% g+ J1 I! G! h) C! b( D$ O
, R. X. L5 m) t: P1 z
|
|