|
转载. v$ s6 F: f5 x" f$ U0 I V" l6 h
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
+ @6 f- d) H0 ]0 W; \* n+ L* W RD2Client:# N/ Z" A( X+ w. u. c
6FB20AE1为拦截输入框(用于获得命令)
9 q& K7 P1 p) h% ] y3 x6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发9 L- w/ d7 I$ k0 m/ I
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
- q$ t4 E: e U6FAF4230为hackmap的loop点 我用的hackmap导出位置
9 e/ l6 P$ N2 H D
$ [( q T$ n; T- _7 d( z* h
1 p/ v$ Y- p) S2 r2 ~发包函数:
/ k9 ~* t, j. I8 D1 R0 \class D2PKT_ITEM
8 S) P0 b5 |( N% q7 A% O- Y{
- l$ W' d: E5 c3 x#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上: F4 w4 o+ f3 ^& `; _* N1 ~, `
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
# m" | c( i. e' s% B! J#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
- m3 | ~7 T+ M#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
- E7 \1 g* ^4 M6 I' [# `+ _# ]#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH$ F9 ?) r1 G! y8 D6 S) g
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上5 D W) H' x, Q3 P+ p! }' g9 u
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
4 x/ M) Y* W) ^* h2 A$ @#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
( ^# \& ~$ `4 G" f( d& W#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -8 A9 G) U" C4 z/ ~' Q7 t
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
2 A8 k0 _ {. T#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
v7 a$ o- [2 _2 D$ e#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 : \- g( H% I; B, Y
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带1 j% _& r \% _+ d7 |: w i: _
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
* B- y6 I* N* \6 j$ f#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -- f+ A7 D/ Q/ j" z# p! u
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上7 Y; i9 ? a8 Y# r$ c
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -; k/ ]. m" P, |8 u. {
% h# |: b1 ?! ?6 g# \#define PacketItemMaxTick 150: L* R# F$ q/ K! d- A0 t( j
#define PacketItemPickUpTick 20) q6 w! j! x; u
( t# o( g9 }; }: z$ G
private:! |* _7 C- h4 Y. R* a
static DWORD _PKTItemTick;1 {5 [ V5 g7 a8 t. I2 z, i
static DWORD _PKTItemAction;
$ E/ H0 C9 G3 e$ A$ p static DWORD _PKTItemID;8 |; q4 z' l& K
static BYTE _PKTPKTType;5 W* j4 F- o* q0 v
public:$ d" J- E8 X# [, s9 @
static DWORD PKTItemGetTick() { return _PKTItemTick; } A+ `$ c0 b5 _4 h. h
?& K) M9 x" W) X3 [8 v static void PKTItemRelease() 7 q6 {# D" E+ T7 Z3 S( ~! p
{
0 o5 I: A8 D9 D& a, ^, T0 Y _PKTItemTick = 0;
/ j* a; u' n3 J3 u _PKTItemAction = 0;
, @/ q ]5 {5 a! j, k( A1 p4 O _PKTItemID = 0;
) `+ W5 c$ a0 }% d _PKTPKTType = 0;
* H0 R/ N4 f& l; R }
{* D: c4 B ]/ T8 l v" L4 @" `( ]/ n7 Z# v
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) ' e) X _# ]3 J0 P- d }: \9 @
{3 Q- Z/ e' k6 {# s: s0 k
_PKTPKTType = aPacket0;
( G7 K' X! W; P3 { _PKTItemTick = tick;
9 l% M% d1 a5 c3 N5 I) D( z8 O _PKTItemAction = ItemAction;1 r$ t; P, J) q* `2 ~
_PKTItemID = dwItemID;
* x7 D* B6 z3 J4 D- v' w% d! c }
. g" w6 u. f1 s& Z) g Q6 J$ j- V8 g; |5 Q( O3 n
static void PKTItemTellW8(DWORD tick): Y U# g+ h/ B3 {: k" n
{0 h8 K0 `% Z- V4 j
_PKTItemTick = tick;
5 C( j; L; j9 Y& r- O* q }+ N/ n2 U' ~) E; v. v3 Z+ f
3 b- g3 |9 C$ Z' y6 Y. k! S! P$ Q static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
+ z! r- Y5 r+ B) z6 f. C9 e8 c {
- c7 f; f3 S! o if (aLength >= 8)
, b" D! Z, \$ q2 D6 @) T' ?; { {- J% L' A& H$ V
DWORD dwItemId = 0;2 `' S. d1 r0 v3 r
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));7 F! j1 u' q: @1 o/ M
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE% O8 \ }8 x- r
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
6 L# R7 B6 R/ {! u" V5 L) a% U && _PKTPKTType == PACKET_NEWITEM/ U7 A! q7 J9 z! v8 H
)4 j9 d& }1 i% C. }. [4 Z
{
0 N* U( ^3 _. k! K1 ?) o# _+ | if (_PKTItemID == 0 && _PKTItemTick)
% [) L' u' Y! D5 w8 v, k2 z {
1 K" z8 [" B& x. L PKTItemRelease();; b6 J' H) Z2 P. t3 b
}0 y/ v) X8 o S% x, R1 ?
else if(_PKTItemID== dwItemId&& _PKTItemTick)# w7 Q Z# r* j8 b
{
- T: R$ T( u( F, p# p# a# l) J PKTItemRelease(); i* G: J" k9 Q
}
r) }4 ?) B8 I" B* M1 X4 A) `- E }- f4 B3 u5 b( U
4 f' p, [3 C0 Y. P }1 D3 X2 E; z; k
}6 M( z+ s' f: |. a' @9 s _0 J" M' v3 S
& h" {7 z; H1 V1 Q2 e' b" ]
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored- I1 t* G% M% e; Q
{
) x5 [: u. I7 q+ H" k& x) M if (aLength >= 8)
+ c0 J* z9 P6 c$ y' a7 r% j {
5 f9 `/ G( j* L: Q DWORD dwItemId = 0;
3 Q2 d6 h' d6 I% y* B memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
9 [7 _4 w/ ?7 ?/ s, ] if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
, m+ x& t8 J& P n: ~ A && _PKTItemAction == ITEM_ACTION_FROM_STORAGE3 s. B& v, x* B) D& t( O6 M; t
&& _PKTPKTType == PACKET_ITEMACTION( l* i% b6 u' p
)
$ C0 F! m2 E9 {- N2 I# _* ^ {
8 s% x* q) M( m Y+ U6 e if (dwItemId == 0 && _PKTItemTick)
" o3 `8 d* g( C* |, |5 P8 n3 u7 `% Y8 s {9 t* w [5 B) }3 ~6 `7 v' b
PKTItemRelease();
% Y# d7 ?/ w7 \# m7 w( ~4 u }
* ]# Z) r; L, u else if (dwItemId == _PKTItemID && _PKTItemTick)- \2 U) r R$ D; l1 l c7 R/ `! a
{
9 a8 o, {. a: I' ?: c8 A1 P PKTItemRelease();
1 x0 k+ h. O+ o5 n; O }
- Q4 k4 l" D, Y' Z! V) V D5 w( ] }- m Q) i( ?* e& j" C" l
0 F! N# P9 J: m1 I- p( Z+ E }! X4 ^7 |3 h4 C g
}
, g' F# x9 }8 J: v2 p) V- |: @; G# I; K
static void PKTItemGameLoop(); g3 A$ H% b) [: t. ]# T
{$ b" T# W1 r9 k
if (_PKTItemTick > 0)6 ?1 x! o! o6 ~) G. l/ ]
_PKTItemTick--;4 V: ~( P" k6 T7 F& p
else if (_PKTItemTick == 0)# o& y& N; G8 c
PKTItemRelease();
9 ^% o& E& U0 r/ `8 H k9 V2 X }" P8 u/ |7 N7 {; Q' |' ^
" U A& |5 g6 k# P* r
static BOOL PKTItemCando() ' h% v a. v1 F u. N6 d
{0 n# l5 W2 s W/ t* o
if (_PKTItemTick == 0)return TRUE;2 p9 O5 ~! x& t" @
return FALSE;5 U& i8 H$ v4 Z, m, D
}
: F4 }* R8 H$ T. E4 R1 @! p
$ f0 q4 o$ Y1 q9 F0 ^2 `0 D static BOOL BuyItem(DWORD ItemID, DWORD npcid)
& h0 K% m$ X9 Q r) x' v$ e {: a/ O5 e) S" Q5 Z i
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
% `9 ` n' T; r$ q' Y) V$ e BYTE aPacket[17] = { 0 };
' Z% h, F" y, @; e aPacket[0] = 0x32;
: d. a# C+ U; c: o& d ::memcpy(&aPacket[1], &npcid, 4);, S, j( Z, ^3 n% A
::memcpy(&aPacket[5], &ItemID, 4);. u2 u/ p+ K3 ^' @: D3 E
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
3 i7 c9 n2 }- c4 w( r5 M D2Net::D2SendToServer(17, 0, aPacket);
( @& z8 X7 e% s$ x! A. B' `1 R return TRUE;
& Q4 y4 L Z9 ?4 m+ E# r }
5 }: I' m8 P. [, [2 [
) l( L7 t. t( q5 e' W6 o2 N static BOOL SellItem(DWORD ItemID, DWORD npcid)
8 B% V7 P5 k: Y" m {6 G1 C' F( l, H8 g$ g# N/ U
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);# z b) {( \- b+ }
BYTE aPacket[17] = { 0 };
, P3 Y# }; u& K2 A) c- ^6 r4 v: d aPacket[0] = 0x33;
0 V. ^; v( O, o ::memcpy(&aPacket[1], &npcid, 4);7 o3 \; b; s7 H2 w
::memcpy(&aPacket[5], &ItemID, 4);
, _: R& l* E4 R, e* L //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);& ?$ ?2 w& ^0 A9 E
D2Net::D2SendToServer(17, 0, aPacket);' Z% t) J4 V; D0 k( o
return TRUE;
6 M1 j2 V1 x) k4 Q- W4 s$ T- q }
9 e( }+ K6 P: X/ p; t4 p- S; Z$ q6 m- t
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
0 O- c" C7 P5 R8 c. r6 k% r h/ \% P0 B8 a/ b8 R5 q$ Z8 o
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
8 Y0 G6 T8 Z4 T) P$ A: [ ^% M+ A1 z# o! [0 U
static BOOL OpenCube()
# t6 I) P/ \2 b N0 e+ B {
5 k$ w( `$ F' |+ E% ?4 }# B- h! U if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
* z, E3 \( r+ v' s {( r8 Y4 P6 C- e6 n7 s; ~" M* j0 @
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);# B7 t: Q4 y. ?5 e5 v
if (!pCube); I8 {0 W6 r3 P+ g# ?; e
{
5 w2 c" u2 X% c3 {5 |6 f: v f2 { pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
& x+ e7 w5 s- \- z1 D1 ?( p3 E if (!pCube)8 {9 c' l/ r0 z2 O7 x
return FALSE; x- P: R; b; K) b
}' y; `# M( j2 V3 ]% ~/ e* U( w
PKTItemTellW8(PacketItemMaxTick);
0 M& {2 A& z( ]. {3 n% I0 `$ T' f7 A7 s% A6 Z$ z
D2CoordStrc mypst = { NULL };
$ U) @, c# W% n" A6 O: X5 z @- s D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);# R5 r9 O2 U/ I$ A0 L( `
. n* O: \# M4 |2 H, W4 V+ P3 \
BYTE aPacket[13] = { 0x20,0 };
! D. y% M" p3 z/ \* p& z& P ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
& N; I0 b& q4 o4 a3 M ::memcpy(aPacket + 5, &(mypst.nX), 4);
/ H6 d* D- Y: F2 u. k ::memcpy(aPacket + 9, &(mypst.nY), 4);$ \: M! ?6 g" L6 a- Q. ^. k: m4 F
D2Net::D2SendToServer(13, 0, aPacket);
1 d; c: K! l" ]# P return TRUE;
, z! A# U: U7 D3 Z q }
- a" f" ^& @6 `" c8 y. B1 R( N; T( t$ k0 }# k
static BOOL ToInvxy(DWORD x, DWORD y)9 u7 S" {# |( ~' _/ W8 B' i
{
8 ~4 _! O9 c" d. H, W UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);( D* {# q; |# I- [1 L
" R$ R2 O) }" D& @ if (phand == NULL)
6 ]; E3 T1 q$ g9 ~5 n return FALSE;$ {. a, ^5 K. _- ]- b# C3 i
2 W% e5 a/ y, b5 O# }$ y PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
; ?! Q& h% d d N
2 Q+ ^2 |5 N" A9 O" v BYTE aPacket[17] = { 0x18,0 };
+ z- x1 f! `* l$ b- x3 d$ @- N5 M ::memcpy(aPacket + 1, &phand->nItemNum, 4);, p8 [ N5 N* F" t
::memcpy(aPacket + 5, &x, 4);
9 T1 Z' p! h4 N, W4 Z* Z& r% p+ L ::memcpy(aPacket + 9, &y, 4);; C; C: `& }. m% m8 ^. E3 t
D2Net::D2SendToServer(17, 0, aPacket);2 w# U, m& e: D7 I7 g
return TRUE;) b/ S0 Y. F1 C9 a: j$ o( t
}
* X3 V+ o8 p8 s) k8 V9 }& N# D- `* M! c7 i' N" Y F! G
static BOOL ToInvRandom(BOOL bBagFix = FALSE) ; |0 U1 k: Y7 ?- E! D2 ~# k
{" q$ F3 r4 L, g( I3 u+ E
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);+ a) Q& ~/ Y0 `
if (!phand)5 ]: d0 ~+ b+ f; O' ]) v: F
return FALSE;
. t6 W: z! u4 B0 I m8 b: {3 } int desx = 0;
; V$ c, ?' g1 y8 a {1 y. I V int desy = 0;
% B" o2 k C9 r9 [- r: X if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))+ x0 V/ B7 W% D- h. A
{5 o! q: L& `, u# l; p
ToInvxy(desx, desy);/ N/ {5 @1 F, F8 M/ r8 Q
return TRUE;
! a" d$ F$ `3 G- V) O }
& ~/ w! f$ G. h9 G: t6 ^8 l* R return FALSE;
) W, g( q0 b' ?- [- _0 | }$ g5 R: g. q3 N: x: M
5 f2 h6 l0 i4 N static BOOL ToCube()3 n, S0 e- e% _: d6 X7 f- f, B
{ b+ E1 x: s- ]. u R* W
if (!(*D2Client::ptPlayerClient))return FALSE;4 }$ K6 @8 ~1 G) {: a. h, K
/ a2 d, k& o3 I% k* N; c
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);) V+ S/ }6 t# k5 K, U
if (!phand)return FALSE;
. {! l- r+ l! V& Z) i9 _
* U7 I& K) F' D6 `+ m UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块- a% j! H, S1 A2 Z
if (!pCube)
4 y. j# {/ B3 r5 C8 t {
# x2 i9 g! h$ d# r0 @ pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
2 R ]- F) b$ @" a' l! H* K! t X if (!pCube || !pCube->nItemNum)
0 n. x: d6 D$ {7 u$ X3 b return FALSE;
/ I0 U) Q7 i6 Q- h% y9 W( o7 ?. d! O }
3 P4 J. q7 f. c6 a, Q) o& L' v: ^7 h0 A: Y
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))+ R. C4 c- ~( E9 W& {# Q8 c
return FALSE;, U3 I7 l# w" j& B
5 Y6 A) n. U" j PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);: ^* ` q1 t7 {6 O' k
" P( x: [% C, {0 d" `2 {& ~: ^ BYTE aPacket[9] = { 0x2A,0 };* `6 k1 _1 w- }* a" e
::memcpy(aPacket + 1, &phand->nItemNum, 4);
% h! x8 m4 D; e% f ::memcpy(aPacket + 5, &pCube->nItemNum, 4);# v! A0 k. J L
D2Net::D2SendToServer(9, 0, aPacket);
5 Q. i( ?, Q# `6 _: ? return TRUE;- o. Y8 ?( M- B3 Q
0 n; q- [* X5 q' L# q
}: E, E+ v/ h5 l8 p6 u# }% Q, }0 ]
* x3 \" z2 K$ |' X6 t static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
1 O2 X0 G* g- T+ p: f, [; L% }! L; ]7 j4 P
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存2 m4 o& t/ @8 I7 t) d0 D
{
5 t! D/ Q- w3 \6 X! Z. o3 ] D2CoordStrc mypst = { NULL };
8 d4 n" H1 k h+ }8 Z D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
9 l" A8 }& }! C3 z4 M8 {9 P$ y3 }, @: `, @0 B' M* v- J
if (!mypst.nX)return FALSE;: {4 C) d1 @% r$ t: e
: ^; w. |* o# B6 K. \- g
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
1 \( H* H: [& J5 D' O+ P8 b, }) f5 T( a2 m. p
BYTE aPacket[13] = { 0x20,0 };" U' j$ l! T5 V8 U5 B
::memcpy(aPacket + 1, &dwItemID, 4);
3 G, I g" y) I; p4 B ::memcpy(aPacket + 5, &mypst.nX, 4);
7 \1 M5 p- } F e; G ::memcpy(aPacket + 9, &mypst.nY, 4);' k4 p v( M2 B; V/ _' L
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);3 H% G( i m/ n: V) s3 J* D* V
D2Net::D2SendToServer(13, 0, aPacket);) f" I9 a, k( S8 J* C+ K
return TRUE;
" O4 Q# d( o1 i: x R }" F+ F; S& K# O! e) X
$ k6 _8 f& a/ H- X static BOOL DropCursorItemToGround()
! i3 n: Y+ y: w1 X5 `8 R {
$ E6 }+ Q) x6 e, t UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);& o! f) K- g8 C0 t' n
if (!phand)5 O2 [: C x0 i0 g' \$ ~
return FALSE;" ], R8 c: B7 v- [6 E# X4 U
+ ~9 ?8 f1 O8 [, J; x
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
1 ~9 w# ]/ e8 i- [! Y; G& P# A/ e
BYTE aPacket[5] = { 0x17 };
. u* K: d# c. l. |5 x0 Q ::memcpy(aPacket + 1, &phand->nItemNum, 4);
/ x- p( [' [. \( g1 H7 I7 ] D2Net::D2SendToServer(5, 0, aPacket);
* B2 H% Y& H4 U: K- Q6 r' [1 e return TRUE;
( N) Y- F7 E/ W8 m2 D! O6 c) r: _- I" z' R
}
- u1 O' `, G# k& a3 h! I! c/ o' Y' j
static BOOL PickStorageItemToCursor(DWORD dwItemID)* u5 b1 r. k/ \+ d8 I. \
{
5 h! y. |: \ r# x: \. x( M* c PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);- ]9 o, s2 j! @* @
3 Q4 c K1 G/ l. w% A BYTE aPacket[5] = { 0 };, p$ U2 J" r; l8 `& a& C# h: H
aPacket[0] = 0x19;; Z/ F5 \! Z: {' d. \: d; X
::memcpy(aPacket + 1, &dwItemID, 4);" i& O1 d/ k8 e7 V# v" T- L
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);3 _' |, k' y& [' H. V+ _5 G
D2Net::D2SendToServer(5, 0, aPacket);$ }' G% n# O6 U Q5 O
return TRUE;2 b( b4 ^' | P- n, ~6 e9 j
}9 l1 u8 ?" M! f' r
# x) |0 M+ W, @' q( n' o! J
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
V: u' V) _3 N( @ {
) F' p3 O Q R) _5 h% O/ I PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);' h9 X8 `1 M+ d6 ` y
BYTE aPacket[17] = { 0x1f,0 };+ [) n5 ]. w0 d
::memcpy(aPacket + 1, &ItemID1, 4);( R0 P# d0 k k' G+ h
::memcpy(aPacket + 5, &ItemID2, 4);4 s% t' F! O4 o- H( n
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
/ {( C( Q8 O" t0 q1 h+ q D2Net::D2SendToServer(17, 0, aPacket);1 j) o& \/ _& X# J0 V
return TRUE;
/ ?. j* _/ E( _: M* Y$ M }' ~6 m' J4 Z6 a- v2 L9 o& Y0 |
2 J; g( y0 R$ A, s static BOOL Transmute()
9 N8 l( q) @; g6 D- n {% E' X9 \0 Y! ~7 k. x8 O5 s7 [
if (!(*D2Client::ptPlayerClient))return FALSE;
8 z7 v6 k# T# v- E+ c5 n# d+ D& ^$ o. N
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
9 D; @# I1 G8 W6 f ?6 Y" J1 a return FALSE;; E; b* O# V( i$ Q8 b
2 E7 @2 p- |0 o, l3 s
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);8 h! Y0 }1 j. {( }1 |8 v
BYTE aPacket[7] = { 0 };! y8 t, a( G3 w
aPacket[0] = 0x4f;
# Y$ i) d: G# f$ G aPacket[1] = 0x18;6 t! h1 o" Z3 Q$ {
D2Net::D2SendToServer(7, 0, aPacket);
8 T1 e8 p/ _0 I+ n$ O return TRUE;
8 ]7 T+ w/ F$ @! a3 {3 u }
: @% W% `3 W: @) r( T3 t9 R};
( F7 q* q1 Q" |5 y( `9 b4 d1 z; _, L2 D9 c: C8 B
|
|