|
|
转载
* ^0 O7 i. S3 |# i# }自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:9 B# g! k7 C4 E' }+ S+ W
D2Client:
7 P# g) z$ U0 I; l" M' T3 d6FB20AE1为拦截输入框(用于获得命令)2 p' y \* d) q/ b% Q
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
7 o# R7 g6 B) J+ y% I6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发6 @' `" y8 ?; Y( Y9 a0 F& f
6FAF4230为hackmap的loop点 我用的hackmap导出位置$ Q( H& L6 \6 X2 }4 Y2 x) o
` v7 C. @7 M) {
N o1 z9 K% \2 `0 q& t( I! q发包函数:
8 ]( z- \; P5 r' l' uclass D2PKT_ITEM5 T \9 |1 x( d+ B2 Q. o6 b2 i& Z
{+ S9 S4 ]8 n2 ]" r! q1 z1 X' b3 k
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上; D T' I2 e- m& j% |
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
- H4 e( @) P) y9 X#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上$ Z& K& C. x& v$ a4 f
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上7 I: d! Y0 Z* B2 h* n% z$ K9 Z* V0 H
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
: u3 t5 O& h. T1 \; F( D+ G#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
( c+ x" r" Z5 ~3 o# ~#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
; B! f$ x- s( G% P#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上; z% n4 O' D5 v- O* @& ?+ k
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -$ j( A6 e# J, J: N4 \; D' v
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店( N4 M) }5 n, B
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
* `; O# B& W4 I: ^+ {3 Z#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
5 |* {$ s3 k) B. o- n#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带% S) V$ k9 c9 d( ?
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
4 ^6 c. n4 S' o" s8 D" ^#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -2 P9 Q* P5 G4 s+ ~- T, H8 L* [
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
8 d2 g9 X# I% F+ K2 r: u# \#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -) L' `( l$ F; C* n
1 k6 q- m# R- C( r e" _
#define PacketItemMaxTick 150
( }, }1 Q, H8 q' s# A2 f#define PacketItemPickUpTick 20
; g0 r( q8 X. E# ~. m2 ^9 \8 P* a
' S* i4 N$ U, k7 W5 }* J5 Uprivate:
2 L* D( l/ \! l( h! Q9 `" C5 R static DWORD _PKTItemTick;# _. N2 o4 M' d" x, f
static DWORD _PKTItemAction;- l; T% k/ ?, J
static DWORD _PKTItemID;
3 O: O6 n" e" i; c! @/ ]0 ^# E7 K' _ static BYTE _PKTPKTType;
4 N' O# J. H9 ?. w+ j6 p' xpublic:
* F6 Z: E2 h+ b+ S6 V8 [ static DWORD PKTItemGetTick() { return _PKTItemTick; }
3 u4 L1 F# f9 C7 \9 P& A7 X; V% ~/ Y/ O. l3 q* h& x& A
static void PKTItemRelease()
' E- g& t1 ?3 ]. a {
1 B. q7 p7 j8 \" h. w. F; G% q _PKTItemTick = 0;
/ \4 f5 R! Y2 U6 B# ^ _PKTItemAction = 0;
5 q9 q0 S' G+ h( D$ b _PKTItemID = 0;% R. s. U& |7 E+ K; ~ D
_PKTPKTType = 0;
2 q$ N! R ?! H. I6 g9 p; F+ h }- U# E- |2 ~" t
! \ }* ~, B* K7 I* Y" Q
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) * s4 L0 r/ R+ y5 ~/ K
{
$ R7 e* ]: K4 i$ d _PKTPKTType = aPacket0;
' \9 N: J. a9 d, v4 o" V# O _PKTItemTick = tick;
P# n: z6 ~, k) I4 u _PKTItemAction = ItemAction;
* A7 A2 `( `0 u! d _PKTItemID = dwItemID;
6 C, x* g f; f$ h9 \7 M$ s }* X. T( ?2 X7 A* F
& c: P, I4 F; |0 j0 f( D/ S static void PKTItemTellW8(DWORD tick)
/ F8 N O2 ?& {& E( u8 Y: Q {( X" X6 ?( c1 ?( Y0 S
_PKTItemTick = tick;- p) b# z6 O4 P- J2 T; r+ Z
}
# N: s5 s, W4 x
# W3 v1 F8 [$ N; _' i! A static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
8 @$ k" a' F; A. G1 x! m2 E, O {- }# f( b. V! D7 c9 h
if (aLength >= 8): v5 M0 L0 c5 W; O( E
{3 X0 f; F9 Q6 T6 K& w" U6 D
DWORD dwItemId = 0;
' y2 k, L6 V1 u. M memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));+ g: i, u% Q, H) l+ E4 p$ I) E' e
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
6 a; s5 K; w& y+ }9 Z7 _ w && _PKTItemAction == ITEM_ACTION_TO_STORAGE
. @' E- {" `. a4 {% Q7 Y8 N && _PKTPKTType == PACKET_NEWITEM
, _2 z4 w) \4 v. d )0 ^5 K" g- r2 v( _! M. o
{/ s5 ~# V6 o) \( @7 U# ~
if (_PKTItemID == 0 && _PKTItemTick)
7 g: I+ r" K/ Z' y$ x {; j! `7 b; S9 Q3 m [- X, W9 s
PKTItemRelease();$ j) m0 N4 C0 L2 i! O
}
" V2 H. |- h( A/ m' M! \& \2 Y. N else if(_PKTItemID== dwItemId&& _PKTItemTick). ]0 p! ^" c# z) M0 I
{
3 H4 H( W, o$ ~, `+ v PKTItemRelease();1 }# _8 x8 l9 V9 U% C
}
% a( G/ P: X6 R0 C- Y+ C: E! [% n }
5 U# V- K5 u2 Z& U 3 O3 C& f3 Q1 T! w" P% b) ]- u
}
0 H9 C& G V2 K8 }! N5 Z0 R- y }
' a: i5 w& q8 x' q( f- M) z& ^1 G I0 _
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored( y; R' l% s$ S" G/ `7 n
{; N5 w& ?+ p S- T6 f) C# s8 z
if (aLength >= 8)! `" h4 A, W) u n
{2 ]. M3 R1 _$ A. l
DWORD dwItemId = 0;. h0 r6 E X7 q5 L
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));0 i2 E2 N7 g. B* u. D! R, I. a4 e
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE' \1 q, e; g9 `: J
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE- q Y) ~: \$ G ?/ b8 { U3 w# _3 c
&& _PKTPKTType == PACKET_ITEMACTION
( f* ~$ g$ L9 ]& n, v, c' l3 y+ _6 I ). D3 H5 \$ j2 ^ L- S# P% h
{
+ ]" k) p( y- E7 E$ j7 Q8 a" o if (dwItemId == 0 && _PKTItemTick) g( z$ k( V: s% [+ C
{6 R, [5 O0 T( t7 z
PKTItemRelease();
1 \& o$ M! Q I2 W }
6 v& U3 q7 `" i7 T, \ else if (dwItemId == _PKTItemID && _PKTItemTick)! y) S, V, i2 _0 s# k- T
{) |7 d `' P, O2 A7 M" K" f
PKTItemRelease();1 T1 A n8 G2 N' z7 ?$ y2 y8 r) M
}
8 p- B+ k( ~* o2 L1 m* G. J }
3 T- L, Y }# F) a, O# `2 k # y% O3 y: e \+ F6 r6 `
}
! B3 h% a% ~, x" i0 ^' x* M }
. R$ h, g" Z: p2 X0 i! K; ]0 x0 v9 F. P6 _5 Y( O5 Z& D- ?2 d- \
static void PKTItemGameLoop()1 \$ c! a) i/ p5 j% w5 ]: L: D( o
{; Q- {9 m' E1 c
if (_PKTItemTick > 0)9 V: } H( H( Z- [+ J- E
_PKTItemTick--;
, B# d9 w+ K+ w3 K* D0 O A4 D else if (_PKTItemTick == 0)# q9 W( @2 S/ w% [, Q3 {+ s
PKTItemRelease();
; D) o" ]' W* w }2 p9 H4 H6 l" d9 x4 i
" u% h/ a9 \) P" r# b
static BOOL PKTItemCando() 2 h/ P1 b8 i5 z
{1 V- r r1 L2 s
if (_PKTItemTick == 0)return TRUE;
9 ^! H8 [1 F9 Z return FALSE;* J9 W( G" {! { s+ M
}3 V# H5 N J2 u4 V7 a& J9 @
+ y% B/ P9 d2 l7 _8 }3 V static BOOL BuyItem(DWORD ItemID, DWORD npcid)3 z, O( r/ Q! Z
{( A. H) J; f. R6 O$ ^( Y/ [. [
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);; f, O# a$ f* W& p' K2 K
BYTE aPacket[17] = { 0 };
8 p* l i/ r+ Q) ^/ F5 z aPacket[0] = 0x32; E4 F! `# ?7 z6 X* z
::memcpy(&aPacket[1], &npcid, 4);
9 e) h4 J0 V& B ::memcpy(&aPacket[5], &ItemID, 4);
& o6 {2 q, X# M) x/ y) K) ^" a //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);0 F4 \6 h! \: p! X, y. N! \
D2Net::D2SendToServer(17, 0, aPacket);
# r- r! x# _ E! B5 K- _, h1 Y return TRUE;* f( e! G/ J, Y9 Z
}
5 W2 z& ]& u; X! i+ A; _$ t, j* s
static BOOL SellItem(DWORD ItemID, DWORD npcid)
9 h4 W- D# U# X m7 z2 o {0 ?" V4 g5 I* |# {4 p) l1 R& u
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);' Y8 i2 ?0 s2 a( P8 S
BYTE aPacket[17] = { 0 };
' n. [1 a1 m8 g) n aPacket[0] = 0x33;
" _8 o# ]9 S+ k& ] ::memcpy(&aPacket[1], &npcid, 4);9 n7 J: o) z0 j* d" Q' [/ q
::memcpy(&aPacket[5], &ItemID, 4);! K: l1 Y% S/ d1 S; j1 k& |
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);# S, C/ y% Z3 Q3 |
D2Net::D2SendToServer(17, 0, aPacket);
) E" B! A q( P3 Q( Z$ W return TRUE;2 V! y3 i4 U' H
}
C% e& B+ p; L$ P9 [" O
0 v3 U L O& E5 k% D5 H1 E5 M3 ] static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
, t; u$ E0 h- ]. Y# X( ^) u6 l; b5 }# F1 R' b7 M8 F
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);1 G5 Q. r, `& I& K& G0 I: O4 j
: U3 h7 F1 F7 t4 S# v4 m static BOOL OpenCube()- e3 b+ g2 q4 t; D3 t3 S; j# Z
{
8 \( c9 P& E! X: ~' C if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
% z! A) O- u$ [! i$ V8 T3 t) x& P! i5 k8 d: R# \5 ?% U
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
7 w1 R4 E9 s4 |6 d7 V* E if (!pCube)
, @5 u6 `9 r! b- w: V8 e: |; _ {5 ~( m( F* K* U' D* j; [$ @1 O
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
/ W ~3 B) C: r7 t4 ` if (!pCube)
, ?* f& L0 z: }- |8 x return FALSE;- q. F& P# M8 _) b' }) q# j! g$ Q
}! D& v8 w$ y' n, v( ?" v1 s) C! w
PKTItemTellW8(PacketItemMaxTick);5 d) A4 T" m; P- [" h
: q2 H$ o: A% y- @8 r- |
D2CoordStrc mypst = { NULL };7 T; D6 c p& f& j0 `( X; E: d, K
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);& W7 h$ y. ^0 F+ p3 ^9 R3 u
- e: K" q* d0 u, Q9 |+ A BYTE aPacket[13] = { 0x20,0 };
$ E2 m0 E) `8 }$ T% y ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
) @9 u& r9 W8 y0 M, ~" E ::memcpy(aPacket + 5, &(mypst.nX), 4);- j8 D8 g9 C) e9 i& @
::memcpy(aPacket + 9, &(mypst.nY), 4);0 v; {# z0 d$ U4 n% B3 Y' B; }
D2Net::D2SendToServer(13, 0, aPacket);
3 g+ B6 ^+ w; n4 t6 t return TRUE; ~+ }0 [$ G3 ]; Q" O% _
}
7 b6 w1 b9 d. W$ O- c# F& G; R' ?$ c2 Y n
static BOOL ToInvxy(DWORD x, DWORD y)8 y" a6 N6 c" U1 Q
{
1 ]% |4 K9 M8 t9 t6 O1 f UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);# V* w) e6 q% |
$ b1 A/ u* {5 u5 Y6 f
if (phand == NULL)
( l6 p1 k; ^% T; |1 K return FALSE;
9 l3 @3 }1 h) q8 b0 I5 N" _8 C
) p7 _, V% ]* T9 r* u8 ^& ^ PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);3 T# d+ g( c& {8 l9 j$ [. |
% E$ w( e" G0 j9 s" W$ g& z" X) W
BYTE aPacket[17] = { 0x18,0 };
4 h2 s+ f9 z) f' Z! T: t ::memcpy(aPacket + 1, &phand->nItemNum, 4);+ o; {- p- X* ~; u' }/ X9 R T
::memcpy(aPacket + 5, &x, 4);- Q0 R3 @. q I
::memcpy(aPacket + 9, &y, 4);6 d4 ]; X Y% {4 J
D2Net::D2SendToServer(17, 0, aPacket);/ W2 k8 l% j& j! t! D
return TRUE;
: {' v: v4 }7 `0 ^* Q1 D0 R( e1 s }
5 S/ m+ C% m0 O+ }7 R3 N
/ I5 m* P4 p1 U" x, u w2 X2 R/ r/ g static BOOL ToInvRandom(BOOL bBagFix = FALSE) 2 L6 R4 [. c! {9 n
{
9 S9 r" x4 g; i UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);. ~2 h5 p7 _* d$ S8 B/ |- G
if (!phand)
) Q- z) g/ o' d/ ]# E return FALSE;
' P. Z1 N. F t8 T int desx = 0;
3 z& A5 Q1 L* l0 s int desy = 0;
- o/ U1 S! r5 Q7 G. R- X7 G if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))2 |3 t8 L( E/ f4 t) M+ W
{* r5 [, q- s4 k/ X* W
ToInvxy(desx, desy);) v1 O( K) x! v& u. X/ v
return TRUE;3 f4 V& A9 _) \( W. B
}
8 \: Z* O; v0 f6 \, H return FALSE;' S1 }0 p) E3 B
}6 [( k. p0 o" s
$ P* E9 F; t( [: _; ?) \
static BOOL ToCube(): l* y7 y: Z+ z) [! L- s0 o- O
{
/ N3 G1 A/ j7 K Z- g if (!(*D2Client::ptPlayerClient))return FALSE;1 I, Y" y2 g: o/ u& n) L
! G* s" ^* A2 P, A1 I; U4 o% y
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
1 `$ M. i/ P! ?' s, }# W if (!phand)return FALSE;( F$ h8 R( t4 z9 i! A, t2 ^
5 R! U5 a/ v! n2 n
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块9 C5 ^' E1 A1 H. w
if (!pCube)( U3 E6 l: K [: W5 y3 s( \- T
{
" A- t% o+ R# ]9 X" F pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块8 G# Y. H8 g, B' x0 L5 i- k
if (!pCube || !pCube->nItemNum)9 w& A) l, H! X" s) u+ ~5 |
return FALSE;( V3 i0 a4 Q" I3 p& i2 i* q
}% B& k9 i+ x- D- \1 x/ J2 N4 G
1 @9 k$ r7 ]; E8 r6 a7 J$ j y1 Q if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))8 l. M; [3 G7 {; L
return FALSE;
7 Y. u4 f* \5 v( x' |3 C2 p
) w/ H1 s' c H/ |7 f" F% D% U PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
% b* v* j* t K
3 N; b$ |0 @$ s7 k0 L6 N4 @7 | BYTE aPacket[9] = { 0x2A,0 };
( h" Q! f X9 v ::memcpy(aPacket + 1, &phand->nItemNum, 4);
. g* R( X" [+ x6 r: J ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
; N& r* M. {2 E6 W D2Net::D2SendToServer(9, 0, aPacket);
. q9 A" j7 C6 @$ K% n3 { return TRUE;9 l- H H% {$ c: P
) p8 | a/ Y0 P, C- k
}
/ U" X* \7 Q1 J# H
! T9 Q! R% D1 y4 q, }2 { static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
+ \, ^0 {3 q9 Z4 R- q Q+ Y [( v6 ~# f- g; e
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存# o% I7 U* W7 f
{. x8 W+ s7 Y" ]4 g& W9 R/ ^
D2CoordStrc mypst = { NULL };
" h% O9 ]# N' F. E4 M/ }* i9 d3 v D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
! O% k& u+ ?! _' ?1 `# o
. ?# V, I8 ]: G if (!mypst.nX)return FALSE;
; R8 t, Q) L6 J& z; R3 P 0 c/ y; u: ^) h- z+ p7 Y1 A: A6 u6 N
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
% H& q" x. @+ N4 v) z, H( n( e4 k3 t+ S9 {: N+ r2 Q8 F9 @
BYTE aPacket[13] = { 0x20,0 };
% C+ S7 s. G- h) ~ ::memcpy(aPacket + 1, &dwItemID, 4);4 d2 D% G6 P! f6 E$ X6 P
::memcpy(aPacket + 5, &mypst.nX, 4);
1 @0 s; g: C3 G3 L& E: M% t4 f1 X ::memcpy(aPacket + 9, &mypst.nY, 4);$ f) x* P- |! b% f4 q% w
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);+ J1 z/ l6 _! `0 C: z
D2Net::D2SendToServer(13, 0, aPacket);/ d6 U; [( }0 A E" y2 \2 c
return TRUE;
7 _5 w/ h w2 V) E: v }
; S3 ]: e0 D6 }2 \& P z; y# A* T9 A
static BOOL DropCursorItemToGround()4 c# C$ k$ m( Y$ N; h
{
5 Y; o+ V9 ~3 d+ \' f1 K UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
8 {5 `4 I' ?: r9 k5 L7 ^6 a if (!phand)$ O$ p& S3 _/ `% D& i" T
return FALSE;
5 g- u: I6 F3 q4 m; _$ p2 _, A
8 |5 y1 [- A& Z( [; D* R/ m PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);& f$ ?* \) _& m. Z9 N$ N
& @9 V1 U: C: @% D
BYTE aPacket[5] = { 0x17 };
" {" u0 p- Y) p: m. A6 } ::memcpy(aPacket + 1, &phand->nItemNum, 4);
+ e9 w/ x- t6 l \2 B/ K6 S5 U' s D2Net::D2SendToServer(5, 0, aPacket);; T7 x! ]6 A: u6 H! `
return TRUE;8 ^3 R- R% o) r8 D1 B% ^2 m/ r
; ?, `( T% O3 ` F( q3 [" c }
' ^1 a* c( _0 _& @+ S, @1 U! t! y& y: ?
static BOOL PickStorageItemToCursor(DWORD dwItemID)
, M% L; g5 \( j3 W# q6 R' _3 W {
$ ~% E: g9 x" e% J% c( Z# c PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);" [- I/ a0 {& F
3 [# `+ S7 q1 p6 h- |2 b7 P BYTE aPacket[5] = { 0 };& K v/ |' m# P# c6 Z: p5 @
aPacket[0] = 0x19;1 H. u# f: Z, @3 t
::memcpy(aPacket + 1, &dwItemID, 4);
4 p' O2 Q0 ?7 v) X& }* L$ r //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
4 H$ p1 ]3 x" b; Q% m/ D$ N D2Net::D2SendToServer(5, 0, aPacket);; i5 y- `+ U9 ^4 _! j6 j* h
return TRUE;
: O/ A# b& }7 p5 j4 F. S) @9 i; X }& C( Y& I I% _; [! g# h+ g+ e
" t [, i0 |4 }2 X
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
# K! g& P9 D- c `+ W2 U+ k {
! l' l1 B0 }5 l6 j6 y PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
. q* z! P( n* n2 z1 k- `% ]3 V BYTE aPacket[17] = { 0x1f,0 };
1 w }1 ^& V% } ::memcpy(aPacket + 1, &ItemID1, 4);/ h; d8 f1 |( O O/ F t; _
::memcpy(aPacket + 5, &ItemID2, 4);" `6 t) s0 X9 G
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);* _) G- b+ B" {! x# d0 T- D
D2Net::D2SendToServer(17, 0, aPacket);* S3 y" s8 X2 O; x
return TRUE;0 x% \& ^9 t* {# ~ n6 u; M+ h8 N
}
: ~+ y1 @4 R! D& W. M
}( e* e1 k0 u& |$ h1 h' x static BOOL Transmute()
! E* @( H3 h" K7 X5 f {# z" W: n2 R2 P+ J6 d
if (!(*D2Client::ptPlayerClient))return FALSE;% x5 ^3 }4 x" Z9 J; c
" n4 ^# f0 x5 ^. @' H# P5 D, I if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))! R. b1 q. d2 G* c! m t
return FALSE;
; l3 j3 B' }% c Q L4 k8 u+ S9 n( K2 U y
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);6 v* I( R! b4 s$ F( b) o/ L' q
BYTE aPacket[7] = { 0 };/ P; K1 _1 t% A5 J" R$ c8 y+ W
aPacket[0] = 0x4f;5 X5 w% I5 v3 f$ I! b/ A
aPacket[1] = 0x18;: R3 i8 M B. d+ N5 z' }
D2Net::D2SendToServer(7, 0, aPacket);
0 k/ X& O4 W$ U: m0 y. t return TRUE;. T/ W* L! v( C' `6 d2 j
}
; G `7 q$ i: H- m: F};
, C) a4 P: H K8 Q. u
# ?* V6 Q9 \( \# K( o U2 f |
|