|
|
转载
. ?- |( Z, f& o ?. {; e自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
* b# A* r& `" j, |% B( a: ?, D; K1 C# ND2Client:/ ~7 X" w- f7 Q6 |; U: z
6FB20AE1为拦截输入框(用于获得命令)
/ r' o% K0 P; x0 a# g% V2 q6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发/ y0 O' |: P/ C7 O: q
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
. {5 u+ E1 C. n6FAF4230为hackmap的loop点 我用的hackmap导出位置6 n- v# Y3 m/ p8 k
* v+ w, H% n+ K6 W) B9 h# S9 R7 ^4 d" K
发包函数:
8 y# I6 N {' y! L$ Eclass D2PKT_ITEM
" @4 { h+ P N, S' S{# H" \2 ]- A" \' X/ ~0 H% z# F b. [* _
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上& _9 w3 x& N, M8 Y. k* b# y
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多9 q3 N( P8 c9 L
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
' O* G- y* W- `/ e#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上; N( u* d" g5 Q5 p% T. |
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
: u8 M2 q( q: ~- a0 M* d#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
6 e) w# t, Q: ]' t. w! s2 @#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏! u L) v- P) I; N$ P# N2 R
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
6 a+ M+ A4 e* ]+ P2 t# S- l$ Y#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
6 e4 `% @: w4 o! r- W1 R( v#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
" N+ I- z, c& u6 o% Y! [# P#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
8 u0 Q' k2 k; [3 S" D#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
! ]/ `' t/ X+ q#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
3 `4 k' e% x( }' I8 P" p( R#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上, M- T& ~1 A3 Q: m
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -/ L; ]2 Q. r) a* E9 l: N4 f
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上0 p* j9 V i' {) p6 g( C
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -; d' z$ y- O( w+ ^0 e
% y N) N( n! j#define PacketItemMaxTick 150
3 V+ W8 C1 t3 h* T w* n5 y9 @) p0 F7 P1 m#define PacketItemPickUpTick 20
/ @6 a7 m. j& f7 R* r0 o3 M/ s. c1 m4 w4 c# B& J
private:
% x, R3 I; @1 A* p0 B4 ? static DWORD _PKTItemTick;1 m6 O. X9 S' B: t
static DWORD _PKTItemAction;# g, {0 ~9 |1 _6 f { ^
static DWORD _PKTItemID;
, h- [6 G$ H8 p$ F+ j static BYTE _PKTPKTType;
# V# u( e/ n* f( Fpublic:
" b8 h( W4 ]5 K8 H2 i static DWORD PKTItemGetTick() { return _PKTItemTick; }- L7 l4 O/ Y) Q4 K$ p5 q) }6 p
0 d( |9 D* n- s/ J, D+ i3 W static void PKTItemRelease()
8 H* W) [4 E/ P d/ Z; y+ j/ Z7 r {
7 ]! U6 U1 R& o: B2 C3 j _PKTItemTick = 0;
6 X v4 H- B7 Q& j. C2 O8 R: { _PKTItemAction = 0;3 y6 e ^1 m1 m, T8 a: ^, ?
_PKTItemID = 0;2 @: M. ~0 C5 k: I- R
_PKTPKTType = 0;
9 @+ B5 b5 r8 V5 M6 K7 w9 O }
* @8 O3 `. \) Q2 Y6 c" t( e& X/ ]6 R! ?
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) # z, {8 ?2 P6 h0 a# P* D: ~
{
9 [5 D) B; e8 X8 P4 D9 g. V3 H _PKTPKTType = aPacket0;/ }- L9 K" l8 d6 I% q) T' g. u
_PKTItemTick = tick;: }$ O7 h" ^9 }4 T2 b+ D
_PKTItemAction = ItemAction;
8 D1 O: G$ @+ k1 D- w _PKTItemID = dwItemID;; [+ X5 n x* i. a7 T* Z) p
}+ }! s$ ^ S8 }8 }. t+ Z( X( |. a
) ?* Y2 C# ^$ c, n
static void PKTItemTellW8(DWORD tick)
# Y: V7 p% I* u( S1 S) D- J& K G' P { B6 F- D, y) [
_PKTItemTick = tick;# _: T3 B& g, y0 t# }1 f8 V" R9 U
}
4 `+ e' d" f: S' q$ P( F
1 J% e1 U, }! t+ s& J {6 ^) v9 n static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor: W5 K6 f/ b# `" W- _
{
8 B, u) P5 V) R( B7 a3 r if (aLength >= 8)
; H" d" i' ^( l% F% I: F2 y( Y' A {/ v/ Z; H7 S4 {% s7 i/ g
DWORD dwItemId = 0;
9 T& k; {, _5 D. b4 K! j memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));) r5 ~; J5 D- |0 b! l9 Y4 Y8 ~" X
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE, g& V" x* s! n# r2 s5 w
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE( m& q" B& K9 k8 V+ J4 p# w
&& _PKTPKTType == PACKET_NEWITEM
0 ]% F7 T( m0 D: [ )0 R; p# A- t {7 o! q9 g) ^* R8 Z8 Q
{4 p& i) h9 A* J7 m
if (_PKTItemID == 0 && _PKTItemTick)
) e" }: b* Y+ {( r* z, D {
! F- L1 I% Z [: c5 h PKTItemRelease();
% }' E3 }' Y) D }
* P, O$ r) V/ Q' U8 x else if(_PKTItemID== dwItemId&& _PKTItemTick)& U8 s6 j1 ~& n. w# H
{* T5 a7 }# k. B1 C6 D& T% m- s
PKTItemRelease();
8 h. j7 a1 p. _, i: j/ }! W; e }
( m) Y1 Z, E+ I l" w% n }
# n* C6 Q% V$ H
$ \4 C9 A: }5 }. j* A* E# n) ^ }0 t7 K, b$ o9 q; M. P, ^
}
2 c9 K5 n. X! }! J( F/ i; j: `' N/ r7 G
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
' B3 ]- k- M- f7 x# H {
6 V4 t Z4 [ h$ C% a5 y/ K' f if (aLength >= 8)
0 z7 f6 H! p% j {! i! }7 s& m* l+ J4 v. W( k6 ^
DWORD dwItemId = 0;4 e# \! D' h5 I8 h) t+ M5 Q# G
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));3 ^$ x. A+ k! n% c2 \: }1 J3 E% u
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE z/ _/ v5 `1 z2 X# J. K4 I
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE* \; i; N7 A+ ~% A1 ]8 N
&& _PKTPKTType == PACKET_ITEMACTION4 p8 O, N3 ^( {/ c, A
)
) s- }6 j6 n9 {; `5 | {
3 T. _, G+ h" u$ V1 B; h if (dwItemId == 0 && _PKTItemTick)& w+ y" Z2 a+ Q: f0 [ V
{
" c/ J' F, z( k" N8 P: f4 ` PKTItemRelease();
9 k4 v; c6 e8 ~/ I6 }0 x% t }. B- D: l3 ]* j- F
else if (dwItemId == _PKTItemID && _PKTItemTick). ]( {2 p% I! j4 ?/ z7 S
{7 f( u: r3 M! y' p/ F0 Q0 q
PKTItemRelease();
# j, w! s& a" G9 j | } d' ?/ e7 t2 ^7 ?
}
6 P: t7 e& z( M T. ~ % L# s# b8 f) p/ U5 U8 }1 p
}
7 b$ A, D1 d- Z! M4 h5 b }
4 {. G; x4 z0 J( @9 [ x: E% s
( u- e7 Z4 R; @! q6 _0 J static void PKTItemGameLoop() J" z" k% m& [# r- t
{- p3 s9 J7 R2 J
if (_PKTItemTick > 0)6 T8 v3 S$ @$ s
_PKTItemTick--;; s" E2 j4 a4 h K/ t3 Y8 e
else if (_PKTItemTick == 0)
3 G- x) }( B, |) J0 B PKTItemRelease();7 h0 U7 s' Y" h' H' Q
} d$ t6 _/ {3 _4 x3 z$ I
9 e% T5 {. K4 c* x1 _/ X" r( q
static BOOL PKTItemCando() / D" v H( @# g& K6 R
{
- L) d/ E W: [ if (_PKTItemTick == 0)return TRUE;; t5 d. h" y& e) _4 {
return FALSE;
7 m1 [+ V/ X8 u/ `# ^ }9 l! Q4 V. I( f4 g0 c8 v! f5 \- a
% B# R# B8 e: S7 ?: @% X
static BOOL BuyItem(DWORD ItemID, DWORD npcid). h5 R' S; H' g* }7 I- a* C
{. n( w: Y0 f9 ?1 T" e6 s7 N+ u
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
4 @ {; J% A' y; s, p( s' U BYTE aPacket[17] = { 0 };8 N9 }! x- i! g' I
aPacket[0] = 0x32;
" J, M* K. y" `8 ^- t4 f( X7 v ::memcpy(&aPacket[1], &npcid, 4);! A& y- |- t3 y. I& Z! P
::memcpy(&aPacket[5], &ItemID, 4);1 E K* N% _! W" B5 ~
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);7 H+ `( o- u' m5 o$ m v4 X
D2Net::D2SendToServer(17, 0, aPacket);
: l3 a# I3 k0 ?" w1 b( r( q return TRUE;
7 _6 J! Y% K* E; H; u2 x5 N } Y3 ^& b/ w/ ^) S0 Y! J% k1 R
- p, {" }7 \1 ?. Y
static BOOL SellItem(DWORD ItemID, DWORD npcid)' |6 s7 W5 ~% |# M: g2 g2 h
{
2 l) M* ]" E- y b! C PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
) E1 b) v" @% Y K BYTE aPacket[17] = { 0 };
m2 G! o3 K) @8 U6 H# K! T' O9 h" [ aPacket[0] = 0x33;
+ y6 E2 r, H/ O$ U; `: F" Y ::memcpy(&aPacket[1], &npcid, 4);
6 p8 M% s4 h! y$ y3 v ::memcpy(&aPacket[5], &ItemID, 4);
- ]' c8 H: e5 O* K //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);3 ]. H$ l" E5 l- f# o4 J: w
D2Net::D2SendToServer(17, 0, aPacket);
$ ^! {% U& S- i/ I8 v3 l# j, T' M return TRUE;( H8 O5 s7 z" ^" V7 ~2 W! f/ C" |
}
& m" L/ `( ^0 D$ A% E, g2 F" k5 J9 k5 r& j4 W9 j5 \
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);3 m2 k! ^1 O3 _# P1 o& Y
. L& Y- [* M/ C5 e" ^; a, V
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
# N I5 n: T& ], y% j. m
, n; Q. ]& y* e% d/ j v4 ~ static BOOL OpenCube()
7 Z+ I& H/ Y. @1 R5 E8 y4 A {
" Q# m. C( V! L; n& ~& [; i( ~4 t if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
: N* I( n9 {2 ]- K
2 O, Y; ?; j/ H& t; m5 B3 Z UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
* `8 e4 L: }! P2 e- o9 F if (!pCube)& C- c" V5 g# d2 g
{/ Q2 x5 E; v) M$ g3 {* C
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
^, f3 h h0 P1 h; _/ u$ }% C if (!pCube)
; q0 {9 Q$ c- O& ?/ } return FALSE;
" \5 `% t4 ]. L( z3 {; V2 k }
5 h9 n7 d) Q! R/ r PKTItemTellW8(PacketItemMaxTick);! S5 a5 G4 M7 ?- d6 }
/ G9 X: J6 y4 W; C+ U; x" ^' } D2CoordStrc mypst = { NULL };
! f( l' u1 G! |2 c% \ D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);( g+ A* D8 A0 J" u
& u& c' E7 {4 R* k! w- Z BYTE aPacket[13] = { 0x20,0 };' H8 E. v$ u. h( C/ f! m
::memcpy(aPacket + 1, &pCube->nItemNum, 4);7 ]* j( l% }' G6 t: d
::memcpy(aPacket + 5, &(mypst.nX), 4);+ _. U; `, \" ]) X' R0 i& ]6 r
::memcpy(aPacket + 9, &(mypst.nY), 4);- G$ B& `1 t. c# k5 _
D2Net::D2SendToServer(13, 0, aPacket);* M+ H7 h1 J1 S
return TRUE;: c- W# n0 J& l( r: P: |
}
/ C8 p' Y0 H& q: [
2 C! l( S/ \( h2 R8 Q! ] v' ? static BOOL ToInvxy(DWORD x, DWORD y)/ X @, O" z( m
{/ x$ m/ v# K( Q- I5 ~
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);& |5 l% r' m% Y* ]5 H, c
) L- \0 w& }4 G. I# T; I; ~
if (phand == NULL)
/ i% n( o7 o- y return FALSE;
" D. N* R% j- @
6 X0 V" g; r5 q8 ? PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);2 j8 q/ R, r0 j# H7 b" H* b, F0 [0 \
* c# C- `7 Q/ z' [ BYTE aPacket[17] = { 0x18,0 };
1 p( u$ `" Y5 E ::memcpy(aPacket + 1, &phand->nItemNum, 4); V( h% Z) ~0 Y+ x, l8 g( J
::memcpy(aPacket + 5, &x, 4);/ p9 \. b0 E& Y$ w1 ~. a$ a5 s6 ]0 j
::memcpy(aPacket + 9, &y, 4);0 O9 \; M# u q+ }6 d
D2Net::D2SendToServer(17, 0, aPacket);
" H! ]/ J+ x; B$ `9 G return TRUE;. f" b; z' H7 p
}
" W# A9 B; E# o- } k/ F4 z
* Y9 x& x, o7 v& |7 _ static BOOL ToInvRandom(BOOL bBagFix = FALSE)
, a9 Z+ y+ W/ t2 e+ [6 W2 H# | {
$ h$ a/ n; f5 ]0 l' u UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);3 a- | x' I0 i5 X, e" A {
if (!phand)
0 z6 Q% _* H' h( ?* _- x9 V8 r return FALSE;
3 i8 x% m- U+ W: K0 @( B" P8 m$ E int desx = 0;' j: O8 G9 O9 ~" C8 ]' m U
int desy = 0;
# S0 g5 n4 `. u( q' A/ X if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))) o5 J) u9 v: P+ e
{
7 O8 P1 _; ^% O. [% e8 V \ ToInvxy(desx, desy);" i& T O& z1 U* s
return TRUE;3 X3 ?2 R7 G% S. n# c
}
, k6 _# A7 i$ V2 Q! i$ H H h5 A- l2 L return FALSE;
2 o# N! K/ m. e5 I) v }7 G2 g/ [9 \& S
' {3 i! W/ t# f# q$ ~
static BOOL ToCube()0 m9 d: p* m+ u
{& k# p- T: n$ Y1 }1 B6 I
if (!(*D2Client::ptPlayerClient))return FALSE;& R8 H4 c" Y" O( G" Q1 S+ d
$ d7 l _% Q7 D6 S' J0 f UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);7 H; y ^+ P# T2 x
if (!phand)return FALSE;
; m" p1 L5 U- b
0 c& s8 S) b+ | u+ t UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
+ Q6 v" {' T9 M b6 _$ A5 o- \ if (!pCube)1 M% Q; G$ c& F5 [0 V: j3 @2 t
{' J% B9 n/ D1 Z4 c
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
5 B p3 A8 [9 e; ~& a* {8 ? if (!pCube || !pCube->nItemNum)
6 I' N4 K B. l7 p# a. d return FALSE;
2 K7 ^9 S- ~$ m; @! A }
6 B6 M- v v5 G
; V2 F" P0 ^- X) ` if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))! p) A* A' | Y" F# f; W0 G
return FALSE;
$ v' [5 ]1 a8 e9 I! t9 I: m) M0 e) c0 k! W0 h
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
: S0 P. f1 J) [" }$ r9 c" ~
; e( K) C1 G3 X BYTE aPacket[9] = { 0x2A,0 };
& R, [( K5 [: |* K- I6 _ ::memcpy(aPacket + 1, &phand->nItemNum, 4);6 j% M% m) l' o( u
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
7 Q% P* c4 D/ i, o5 m D2Net::D2SendToServer(9, 0, aPacket);
2 q) {$ l2 V* F" N return TRUE;
. Q* R6 M4 ]) h5 @- M9 ?
9 Z% g/ T& }0 X. h1 R }
1 ?: c& N) |, H
& u6 ^: \3 F: Z! _ static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
+ A& F$ z1 W" N6 b3 }' e
% m+ `! ?$ t# L static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存, s" |/ u5 S3 |
{
0 r5 Z( h6 d5 ], G& J D2CoordStrc mypst = { NULL };
# W+ w9 P' d# @: o D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);. N4 C, y) @% I" y$ j
8 F. @$ I( l+ e, F! P: _ if (!mypst.nX)return FALSE;
' ^4 e0 z/ T$ f9 p# x5 p8 Z
/ g# o, `( e- c% ]$ h PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
+ G* h- R% k3 O d# R _7 G# G- h8 {7 Z8 |
BYTE aPacket[13] = { 0x20,0 };3 Z" Y$ r, T+ L1 C' I( i
::memcpy(aPacket + 1, &dwItemID, 4);
1 K: e3 `) s# u0 n ::memcpy(aPacket + 5, &mypst.nX, 4);& V" r" K" A4 c0 i9 n
::memcpy(aPacket + 9, &mypst.nY, 4);
! t5 ^& T* \" P7 x9 q //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
) m4 a; w; {& c& r- B D2Net::D2SendToServer(13, 0, aPacket);; q4 {1 N/ u. O1 h) `8 S2 q
return TRUE;
8 Y/ v b$ s2 Q" W# a }# \% o0 y4 _ E7 Y# |
# C4 Q3 h9 u' m7 s. ]
static BOOL DropCursorItemToGround()
$ i6 W& ^; y `) [! I, Q1 b) x {6 p; z. c6 w7 x; G
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
# q# ^8 w& o# X3 z. p* s# j if (!phand)0 L) Q' E' N$ w
return FALSE;& P/ J& Q8 W9 A: q: c( z" n3 z8 e
7 Y* t& {2 I. Z7 }$ ~# N
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);4 [% E7 k! a Z- u
7 h! Z% z# I4 }8 X* e& F, l6 W6 A) t BYTE aPacket[5] = { 0x17 };8 C! C' s9 a' N: E1 Y K# E
::memcpy(aPacket + 1, &phand->nItemNum, 4);- g7 c6 f2 n, Y3 A4 o
D2Net::D2SendToServer(5, 0, aPacket);& @; z- S: h0 C* f8 j* E
return TRUE;
: k) t) @0 p) K0 B: ^5 T3 r4 I
1 ]3 P" x' d8 R5 \* I* Y' n }; R! F( N2 N" Y$ G
5 X/ h0 Q* R# K' T+ R j
static BOOL PickStorageItemToCursor(DWORD dwItemID) p! K' [: U2 E
{5 N0 v1 l$ x9 f; y# ^* l2 b
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);% Y6 A1 V# k# g) U2 A; Z% M
: w8 U1 w q1 b' l BYTE aPacket[5] = { 0 };
- A7 z, t) q: m- t aPacket[0] = 0x19;
- v4 {$ P7 \9 F9 n3 Y. E) z ::memcpy(aPacket + 1, &dwItemID, 4);: B# f1 q6 B" W7 U6 f- |! K
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);) K5 m2 {" s: Q" z, W2 o; Y
D2Net::D2SendToServer(5, 0, aPacket);7 \$ V4 s- X+ r$ L% O
return TRUE;
6 q- |* R- T7 U9 i# E }
6 W; i& K: O9 C J0 W& P. q
7 }- |! T; V7 |& g) z static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
5 x, R5 b3 f4 Y$ f# p" } {
8 B, B) V) p# t. b) V PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);0 ^; \3 n. {+ X. O2 l @
BYTE aPacket[17] = { 0x1f,0 };: S z' M6 a8 }) K/ A' d
::memcpy(aPacket + 1, &ItemID1, 4);$ C( e' A- c7 Z) C+ @5 Z2 {3 o8 s
::memcpy(aPacket + 5, &ItemID2, 4);
* g3 \# I: F/ [, N* S% @# g5 L* z7 \ //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
2 E G% D- v& s; M D2Net::D2SendToServer(17, 0, aPacket);
$ q8 s3 I- P+ X0 |7 v' \! @ return TRUE;; V9 f# Q3 I, h* F) D w
}7 f+ T& W# _$ }
" H1 O3 W$ @2 J* T' K3 M static BOOL Transmute()% G& b% R) V. O/ B$ D4 [" I! S
{
. [4 X4 A/ {% z! f/ g if (!(*D2Client::ptPlayerClient))return FALSE;& U" W; J: X+ y/ H3 E$ F
0 Z: h8 P0 b% E J' W; |0 j
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
, m# d* e- K. z9 s3 J; F% @ return FALSE;; m5 C9 _) m4 ~
2 c+ b7 P- q4 X- K* ], s
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
0 i2 h2 H% Z9 a, h) }/ ~ BYTE aPacket[7] = { 0 };
2 T1 b* @* A5 ], z2 `) F7 j aPacket[0] = 0x4f;
: i" C- T. g- \+ p1 |( c aPacket[1] = 0x18;3 ?2 b7 U$ t- ] ?
D2Net::D2SendToServer(7, 0, aPacket);
, {& w" w. d' x. r0 V( A$ }( U return TRUE;
! M/ y; j# o0 ^) O }
) s8 a M$ [. Z; |& ^7 ?};! I; D, T( M. E: }7 E+ q
7 l2 X- |4 ~# U0 V |
|