|
转载* {; H/ p. Q3 s, |5 N
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
2 b4 M" `" B5 Z: \+ o; J5 yD2Client:
4 o7 t$ U+ K }- H, Y' X; ^4 h6FB20AE1为拦截输入框(用于获得命令)0 e0 G1 O [( P7 v
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
6 h# c% } o& w" d* Q) M6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
, H5 R- v0 g3 t" Z, i( Y6FAF4230为hackmap的loop点 我用的hackmap导出位置* t! u1 r- t5 H, Y8 Q1 x) m
& ~% [, r" T6 y( V5 ?5 @0 ^$ _7 S0 T
发包函数:
2 u7 d" M0 L. x$ B7 M6 m- \class D2PKT_ITEM9 E7 i2 O2 H* b; ]* A1 E% V' g
{8 {9 u; |: g6 @: U7 {8 T
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上2 `$ \* u. {" @$ g' @- K+ m* B% Z. C
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
2 v! T- P4 L* g) T2 B% O0 b#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
1 _* @, D* @5 I/ \9 O#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上& I% S: b2 z) q, ~, F
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH4 w7 z% u& O. H5 Q- U
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
. N/ M' ^% z0 O8 P0 G0 F* E. g#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
5 n U5 d- v/ O9 h" B! e0 T3 Q#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
4 m; x# v9 Q( c m; q/ d2 e#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -9 c' q5 W; V" T% m) X1 a
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
^8 d% g& A5 }' A e: }#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
, Q% U% ~- G, p$ t2 U+ G#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
5 }" k9 P i) i- W: Q: ]#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带' n4 l. G4 g7 ?1 A
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上; R! H# o8 D% z( _) o$ _1 I
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
4 _) p3 B5 H+ x" |3 }- p, T9 x+ r#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
* m! T! D$ ]" H& b5 g1 y#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -; X- w7 a5 c. r9 ]) F2 _% k: h% ~
+ C8 O7 i$ a9 R: f, t8 e; N4 u#define PacketItemMaxTick 150
4 n+ H1 A9 h% I8 J7 t9 n#define PacketItemPickUpTick 20
) h3 i; K% u! I/ M% [
) r1 ]$ h% \: V/ ^. O* L6 U9 jprivate:0 |4 l2 y7 C% p' d5 a" {4 |4 u7 w
static DWORD _PKTItemTick;$ F4 W9 S' ^( Y
static DWORD _PKTItemAction;
4 `+ s0 j, z. E static DWORD _PKTItemID;
0 \. F$ D) r4 Y* ~/ w4 ] static BYTE _PKTPKTType;
% M+ }- v1 o: m; L6 hpublic:! g- i: a( S1 ?% {
static DWORD PKTItemGetTick() { return _PKTItemTick; }7 d, S3 ]" x5 H: |* j; Y
, [& Q- M0 r" [) _& P
static void PKTItemRelease() ! \5 Y9 L: k2 @0 |5 _
{
" Y5 C. n6 Y- H% O& P y _PKTItemTick = 0;) i, ^' G# ]8 \, v
_PKTItemAction = 0;
; P @% C4 h; J# w8 w5 S O _PKTItemID = 0;
, G: D; i1 e) U0 w: b* l _PKTPKTType = 0;3 e1 C/ ?9 J+ d) {/ Q
}% \, R& x( y! S5 r! E2 }% q
: R7 \ g- G4 S+ a) {
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
) ]3 b" u+ a+ w: x3 N: i3 i/ O {# M2 H* r% v' k. d4 k4 a4 y, x! J
_PKTPKTType = aPacket0;8 d8 M6 q8 x! ]4 y5 I1 @
_PKTItemTick = tick;2 f, p+ X/ W2 K2 @2 Q4 {1 \; f9 D5 _7 w
_PKTItemAction = ItemAction;, w) s0 Y/ q; l7 I# J
_PKTItemID = dwItemID;
- ?$ O* ?% [) o$ l# [ }+ q. E9 }5 O0 O: _# U- z5 m4 r
5 k% q# @1 F8 U0 k% p- Y
static void PKTItemTellW8(DWORD tick)
+ X) O, |, X" I5 u) J' Y {
8 z) P! T5 ]* e8 e9 `7 z+ _. { _PKTItemTick = tick;4 h' W+ i. J- u! F4 d
}4 f. E4 t N! l3 V4 E
& |8 n" J- ]4 z7 O2 |* H) M
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
5 c/ q8 U: k8 h {, n: \. \. M; q9 H' w1 l, v
if (aLength >= 8)
# G# ~6 J; ~8 Q0 G7 f; w) L {, {. J( H# ~( V4 J( f, d; l
DWORD dwItemId = 0;
; @4 M; o$ r* N" N! [5 ~ memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
' I- [1 J7 } R P( U7 v if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE% y* Q/ k. E+ j. R2 _: `
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE' x2 C) I9 g, m0 ]# n. U
&& _PKTPKTType == PACKET_NEWITEM
4 C( L9 [4 n4 N8 S7 m a )
; l& C9 X5 A( U. i. M4 }* f8 o {
- O0 g4 E0 h! Y" k+ v7 { if (_PKTItemID == 0 && _PKTItemTick)) j4 ]. \0 Q6 P: }& Y& h
{% |/ w; O: B. K/ G0 d3 Y
PKTItemRelease();
" q( q' e& _/ A; N4 v6 y( t }1 Y/ C7 f. y5 x, c" _
else if(_PKTItemID== dwItemId&& _PKTItemTick)# P* L! s. V* e2 y
{
/ r0 T+ ~4 S" j PKTItemRelease();
" Q1 i/ h4 C7 _6 _ }
4 p" ~ u) I) W, Q) l3 k }" B1 C, |8 U& h7 T: t
- W, I4 K) i# i: I
}& |. m" |. M' A" c X" y4 S
}* x+ J8 A4 |! g' V# ^9 ?
6 C1 C2 ?" u* A' D static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored9 C7 b+ }4 i, [3 `3 V
{
" c2 M8 e) g8 u1 v4 W if (aLength >= 8)# R9 \. v' O% `& q n/ a; y
{5 s g; C; P& H8 N5 L$ u
DWORD dwItemId = 0;3 b7 J* F+ U% T# |) c
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
' O5 k( F) X- Y7 I; S! r6 u if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
# a. }& A/ _4 S5 z) _ && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
1 U; O0 l* U- a- h& |: Y5 X4 | && _PKTPKTType == PACKET_ITEMACTION
5 m& }0 T2 M: \8 h w) w )6 y7 @' l* P% m
{, ?0 k* P9 R4 n& H
if (dwItemId == 0 && _PKTItemTick)
, D( j1 S" z& y {" V: ?* x9 ]" k5 M
PKTItemRelease();
9 u( Y' P# V0 \3 K @! a }
& x! ^3 Y! J3 K9 O3 _ else if (dwItemId == _PKTItemID && _PKTItemTick)
. I) q3 y, t/ Q+ e, t x {
& J3 F0 J* s4 G8 r PKTItemRelease();
" E2 p, p2 F$ C* @ x5 I8 } }, {: w' v5 c! |" I+ ]
}
. a. L! D' n7 _2 X( W; Q
3 E% i6 g/ D# T/ O: n2 b7 f. B }
2 n7 M" g3 j, F6 L$ Y) ?7 ~5 g }
7 `8 A* o3 {& ^2 V& e! Y" d: h4 c4 E! n% v9 F/ T: I
static void PKTItemGameLoop()
8 j9 ?, H% O/ o8 J0 M( s- ^ {; D, Y! q9 ~4 b
if (_PKTItemTick > 0)
, X" g' Z j+ v1 }- G# g _PKTItemTick--;2 W; M* l8 I1 K, w2 l( S" }% T
else if (_PKTItemTick == 0)! R( l' R6 D: ]4 {& i4 ]5 M
PKTItemRelease();
2 G. r" j0 p: ~* M7 }# n8 \ }3 O0 n1 X7 P& h, o
0 U9 s4 u3 c9 G& D0 l( S' y, T static BOOL PKTItemCando() 3 r. _ z, l* y0 p) y
{
$ V/ m2 l0 d( K6 D! h; `, T if (_PKTItemTick == 0)return TRUE;+ s4 Q! A1 h3 l1 u# r
return FALSE;
/ Y0 C6 n: x- A9 B9 G% x* {; {$ ] }
. j: k; m# }9 [# Y d8 ~
- W( p- [1 B7 ]/ I5 O7 z static BOOL BuyItem(DWORD ItemID, DWORD npcid)
$ n. M, R6 k0 n7 I: e {
( A! S' \" l/ c8 k. P7 M2 G PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);6 v9 f) C$ G8 X# r, Y1 G, s5 q
BYTE aPacket[17] = { 0 };3 W5 S/ h. e* A! n$ [ W7 a3 a$ g
aPacket[0] = 0x32;7 U1 ?6 B6 U( ^
::memcpy(&aPacket[1], &npcid, 4);0 l+ i% N% T% r% g9 F7 w
::memcpy(&aPacket[5], &ItemID, 4);
& l' o0 F3 k! W" m5 h4 a: } //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
5 G6 h7 K# \8 ? D2Net::D2SendToServer(17, 0, aPacket);9 F7 C, |0 O/ B& F5 M
return TRUE;
" i( F# T: t( f4 h& ]7 | }
/ b) b" p9 r6 W" b9 p
- z4 f/ e" ^- j' T% B/ K static BOOL SellItem(DWORD ItemID, DWORD npcid)
( ]* r r. r& P; G: r3 m6 e; | {+ ?3 u. e% w# N1 l5 V( m }
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);% A' r: Q) L" p/ `5 U
BYTE aPacket[17] = { 0 };, [' N2 _# d( L8 v; _" Y3 O5 v" n
aPacket[0] = 0x33;6 ~0 K4 M4 L; B4 V$ `5 e
::memcpy(&aPacket[1], &npcid, 4);* n3 f( G5 K7 X2 O5 q- Q
::memcpy(&aPacket[5], &ItemID, 4);4 J# @& P9 N* j3 b
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);' y6 Z2 g( _% V
D2Net::D2SendToServer(17, 0, aPacket);: Y& u3 Z! D% w' P
return TRUE;
5 j8 u7 y( Q Q! q8 z& X( v2 ^ }
3 G9 w' B$ P5 c( B F+ p# }" P- o' E
, m# d$ D" L7 q. v8 x' m$ \! w% m2 K static BOOL Interact(DWORD nUnitId, DWORD nUnitType);" D( K# c3 l7 a) p0 C$ _4 n
! B1 U2 g* {9 z static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);! f; ]# i$ B* {9 o0 d$ m" L2 h
8 \: L5 j: i( F% t
static BOOL OpenCube()5 n+ b* S9 ~3 m
{
2 Y4 o. B' x: K0 w9 Y& V5 ~ if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;3 a) A# l4 s) t! m
4 J4 e/ n, A5 v; Y/ o UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
w3 ?3 j" O0 P4 h5 D; k3 C( D if (!pCube)$ h4 ^( s: R1 U) w) ?6 u
{+ j; X+ h- ~7 z8 ^
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);) W& o4 Q+ |4 H, z2 p
if (!pCube)
% m1 F1 ~, r% T5 q- d return FALSE;% m2 H' n* ?! [! |$ }0 U. T
}* Q, V+ Y/ `! F; p
PKTItemTellW8(PacketItemMaxTick);
' x/ m) J7 K5 ^+ f5 t
" _* f3 c9 {: | c, t* E) _( w D2CoordStrc mypst = { NULL };+ Y6 X, P# L8 _! q6 G5 F7 T
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
, \' T' x" Q* N; D
* z3 j2 |' B' T8 i, v1 [ @ BYTE aPacket[13] = { 0x20,0 };; F% R/ Z1 o# C
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
4 H) g; C8 r6 o. w: I. v ::memcpy(aPacket + 5, &(mypst.nX), 4);
( q. d4 o( @7 r* O4 G ::memcpy(aPacket + 9, &(mypst.nY), 4);4 Z8 k2 |8 m8 p% g9 n
D2Net::D2SendToServer(13, 0, aPacket);' E: H9 W$ {' ]& k, ?; e
return TRUE;" u: Y: T! J# _
}$ L3 e! s- k8 L, \5 C" C( T3 y
" m2 I+ R, c* R4 V/ w/ d3 G b
static BOOL ToInvxy(DWORD x, DWORD y)
% d* I/ U, f3 m; Z {
) R6 G: V+ u, s' K: r. U UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
9 e% K" R, D& @8 ~6 q& k- @5 }9 l% L/ D+ o: U P) {0 [
if (phand == NULL)$ ^ P9 E) k( }4 @6 q6 X
return FALSE;
9 V/ X( n( t/ @) \9 X7 o: q
$ w; e2 ^4 E$ v. x ? PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
' N a0 t3 g5 p" F8 v# J% b; i6 t5 n# v6 x1 K1 X4 L3 p
BYTE aPacket[17] = { 0x18,0 };4 s; d; @" I+ M9 o" y' I$ {% c
::memcpy(aPacket + 1, &phand->nItemNum, 4);
6 ~9 O! ^! A+ H. ~ ::memcpy(aPacket + 5, &x, 4);0 f5 G3 R+ {4 d- q
::memcpy(aPacket + 9, &y, 4);
8 |4 R9 V, a: E' Y3 b D2Net::D2SendToServer(17, 0, aPacket);
6 V% j8 g9 U: A# v3 W5 s return TRUE;
# E! Y6 D; b% b( I, \8 b }/ h/ ?& \+ y. G4 C. p6 T
% Y! U0 R4 q2 l# q2 p) l5 H
static BOOL ToInvRandom(BOOL bBagFix = FALSE)
. B- Z+ \9 v; ?" l; R: L# k {
- u& {& h4 o4 N4 {$ q UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);& `4 [+ s; Y+ `0 K( K4 b+ R. i
if (!phand)9 M! W/ ~( X6 }# x. t, N. z7 q
return FALSE;
3 i2 \' \9 _4 v3 s0 ~8 C" m int desx = 0;+ C. K4 v& j) X! P
int desy = 0;; R2 C) b, R! E6 J" F4 l7 L7 D5 G7 D
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
2 ~3 g$ i% g4 u2 U5 t, q( ` {5 L: Q" S3 p- v( [+ _# K0 E
ToInvxy(desx, desy);/ h( i" s& C* S F& V
return TRUE;& H" K+ s0 D8 z
}
3 ?7 d( x$ e$ ^ return FALSE;
( C; p& s6 P# Y h" y2 K }( T9 f: U. K( J! b/ H' [
8 y; D+ [6 o9 H% J' K static BOOL ToCube()
3 b0 Q- q/ i; g, _7 E7 W {
# ^5 E" ?7 f" f, g/ \0 p0 h: P6 R if (!(*D2Client::ptPlayerClient))return FALSE;* D" e$ |. P# A
# T, m1 s. ^9 }$ G6 m! t UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);1 e% z7 N! P. ?5 v
if (!phand)return FALSE;; X. _% M4 V8 b. r- {! J( p! x
" `5 W: L7 v& ^+ u8 s4 u
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块$ z( Y2 u( W y( r1 q0 U3 j+ D- `
if (!pCube)' S4 Q1 o' F' \4 N
{' ?$ i7 c3 G8 w6 _5 i( ?4 L0 _% Y
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块# X, _7 v" c+ T" ?1 q% v3 b+ ^
if (!pCube || !pCube->nItemNum)
8 V. Y: ^3 `/ l* S$ @ return FALSE;
6 Q: z: Q7 B* a# Z, D+ V8 a }7 z& R) b- ~$ s1 ^( B
( P+ A( [* J) ^$ [* o5 K if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))0 @6 U3 {# l7 ?. v
return FALSE;
l% p$ h+ Q3 D' q- f& ]3 H$ F- |2 ~5 e- s6 L
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
- ?, g" q9 {% f3 [9 `% ^' y; L" ?/ Q+ E1 a1 W- I6 w
BYTE aPacket[9] = { 0x2A,0 };: }; ]! G+ f" e# T, g9 u# H" l
::memcpy(aPacket + 1, &phand->nItemNum, 4);
) P0 o7 U6 Y+ K- N& S/ ^ ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
& {- `- y5 V3 \ D2Net::D2SendToServer(9, 0, aPacket);
! c: }4 d4 _% x8 E9 c7 \$ q return TRUE;9 {- @3 ^% v# n7 r) ~& a& _
/ {1 D2 A+ k" w8 E }5 i6 H3 f5 ^3 I/ `6 J, M5 y
4 |+ C4 Y- x* E2 J. x5 k
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);! v* S! t! }+ `4 T: Q9 U
; X9 x* k8 s: L% K; q
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存5 K7 c8 P: C0 V3 e2 `( q% k+ W! k w
{- |( [0 J( t. j6 x( U$ F
D2CoordStrc mypst = { NULL };! i, }* b2 N( V4 a m
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
7 M; B) Y+ s3 D" h8 p8 h% U2 R* k0 ^
9 ?0 v3 Z) G: r; P" o if (!mypst.nX)return FALSE;
8 J6 i; y4 g( X* c7 E$ C! c
; D* d4 |) \/ _' s/ ]% z PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
$ v. O. a4 t( V' R8 s v3 Y! N/ j1 H; ]& q8 \" S- A
BYTE aPacket[13] = { 0x20,0 };
* E5 ]1 ~/ l+ ^" U N, [ ::memcpy(aPacket + 1, &dwItemID, 4);
/ {9 y( O2 H. ] e ::memcpy(aPacket + 5, &mypst.nX, 4);. M# V. m% R6 G4 y" Y
::memcpy(aPacket + 9, &mypst.nY, 4);* A" H/ L @2 W% a: V
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);( q1 C: f# ^, j* ~ ~
D2Net::D2SendToServer(13, 0, aPacket);( f) z3 q, s" o3 _
return TRUE;( G5 S+ ^; e- ]' n* t
}$ W3 t4 t2 b' x) V( N/ N' O
8 C& G! Y. ^$ D
static BOOL DropCursorItemToGround()
, l2 F+ e5 O6 X {+ o; G# d# m5 D- B( [# R
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);3 k# q0 l# B! D, M7 ]- C
if (!phand)
$ x2 d9 ]" Q- j+ @ return FALSE;
! c' j( {+ r5 d! K% _! H) P/ e/ V! [- T. @+ O* O l) \6 F
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
: L& r3 b5 U' ]2 ]2 Y3 G- E4 _3 v5 h+ |- D% d: o3 P& F9 s K- m( `! b
BYTE aPacket[5] = { 0x17 };
) c9 l. B3 Y* ^; N: c P/ ]% |" ~: V( g ::memcpy(aPacket + 1, &phand->nItemNum, 4);
% f M; l2 O1 p+ e$ R4 f: h D2Net::D2SendToServer(5, 0, aPacket);4 N0 n) h5 p6 r+ N) w
return TRUE;$ e! P- l8 t: ], A& ]/ X
& s9 u' M) t) Y8 p: `' o }% x& p$ s+ F) l. R1 g/ e8 |
( N5 M% Y. C1 M7 d- K* H7 h$ \
static BOOL PickStorageItemToCursor(DWORD dwItemID): t9 B2 i& f7 x* U# s+ h
{( [2 A& O* B" a5 m) t1 n
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
1 Z* _6 \0 x1 V( e) a) \8 k; U- u$ g8 e# \7 m+ F) a
BYTE aPacket[5] = { 0 };
( E! `7 F# k/ g) q5 \* c aPacket[0] = 0x19;
$ n0 C5 L0 K7 h" |% S& L2 e ::memcpy(aPacket + 1, &dwItemID, 4);
E" s5 e" Y, Z$ Q( u1 Z, Z //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
- K* b; @6 G/ J b; h" r. ~0 V D2Net::D2SendToServer(5, 0, aPacket);) u9 @5 _5 [' O& E2 U: Z/ k' r
return TRUE;6 O$ a! r9 V/ s. w) n( v; z* \, Q
}$ n9 \" h" I, y8 Y W2 b
3 ]" s- U0 `% ]/ Q
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
1 S% G/ q4 E5 x4 s X$ i3 W {5 l7 i! z& A# f
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);7 M% ^2 V1 f1 ?2 z/ n
BYTE aPacket[17] = { 0x1f,0 };
% R3 M. [) t4 k( i. Q/ }0 l5 v ::memcpy(aPacket + 1, &ItemID1, 4);
. `9 n8 X v. I, ~8 C ::memcpy(aPacket + 5, &ItemID2, 4);7 T7 g& O: I" f; i
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
3 A; u8 h4 W8 A: u' D: j0 ]) v D2Net::D2SendToServer(17, 0, aPacket);2 Y$ q+ u: d6 A2 B
return TRUE;6 U& N5 M; W v5 ^) G+ n
}
2 Y# g$ P) E6 E# t0 D6 \% b4 }0 E$ g# w0 Y* u4 G' T
static BOOL Transmute()7 }6 Q' d. n' ^5 I5 E$ K
{
: r! H1 ]% S' t( Z/ p if (!(*D2Client::ptPlayerClient))return FALSE;1 r7 I& U' \) R/ l
# v$ |1 t8 G5 U: Y. o if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))# q' F1 X0 h- `3 `' T4 s4 M8 \0 }
return FALSE;5 ^8 u2 z' Z$ z4 y( D2 r' b
- o* K& Q* G$ m9 q
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
4 v2 K# Y% c0 H. w% W BYTE aPacket[7] = { 0 };
- g+ X/ C) C0 U' }0 u aPacket[0] = 0x4f; t! S, x& J d Y0 [5 A
aPacket[1] = 0x18;) m6 Q. x8 C- O) m4 |
D2Net::D2SendToServer(7, 0, aPacket);
+ P4 |; r1 [" n( C. X return TRUE;' |1 k* u, u* Z' o/ e9 i
}
4 y; Y6 t' r9 Q* z) f0 l* X};4 ^* g v2 q. F1 s& X1 X b
I# N$ y( k. @. I3 U r |
|