|
|
转载8 d3 r( E1 |" l; _4 d4 r
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
6 K" p$ F# N; q+ [3 }D2Client:) g+ C0 Z8 m5 r1 |& k# V2 z/ E
6FB20AE1为拦截输入框(用于获得命令): v' E( H# P: ~! n/ L
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
8 T- l6 M8 b* a* Y2 {6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
* ^- ~+ x& \$ k V& ^6FAF4230为hackmap的loop点 我用的hackmap导出位置( ^- T* ^" U8 P; p+ r
; }$ e) ]* R& `2 Y8 u4 L2 w8 M5 D4 t/ S8 G5 f
发包函数:6 C$ r. w6 e. ^2 j: T
class D2PKT_ITEM
8 }$ C( q4 Y# R* v% b{
( f5 r0 |! x b! G0 `#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
3 ~( N; t+ }: L1 a#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多, |& W( D8 l" h, S& h
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
- q% y7 W# v6 q5 d9 G#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
! q0 C9 h" |2 u5 V+ B/ I#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH Z1 q& B2 j5 s! O" B2 _
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上! x+ Y$ \. ^% _
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
- e1 u/ l0 n0 |' @' s3 t& o3 i) q#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上% f! l/ C5 b: v# o- Q
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -1 B7 F" L5 e& E
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店- q* p' I& A' {& Q. `7 @6 T( p
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
- R/ Q- X0 @, V$ Z0 t#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 - b& Y. x% S$ M! ]/ E |0 _
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带8 ~9 X; a) R" W/ f
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
3 F- o7 I; Q- N% q- A#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
+ l- W( j/ {$ K# g! N#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上0 y8 W+ B3 r6 j! I2 U* _2 u
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -. q, a0 b% B7 n7 i- [9 ~
; w/ _ b# Q3 b k
#define PacketItemMaxTick 150* X0 p/ i9 @; S+ K6 ~$ ]$ N
#define PacketItemPickUpTick 20: l, j- l/ \) r$ u1 ]- t# W& [, B
- u2 s: M' v/ G/ g& E
private:
! m* e0 O* k1 ] static DWORD _PKTItemTick;8 R1 B0 E. w1 K( q S. e- c. E4 t
static DWORD _PKTItemAction;
& Z7 Z0 o4 r5 I! C" C5 p static DWORD _PKTItemID;6 q5 E3 c( J) B9 d2 p* |
static BYTE _PKTPKTType;
# N$ v6 x+ t' t8 y* Tpublic:& ^3 f% _6 [# y0 i( v8 x+ K
static DWORD PKTItemGetTick() { return _PKTItemTick; }
. Z$ H Z) [1 _+ ]. b. z) V$ C2 R M/ U2 w3 l
static void PKTItemRelease()
, X, f- j8 @2 W6 f: H/ B {
1 k: L. E2 d" y" ~8 n _PKTItemTick = 0;
0 U6 Q q0 e8 M _PKTItemAction = 0;
% ^6 |& L' p! H( ]- R _PKTItemID = 0;
; A7 ~' N# u( [2 [, A0 I: X3 N _PKTPKTType = 0;& \1 N6 w, e1 D! D7 | i+ w6 w
}6 x' g# j, n+ {* B7 `
( q7 H+ {+ X! X" x/ c static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
& @# m# V2 r5 c6 a& y {
& V/ @" _: q/ _4 l _PKTPKTType = aPacket0;
2 `: _4 f' M1 W. ^4 U5 w _PKTItemTick = tick;. w# @$ R1 ]9 M8 n. x$ J
_PKTItemAction = ItemAction;8 d0 M$ V+ y) t5 F/ c
_PKTItemID = dwItemID;7 ]8 q" L* Z3 k8 C8 W& B2 X
}
$ h$ l6 f! V7 K* Y6 b
) T r' F' x; E1 g! `! e0 m static void PKTItemTellW8(DWORD tick)8 N& z5 W( B! m1 e. L
{3 h) _1 j# \ M5 [4 `
_PKTItemTick = tick;
, {7 L- P* u& Z) A' b/ Y2 O }" W1 t6 P, G5 s0 b
" t2 L% I$ `$ R; T1 V' | static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor1 j, W/ ^+ ^: O/ F+ i4 o' O" b8 p6 q
{
0 {' B0 I" f5 I, o) f if (aLength >= 8)
- t1 k' W: H3 B0 g( j {3 e/ E$ ^4 @% C* z# ^
DWORD dwItemId = 0;* p1 ?: E6 R! N' Q
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));( T8 [- L7 |0 H2 Q& ?* ]+ G3 | Y. [
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE' h, @- t2 {+ q d }/ x! A
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
0 d( X5 D2 U: ^" w && _PKTPKTType == PACKET_NEWITEM
9 ?6 G Y( H. K7 R )7 Z7 y8 Z+ `1 [( \. U/ i
{
: f6 S, u. q( v) |; q if (_PKTItemID == 0 && _PKTItemTick)6 p4 q3 ^2 @# y" ]# G$ j
{. b$ P% ? P8 I/ v4 l3 Y- f
PKTItemRelease();
# S- I! F, n. A8 S- Z }& z8 ~. ]4 I9 p2 b; G! {6 M
else if(_PKTItemID== dwItemId&& _PKTItemTick)
" ?$ {) T3 b( k3 P9 U0 g- q/ w. F {3 r8 J0 |8 m+ `) {: n: V* \
PKTItemRelease();
6 O+ X1 d7 i! j, L. B8 V3 a; g# Z' i }
5 o: ~7 P5 t8 j }! I0 s" t t, ~/ e0 J
# ^; B5 J/ a. j+ I; W9 X
}
7 P5 n* E) s" F; ^ }
$ A( X* K# q, c" x( y, I" `' a! f% I4 Z# e" u- J
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
8 b' H& o ]) P/ ~6 M' j: Z! J. Z# ? {
5 z3 |6 G7 o, d W" ]% ? if (aLength >= 8)! ^; E6 [2 T* U l! r
{
' Q0 \/ A- s+ k DWORD dwItemId = 0;; j- z/ T3 x% w2 v9 @! c
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));' V' J% S/ Q- q( ]4 I. L1 p
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE/ B- F5 b r2 d; \1 Z% C. Z( j
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE i8 e1 Y ~/ j; O1 p. X
&& _PKTPKTType == PACKET_ITEMACTION
7 \! p% ?$ @: J. z M ) J( j6 |) E9 N# d0 b) Z
{
8 \- U s9 `; o- W4 z5 h8 k4 Q if (dwItemId == 0 && _PKTItemTick)
: R6 i' A5 N' K# H6 ^ {
) a$ M+ D& I1 I( v PKTItemRelease();
6 m( {$ p7 }3 A }
( \1 X F9 m' e) H else if (dwItemId == _PKTItemID && _PKTItemTick)
1 B+ j6 `3 ~8 J5 g: f5 e! V, ` {
! ^- m" _/ h3 j, l% @6 | PKTItemRelease();' J& F4 ~ s! \5 ^: [
}
; S0 \% k# e/ w8 {( A) o }
% k0 Z+ p! W" a) Y& G# x1 ?+ d 7 F: B: l' @ l. L- X2 [
}
/ }4 h' e" W) |# p/ ^4 y$ m/ w }
$ s& \ {/ U; |' p) z% s2 b w; ]! e/ m }4 U/ q8 q
static void PKTItemGameLoop()
* k& j# o4 r. \( y4 |6 I {
8 O2 K( ], i! Y- y if (_PKTItemTick > 0)
4 d8 H0 c2 s4 B& x8 {; G _PKTItemTick--;5 K7 @ h- T* B9 ]' B
else if (_PKTItemTick == 0)+ I7 {9 c. P9 H; f4 ?
PKTItemRelease();
4 U- G, Z& N2 h& L8 G# k }
# j2 O8 u- ~: A5 s5 p) F
1 z7 G8 _6 `# p/ C4 X6 l static BOOL PKTItemCando() ' M7 [7 z6 K( s6 P( P3 f, T' r
{
* ` K, i/ m/ R' I' R if (_PKTItemTick == 0)return TRUE;
. H8 m* V' |1 _! z8 e' N return FALSE;( K( L, q3 r& V$ Z* V, l7 s2 G
}$ m* O2 H. H$ K& \
2 s |! Q' t& M; t1 V static BOOL BuyItem(DWORD ItemID, DWORD npcid)! V+ l0 X2 i5 G8 V# b
{
, n) @" d# Q6 I1 W- ~/ H7 }- j PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);. y* U; m( ^+ m: R1 c0 Q; u$ L4 w
BYTE aPacket[17] = { 0 };
$ L# ]: K. ^3 ~1 I+ C" ~ aPacket[0] = 0x32;
) x5 O; Z+ ]% X+ D; `9 v ::memcpy(&aPacket[1], &npcid, 4);
% R/ ?) g* a/ |# S ::memcpy(&aPacket[5], &ItemID, 4);
/ c" z/ N# w9 _+ u5 {/ S //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
4 |/ e# l" a" R$ H4 D# o D2Net::D2SendToServer(17, 0, aPacket);4 U- ^& \- f& I
return TRUE;
4 r" O/ B* a! U p. t }) c# Z G) i( o7 Z- I3 @ }. @/ \
3 l4 C6 P1 v/ b. {2 |
static BOOL SellItem(DWORD ItemID, DWORD npcid)
P3 b5 e5 P+ C- _3 {1 Y/ @' C' \ {' h7 I% G' U5 ^" b, Y B+ m8 H, a @
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);! M9 E1 O: r' e% N
BYTE aPacket[17] = { 0 };
, ^0 C" z, o* P" B% W2 \- Z aPacket[0] = 0x33;
7 |8 G, o* b9 }3 v5 V h' X( Q$ _ ::memcpy(&aPacket[1], &npcid, 4);8 N7 _" K' t0 d" z: C: S7 G) h
::memcpy(&aPacket[5], &ItemID, 4);
" \" ^& I. e @: Q7 \ //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);4 W5 U. K' R4 q2 J% A$ e, t; {2 [
D2Net::D2SendToServer(17, 0, aPacket);
9 S V* B# B3 w- I" |: n return TRUE;
& Y1 O8 \( V* d5 K }
& M( ]$ U8 S8 P/ W! Q7 N
' c% S9 y4 T1 {# W' n& y6 A$ C' } static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
% o5 N5 g2 ]3 |
; ?0 C6 [# A! N* d& D# p' {+ R static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
, R4 ?5 L. a6 o- F' v
k! y3 X2 v3 H# w; w static BOOL OpenCube()# K8 X6 S7 e- \: [5 t5 ]' {
{
% N' t6 p z" `6 q/ i9 q/ u if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
9 @4 c( P7 d7 j N% _) w) L; a5 X" S5 r" H; W9 i5 d5 J
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
; `; f' C9 ?- Q7 @& t& c" ?% d if (!pCube)1 p9 N9 s+ x& X0 ^
{
5 ]# C) p+ g7 ~+ y2 ?% \8 N7 M pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
) z2 r4 q/ ]: G4 z' \ if (!pCube)
& i! e; R1 S0 a# u1 A return FALSE;0 }/ B# f/ k1 c0 I
}- O2 G/ ~3 H: g; m
PKTItemTellW8(PacketItemMaxTick);" f" s* K w0 l# D
: K) Q- P- N7 P. z' P# y
D2CoordStrc mypst = { NULL };
) M! l0 l) a( a0 Q/ ]" X D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst); M- d# U( [; S" ?; i( }$ {1 U4 B& S
# @5 }- ?# y% r0 U) T" k
BYTE aPacket[13] = { 0x20,0 };
, L/ K T1 i7 l7 i ::memcpy(aPacket + 1, &pCube->nItemNum, 4);- {6 s, h; ~3 F. O0 ?" }) x9 n* S
::memcpy(aPacket + 5, &(mypst.nX), 4);& }: v- g$ s" i V4 A6 k. q7 v
::memcpy(aPacket + 9, &(mypst.nY), 4);
y2 N/ Q9 u( W: Q0 X6 m+ E D2Net::D2SendToServer(13, 0, aPacket);
; h6 A6 h4 g3 G4 l' X; P5 q! y( J return TRUE;$ H6 j6 x& Q1 z1 i6 J4 ?
}
& I8 q( M( y: b' E, M$ N" g( y( n5 c
9 `2 m! Z# I0 w static BOOL ToInvxy(DWORD x, DWORD y)
- g2 M, C1 c9 t F( x* @6 a: V {+ ~% e& w! B( Q7 h2 m1 S
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);( s& `. J% @; x `
! X: E! l7 n" x, g0 H
if (phand == NULL)
4 @$ P7 z9 B" ^3 ?* Z5 w- P return FALSE;
5 G# L, p' d% s$ p
' d* L9 [! B# t. f9 P1 D PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
: \8 K: y* C2 @% {" I6 Q( p- x# x. U+ y) D5 y0 u, j2 ^
BYTE aPacket[17] = { 0x18,0 };
?- j" ?* |* X' R% o. J ::memcpy(aPacket + 1, &phand->nItemNum, 4);/ o7 I/ I1 k3 g, d5 G; N
::memcpy(aPacket + 5, &x, 4);
/ e2 |; ?/ G: V6 S, l3 \ ::memcpy(aPacket + 9, &y, 4);
?$ L2 \* A# k- d1 }! m5 d4 t D2Net::D2SendToServer(17, 0, aPacket);# `9 y1 \. S$ }! w% s: u7 _
return TRUE;: T' I0 o$ |0 `% S
}
o: R1 b3 M: L( _. U8 W# c4 Q
. W, C2 C; T: M static BOOL ToInvRandom(BOOL bBagFix = FALSE) ) q" t1 n7 y' D# s8 n% D3 a9 a
{' \% d& A! L, @5 V# s
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
" M$ u* c8 i: t2 Q' F% V9 w0 c" _8 V if (!phand)0 @ t+ G" K% d$ v
return FALSE;1 `, M& o' a9 G- ]& b
int desx = 0;
- n4 U) \& ]% m+ }; d int desy = 0; G- F5 m: I/ Y0 N" s: U; ?
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))) T Z1 J8 g* ]; M: d3 l( j$ e
{
, L) N( M/ z4 j ToInvxy(desx, desy);2 u( \0 o1 x( s4 l: l
return TRUE;
# t4 s# e# n7 F) E6 N) J }. O7 y& [1 `! S. p- L2 m
return FALSE;& t* W; E# S& o* Y1 b* B
}
& e8 [' D* u7 c: {9 `( ?; m& C8 r( e/ }$ e) a
static BOOL ToCube()4 o( N# y0 q0 t9 Z3 h5 m
{/ N3 o& d) ]5 W8 @
if (!(*D2Client::ptPlayerClient))return FALSE;
! l' Q9 x9 _7 s* @; d
2 h7 j; l. J' ]+ K UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
) B `) }3 j$ E$ X5 ~8 ` if (!phand)return FALSE;3 `) h2 E$ v& z+ o( x# L
" f2 E6 Q/ \7 F4 Y' U4 E UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
6 f( i0 w6 g3 c3 |* x if (!pCube)
6 `; p% B- }, r {. Y5 J9 q: G2 Y4 I# ]
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块- l# R& U- ?- {
if (!pCube || !pCube->nItemNum)
c2 Y+ t/ K( d" Z& N% s9 _ return FALSE;
4 C8 B7 o8 m6 o9 j }9 f7 h- k( d9 V/ A0 B: I9 [; X
; l3 n6 Q: i9 _7 F2 w if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))4 B) Z" x+ b+ e$ ^! H0 ] m
return FALSE;' X0 Y8 r9 Z2 j7 N
# ?# _) [2 W+ H2 `' Z
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);, S: D, K' b2 Z
2 q9 P$ B; z* }- p' |* ?0 q BYTE aPacket[9] = { 0x2A,0 };
: x. Y, M0 E! V2 ^8 o ::memcpy(aPacket + 1, &phand->nItemNum, 4);
2 |0 @3 P' {2 E9 a ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
; r$ v# t4 ]- @9 J D2Net::D2SendToServer(9, 0, aPacket);
1 [* B4 `3 [' F7 |, k: e4 v# C return TRUE;
# @9 G. M; f9 l/ O3 C+ u; y8 |. Q5 f# {% N6 c
}, o% u7 k. a$ X/ @0 d) k' V+ I2 n
, G0 C$ m1 h/ M7 U
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
' |) m0 C! h' j/ B+ l( ]. N- n( c3 R' ]1 u
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存1 I* n) @7 Z3 o* q; w5 F! ]
{+ C. V- \4 S5 U; A0 [! N3 F
D2CoordStrc mypst = { NULL };
, J% f G; k( r. N, y1 R D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);0 P) {8 @/ ~1 h% D. P
1 i5 ^2 R: C, c
if (!mypst.nX)return FALSE;8 I6 f3 o, e8 u4 Q! l& F- I+ Q
2 n5 H0 i0 j* p7 E PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
% p, U8 ^+ _% x3 }* M+ B5 a+ e2 Q2 i9 R' l* @
BYTE aPacket[13] = { 0x20,0 };7 y, j4 s. b( ]0 |
::memcpy(aPacket + 1, &dwItemID, 4);
7 G5 M4 H1 y; `( U9 Q2 U ::memcpy(aPacket + 5, &mypst.nX, 4);1 A1 ]/ @) |- V% s: j. L& N: Y
::memcpy(aPacket + 9, &mypst.nY, 4);7 {# j' k* F4 Z' z* `' {7 f$ a
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);$ P" {5 t& o5 j
D2Net::D2SendToServer(13, 0, aPacket);
! U4 V' v4 W! W3 [* E2 R return TRUE;
! V( {: Y! T* @& Q3 Z K0 y }$ u- H) [( [" {
, F# R' z) |* s( P3 ]8 { static BOOL DropCursorItemToGround()
( u# r, p c/ e A$ w$ I {, m/ y; T1 s6 G9 B5 v
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
1 h1 S% P+ H$ e' s$ Q if (!phand)) K8 B. E8 {! h( f3 q
return FALSE;' X; O8 ~% n) F& [5 ^" a
- W) P, Z% g" S; x7 R; b PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
9 x, @2 R7 \3 r$ y1 x8 q/ G& O, l$ i2 g5 W4 p2 U2 T2 ]
BYTE aPacket[5] = { 0x17 };1 C6 N( x6 A# o5 }4 K- ^
::memcpy(aPacket + 1, &phand->nItemNum, 4);
" x! K$ m) v* a D2Net::D2SendToServer(5, 0, aPacket);) c6 B5 _: y( x' Q7 c8 A& H4 ~2 \, H
return TRUE;! f; ~/ F H+ U" t4 d6 L' w0 n
0 d3 _! D/ N& J/ p }- ~: S' [3 W9 Y8 D, c3 c% y8 F
2 @( V! W. F5 C. U# N
static BOOL PickStorageItemToCursor(DWORD dwItemID)0 _: j. L% T3 `; W" {' u3 n
{
: ]6 I% @8 {4 V4 W. r2 ^ PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);# p6 o, y. b2 r1 L B
: p" U! I* W" b$ N% @ BYTE aPacket[5] = { 0 };5 r% }& H2 r: P3 H6 }& v( c
aPacket[0] = 0x19;' |$ H, q7 p( ^, ]! ]$ j
::memcpy(aPacket + 1, &dwItemID, 4);9 o2 o- B+ {" V5 O
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
& H# c. n" e- h" w# ]: o D2Net::D2SendToServer(5, 0, aPacket);
6 M1 h7 Y2 q& J4 } V return TRUE;: C- x! |7 x% P
}
7 g. F& h# `) v# `
+ ?/ ` V* I+ i) a4 r static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
# g6 n: J3 v- J8 y9 L5 G {, q1 F% |- H- c9 b( A
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
* A- i4 u" S% v0 ~: I+ g2 ] BYTE aPacket[17] = { 0x1f,0 };9 }5 m# L2 E$ ]8 y: ?; H' o
::memcpy(aPacket + 1, &ItemID1, 4);7 A0 n) m( R. [# @
::memcpy(aPacket + 5, &ItemID2, 4);
' t& i& t& `4 p/ _7 } //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
0 E: }) J, W$ P D2Net::D2SendToServer(17, 0, aPacket);
" t# ~9 A, O8 s return TRUE;5 n# C. Z, I5 r; ~' O6 o
}) N' s. ]# ]3 l1 |% I6 e4 R
* L- B; H' p6 i& a" H7 X% I4 J
static BOOL Transmute()
6 n' T, I4 K1 T+ u) I, c4 H# V {) F6 X* N9 j1 l, w/ ]/ e
if (!(*D2Client::ptPlayerClient))return FALSE;# T- k2 f& e. l) t
, M" ?% J- i: c
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
/ ^8 d5 C! e+ t" V/ [ return FALSE;, q# S# S' w# t% Q
8 U* E& a. Z: g- `6 g: J4 } PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
# n5 ?) v, ? l- b$ C BYTE aPacket[7] = { 0 };
# |* k! w9 g2 d' T aPacket[0] = 0x4f;
+ t X) F3 Q+ `5 j, C! W- W# c$ m/ o9 d aPacket[1] = 0x18;# Q: T. \- J0 J4 r5 V# G
D2Net::D2SendToServer(7, 0, aPacket);
9 ?: [$ B) P6 d; U- m4 s/ f0 W; Q! | return TRUE;
# j2 Y8 X+ s& p0 M' l2 U; h }* c& F$ P( B: f) W# u
};% j$ i- Z4 C+ t7 k% j0 W; x8 F* h" C2 H
; f* C& ?' B9 q9 F |
|