|
|
转载1 A. m/ m) h/ V' ~* W" ^6 l4 @
BY SJ. G2 G3 u7 m" L# V
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)7 r) E$ a* N. y- A8 x: w }: s
$ h- o* T: H( b, Q/ lD2Gfx::D2DrawImage-10041) H6 I }2 c( S# n0 u/ P9 w* Q
1、修复技能的背景(不需要可以不要)+ S. H5 Z* f( h) |4 K" R" d
offset = D2Client::GetAddress(0x77AA8);3 M- m8 B4 m. S% ^
Memory::SetCursor(offset);
6 @ J8 T/ S* v( R) Q1 eMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);" I9 [( z2 o* o! M$ y
! D- f% D; b( X& n- G
void __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
" v W' Z2 W8 X$ ~5 U{3 y, I7 t1 K6 b, C. m0 |3 H
//Init data for print image5 C- J$ ~# x5 P' [* k: U3 P
sDrawImageInfo data;
$ V5 g- B4 T! Q9 p ZeroMemory(&data, sizeof(data));
, _2 v5 B9 g4 }5 [5 x8 g9 D3 ^# ?: s" A7 J+ c+ l: w; E0 n
//print background V+ h( J h7 R& g$ s8 v) Y
setImage(&data, spellBackgroundImages);
% {% J$ _9 Q' p% G* t9 j- F setFrame(&data, 0);+ R I+ b$ W+ Z% z: L! T
int fixx = 511;* j( \8 @* ^/ X- I, y# n2 x
int fixy = 9;- k# I; }1 ^# a) {+ L) p
D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);
) |0 r0 z$ F8 g7 [# g) F setFrame(&data, 1);- t1 G; N- @/ o5 ?2 x1 B
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256 O( x5 Y# }$ [3 t
setFrame(&data, 2);
$ e9 d p- ]) @$ H D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
9 d4 A9 M3 [4 K; g1 u+ b" \3 H4 a setFrame(&data, 3);5 i- d7 N. F( {- q0 h
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);4 h5 ^& g9 Q6 d; b- Q3 j
}. ^' K( i. a- C, c, c9 v' T* h
__declspec(naked) void caller_SpellBackGroundFix()% y/ Y! z& ]* ]$ p
{; u6 w- C: H" g# ~- H g
__asm; K+ R3 k0 c% w
{
8 q8 i9 h: h- ?+ n* s' |% ]! N# ~ PUSHAD
. f a2 [4 `, j9 B& m lea eax, dword ptr ss : [esp + 0x38]
. F ^& [. I8 I( c6 j; w push eax
- {: e% [: m; m0 q* \$ Y! m0 D push dword ptr ss : [esp + 0x38]- ^$ C& x0 _/ A: o7 S! [
push dword ptr ss : [esp + 0x38]7 T9 j6 c3 C _8 j" Y
lea eax, dword ptr ss : [esp + 0x38]
& h3 P; G+ Z) q7 B- t% ]7 u- X: I push eax! d) }1 p2 N2 r6 B7 P
lea eax, dword ptr ss : [esp + 0x38]
) V( [; Y. R) h# }7 z, o push eax* l/ [; ~& x8 h4 ^! M v- P# o
push dword ptr ss : [esp + 0x38]1 _# o5 G+ f6 A0 ?( l. ?9 W
call m_NewStatShow_SpellBackGroundFix
8 r% U3 c2 ]$ b5 e, a POPAD% b/ I4 Y* z4 F4 g9 V+ l3 J
JMP D2Gfx::D2DrawImage; ~6 h% u; c5 Q a3 T
}
2 Z6 O! _5 Q% X& ^}
1 E8 T" c# ?9 F) ~+ J$ V5 f
* X* Z: }. `7 H5 @9 |- V" ]/ u2、我们如法炮制小站的背景' W/ w8 t3 [' y& o) ~
; |7 [3 D; [/ u; B1 u: X
offset = D2Client::GetAddress(0xAB010);7 E" B. K1 q# H' @8 O l- Q1 @
Memory::SetCursor(offset);
* j5 ^ O4 L% O% s( TMemory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
8 U- Y' c6 E( u, U7 V) g$ v4 R6 V: O& n1 Y; E* ]; M# a# k
void __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])7 B% W" u+ a* u; C
{
7 J3 f! m4 Y7 j, T //Init data for print image
+ i/ C1 G2 h9 A7 |/ n- f ^0 D sDrawImageInfo data;/ S. c& R/ W. i* d1 X8 f1 O/ a; e
ZeroMemory(&data, sizeof(data));4 X( i+ f0 N6 ^5 d
7 x, ?& a% Y; A //print background
- ]) {4 w$ R4 V/ o setImage(&data, waypointBackgroundImages);
- ^# Y* f. B( X setFrame(&data, 0);+ ]' }. v+ @4 Y
int fixx = 0;1 P/ _& r) L+ m
int fixy = 9;5 c) \2 t t$ F5 E
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);8 K. }/ Y; P* U. U) ]5 T
setFrame(&data, 1);" G; n' }' Y& t2 t/ d3 d4 c
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256" g% f; G' x) a4 g a/ q& ], g# _
setFrame(&data, 2);
5 V% {2 ^) ^* }3 m0 ?" B, `! n D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432- T2 U* g1 m! W- b# v3 g! l
setFrame(&data, 3);
0 \: B; f( C! H& S& u; g D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);; Q Y2 n( V8 f: r
9 ^4 m3 S# y0 @0 r& L& m. V. v}7 Z2 K2 i6 a+ y- i, R$ u
__declspec(naked) void caller_WayPointBackGroundFix()# P5 I# r, V7 I+ I
{ Q: G9 R" k+ O9 t& N. ~
__asm4 R2 }3 c' v! \1 {' U
{+ F2 z+ y0 d: u0 ]# C9 b+ M. K' v
PUSHAD
/ D9 t+ z- F: w9 a lea eax, dword ptr ss : [esp + 0x38]
* n' G, J! w) Q9 p( U2 f push eax9 W& z, R; p& [: ^) _* z
push dword ptr ss : [esp + 0x38]' l1 S, [+ u: P9 i3 ~
push dword ptr ss : [esp + 0x38]
& S: h) J+ x. t" [$ ^) @+ i lea eax, dword ptr ss : [esp + 0x38] Q6 R$ E* K& Z0 r9 d
push eax9 R# U M8 N5 I( `$ \8 O2 \1 A
lea eax, dword ptr ss : [esp + 0x38]
; f: C/ \- Z% | push eax3 c' S+ ?9 h) g' d. Z
push dword ptr ss : [esp + 0x38]/ e; L: n5 r& v
call m_NewStatShow_WayPointBackGroundFix
# T) _: b- v1 S0 z; ` POPAD" h4 _0 T; ~1 a! s5 B$ O- q
JMP D2Gfx::D2DrawImage
6 U7 g" [, m( r% _' Z. n" k }
$ E! n6 _5 z1 S) e' U7 G}9 u( ]% N, O; y
( |- a# D5 J, K# g% m7 ?- R3、以下可以搞16*16超级箱子-腾出我们需要的边缘
$ E8 C0 O7 N" ?/ n7 u腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)
4 z8 s$ h) \ S' c- T0 m- h {
' T6 R% u3 E1 s$ Q. [/ {7 ]* v class D2MultiRes : public Library<D2MultiRes>
6 ]- M* G( ?* Q# J% y4 D' q {9 \. Q, l1 n% w( I
public:8 [3 b% S5 |: g3 z0 F
static void Init()- W! J3 y2 L0 A0 n7 }- H2 Q
{2 J2 ?- _& r1 P- k7 K
Name = "D2MultiRes.dll";
6 g g( H: O# `! Z% d& g# Q, M5 D Offset = LoadDiabloLibrary();
# R! k$ R; G# ^/ E1 B% @ }+ U7 L; f J" N0 E+ A. F( z
};3 G5 i& G0 N+ Q `4 Z7 ~( ]
D2MultiRes::Init();
' ] H5 T j0 m0 w# B Z D2MultiRes::HookLibrary();
% T) L ^* l$ B8 y) i; b7 j$ ^/ l: r% P- W9 G4 z
7 ~9 R9 {2 k2 A& z0 A% B MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);' M+ ~/ m* a1 w6 g
Memory::SetCursor(MiscFunctionsOffset);0 ~0 Q$ K% x' S/ f. p) [
Memory::ChangeDword(0x1b0, 0x200);" B; X7 N: ^2 u$ F0 V% Q
2 J H/ {' _ S5 W9 ?7 H* s9 s0 F% Q) b$ O, ~
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a); w' g) J0 y( A7 x! P: k; b, \
Memory::SetCursor(MiscFunctionsOffset);% C! M z" E# A& `7 t
Memory::ChangeDword(0x140, 0x200); H) c" c C( y+ x( W
2 M! @& _2 c9 ]% h. U, O( @ t
8 _- c4 W9 c& p/ S. u% w' d) ] MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);) y" \2 J+ f4 @: s; N
Memory::SetCursor(MiscFunctionsOffset);9 Q0 m; W( Y5 b3 F! ~9 _
Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块3 R/ o. t% X, ^
7 t. M1 `/ V0 H3 C8 }: [
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);
" U, o9 S) H" r X+ I Memory::SetCursor(MiscFunctionsOffset);2 B; X+ E0 h" r. d8 L/ s
Memory::ChangeDword(0x200,0x299);//下边缘 299最大
/ @& H# |( k: U% }( ^
4 h& x: v' F4 { MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
# Y2 f c9 @- ]* e( t/ o Memory::SetCursor(MiscFunctionsOffset);
* y. p3 b# y5 Q- `3 @0 x; m Memory::ChangeDword(-0x280, -0x400);//这个不要动
# @& ?6 j) x, w- l) Q4 E }3 A6 y/ d1 I; q2 b5 k% q# U
! h# E9 m6 n% T5 E; D+ C# n3 K4、快完成了,是不是发现金币啥的位置不对??! ?7 A- G0 ?% s1 s3 N$ B+ V5 Z0 J
/ ~- e/ w+ {% U
//这里修正我们的装备栏& q3 ^: m) o, X' }& {7 f0 B
offset = D2Client::GetAddress(0x99B6C);3 z+ f! g7 o* M7 {3 p6 W$ S# K
Memory::SetCursor(offset);6 d, N6 j4 S5 ?+ S' D" ~7 [
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
- E* W2 P5 ~" v. W# P# n9 G) `. \5 ]1 i' X- T
offset = D2Client::GetAddress(0x99BA7);
7 R9 A9 O1 V W# B; I Memory::SetCursor(offset); T0 ^ |3 [/ b& O& Y; N& i
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);. i; g7 a& @; L" }3 p7 F& f8 R
3 y% L8 N- Q0 V6 t/ f2 Z6 Q offset = D2Client::GetAddress(0x99BE2);
9 s: t9 w( j+ F3 M, x8 |, K Memory::SetCursor(offset);
/ m7 L: U( d& l Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
! N \( |. b# Z- T) @. Y P, K# r4 i
offset = D2Client::GetAddress(0x99C1C);
' z& P, \6 v" K. g+ n Memory::SetCursor(offset);
" n2 I0 u1 J: [6 c/ Q* [& H Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
: F' b% J* T! `
8 L c! X3 G$ u, T9 I5 f5 c //取消两个popup,偷偷懒不过分
% m" ?" q+ b" Q3 _ offset = D2Client::GetAddress(0x9386d);
8 E9 f- g4 N/ t( m, \; x Memory::SetCursor(offset);
3 p5 i: e2 C2 T8 u! K Memory::ChangeByte(0x8b, 0x33);
: c- I8 w$ {2 i Memory::ChangeByte(0xc8, 0xC9);& r3 a9 U- @+ c9 v# ^( _- _* H
offset = D2Client::GetAddress(0x9390b);- b, c4 Y2 o0 S: w8 K9 _; f. U0 q
Memory::SetCursor(offset);
3 x4 W+ U* M& s* o8 Y, ? Memory::ChangeByte(0x8b, 0x33);
0 g% F* l; h$ _# ^4 {# h Memory::ChangeByte(0xc8, 0xC9);3 e- V3 ^; S& L( l' j7 E
* o$ d7 L# B! ?7 R6 f. z //修正提取金币; C5 @; }# l/ w* G, M
offset = D2Client::GetAddress(0x8D3E5);+ }1 x. k O- e1 t! I3 n, o: X% D
Memory::SetCursor(offset);
& K# [2 J: I B3 S( |: Z Memory::ChangeByte(0xA1, 0xE9);
" a2 I( X- V9 q( H9 ]; [ Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);" F% A0 c5 o. `- D$ r
5 W; A8 ?$ e; P1 x% m3 T offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);3 Z- e9 _2 x. z$ ?, D0 i6 A
Memory::SetCursor(offset); g+ Y( E B0 t- }6 d$ ^
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);# J# @$ O0 H8 U2 {1 s; P! V+ ?
% i) n" u; }4 `) b& M* t
offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);+ }+ X; u% @ o
Memory::SetCursor(offset);
+ @5 Y: [# I: C! u. l1 s4 Q7 \ Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);% J) | `: C! m1 B' n! H% O
5 d, F+ x7 a3 ^, a //修正关闭按钮$ U+ R0 `! Y4 f% I3 ^- x& t
offset = D2Client::GetAddress(0x8BD90);
3 t5 R, H- E/ p! o E/ w9 { Memory::SetCursor(offset);$ l; K( u1 w" q) x1 j$ _
Memory::ChangeByte(0xA1, 0xE9);) q0 @! S3 z5 ~4 L2 y7 X% T
Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close); C/ ~9 X3 n) p/ Y
# U: U1 N" p1 ` b8 u' j
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
/ d0 c1 t( J% I& R, g( J% F- Y Memory::SetCursor(offset);% i1 Z1 l2 [! ]6 M- |
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
6 f |! _1 Z& @8 J0 L- r8 v$ A% j5 E! ?/ j
3 i( L4 Z# N6 T+ `" o4 n9 f# U
//以下是细节, F) P; C* s7 W, \- K& q' @/ c, W% {
#define getXGoldCoinFixBtn() RX(0x2d0)/ i5 p7 C F- ]3 u$ }# ^
#define getLGoldCoinFixBtn() 329 M1 H, [- A: U( g s2 D+ y1 C
#define getYGoldCoinFixBtn() RY(-0x59)
: D' ?: u. @2 j#define getHGoldCoinFixBtn() 32
) [/ V; a1 |+ |. M8 s- s5 K6 ~#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
' @6 n# z; L+ L! U+ B
. R. f; P [0 i: n#define getXInvCloseFixBtn() RX(0x3db)7 N1 {/ H4 R; d' T/ f8 k- e/ F
#define getLInvCloseFixBtn() 32
( o B$ L0 ^& m$ v _3 E0 y( m#define getYInvCloseFixBtn() RY(-0x63)
8 k0 Q1 b- \: n- a( `' S#define getHInvCloseFixBtn() 32
1 M2 I, \5 U& b& d#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn())
: X$ |2 {2 H$ J3 x
3 N- z5 n! o' V5 _) H8 DBOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)7 @( S$ @& q( ]/ m) u
{! U5 \* g/ }2 y; ?; i
DWORD mx = *D2Client::ptMouseX;9 s7 D9 y v9 R; S, ?
DWORD my = *D2Client::ptMouseY;5 r" l/ b' h. s
if(isOnGoldCoinFixBtn(mx, my))
, C, E F" I1 e/ Y% T& M+ x* ^9 P return TRUE;
; | H- S! B( z$ G9 l4 F return FALSE;
7 d, n- ~/ ]6 J}/ e* U$ D& g' \2 H
__declspec(naked) void caller_goldcoin()
' W! @5 \: m! ]) x3 v7 j{& {) X, Y$ ?( }! y5 B# U
__asm2 `% D5 ]: R7 R1 Y+ I% ~( B
{) p. f, U1 K% D4 e K4 F
push ebx$ y" F! l* u. \$ Y m
mov ecx, esi6 m+ ?1 s, R, k: T' I! q! B/ R$ `
mov edx, edi
2 p9 I3 o1 n, I7 } \ call m_NewStatShow_goldcoin; s ?: Y0 p0 l3 f- L7 u
pop ebx
( ?* s7 r% K( k! o8 ~/ v) @ pop esi8 B) ^( P, i0 n
retn2 k% B: b" M8 C! Z, y4 m; l3 ]
}( ?; q- I5 c2 J( n( p
}
* M7 O! J9 u: Fvoid __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])
6 D0 ]! Q) K% e+ s2 n- Q9 ?2 ]0 \6 A{
1 k* v w& U6 W' B. q if (*nXpos > D2Client::ptScreenSize->x / 2)
, U* e" r w( n1 ?# w L. V& i4 B {
+ }) ], ]& ]) w7 R1 m9 ` *nXpos = getXGoldCoinFixBtn();6 y8 E0 S* M7 T; h9 q; U0 z2 ~0 d# L2 [
*nYpos = getYGoldCoinFixBtn();; |& L( C8 q8 V' @
}8 [) C" P ]! ]$ H5 H2 E8 Y
}
, E# W* z2 k5 B9 ?. ~__declspec(naked) void caller_goldcoinimg()+ @3 a; S) S, ~- [- ?* K
{
4 R2 I3 I2 p9 Y. o2 f/ y2 U __asm
. y1 r1 F9 T% X7 m7 a {
: {4 \ ^' j$ |" i PUSHAD( Z& n2 u0 v' i! c
lea eax, dword ptr ss : [esp + 0x38]' N" O8 t* E9 \
push eax
+ k; v- E4 P# [ push dword ptr ss : [esp + 0x38]
$ ]! q8 ?# c8 ?, r push dword ptr ss : [esp + 0x38]
3 v4 @$ `8 J0 ^ lea eax, dword ptr ss : [esp + 0x38]
' k; b8 \- L0 N push eax' {+ H( S( {* o2 h* y7 W; i: {/ {
lea eax, dword ptr ss : [esp + 0x38]
* C+ i4 i7 I; q, _ Y) X' X0 Y push eax
O U* z/ }( Q- U* O+ ^! f' G% E; F push dword ptr ss : [esp + 0x38]% E' f$ l9 g: N# A5 h
call m_NewStatShow_goldcoinimg" `1 ? i! U3 _1 O+ E
POPAD# ?! b' S3 w! u( e# s) E
JMP D2Gfx::D2DrawImage
! Y2 D+ }# Y. o) q" e9 F }
. O I+ B0 M. q/ m$ I}
/ ^; w9 v( Q: |& |7 g& s! |+ V6 i0 E# wDWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标$ ? {" f6 O! `) r
{7 `2 W# l% Q! H* p. r* ^2 |# ^3 q
if (x > D2Client::ptScreenSize->x / 2)
* [! {) A$ U. P- x a# M {
2 V/ C7 t* c; t; U F5 }6 z7 z *y = getYGoldCoinFixBtn();
0 s& Y, ]' D5 V/ C8 J; Z8 Y8 a9 t return getXGoldCoinFixBtn() + 32;( m w3 K. Q% J0 G+ T
}
0 s0 L; r6 n% c' Q% Q return x;& f; c T$ f( T" `1 r% E4 q5 a
}
& ]" R, ]7 b; E# O- z__declspec(naked) void caller_goldcointext()
. q, b2 |% q6 ]2 R& f{1 N$ I! f5 p" j. F0 T
__asm
Z$ I: C i8 ^# ^ {" E' J1 y9 K* A% h
PUSH ECX; v% u4 P1 \: P
PUSH EDI
+ e* Q& c! G! ^ PUSH ESI/ U4 |! b: b9 ` B1 F
PUSH EAX
6 H% @) y3 Y, C( O/ G MOV ECX, EDX' a* a% ?2 K$ i
LEA EDX,[ESP+0X4+0X10]7 h7 V, m/ r9 @
CALL m_NewStatShow_goldcointext
+ C" W' ~8 {" } MOV EDX,EAX* m0 W/ X! u0 F! X
POP EAX
7 p& M7 G, u d: |# D POP ESI- X6 g/ ]# }5 J
POP EDI
9 Z8 t- K/ T) g POP ECX6 O1 C l: |/ @4 x) X; ^
jmp D2Win::D2PrintString;; L. V6 h$ ]. X7 s4 Z; W0 r- w+ a
}* U% q' o# D; d/ U
}" h, P; ^) }1 y9 Z9 D
! {1 E2 V5 t" m5 X$ a1 pBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y): ^) c0 i$ a( p/ }! K/ X8 A( u
{
2 a# U' R' G$ J0 g9 [1 Z DWORD mx = *D2Client::ptMouseX;
Z. | n$ x( i5 Q Q) T' H DWORD my = *D2Client::ptMouseY;$ S d$ _& D4 M$ R1 k N. x; ~
if (isOnInvCloseFixBtn(mx, my))
2 t1 ?5 X! t& A3 d5 U4 h return TRUE;
# A4 t2 e! [0 ~: w: ^1 Q- q return FALSE;3 m( J* G: F4 t' F
}
6 D" Y6 e V: w+ K- k__declspec(naked) void caller_close()
; d: p6 @' n- A# U{
4 M1 ^1 N1 Q! Y! n4 h __asm
' i4 ?7 e4 J/ M3 T' u {& y# A1 v5 H& i" }
PUSH ESI
4 f* K2 @6 t% C4 o push ebx( x4 [+ j3 S# y3 P
call m_NewStatShow_close7 R4 N$ F1 R1 R* Y
pop ebx* z$ A+ T6 }' {& o
pop esi
4 _% F& N- ?4 z7 C8 B% U& ] retn
% }/ o* v d. N2 N$ B H& Q1 t6 z. u5 i }
]) e* s, J8 n; l}
% {" z6 U- N$ d/ ]3 X- O3 @void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])$ W) m. r( p( Q8 h2 i4 Q" i
{
& h5 L8 j& f9 V$ x0 u *nXpos = getXInvCloseFixBtn();/ r8 {7 |. o; d6 i" f: ~2 V
*nYpos = getYInvCloseFixBtn();
* Y, Z9 N p* d5 T9 {}
* }+ _* n5 c: c: L6 S__declspec(naked) void caller_closeimg()
% V# b( i/ e% P7 F3 O6 U3 O7 }; h3 w{, E" c3 o1 r" G5 _: X$ ~& I
__asm( X" R# ]; Z! ]
{% i% R6 |( H6 _) g4 E1 B. D
PUSHAD
; [8 T- ?: a" V, ?$ B5 z lea eax, dword ptr ss : [esp + 0x38]
+ |/ R) z) y& U$ C push eax. y( b& I" j( ~% I3 s
push dword ptr ss : [esp + 0x38]: S. U3 w: {, a
push dword ptr ss : [esp + 0x38]5 L; ]6 E1 T! [( ]8 H" i
lea eax, dword ptr ss : [esp + 0x38]& X' [* i( w8 `) p. s
push eax: S$ e9 H! c6 N3 ~7 p6 d) a+ }
lea eax, dword ptr ss : [esp + 0x38]
* M0 ?, n4 s8 c, L push eax8 ?! A" n% b) q I! i' t
push dword ptr ss : [esp + 0x38]7 @( g0 U* E1 v& e0 X; q
call m_NewStatShow_closeimg! `0 [' T' p$ h1 V3 t& [6 ^
POPAD
: C ~" e' C& G: s& I2 T: Y8 k JMP D2Gfx::D2DrawImage$ N# o+ p8 L6 R% N0 A2 u8 g! b' |% P6 l6 |
}
9 X; b( f6 Y0 u& y( U3 s}' m' P$ N$ w" l1 @4 O8 ?& Q; p
3 o( K/ V* S. P
8 R# I& q$ t+ f1 t5 | P |
|