|
|
转载* P% v# c; n3 G" p2 h
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
+ H' g0 g M* |& d. g( b% V+ JD2Client:
6 B9 R0 l6 E; K' p. P+ F6FB20AE1为拦截输入框(用于获得命令)' A. E+ R/ I( [1 u) ]
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发+ G, Y! b( E& U! u3 r* J, f
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发, c) p' n& O! @8 U. R
6FAF4230为hackmap的loop点 我用的hackmap导出位置6 J4 O/ n# c" |6 b
L( t, O# ], f; s
) Q: x; A, k3 r0 @$ M发包函数:1 } N/ {' R: i' g. W
class D2PKT_ITEM
J6 x. }: [) ]8 Y: g. g6 W! C{
% h8 G$ |! ?4 r( r#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
* {! b8 P8 p' o7 l3 \ I/ A! O#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
; [! p; N( o4 h3 {6 }1 F" R2 k. @#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上6 |6 P |/ W) B+ _2 j; g
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上2 [/ e2 b- j3 l: p/ e
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
" L; M" x1 z( e$ f- c2 Y#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上" d! G. q/ F3 e
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
; Z3 o6 L2 C7 r" P: U#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
; L5 y" o5 g6 j) P8 Y* t- A#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -2 u" ^, V4 F& Z
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店( f; L8 J5 n8 c! C
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
, f/ H8 E U% S8 t$ k* L( L#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 X x" C* p- n0 j# v+ Q0 v( [5 l& |
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
; l1 D* y) n) v, r8 x* ]#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
' G' A( W; Y3 s% @ n+ L2 E#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
& F' A: `+ m( Z' t) C" G" S#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
+ r/ \; b0 N8 C, {. M- q! y v#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
3 ~% m+ o3 b# n8 }7 m- q) f0 |$ m- f
) g9 D8 m9 [3 f% O7 S#define PacketItemMaxTick 150
3 }' F( m6 P G: \$ \. ?4 z) L3 n#define PacketItemPickUpTick 20
$ q) p% X2 g+ x# {/ E
3 I" y, E4 ]( C8 d0 m9 I6 I2 iprivate:* i. z( |0 \. X: {
static DWORD _PKTItemTick;
: ], q9 F% T# R static DWORD _PKTItemAction;
i; N) N. {% m P2 Z0 \- z3 M static DWORD _PKTItemID;
4 X' A- [: b, x% [" q static BYTE _PKTPKTType;7 e7 L0 g3 s \ D( K
public:8 e2 h+ D: B+ x4 H6 m3 ~
static DWORD PKTItemGetTick() { return _PKTItemTick; }( ?- b( i0 J$ V. T
2 |9 a( b# F$ n
static void PKTItemRelease()
5 E# e/ } a$ Y: G$ C5 m3 H/ ] {1 ?' g& a% G& j3 C+ s5 Y
_PKTItemTick = 0;
% R' d3 f- K& w* k% f3 V _PKTItemAction = 0;
# C' Z# h$ p: o9 n z1 A _PKTItemID = 0;
. s. b7 \9 S: B# b: _6 a% W3 L _PKTPKTType = 0;: P( X; p. ~) r8 }- C8 ^
}
' P# J& ]) F' y& o* e9 q0 u8 c" R6 W* S' e) x8 ~7 x& l3 R
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) / e3 O& y) t9 j( |4 v% h6 u
{
+ v" |; t9 o2 p' ` _PKTPKTType = aPacket0;5 S0 U8 R$ _& t! V& e7 J! |* O
_PKTItemTick = tick;: m5 Q. }' b* V) n$ J6 |5 I
_PKTItemAction = ItemAction;$ r0 x$ ~5 i0 R9 j* }+ t0 O
_PKTItemID = dwItemID;+ s& W4 i+ Q; D) c/ C
}
; M" |8 ]# y Y$ v" A( h( f$ _
! h. S7 T: ~- t static void PKTItemTellW8(DWORD tick)
. f% G& i) f' D3 C2 ]- K {$ O. J4 |. \" m8 _& Z6 i
_PKTItemTick = tick;
* G3 @$ ]. k0 v% Y* A: R }1 @" v$ F( C. [* M: @* ~6 A
: m# ]2 o: Q* f static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor V9 L4 @# T6 N) z! B0 r0 L; P
{( x9 t0 q1 S2 a- a
if (aLength >= 8)$ y7 F( E: y' E* A% o% J
{
, L# j' Q% C x2 O0 B. |7 u' C DWORD dwItemId = 0;6 y6 A2 x- C" J0 k( _/ Z
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));$ D1 h$ n% B" O4 M; u1 p. w
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE' {! P# G' N8 E6 v3 |9 N) U
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE8 @+ K3 X/ m" P
&& _PKTPKTType == PACKET_NEWITEM
3 { H. ^" ?* [5 N5 N )3 B3 f9 [$ L/ e4 R: c, r/ {; u0 q: |
{ B6 j2 A# s7 M/ V( z
if (_PKTItemID == 0 && _PKTItemTick)- W& V" `1 b) M; w
{
7 v+ d9 i% F5 x+ {# v% F H PKTItemRelease();
9 a" ]% L6 [' r+ V3 c }6 c) m8 ?; G& Q6 }+ W1 U8 }2 ~
else if(_PKTItemID== dwItemId&& _PKTItemTick)+ L# Q! c% Q: |8 \1 s$ Y9 w1 [+ c
{
- _' J, S$ i: F, O7 [1 o5 ~9 D6 z PKTItemRelease();* j* H$ l( D8 z2 p' n; V
}3 \ P9 A/ g' t) S
}. `/ L3 |3 D0 v. ~2 M
6 M, H! s* X4 n2 T }1 j: ?! N' ?5 I6 m! q' }, f* Q% M
}
" c7 _$ S' U$ C% Z; c. k! w$ O, y4 m0 \ l- t. k0 {8 j
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored, g; }: y! k4 j* `7 p5 l0 M
{
6 h8 g# Y3 v0 A6 H3 \8 q if (aLength >= 8)
3 M7 {6 l# i% U {# c( K" Z6 Z' G/ j: X/ U7 s
DWORD dwItemId = 0;" W* ?% c9 C" e4 t g4 m1 |% L8 a
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
/ q9 S/ z" b8 l7 n/ j) [ if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE: _9 r# X- E5 d& n: @
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE# W! Y! S9 w& ^1 j- s. e J+ E" t
&& _PKTPKTType == PACKET_ITEMACTION6 y& c: e6 q' ^! ]1 o4 g! W4 \- D
)
0 I" L4 B7 |- ]8 Y) I1 u {
$ j3 [, {3 W5 h, t if (dwItemId == 0 && _PKTItemTick)
- P$ l$ H( V* ]- ^' E i {/ P; P5 \& X3 ]0 J, \
PKTItemRelease();2 ?! c7 R3 w4 b7 i' G2 u* O
}
7 T" g0 q$ {" F) ^. s, ~ else if (dwItemId == _PKTItemID && _PKTItemTick)3 D/ c8 P# ]) s1 l' t% I
{
( @' Q2 J8 p0 U: a PKTItemRelease();
- [- l, r% S( s ]3 @+ ^4 d- ` }% i+ K' C' m1 y: f" A3 q- o/ \$ l
}, L& v' c2 V* E/ T z
) T- @ i8 M. H" p
}2 c; Q+ T3 T3 U4 v% `
} {- ?4 t" A; t, z9 L' a
) u. T6 c' C" N( @% _% G; Q static void PKTItemGameLoop()# Q( F3 t9 U; y* d# }4 |9 }1 G
{ Y% I' R, x5 c# g
if (_PKTItemTick > 0)
' o$ i. ?3 C5 p2 Q- \ _PKTItemTick--;
! z4 a. X; m4 h; Y else if (_PKTItemTick == 0)
5 s% E3 B6 f4 j6 ?& A. T4 g PKTItemRelease();
% j, w" S" a3 r$ `2 @& t }
y- T- \5 A$ \( n# v q
" A& J8 z* i) M3 T# }% d8 H# h static BOOL PKTItemCando()
) D# @' r* o% B3 [0 d {
$ [6 F1 W+ D2 j3 E' T' r if (_PKTItemTick == 0)return TRUE;$ Z( G) f1 y8 `* t
return FALSE;
G3 g; Z* x( H$ x# F& D }
+ O5 ?# H4 F+ f; s; i% N; U6 } E" y% [. n
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
; i5 _; U/ b. M+ z7 w {9 K2 T" V" o$ R- e
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);+ A t4 C. K/ C3 Y U7 y- ?
BYTE aPacket[17] = { 0 };
{. \ `1 q2 R: H; D9 M aPacket[0] = 0x32;
9 _6 q$ S+ @6 V# {9 S4 I, X) K1 v ::memcpy(&aPacket[1], &npcid, 4);3 c% j: p. Z) \4 Z8 N
::memcpy(&aPacket[5], &ItemID, 4);2 k6 Y! J3 r1 p; s7 |% U
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
# S9 I0 z: _ e D2Net::D2SendToServer(17, 0, aPacket);
: \' n: S! p3 h+ B1 j: S, G return TRUE;
: _! E, B8 U9 ~+ i2 u }, m3 u5 T/ j7 l/ j7 S' O6 @# f0 E6 o/ E
" a0 p" C3 ~! v static BOOL SellItem(DWORD ItemID, DWORD npcid)
, p0 e* w [4 i; a8 F {
# B# v f0 h, N& j PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);# \# s1 J3 p! a6 C9 z8 [# D
BYTE aPacket[17] = { 0 };
; C% K# {. g8 d( a5 A8 w8 H aPacket[0] = 0x33;
: ~2 O+ _6 r# n ::memcpy(&aPacket[1], &npcid, 4);" L6 C4 N( w4 N0 C( Q; }
::memcpy(&aPacket[5], &ItemID, 4);7 T! N7 g/ |& F# A" C$ _
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);7 C4 q) A3 j( q, s8 {& ?
D2Net::D2SendToServer(17, 0, aPacket);
5 }( ]2 _% C( ^. w return TRUE;
8 m# g& _6 I2 C ?6 T; ? }* ] P0 \, m! y, y+ t
9 d1 _- P- [* b. O! }
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
: [; I% m( M7 O5 k# e
+ @6 z; f# n% s static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);0 e# Z' [! d: i' T/ M _
; I, \) _3 t/ h
static BOOL OpenCube()6 Z) H B# U; a3 a, G! u
{( U i) i! k+ n5 q4 a$ d. `1 {
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;4 D) b/ A$ U* H7 d; {+ y
6 A- b2 g- \5 [. s
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
" F/ w5 @) S: H: \% G8 L if (!pCube)
. n" E B* r" I2 ^7 ?+ k {
0 m, M- Q- Q( P" P) I' g& X4 C pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
+ c, q- f+ `$ ^( U( i if (!pCube)
) l2 p' h' ?5 s4 ^/ z1 S7 E. b/ { return FALSE;
* G4 e+ z/ i0 ? }0 J% H. s# S, l, ?4 g! z/ I
PKTItemTellW8(PacketItemMaxTick);! n' z* c# L. V# ?& E" K+ @* B
1 B; Y: L, d: _2 e" `5 i
D2CoordStrc mypst = { NULL };
7 k( S( i5 n7 B+ } D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);, g$ B( `9 _0 D/ [: x) \
5 W9 {1 d' F& l% a' [0 A; s BYTE aPacket[13] = { 0x20,0 };9 o( S3 S# @; V# h6 Q( o& J- y
::memcpy(aPacket + 1, &pCube->nItemNum, 4); B% c, P2 O+ Z) @! f
::memcpy(aPacket + 5, &(mypst.nX), 4);
+ a! i, D7 `' ^3 \/ O/ w: }# [9 E ::memcpy(aPacket + 9, &(mypst.nY), 4);
8 [, M \ p ^2 F$ L- L& F3 |4 T! _ D2Net::D2SendToServer(13, 0, aPacket); R6 |" v9 \0 x
return TRUE;
" f8 L2 x3 q4 v7 u! U4 A }
- j$ J4 l0 s6 W
9 Q1 V5 Q" \1 D. r* ?- a static BOOL ToInvxy(DWORD x, DWORD y); e! f; k% S' g1 I
{. `0 @ Y! e8 ?& E! s7 A
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
: x$ }* D; [( `0 `
# F5 t. t0 ]# G if (phand == NULL)" j$ L7 k! d2 ~/ [6 ?& n& ~( X
return FALSE;, y2 _: M5 g7 `) {. g/ v
) I- F! K4 ]& {/ Y
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
- j2 A( x' X( _9 _
9 r1 d/ ^7 s3 m& B BYTE aPacket[17] = { 0x18,0 };
5 Z" _% a: L2 x& T# Y2 e ::memcpy(aPacket + 1, &phand->nItemNum, 4);, @$ d- G! h S
::memcpy(aPacket + 5, &x, 4);
9 h% X! [# m; r. V9 s8 n ::memcpy(aPacket + 9, &y, 4);5 p8 Z$ ?8 q8 h8 m0 G
D2Net::D2SendToServer(17, 0, aPacket);% D+ H! @& ^ T, K
return TRUE;
! { i' V J9 S }4 l* E- r. ]( J) h- Y
4 M7 e: @; l, e3 E8 d
static BOOL ToInvRandom(BOOL bBagFix = FALSE) + |3 T# J4 o+ T0 O. `$ N
{; U% s3 Y0 [/ @
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
4 N% \# K6 R! u" x* M. L4 ], h if (!phand)
) i, d% k4 F/ I, S6 }. ?2 | return FALSE;! [0 [6 q7 T# }; l" b$ ^6 s
int desx = 0;
- l% s! b/ B f3 x int desy = 0;
% C' r$ J$ c/ B# g, T0 H& G T if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))3 T% v. x5 }3 r' z* o
{3 G2 e( c4 u; E* E: [4 N
ToInvxy(desx, desy);
: v+ Z! H1 W' B5 O" @+ @ return TRUE;* Y7 C; x( K1 V/ S! [/ S/ Q/ e: z
}/ {* c$ R+ L; V
return FALSE;9 z0 V& k- }5 b
}
' [/ [: y! p: ^ j6 s9 R" V! |9 x* @
static BOOL ToCube(): z& v, d; Y9 Q3 [; o8 ~( N Z
{7 M; b2 _/ z* }" t, Z2 [
if (!(*D2Client::ptPlayerClient))return FALSE;8 R2 b* Q( `7 j
6 Z' L7 O# R! j. e7 [. O
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
" m0 ^. r: C1 H" P+ @0 [+ m+ _; X if (!phand)return FALSE;
3 I$ A3 [ l, p9 \1 ~9 V5 ^, F
/ O* w) o$ C" [& G UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
% L! r/ }/ C% Y+ ]# B6 b if (!pCube)8 ]6 j. |3 Z# V! `. e9 J$ z
{
- S2 _! J7 Q! w+ ~! i pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块- q% K( x; x$ Y; y$ E2 {
if (!pCube || !pCube->nItemNum) j0 O* y) q% r1 H- Q$ }1 P' G( F
return FALSE;& \! z: V& X) @, G6 k0 n- C6 K" n
}& p" X5 N0 P$ g8 ^$ I1 e v. r+ ^
( t1 u) e+ |8 V: `3 ]* ~4 { if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))6 Y% K }9 ~# T
return FALSE;
: m" \3 k, U! C/ O8 f w- \+ M% _3 p5 F
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
0 k9 Q% s8 @+ n6 {" L! f# o% P s. \1 F
BYTE aPacket[9] = { 0x2A,0 };) A7 {: A% {( W" f$ t2 n
::memcpy(aPacket + 1, &phand->nItemNum, 4);5 z7 z7 l' A6 \% d- o
::memcpy(aPacket + 5, &pCube->nItemNum, 4);5 ?! q- K2 c7 _$ ]7 [
D2Net::D2SendToServer(9, 0, aPacket);
. p/ ]5 w& O+ `5 l) j0 z return TRUE;) ~( [% d! _0 T' |: j* ]- ~. P
) K0 ~$ k9 S: c }2 q1 s, X6 [8 |8 ]0 W
) T6 Y! g) b) {9 m7 a static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);. { d$ L8 v" O2 ~
1 K9 F9 V, L; d2 n0 e static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存/ W, P: C G4 I: O
{6 y* s, N G* V. P
D2CoordStrc mypst = { NULL };
" C/ V% r; |8 P7 b0 z' g D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);$ p/ L4 K# g9 B# z3 J1 }5 i# B/ S
* Y1 T+ k% Y5 F; g3 O
if (!mypst.nX)return FALSE;5 ]5 t- i8 {5 _ E1 V3 y f. y
1 s4 E2 ]: b5 s d7 m4 a5 p PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
! l1 G- P9 x& v
& @1 l0 ?4 V+ Z2 |4 i BYTE aPacket[13] = { 0x20,0 };
; ]8 J0 _+ x: d/ g& z ::memcpy(aPacket + 1, &dwItemID, 4);
2 d: [2 a* y) W+ g ::memcpy(aPacket + 5, &mypst.nX, 4);
! _- J' `4 M/ I2 d& { ::memcpy(aPacket + 9, &mypst.nY, 4);* R' F s3 U9 ~
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
# D) k3 K: Z# k5 C, s b D2Net::D2SendToServer(13, 0, aPacket);
" w) X. n$ i. B) z \$ Y6 D! U% H return TRUE;% s1 q* ^, P1 @6 S( m6 L
}. [- B8 k$ e( O4 }% ~$ X4 Q
% d2 Y6 S. Y/ x) H! m
static BOOL DropCursorItemToGround(): ?/ l( H& I& u$ C, b- z9 h
{1 l* n- Y9 M! e
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);) I" Z" }( [# }; T+ `/ a K' {) Z# k
if (!phand)
& ]: F: ?0 u5 @ return FALSE;
8 y- g9 p* M- z' n4 j n/ l P- G3 M2 G, c
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
- L. P& |6 o; x3 b6 W6 N/ u; ~8 I+ g+ `8 t" p: d; }4 [' S
BYTE aPacket[5] = { 0x17 };' X( e% y# H) ?" |
::memcpy(aPacket + 1, &phand->nItemNum, 4);1 l1 O/ T) _( S/ u" t' _
D2Net::D2SendToServer(5, 0, aPacket);7 `- Q9 \/ m2 U% b; r9 j. t- v
return TRUE;3 X8 G/ N5 u! O
/ g$ L! _9 X \! o8 E j
}& B+ W& N E7 D8 N: [
' C8 B6 T% A- c* o3 @) f
static BOOL PickStorageItemToCursor(DWORD dwItemID)
0 L; ^; s+ ]4 {3 D* t6 d {& b) @0 w: L" N# |# ]
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
/ {8 x" a5 u8 `# Z2 ~ L- V
3 \! ^' S8 O! F: j0 q BYTE aPacket[5] = { 0 };
$ `! `$ H1 j6 N& f aPacket[0] = 0x19;* q$ Y! y U! [! _" r1 \7 R( ?
::memcpy(aPacket + 1, &dwItemID, 4);
k! Z0 S4 q. o( ?: C( \ //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
, U, a |% d+ v9 y* b$ g D2Net::D2SendToServer(5, 0, aPacket);
0 e Z+ P) C8 }# x( ^: [ return TRUE;( e1 M* Z0 v2 _/ j
}
2 F6 e! W* q0 @# G, W1 }0 u+ I6 f- T R
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)9 e0 z2 u6 v: ]6 E1 Z, h6 C1 \5 B. H
{
" _- h2 K& `1 d: T5 p- w/ }4 z+ V1 Z PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);) Q! k8 f( f# q( J
BYTE aPacket[17] = { 0x1f,0 };
) q2 _. e6 }7 r3 K ::memcpy(aPacket + 1, &ItemID1, 4);, @5 L& D- P! D: f! F9 Y
::memcpy(aPacket + 5, &ItemID2, 4);7 L: l7 c. |; e
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
; w# u1 M0 x" Z0 e* } D2Net::D2SendToServer(17, 0, aPacket);' N& c# H/ T6 u. d2 M4 ]" J% O
return TRUE;
; f1 V! x" t, ]! Z7 ]( I }/ B3 r1 t( i' O a" Q! Y" ]
: L$ o# ^0 Z0 K0 Q+ g static BOOL Transmute()
0 x0 q6 c( J5 n, g {: B% U0 C! M! T7 z4 D, h9 U
if (!(*D2Client::ptPlayerClient))return FALSE;4 f; F& g$ M0 f) k7 r3 r6 H
8 D3 a+ t. F' h if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
. \% K+ p0 q2 r( F |5 ? return FALSE;
3 j9 Y- x3 {9 I% V" i9 O9 r0 A9 ]0 [ T c; r3 T4 g2 a2 a
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);( L2 h6 r8 V4 B# |& Q `* A# f) `
BYTE aPacket[7] = { 0 };" | C8 s. Z) u+ J
aPacket[0] = 0x4f;3 w. O2 c7 Z, W* @
aPacket[1] = 0x18;
0 d8 M; f1 m3 S0 v; F: b; D e3 x D2Net::D2SendToServer(7, 0, aPacket);6 I4 M. u9 e1 \+ q
return TRUE;
& Y# Z- V. T2 D) J }
0 y& j/ i/ {" Q; X/ N2 n$ Q};
: c# m6 z: A0 R, z W8 ]4 n3 m- i( ~, ~/ B! u& G6 D( i
|
|