|
|
转载
. k2 L9 b5 \1 m+ K7 C" ^自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:) [: W# h. a' n( {0 W& g, u
D2Client:* a3 _# r; |$ w- j2 p/ R
6FB20AE1为拦截输入框(用于获得命令)) {" n2 ]/ B9 p+ E q0 l
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发) \( ~: y" ?0 ]: B v
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发- t- U- I; h& e4 I% }
6FAF4230为hackmap的loop点 我用的hackmap导出位置* s! k, B8 V! A# B
4 \3 m! E+ K/ ?
* x- H3 M2 _/ ~6 t( r' O9 ]6 d9 [
发包函数:
2 [* |: r3 n0 V5 lclass D2PKT_ITEM
4 B8 I* ?/ D# }2 _9 j5 X- B{3 }# s: T' K. v8 m! p; i
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
) |! {. b* Q! [# {#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多, |) g- w; I) V/ i0 C
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上- y# y' w% E. \( A- F
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
6 x& J3 K4 A* B1 M2 v#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
) I1 B* b7 i# e% c! g4 e#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
! d, c, T- }: b7 s; ?: _+ w#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏6 k5 ^* z% ~; S7 G6 f7 c$ ?
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上( e0 v% |; d7 Y- \
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
8 W: g$ e9 n9 g) v#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
' T" V0 a; X! v A% j- X#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
( p* ^, K3 P3 \' ^9 _#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 0 r7 V* o# W+ G# O5 d3 d) ]+ }
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带/ l0 ~* i! C6 l8 n* R% ?1 M- ~
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上- m" R- q. B* `) r; t% |; |
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -/ c. ~8 W i& v+ p" H
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
) Y1 ~% p: q& L+ {% \#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
. M2 Q; f+ |, K" x! C: e& B9 P) r0 L2 i& F+ k
#define PacketItemMaxTick 150, {. C# ?' l/ A% O8 [: t4 w
#define PacketItemPickUpTick 204 w4 N# C+ P, b* m9 d* l
) d# ` z5 {2 Z# C5 y# b, \private:
% I- H* Q5 A% b5 z static DWORD _PKTItemTick;
; h t9 n! e. ~/ ?1 L4 I static DWORD _PKTItemAction;; w P6 j' T/ r1 g
static DWORD _PKTItemID;
( p& u9 n4 H* F# r% o* f. ` static BYTE _PKTPKTType;# ~. Z1 D! q3 a0 n) u
public:
) Q" { [, _5 ^5 A7 w4 ] static DWORD PKTItemGetTick() { return _PKTItemTick; }
5 H8 C2 z- ?, e2 s, Y3 G) v7 y* x7 [$ I$ V+ O
static void PKTItemRelease() - n' J, Z' w7 ~4 g
{) `6 S: M9 O5 \9 [. R5 q
_PKTItemTick = 0;
r! D1 b/ P3 E _PKTItemAction = 0;2 V. R. G+ F7 V( ]: K! z
_PKTItemID = 0;
) t% z; T- Z V _PKTPKTType = 0;
. r" ]) I% t( N/ }* \ }* [' S: x0 B" ^9 D7 ~
4 }/ _ z/ i: T1 _
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
; Y" }* B! }$ X- a5 A {( Q* ~6 ?0 e H7 A5 D+ z: ?. h
_PKTPKTType = aPacket0;- D9 E+ R" p; c: F) G
_PKTItemTick = tick;
) j( ^$ J1 {+ i/ T, J _PKTItemAction = ItemAction;* s g7 [$ N+ [8 Q$ ?$ M5 x8 N
_PKTItemID = dwItemID;1 s8 C& o& ?4 M: T9 S# r2 `
}
' j9 h; v* A0 f4 ^! X; k- V& J7 r9 A
static void PKTItemTellW8(DWORD tick)9 u5 S: y! g6 N3 P' x% G
{
D; d- H* N3 q1 P. e4 T# x4 f _PKTItemTick = tick;
5 z" Z: ?: h& ~/ X) p) b }
5 L# f6 `& ^: u
# c k! r3 M* d& e/ [ static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
# v% V, ?0 S+ d* c8 Y4 m+ } {
8 ]% K0 ]1 B e5 L if (aLength >= 8)' [) {9 Y8 m2 U3 z' P3 V) _4 A$ ~
{& G: T" n5 S/ I3 v% w& u
DWORD dwItemId = 0;* B: b" s' ^3 |9 a1 R: m. J6 ^
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
- x6 a E; L3 Z$ R2 J$ j+ z* f9 K; t if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
/ q1 P% p7 D. l6 Q4 e && _PKTItemAction == ITEM_ACTION_TO_STORAGE( Y! d* A, d# ~% [. a$ K, k0 I8 [
&& _PKTPKTType == PACKET_NEWITEM
, X. n5 X0 m' G )
6 N* o! b% v4 z3 ?' b {% x) f) r+ K3 v, F( @- D
if (_PKTItemID == 0 && _PKTItemTick)9 u& m" Z$ Z' X, d- d
{! `5 E% ~8 I( s7 c
PKTItemRelease();6 ~7 t' q( @* t
}
3 j" U; v# g% ^ else if(_PKTItemID== dwItemId&& _PKTItemTick)
* u3 i8 g s6 w. n' _; K+ e8 G {/ p0 D: ?; b! o( ?4 k* ^
PKTItemRelease();
2 R4 k% h$ E' w5 f6 y+ C }
# \! [! M5 E; I* h }
- n% H1 u& ^* P# J, @
B% Z/ A/ e; Y8 {& g2 c0 M" s }% P( }5 e; q& h& ^# L, n5 w& m( F" V4 O7 g
}
; M4 n2 Q& u+ h$ {' _9 |
) w% L! t5 _; | static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
7 z& ~; K) W* P2 ?7 e* A8 i3 Z+ H {$ T0 @* k5 J7 i
if (aLength >= 8)
- Q5 Y3 l" n9 o: P8 K {! v+ T! \1 l2 G" S1 e8 L3 }) ~, t
DWORD dwItemId = 0;+ \* l& u6 D8 W! w$ i
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
$ ~& H$ h8 R9 }4 N/ w( _3 O if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
$ O6 Y3 y( K+ V2 i && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
' a# p. c$ {5 J, F4 q5 l && _PKTPKTType == PACKET_ITEMACTION
5 w; q* {! R" r2 v# b: l )
8 ~' s' z0 v' j {
% M5 m+ y, r7 u$ ^6 F& n if (dwItemId == 0 && _PKTItemTick)
1 g+ G! u8 a1 V7 k# Q4 \0 H" i {
8 f8 o$ N& D0 A; J& Q PKTItemRelease();
4 X0 j: g* B4 z* ^' C }1 D0 I9 ^9 T% X f8 U7 l
else if (dwItemId == _PKTItemID && _PKTItemTick)9 H# q3 J! o, Y7 f- f
{
( y( w/ X8 K8 I. l+ T" w$ i PKTItemRelease();, _( n, B# Y9 x' f) S' F
}& ]; c( H. [+ d2 I. ~. q
}3 k3 L0 D) O, E6 b
4 B. h; [3 f9 {1 O$ h- J }7 m$ Y6 Z0 m6 M m
}
( P m1 `- A: c- \; T1 N/ Z* X8 r. @: U/ _2 S" f1 R ^ U! E
static void PKTItemGameLoop(). D& ?' B+ E2 e
{
6 p" `. o/ U L, G0 h" F if (_PKTItemTick > 0)
* Q1 F0 J5 n. e) O, u$ c _PKTItemTick--;
, D& H/ e! [) @5 V else if (_PKTItemTick == 0)" Y1 w3 W8 o$ c
PKTItemRelease();
' A& j0 N; S8 ~( \7 F- g }3 G& F2 a+ w$ w( p
- W% P6 W; f8 y8 }3 I% R9 S static BOOL PKTItemCando()
# s: z+ `; U: u( z& q: ~6 f7 [ {, O) t' k, P" a' a {) Q
if (_PKTItemTick == 0)return TRUE;( F* F& ^7 G2 V1 X% g" q" W1 P( C
return FALSE;
( Q' v c; ^, F6 |" \7 B* f( e" O }
( E4 X1 J# T" J% i- B/ _% n6 g
2 |7 i% x8 d. \* _9 R0 i static BOOL BuyItem(DWORD ItemID, DWORD npcid)- @0 d) ~$ q. f; r" c- V# F5 l4 b& N @. c
{& b) H- r# v* O k8 |5 E" E
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
+ s& ~5 O9 t: Q+ ~) c. f. ^' Z BYTE aPacket[17] = { 0 };3 y, t0 p0 v; F9 Q3 a- o
aPacket[0] = 0x32;1 b6 m4 w3 g( D" j) k
::memcpy(&aPacket[1], &npcid, 4);
/ B4 L% I' c8 e ::memcpy(&aPacket[5], &ItemID, 4); \ l6 Y+ w$ O+ S
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
: k4 ^8 z) [2 T/ d8 u5 e& k D2Net::D2SendToServer(17, 0, aPacket);1 R; f) Y. ^) I1 F ?3 O
return TRUE;
: [3 p6 l9 j. Z; l: [ }
3 u$ B. E, m G- T) `% B6 R D2 [' B
static BOOL SellItem(DWORD ItemID, DWORD npcid)
$ V0 I& O) T! |2 p, j {0 T3 d/ L, j$ _4 x' r( R+ I
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
& H8 H) Q6 d# x BYTE aPacket[17] = { 0 };( Z6 b d+ K& R; d( [: o
aPacket[0] = 0x33;
7 }. w: h4 Z Q$ x1 M* q7 D; V! z ::memcpy(&aPacket[1], &npcid, 4);
8 F; }& ]" ]: V( a1 z' c* s# _. { ::memcpy(&aPacket[5], &ItemID, 4);" C7 E# j& a) ?
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
/ T6 F" I7 t8 v# g5 g D2Net::D2SendToServer(17, 0, aPacket);
" y* b2 T- q' }6 K$ \4 g w return TRUE;
2 o- z h( j$ x# n! l: T }
2 i! ?8 O |1 c' D. o1 Q
* f# e: } `& b$ \2 Y5 K0 p7 W static BOOL Interact(DWORD nUnitId, DWORD nUnitType);, `' G2 a2 f0 Q- a" m8 Q8 [
; ^3 [2 y% J+ m5 a. p3 g static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);, A) u, T3 ^: S, c8 r
9 q$ N+ {* M" t+ }7 U static BOOL OpenCube()
; p1 C3 I5 }: U$ D# m0 ] {
1 k( x/ j3 @. u$ \* [: b: a# ~" X if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
0 P1 o4 X1 v: _, ^2 e4 c `% R' O1 d
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
& Z6 {9 |4 @2 N if (!pCube), E8 t, q* N* {8 [2 I, V+ D' n
{6 q6 T2 M6 v' U# m K* t
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);+ r3 x0 e& e, P
if (!pCube)" I s) j& S% B! E. L" s; l0 t+ U
return FALSE;
" Q7 e6 o; V6 e3 x. {" H; z }
2 {# Y8 [' w' g- B- N, I PKTItemTellW8(PacketItemMaxTick);
; v9 n0 ~7 E3 H5 T8 v- l
) h _7 I6 P# K5 u3 `3 e4 ~% g D2CoordStrc mypst = { NULL };% j9 G2 a1 Q2 H8 A1 Y9 f9 p- S
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);' `- F- h$ P5 Y3 c8 p; P; G
0 A1 b' K! h0 R' `8 \/ @7 A% b BYTE aPacket[13] = { 0x20,0 };
- ?0 H* v; n2 t+ \! H' G' F M) X ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
, `0 Y8 G4 d" h( }+ e ::memcpy(aPacket + 5, &(mypst.nX), 4);
: S0 R4 v9 S- f( ~/ R# W ::memcpy(aPacket + 9, &(mypst.nY), 4);
. X1 D- L2 N- S, v- u' D, y( [ D2Net::D2SendToServer(13, 0, aPacket);4 A+ B" @8 q% t) V7 M
return TRUE;- x0 d2 J% E6 G# h
}7 y) s9 d$ b$ X' k$ h
U2 _- i2 V7 a- F, p
static BOOL ToInvxy(DWORD x, DWORD y)
, `& }4 e9 P( `% O! B. K+ h. U {
R( H4 e, i2 l5 A4 h UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
3 h, m5 _) i! A2 `5 i2 e4 |0 u. M! D3 p/ T' ~7 P
if (phand == NULL)
, \+ U* c' `; @ return FALSE;' {' \# Z2 a- n* H. q! b* C( V% k2 a
6 I n& a, d9 Y! J4 z% ? L; Q7 h PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);4 k0 [. z2 l6 F' l9 C
( L! [0 ]" i# e3 w; Q. l BYTE aPacket[17] = { 0x18,0 };- A$ c4 N% `. t* N
::memcpy(aPacket + 1, &phand->nItemNum, 4);
* \% A0 q f; m5 T# }( ^ ::memcpy(aPacket + 5, &x, 4);
2 M A) P- A4 ]0 V/ i ::memcpy(aPacket + 9, &y, 4);
' T. x4 y! G! B2 V8 E! X D2Net::D2SendToServer(17, 0, aPacket);
% x; M' ^3 _$ I5 N return TRUE;& q' |1 ^4 f( q; a1 w' N; v
}
% c# j& e6 L, v m6 W- o6 c
1 S# l# c4 A. [" a2 j: e# k, l static BOOL ToInvRandom(BOOL bBagFix = FALSE)
) m2 B* [8 n3 f5 {. a, o. a {
7 w$ |6 Q U2 T5 u' _6 g UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
+ |) ^) R5 E# I! T' v if (!phand)
6 S9 | e4 u/ x$ _ return FALSE;
1 t1 X% k% p& a3 W int desx = 0;' t9 e; i( s6 n* ]' p, x" H( k' p' o
int desy = 0;
0 Z: U7 P. }( l. O1 W/ e if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
0 L2 n$ v& `( p' B4 i5 C" G( \ {
) b- ]5 }/ s- m- k ToInvxy(desx, desy);
& k% Z$ F2 h- H' f( {$ u8 w( Z return TRUE;' M1 r5 Y5 X$ o: E, t3 C8 {( F
}
% {5 l' L% ?1 `% A. I4 f. Q2 e5 c! u return FALSE;
: G$ v$ o! { w1 r" W/ T# D- u }
$ U) W, L i: S0 V7 ^ }
) d+ L ~2 v5 j8 U) I+ q static BOOL ToCube()
2 v& ?' X5 F: u6 N9 E0 Q {- h. K( {/ l! E
if (!(*D2Client::ptPlayerClient))return FALSE;1 @$ ? S7 _7 {' v: t
( x" [. m# j+ E' ]* s UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);8 P0 m' x- ^* h0 B% |0 x
if (!phand)return FALSE;/ [1 h" p2 K3 x1 x
5 k( _4 D, Y* L" Y$ m
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块+ A1 l6 ^. P9 Z. h* r2 v
if (!pCube)
' @2 c. r5 J5 m. K {
1 n( J z& ]3 i pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块. N) b" A% A4 e5 u: B# }* @( E
if (!pCube || !pCube->nItemNum)
9 q/ z, ~6 L) `0 C return FALSE;
5 Z3 p' r% A7 R, ]/ a' j* w }! U. M; p# X% }) R- ^4 k
7 J- a2 } Z6 ^ if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
! T- Z$ {* V. k" v% H( p return FALSE;
. ?7 G! `6 H2 m
7 \& o5 U1 O* @" t: P; { PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);4 I6 [, f0 ~& w' V7 e% d* q
/ l9 b8 `. S1 w4 P; v/ ]# z: X5 U. m BYTE aPacket[9] = { 0x2A,0 };: w% p- N: Y. Q3 E0 f
::memcpy(aPacket + 1, &phand->nItemNum, 4);
& P y" X( l9 u5 {7 M ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
6 f- E, q) k* N7 b8 c D2Net::D2SendToServer(9, 0, aPacket);: `( K& r" l5 S0 G
return TRUE;
0 ~ ?. v5 X& Q5 O j3 ?1 F2 o6 {- E. J# ^9 A3 d( n
}# f" d1 q. n+ R) H6 P1 d
8 v% K' a' `% `: m( m
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
u7 k" C9 M1 k! v$ l3 d- o1 O
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
! d2 I' v! K7 a5 v {3 m& q& w0 z2 J4 H, ^( }
D2CoordStrc mypst = { NULL };+ e/ E# ^+ ]* U( Y n# e
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);" M# K: ^. p5 G/ A# Y+ D
% \6 k% }1 \: Y. s( {- p: G if (!mypst.nX)return FALSE;6 F6 I& B, X( r' N/ j
$ _: U3 w, O+ Y9 K7 L
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
4 g0 f4 @2 L1 U/ `& |5 Z; V& W& T9 U ~3 q! T' m+ t' a) A! y; l
BYTE aPacket[13] = { 0x20,0 };* X5 l' e E1 d9 B+ o+ w [" H
::memcpy(aPacket + 1, &dwItemID, 4); ~1 J, B% q: K4 h2 Q* Q
::memcpy(aPacket + 5, &mypst.nX, 4);/ ?& B; c3 l% x4 ]6 w
::memcpy(aPacket + 9, &mypst.nY, 4); y ?; @& b/ W- L/ k9 o" y
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);& T1 w" f+ u4 v$ g1 n/ W" ^2 S
D2Net::D2SendToServer(13, 0, aPacket);3 D5 s) u+ R8 H, j9 f8 B7 o
return TRUE;1 R! A" M& e, q+ d5 z' X7 s
}1 |- `6 R: _' Y9 F& d1 t6 P
3 U; ~1 T6 b* M+ L" E$ i static BOOL DropCursorItemToGround()8 t; @: Z$ v5 V9 H: ]9 i
{
N/ \$ U! e2 J: e1 ^, \2 v UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory); O& z z8 r2 u9 V
if (!phand)5 x3 [' H. m1 c3 L" @
return FALSE;( c) Z. a" J3 q0 s
* ]( F8 B) ?6 j% z; j) t
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
& }% O1 j8 x- x. ~* v! _1 o) x S; @! r Q. w! H. t# ]4 X$ ?
BYTE aPacket[5] = { 0x17 };* D' e9 f1 F9 n8 D+ e/ O$ z
::memcpy(aPacket + 1, &phand->nItemNum, 4);
* S3 l0 P" y1 E2 m, i# g D2Net::D2SendToServer(5, 0, aPacket);. D4 v) l4 w! h/ e
return TRUE;
5 s% n& w+ q1 u' }0 G* U
1 ~# O# w1 x {1 k, v* y8 T4 } }
2 N) S, u9 t1 \; }, ]2 j5 _/ ^8 x6 F0 m( i) ]3 O0 ]5 `
static BOOL PickStorageItemToCursor(DWORD dwItemID)/ u8 G5 S0 y7 g4 D0 ^7 s- q" B
{
0 N. F' G; {4 i: [$ ? PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);" b. \# e( l3 c! W, o6 j3 r+ S
5 E/ }* |8 k5 d7 R7 u) z; g
BYTE aPacket[5] = { 0 };5 l$ c! W( F* M, N
aPacket[0] = 0x19;
6 ^& u5 k7 ]' d7 H1 p0 [7 { ::memcpy(aPacket + 1, &dwItemID, 4);
1 N0 [' t" [& T1 I N //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
7 z: f* g2 A' j$ V# d* x0 v D2Net::D2SendToServer(5, 0, aPacket);
+ Z9 X7 A( H& A0 L$ L2 p5 B3 a/ m return TRUE;* S8 P+ t2 R# [
}+ q' }' t$ @8 J* Z' E, P8 `
9 [+ {, M& M% s0 q5 `1 r static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
) i+ B# e1 f# S. E( n {
8 C m2 F& ?7 Q) T% D" m$ F PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
- A! w' r/ R! C' s6 m BYTE aPacket[17] = { 0x1f,0 };0 _! [9 c( ]$ S0 k4 M: V7 x7 A" G
::memcpy(aPacket + 1, &ItemID1, 4);' m0 a9 n/ d8 O
::memcpy(aPacket + 5, &ItemID2, 4);
& M K: S6 ^% |" \0 D, q2 {0 b& K //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);/ F3 ^4 u8 Y- i6 ?! V
D2Net::D2SendToServer(17, 0, aPacket);# P9 g8 [) \: l7 L3 F- E
return TRUE;7 g8 M* o+ l7 c6 Q. _3 O
}
% |: a3 L5 ~7 Q9 a* _8 d4 O2 M ?6 U# O5 u7 i
static BOOL Transmute()( K4 |3 j! [( I8 i* J$ C4 Z
{5 S2 b* M( i$ N& j ~
if (!(*D2Client::ptPlayerClient))return FALSE;
4 t2 @( B2 \: R; o; I2 _
' ?* W! l r) S. S5 y! n if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))8 r6 e/ U* V7 v1 F0 D, D" G
return FALSE;, I7 x; [3 g' k% Y: A9 N/ y2 Z
1 z4 c4 g/ R2 H# e v5 P
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
7 O1 \ r6 [3 k: m" n6 j BYTE aPacket[7] = { 0 };6 ? l" w% Q% R- N& c
aPacket[0] = 0x4f;% g, f/ `& L0 h z L
aPacket[1] = 0x18;( d. H6 G4 c! G% w5 T! u2 `
D2Net::D2SendToServer(7, 0, aPacket);, c9 z3 I6 t; |0 ` c2 @
return TRUE;# t& Y2 _0 d! t1 G
}
; L* J3 P$ \% a7 e( `- `! o) p! r};
8 K4 P3 E/ A% W% G
. ]4 `* q1 ` \# S5 O$ q |
|