|
|
转载/ _, s& C: M9 T. u
BY SJ0 C, q' |9 q1 `0 U/ Z' M
首先你要会搞D2MuitlRes113C.dll与D2MultiResExt.dll(后者我是跟狂三要的)
" O# X+ u" I7 q
) e5 I& M$ U; q! S* f' D2 C5 bD2Gfx::D2DrawImage-100416 p. p5 G$ e2 {5 O/ i) t7 g" U
1、修复技能的背景(不需要可以不要)
6 i( S) p# f) s3 x3 yoffset = D2Client::GetAddress(0x77AA8);. F# G3 s$ M7 {' k3 m0 G
Memory::SetCursor(offset);' w" U! T- A- `! [* ^
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_SpellBackGroundFix);
9 N) W- U% Q8 i9 i- g0 p7 ^8 S7 G
; X5 x0 F; V. l6 T2 A4 @) fvoid __stdcall m_NewStatShow_SpellBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])& O7 p0 e7 J8 W5 v) e: q* M
{
. G7 f" s& b; A4 m //Init data for print image
+ |! c: P+ m2 A7 }& g, a" \ sDrawImageInfo data; D; \" w5 U) u+ H& L! ~
ZeroMemory(&data, sizeof(data));, u% [9 z; C$ o
& i! q# s! R, s# @7 k1 h& w //print background
% T1 T# \) {: d- K! z! _" L8 G# a setImage(&data, spellBackgroundImages);
4 U7 X& J6 C3 d# d# P/ Y setFrame(&data, 0);8 t# _6 H$ K( V* G" f a. j" w+ R
int fixx = 511;; X( B f/ G! a5 k2 V |
int fixy = 9;
4 k0 D! z* A# B) q1 L D2Gfx::D2DrawImage(&data, RX(0+ fixx), RY(256 + fixy), -1, 5, 0);
5 G( U: g' y. g5 I, l' e setFrame(&data, 1);
- H: p$ L: _) l: m& _) p; x D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256 O0 Y6 `0 D$ r: a. i C
setFrame(&data, 2);2 S* l" d$ T2 P: M& p
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
- |. u' y6 w2 [) s O6 h ^% U setFrame(&data, 3);) U. }0 O% o$ W: e x
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
; V1 Q8 Z" H6 ?+ M% x7 R}+ `2 G0 m: ~" }6 w1 {& u
__declspec(naked) void caller_SpellBackGroundFix()# o! A5 C) m. S+ F6 a6 a
{
) c" a p4 v& U/ E8 a! t0 ` __asm
0 K4 y% N2 B1 p# Z5 e2 t& r5 R {
! J8 |; N" ~" b9 s) ~/ D+ e PUSHAD, b" Z1 F5 \1 N
lea eax, dword ptr ss : [esp + 0x38]
. q# ^: P& T# g, z0 N- T2 n, E7 i push eax
& w7 r* i3 H/ S" a push dword ptr ss : [esp + 0x38]' b. U( }* X6 J
push dword ptr ss : [esp + 0x38] W' c5 ^, w# b a0 }
lea eax, dword ptr ss : [esp + 0x38]
! s `) V+ ]; K! ~ push eax- j5 S7 [+ L5 y
lea eax, dword ptr ss : [esp + 0x38]7 d5 D$ b" _: Z Q1 j. _3 p* P5 `
push eax* b6 l- F9 ^+ h3 j, K
push dword ptr ss : [esp + 0x38]" Q1 i8 o3 n' s7 N' V
call m_NewStatShow_SpellBackGroundFix* ? \" A4 J t4 [) |% i
POPAD
) `8 H6 I0 Z/ } JMP D2Gfx::D2DrawImage
* }* V4 H* C9 Q+ l& U# S# K }
, ]1 d d/ I4 F; J( y/ m}
1 w2 v& @ f1 D8 t9 T" h7 r. ]3 r4 n4 c8 T2 R- ]9 `' S
2、我们如法炮制小站的背景& c* H8 X+ ]4 |
8 N" P \# l& k- Joffset = D2Client::GetAddress(0xAB010);
( }/ B3 Y B' _8 r5 p% Y/ NMemory::SetCursor(offset);% m6 r- ]9 t0 N0 D
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_WayPointBackGroundFix);
& N. f8 f& {$ _6 V, s" M8 x
# Y8 o0 i) K- C# J: p- tvoid __stdcall m_NewStatShow_WayPointBackGroundFix(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])& I& W5 O! B) ~3 W1 V9 X
{
/ u1 I: C" Y* o: |8 f //Init data for print image# @/ X1 F$ L) ]. u- z' G
sDrawImageInfo data;
2 q4 t0 U+ u8 j; l2 F, p2 E ZeroMemory(&data, sizeof(data));
6 w* T H6 e& B" @2 v7 j
7 h5 o8 H- \0 M+ h //print background
% q+ e; @$ ]- W# T2 z+ c setImage(&data, waypointBackgroundImages);
- V' y7 E2 f, T0 o _. V1 A& ` setFrame(&data, 0);
0 _( G1 A0 `) g, h. F1 L int fixx = 0;
% n' h" n2 b; h' f- X3 p5 ^9 y int fixy = 9;5 _1 p. }5 Y" i; n
D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(256 + fixy), -1, 5, 0);- I3 \8 v7 ^0 }6 m7 u; S# {
setFrame(&data, 1);
+ v7 Z7 O& K) M8 T8 h D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(256 + fixy), -1, 5, 0);//256
; z/ O5 B& E! M) S8 o6 u setFrame(&data, 2);
8 ]3 T% s) w; }8 b* w+ ~ D2Gfx::D2DrawImage(&data, RX(0 + fixx), RY(0 + fixy), -1, 5, 0);//432
6 ~( h! [% C4 c; ~ setFrame(&data, 3);5 {; n2 s. r6 i& e6 ~
D2Gfx::D2DrawImage(&data, RX(256 + fixx), RY(0 + fixy), -1, 5, 0);
' S# d) \ F2 g: E# o3 k/ W, l9 s1 ?& t! ~
}
. Q: a# Y5 s2 Q2 o3 T. K! [7 K__declspec(naked) void caller_WayPointBackGroundFix()
+ A+ A# Y M7 r# c+ \{- B; }$ Z- |) Q* y3 d& m; ~" H& ?& ~
__asm
2 Z$ ^# ~! ~& Y$ G1 X# Y {( h8 g6 F1 g: z3 H Y8 s) q
PUSHAD( I$ X% N" d( Z( |; S% Y
lea eax, dword ptr ss : [esp + 0x38]
* X: r/ u2 I' f& Z! M push eax1 D8 g p8 Z c5 b
push dword ptr ss : [esp + 0x38]# r% d( k0 ?) |; T1 W6 D* \" ]
push dword ptr ss : [esp + 0x38]
0 I( T) V( ^: l2 @# V" S lea eax, dword ptr ss : [esp + 0x38]
0 W& n- j) c: R5 w9 O5 D" E+ p push eax
: V, F' Z5 {3 E( O* w lea eax, dword ptr ss : [esp + 0x38]
/ _% R( W- f6 T( S' B push eax
. D$ L4 `/ H( o& e2 h% c push dword ptr ss : [esp + 0x38]+ }4 p) }6 b% ]2 |: x6 r9 m
call m_NewStatShow_WayPointBackGroundFix
5 |. w n; F- V; K! ]0 S POPAD
5 ]% p) [ Z1 ^, t+ {& K JMP D2Gfx::D2DrawImage. F5 J8 K' H6 a
}
( P6 W% Y Y9 q5 C$ j}7 L1 u) v2 a/ ~# w
: ^1 O0 i. t0 }
3、以下可以搞16*16超级箱子-腾出我们需要的边缘/ ]% n8 U" @ s0 i6 R7 F. ?% n- g" e
腾出我们需要的边缘(事实上可能会出现一些黑边,但是我没有修复)8 c$ u2 R# V* W, h0 I9 H" D
{1 e+ P6 W' f. d
class D2MultiRes : public Library<D2MultiRes>
9 w6 \: c2 f r; j3 ` {5 V Q7 J1 m: w' g; ^ E8 ?
public:- b: O3 `. w [/ U& k* V) Q
static void Init(). W8 ?4 n9 _! V6 Z% p& S9 w
{
$ E# o! R, ?; J+ E0 L$ Q J2 t n Name = "D2MultiRes.dll";
2 y# a+ J+ B3 S Offset = LoadDiabloLibrary();
( j9 K% p- U8 G }" P$ Q. M9 W, j9 ]0 P g
};/ e- d8 ]5 @" g" b
D2MultiRes::Init();* Q# n& M( a% F# `
D2MultiRes::HookLibrary();
, U W# ~- ~( i: F
2 G8 V( m8 }: m7 V* O8 E1 k3 b N
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2468);$ [. d1 p5 L# r# R, ^0 H
Memory::SetCursor(MiscFunctionsOffset);" l# H$ ]( x2 D& F+ I* N5 _
Memory::ChangeDword(0x1b0, 0x200);
6 U; Y9 L% V) r+ J: l/ ~4 P5 h& E/ W1 [& F6 p" }
# Y5 W; D) f3 U* Q MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b0a);
( F" y2 u9 ~7 N( W9 O6 g( C- { Memory::SetCursor(MiscFunctionsOffset);# Z/ P V, _6 {4 ~, l9 u. S
Memory::ChangeDword(0x140, 0x200);/ z! k# Y8 k% ^
5 j5 Y) r- v$ z4 {' {1 }3 x
9 O/ G- ] \. N# N MiscFunctionsOffset = D2MultiRes::GetAddress(0x2b10);
9 j6 I* l' }# z, U$ s2 M Memory::SetCursor(MiscFunctionsOffset);
! V) T% W% U9 R8 V. ?* ^$ {4 { Memory::ChangeDword(-0x234, -0x299);//280-295 290是上面多一块 310是下面多一块
- g; v% ~8 o0 a8 a7 r' {7 c" w4 ]8 q
MiscFunctionsOffset = D2MultiRes::GetAddress(0x2bfe);5 v. L' z) x2 E& ?: v6 d# p1 k0 F
Memory::SetCursor(MiscFunctionsOffset);, F' S, i, E* K; ]! J. a" z2 {
Memory::ChangeDword(0x200,0x299);//下边缘 299最大
5 K/ s8 N) R+ o2 f( Q: k) H& T" k# k* G4 r; a% a6 T
MiscFunctionsOffset = D2MultiRes::GetAddress(0x3301);
& O3 ^1 x0 D) w+ L: n1 F: [+ G Memory::SetCursor(MiscFunctionsOffset);7 m+ x2 D: [; R# _2 o
Memory::ChangeDword(-0x280, -0x400);//这个不要动
0 u9 m, ?+ `6 v4 g }1 k! G' H) |$ N. g6 X+ D, b: M; h
: O! G% E6 G1 i) K5 {/ @ y4、快完成了,是不是发现金币啥的位置不对??
0 ^; H! d- U) u; o* r& u& y# {8 n5 Z( I( R5 e0 y3 t9 x6 Z1 @, ~
//这里修正我们的装备栏
2 T K. f! Z; y7 Q; Q offset = D2Client::GetAddress(0x99B6C);( G3 I2 b$ d1 G% Z( R; C
Memory::SetCursor(offset);7 k$ A/ [' p! ` L
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);; n* N' o: a' F1 y( v( V; @; P! s
' ^1 g, V6 [1 j; D& t) T8 T( n
offset = D2Client::GetAddress(0x99BA7);. u+ ?9 a* v+ e1 e, W
Memory::SetCursor(offset);" h5 M1 q9 Y, w/ c5 Q* `/ D! k7 Z
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);5 f. B# x5 S% x! I+ ?8 r0 u* o
6 ~* D4 A7 U9 y1 p* Y9 j. o
offset = D2Client::GetAddress(0x99BE2);
/ G1 O! ~; Y/ P: G% T Memory::SetCursor(offset);7 ]+ a5 l7 @9 P4 B, f) o" `% d
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);
. D& w& e+ k% x' y- P# }
4 [! }: R5 J5 v7 F+ _ E- D7 I* I offset = D2Client::GetAddress(0x99C1C);
7 L- h2 t' r9 Y8 |( t; |" k Memory::SetCursor(offset);
2 Z: ]6 Q1 `8 Q; ` g Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_Char6Fix);) _9 Z/ Y5 o) k# J- g/ q# u) @
% |5 v3 f8 ?2 u$ t" f/ d/ z //取消两个popup,偷偷懒不过分
8 `+ k6 d/ s4 l+ N( g' g) w offset = D2Client::GetAddress(0x9386d);0 B" L0 T" n* K
Memory::SetCursor(offset);. [* E' @2 y4 a Q* ^ `
Memory::ChangeByte(0x8b, 0x33);
5 N! A1 e V7 H& z" U Memory::ChangeByte(0xc8, 0xC9);( [4 D( j- Q1 t# g; c
offset = D2Client::GetAddress(0x9390b);
* s& @5 p4 x4 Z6 g* o$ Z Memory::SetCursor(offset);5 s' j3 \ j; B6 N( L
Memory::ChangeByte(0x8b, 0x33);
$ c! M6 }& `3 r6 i/ }+ W/ x- s Memory::ChangeByte(0xc8, 0xC9);5 T- o- Y" d) a3 c
% `( O( [1 b! V1 z; X! o //修正提取金币
- Z @! T' c# E- h) D- B! G offset = D2Client::GetAddress(0x8D3E5);
0 h: l. V3 g7 Z$ ]7 p Memory::SetCursor(offset);( `9 `; I. p: ]: B/ t
Memory::ChangeByte(0xA1, 0xE9);
2 f2 h# d3 Y( B& P# U% a+ |, f Memory::ChangeCallA((DWORD)D2Client::ptNegWindowStartY, (DWORD)caller_goldcoin);" e% v0 Z7 v" i* Z5 X' i" ]6 _5 x: `
8 P# a3 s' q0 ]. X" |
offset = D2Client::GetAddress(0x6FB3D2E0-0x6FAB0000);
7 x* B9 |" n+ K: k3 n6 K Memory::SetCursor(offset);8 S- z, m$ n- c6 g+ u4 l; v: N% ]
Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_goldcoinimg);* P+ J# l* H( F ?2 t
" \: y1 p8 |' y6 B# K
offset = D2Client::GetAddress(0x6FB3D267 - 0x6FAB0000);
/ A- v, b3 k1 ?! j% N+ { Memory::SetCursor(offset);; D/ {9 A' t- S' b0 `' Q# \/ b
Memory::ChangeCallB((DWORD)D2Win::D2PrintString, (DWORD)caller_goldcointext);- h1 V5 H8 i/ N' d# E$ f
+ P, f' u$ [/ U2 d5 Q //修正关闭按钮
7 u9 R3 K- x* _6 v offset = D2Client::GetAddress(0x8BD90);* _9 s7 r8 z# a( T9 N7 N( o p
Memory::SetCursor(offset);, G* Z. s* F) L3 i
Memory::ChangeByte(0xA1, 0xE9);
9 n) S( ~% r3 U& h) | Memory::ChangeCallA((DWORD)D2Client::ptScreenSize, (DWORD)caller_close);5 G. Q( G. p: X- l2 T7 N
+ G' ]2 Z, K/ V6 v9 _* Y8 Y" @
offset = D2Client::GetAddress(0x6FB4A721 - 0x6FAB0000);
4 b P3 P8 G i0 l5 \3 Y W" p Memory::SetCursor(offset);
7 F6 R3 `0 S% C* i0 J. R; @ Memory::ChangeCallB((DWORD)D2Gfx::D2DrawImage, (DWORD)caller_closeimg);
( H! z }4 U0 m! }& a- H+ y% P( I) U2 p, z9 [% S2 P1 o- e* @
2 ~6 }- Y& l- m$ l& ]! T% b5 d//以下是细节0 V+ C# s& U, X
#define getXGoldCoinFixBtn() RX(0x2d0)3 m* v6 @! V. u9 n
#define getLGoldCoinFixBtn() 326 N9 t" E8 X ?) |& w' a
#define getYGoldCoinFixBtn() RY(-0x59)
, r0 V' M! j: r0 s6 T: o3 x5 Z#define getHGoldCoinFixBtn() 324 t0 g; |! q9 Y' M
#define isOnGoldCoinFixBtn(x,y) isOnRect(x, y, getXGoldCoinFixBtn(), getYGoldCoinFixBtn(), getLGoldCoinFixBtn(), getHGoldCoinFixBtn())
5 W; W) T2 N2 N1 d; Z* I; c6 S% j2 [6 x/ G+ P% V. C
#define getXInvCloseFixBtn() RX(0x3db)
) n$ `! X0 c; O#define getLInvCloseFixBtn() 32
0 |& c0 T' k/ n9 i! c$ x( ]. d#define getYInvCloseFixBtn() RY(-0x63): g- ^& M. q8 F
#define getHInvCloseFixBtn() 32% s) A4 G {% l7 B h
#define isOnInvCloseFixBtn(x,y) isOnRect(x, y, getXInvCloseFixBtn(), getYInvCloseFixBtn(), getLInvCloseFixBtn(), getHInvCloseFixBtn()); e2 ^! n8 w# X. h. w' x. B4 a
9 z. g0 `3 M OBOOL __fastcall m_NewStatShow_goldcoin(DWORD x,DWORD y)
7 c3 f: ?. O1 l* r& \{
9 R9 ^! a3 E, B7 @1 i/ k6 N DWORD mx = *D2Client::ptMouseX;+ s9 ^9 W. }8 @7 g, C+ }
DWORD my = *D2Client::ptMouseY;& f- Y' c/ \3 ]- v1 M9 c. L
if(isOnGoldCoinFixBtn(mx, my))) u4 K! F% A: S* Y$ [0 }
return TRUE;
j- E! Y6 H, j return FALSE;: S L8 `& a, L
}
% r8 u$ f' X8 d$ T( _+ C# x: ]; s0 j__declspec(naked) void caller_goldcoin()
. t) B1 Y0 R# _* e6 ?, T2 u* f{
; W) I+ m8 p: _ __asm$ Y5 U3 D2 n, o( e) {
{3 x0 ?5 V) \. U8 n, N
push ebx1 w6 L: D3 ~+ B+ ?% k4 I% h) g0 }9 E
mov ecx, esi [ P! C/ ^! d- Z- @% s
mov edx, edi% B4 `; A0 B6 G
call m_NewStatShow_goldcoin
B* S" G: @' o pop ebx
( T5 p V" b8 r7 S% B9 F6 b: r pop esi
+ Y. ?! b8 [2 l; h) r* w, v retn
/ p/ r! R) J r( X }5 N% p1 B4 h- W l* q# Y: H
}
( z/ R: i5 o6 D. Rvoid __stdcall m_NewStatShow_goldcoinimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])" I0 \5 j2 \( P. Y% J# T2 Z
{
5 D, U: w+ ~" L0 f if (*nXpos > D2Client::ptScreenSize->x / 2)9 I J8 C6 {5 e0 @: \
{/ b& k; z- E5 j# c1 m* A8 y
*nXpos = getXGoldCoinFixBtn();4 [; j1 E- u( t. W: b+ K0 d. f- u
*nYpos = getYGoldCoinFixBtn();" |: ?4 N5 h* x) k+ {
}
8 J e) ]. k5 ]$ V}5 e4 c4 O6 j0 @: v ~
__declspec(naked) void caller_goldcoinimg()
( L+ ]1 A# Q/ o{- N! I& E- w* `6 L( ^) O
__asm O. e) F8 p; D- x n: n
{2 m+ i' V0 Y' y+ }' x1 R! i: {. p
PUSHAD) l! \7 N# D4 G0 m
lea eax, dword ptr ss : [esp + 0x38]7 P. V* x; W( u3 X1 ] w/ [1 T
push eax
2 v) X& K; z! |, P3 u5 p push dword ptr ss : [esp + 0x38]/ v4 i* {9 [: O1 x. Q
push dword ptr ss : [esp + 0x38]
9 S' X/ T1 n( t1 k1 ^# g( R4 `" | lea eax, dword ptr ss : [esp + 0x38]0 i1 C/ A& w. D4 z4 X0 B+ u4 T" j
push eax
5 ]& \- x$ D0 r0 N% `- x; ]' q lea eax, dword ptr ss : [esp + 0x38]
4 Y' O" v/ k. d5 P% ~ push eax
5 K, V ?7 }. k$ ^- D push dword ptr ss : [esp + 0x38]
9 |8 m) M p+ u+ ?8 ^5 t2 D% v call m_NewStatShow_goldcoinimg7 U& ?0 ?0 A( h, n+ R
POPAD, @; H ^# A7 B$ n& v
JMP D2Gfx::D2DrawImage
! d! F3 \/ o+ ] }
8 z5 z% Z+ |& z% `}
$ e- b. C/ }* v! f- {& t& oDWORD __fastcall m_NewStatShow_goldcointext(DWORD x,DWORD* y)//返回x坐标, `! W# ?. c" a5 F9 ?
{
5 p2 e/ i( W7 r: R; } if (x > D2Client::ptScreenSize->x / 2)1 s6 Z3 D2 H2 o: z
{
9 \( o6 o2 D# w( B0 R8 z/ \) F *y = getYGoldCoinFixBtn();8 }- o- v: N( i7 N; @( w& C, T
return getXGoldCoinFixBtn() + 32;1 j* C) ~* a9 J! e' A& ~4 F
}
* T, }4 K. L! R2 f, B9 s+ y* { return x;
' w7 k- d; A7 {4 y- v: E}
+ c o+ d- E$ N7 f7 \! M) [6 {% G__declspec(naked) void caller_goldcointext()
1 ^ t" {' w; R8 @& E; a1 o" b# i{
* _0 z- l" P* K% A- ^ __asm! l- T, _9 ]& M8 _5 e
{
: s# t! G7 }8 c# {" O( B0 m, c) B3 T PUSH ECX. B3 G. M6 y8 B' t' z" C
PUSH EDI( J5 o: f* u8 w0 v5 p, g
PUSH ESI
9 p9 i* N2 G; I) _ b# p, t PUSH EAX/ H0 z# _+ g0 {% ^
MOV ECX, EDX* a) T/ Q1 R9 c
LEA EDX,[ESP+0X4+0X10]
: @" ~) T: c6 y* h; x* W CALL m_NewStatShow_goldcointext
' H- |; q3 y' Y: I MOV EDX,EAX5 }9 k6 g4 I' ~" ?- B
POP EAX
& E3 R+ I7 b8 G2 v POP ESI
3 f4 q8 Q% H* u. Q# E& _6 s POP EDI5 a4 R, a/ y) s9 q2 D# U
POP ECX
" X! a, `. Y# l( [ k' l7 t. h jmp D2Win::D2PrintString;
4 J" g9 i! E2 M9 e2 n9 C: ] ] }' i7 _9 M+ M2 n: K$ I
}) t. b5 Y! S1 d$ c9 m) v
3 v4 ^% f( u" T, M+ ^0 tBOOL __fastcall m_NewStatShow_close(DWORD x, DWORD y)
/ e& m) T$ b- U; T" `7 B{
( ~7 M f( S5 [1 [2 O* t: F DWORD mx = *D2Client::ptMouseX;2 A* I& V* T9 s+ @
DWORD my = *D2Client::ptMouseY;1 U' G- m& D K! C/ n" T( E( r- r
if (isOnInvCloseFixBtn(mx, my))/ ]7 h! p# R; b$ ~
return TRUE;
) M* S9 x* V% _5 a! B2 Y( W N return FALSE; I9 u! D4 l& w; P, } F" o
}: f; K( h) H% L' J. w* U
__declspec(naked) void caller_close()
: r5 j; L- K' _% r) b{
) A, T* h7 P1 \8 m; |( u$ R/ | __asm- P+ c9 q4 t+ g7 u: Z# L* s
{
- e- z0 m, s, N: s; i4 T2 l) \2 R PUSH ESI8 T4 D+ s. N( h2 I/ F
push ebx. Y7 V6 y, y2 Y: O
call m_NewStatShow_close$ y2 ]5 i' H- G/ m0 C
pop ebx3 u. c t3 n% P! o$ J# G
pop esi
~: S( N* \" ~4 U/ D, q8 N' _ retn+ x+ W' f. B5 b0 f. Y+ M
}0 Z0 q% D( p( F) q
}; P9 Q# f/ I; G, g/ o6 l
void __stdcall m_NewStatShow_closeimg(sDrawImageInfo* pData, DWORD* nXpos, DWORD* nYpos, DWORD nGamma, DWORD nDrawType, BYTE pPalette[256][256])" K- B% P% w% J' B2 f m/ K
{
9 Q7 \; j# U5 ]( _+ n9 t3 m. {, } *nXpos = getXInvCloseFixBtn();
( F# d* r c. |2 {6 L' b5 J: Q *nYpos = getYInvCloseFixBtn();
) M6 E/ f1 j) l k! S0 M" R% l1 {8 @3 ^}
, q% N( h: Q1 D0 G3 l8 Q r! w__declspec(naked) void caller_closeimg()
/ X) U9 \ W @% _$ F{
2 a2 x$ o+ d8 S. p4 R4 D __asm
) y: x1 u$ j# i9 T {3 d4 e% E& p* R9 [2 e G
PUSHAD
) t4 K5 P$ F) A& k lea eax, dword ptr ss : [esp + 0x38]
; z3 H6 Y* z/ w5 q push eax+ R8 w5 Z% I; J" `! [3 U$ N% D
push dword ptr ss : [esp + 0x38]
/ z2 L5 T6 l* u- S" |. {% \ G$ y push dword ptr ss : [esp + 0x38]8 S1 @- j( S. x& }( `
lea eax, dword ptr ss : [esp + 0x38]
- q! W2 x5 h" P/ _4 [7 H push eax
$ w& Z# X9 V( w lea eax, dword ptr ss : [esp + 0x38]8 l$ ^# ?. h, x" k. a& K& a( ]
push eax; q# t" k$ X( g. G
push dword ptr ss : [esp + 0x38]4 o6 Q2 |/ ~# T' S: p
call m_NewStatShow_closeimg
& g% |' U- L+ q! I' h POPAD. y9 X( o& Z; L5 [6 h8 ^
JMP D2Gfx::D2DrawImage9 n5 u6 s5 N8 A2 H: s! m! |( m
}: r, P% W( K. Z
}9 X7 ^0 M. ~, m6 r+ x- h
0 ~. U" O6 ~4 |3 t: R% a* n4 h
2 ?8 f' @% E1 b
|
|