|
|
转载+ b% E/ h4 ?6 `' j0 g1 F# d+ l3 v
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
0 G8 B2 Z% I0 |D2Client:( Y( H k- Y, Q& T$ Y3 w& T. Z' L+ R+ t
6FB20AE1为拦截输入框(用于获得命令)$ s% J' a+ N# T: K# a( Q
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
/ }' y/ C) B6 E& O& ~2 n6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
# a. X8 Y* e# a% X# j# {5 i6FAF4230为hackmap的loop点 我用的hackmap导出位置
7 t% ~7 j7 F8 e M5 M! f3 v
) e2 ~) C9 \0 Q4 w; _
2 n- `) C- L+ Y2 y4 K+ ^$ v1 v发包函数:" n% o' }- Q" ?0 U
class D2PKT_ITEM
0 p+ ?! Z+ w1 Z{* w( |' Q$ u& y: z- e' _
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
9 g. Q% M } Q+ g#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
. c( O5 h, U) r H! g0 M# s#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
" F* Z9 l. b5 V#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
& A5 q p! t# _, }2 i#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
; x% J4 s; e: K#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上7 U/ G: B8 Y' {. D( I
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏6 K, m, G) ]4 Z& o# C
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
1 {" T$ M# [; [; R6 H+ s#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -/ K/ N1 x5 T% g
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
# T# a& X$ u* N$ N5 U' |5 o- }, `#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
5 _3 ~' W7 w2 {1 n. \#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
6 i& f: J7 K Y" k r7 {. x#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带1 J7 Q) }) p+ `. K0 e4 ~
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
r+ ^( o% y0 A/ |* V& o# Y#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -$ L* f5 t8 ?# W* Y+ }5 s- y- B
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上3 j/ ~4 w }9 q# f
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
4 l( a& l1 @# n8 q4 L) i* [
1 ^, s$ Z9 \& k* D3 z$ ]#define PacketItemMaxTick 150
7 Y" y/ z5 v/ _#define PacketItemPickUpTick 20; Q! l2 s; }$ e2 X6 o, ]3 [. w3 t
/ E& x7 T% A2 C4 [; A8 [
private:+ D% q: y1 Z% t9 _8 Z, ^
static DWORD _PKTItemTick;
p/ s0 V' ~- H/ e v static DWORD _PKTItemAction;
9 T; I1 t9 {! k/ W" | static DWORD _PKTItemID;7 r* Y1 p0 ^% i% q Z
static BYTE _PKTPKTType;( v0 \+ }0 J9 v: I4 j% V
public:
2 G6 ?; `( j7 x0 ^, s* B static DWORD PKTItemGetTick() { return _PKTItemTick; }
5 l9 C; x& [) i- `. U& \" R2 F# T2 P7 Y
static void PKTItemRelease()
6 Q' Z7 a7 N X& c9 | {6 k' k" _3 I6 e. V' ?9 c
_PKTItemTick = 0;; b: v, j. K/ ^! R
_PKTItemAction = 0;
* D3 Y" e$ I" m) |& L9 ~! o: O _PKTItemID = 0;
, [2 N7 g' a7 ~& \9 d5 K: w _PKTPKTType = 0;
1 \2 P/ z" u, v) j x2 v' { { }
0 [: x9 d+ q* B4 }. d a( a1 ?
2 v- h: p: a8 N, y8 @1 q; b static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
7 _4 X) E8 Q- g8 L% M; \' d/ M {! J v8 B/ \' b1 ^6 _! ~
_PKTPKTType = aPacket0;2 u( c+ d) `) U/ v$ D
_PKTItemTick = tick;4 Q" A \2 l4 ^+ o. [$ T8 v5 @6 M$ S
_PKTItemAction = ItemAction; `' p/ ^+ |2 s$ @0 p
_PKTItemID = dwItemID;
, J5 f5 d, D1 [7 E: U4 V( z }4 ?8 C7 }/ P" O' Q4 n/ @
2 a# s' t: O' B/ P; m static void PKTItemTellW8(DWORD tick)
8 m6 H" `5 k Y3 O; g" h6 E' {3 j, r {4 a1 i- ~ v- O8 }9 }: M/ X. Y
_PKTItemTick = tick;
* L% @' ?- Z; c& g! e. R }/ b4 r$ B8 `8 ~
% j6 h: x" [. O0 m( R% R
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor( k; ? r7 a) D* R
{6 w; n% O: F' _% ]; c
if (aLength >= 8)
+ F& M" W& S) W o: X/ E5 k2 k {
% T Y" m: N# y DWORD dwItemId = 0;
' |0 a" E9 q! Q& F* O# M5 B( E memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));: R/ T) p8 G1 ?7 X# N
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE/ u$ _# Q7 a, w2 ~# {4 f" K. c
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
6 d& q* D( e# V6 G% @6 y && _PKTPKTType == PACKET_NEWITEM
7 E; f5 p( j1 a* S9 _3 s )
# t7 E- }, D6 c, K2 _$ |/ k {
3 }7 Y, ^0 K" z4 D if (_PKTItemID == 0 && _PKTItemTick)
9 ?+ Y* ^. L, |5 M. q1 w" |% ^( H& q3 [ { s% K( ]' h% b( {" g) A$ v' q
PKTItemRelease();
- Z$ }7 `% a6 v7 Y5 i+ P0 D* A }/ L7 c" i% w$ ^1 o# L7 n
else if(_PKTItemID== dwItemId&& _PKTItemTick)
4 F; k# m/ Z. \( |7 k( G { {
. [3 w) |3 L! Q PKTItemRelease();' V6 b' o! f% T" x; o0 |
}
$ t7 S; m+ N r- U }
1 y* e4 p5 }, g4 ^4 m* o& Z 8 E$ U$ t4 z+ i( T8 O
}3 R9 Z4 f3 {9 {3 R' e" o4 d
} b+ i9 w2 ]6 r0 U+ d9 h
3 L4 _: ?) A# x* E! W static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
( @8 ?6 v6 W4 ?7 G {
& G1 n/ K* e% Y if (aLength >= 8)" e) K( y% K$ h) j. d, `; ~) D
{0 _. d7 o; x7 E+ R9 T: i. G9 k
DWORD dwItemId = 0;! H, L( P! ?, O8 H
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
0 \/ E3 y$ u& @$ D9 r0 N8 L if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
! z w. D1 z) }# ^# D7 L3 j5 Z1 e5 G5 K/ T && _PKTItemAction == ITEM_ACTION_FROM_STORAGE9 O" n" B% I. u; q3 v4 ^0 ~; E/ ~- z3 G
&& _PKTPKTType == PACKET_ITEMACTION" ]1 _; ^. f/ C, I' k& k/ z
)) C$ D0 b2 n8 R' f: E
{; N5 ]" u$ U8 {4 U7 R0 F* R5 Q
if (dwItemId == 0 && _PKTItemTick)
9 d; p7 L9 L+ k( L+ U% y {+ ~. D% `/ D9 r) G' J) y8 T
PKTItemRelease();
# k0 R/ P+ d1 y# P& Y9 ^ }( z, i+ F( r9 T" V5 x
else if (dwItemId == _PKTItemID && _PKTItemTick)
! K& v1 A9 F2 I' v {5 U$ ?& X! o/ x# }; {0 ~& u( `
PKTItemRelease();
# A7 v) }: Z# u t) A }4 L2 d. d# w' N3 B4 `0 ~) Y
}
5 M" L7 ]9 T# Z6 R, d ( b0 s9 R: G$ ~ }4 o
}
0 X6 p% w6 f6 v+ L* I. [ }& E' `6 T# L" ^8 D) }5 _. \
' f x5 U% C" {% M
static void PKTItemGameLoop()
' @+ b4 M4 g7 M$ G' W. ~. l {
9 Q+ N' y+ q6 u1 C- A ?$ } if (_PKTItemTick > 0)4 ~( Q8 Y+ d% z2 ^, f5 C" _, W2 @
_PKTItemTick--;. X/ `# ~ D* F4 q6 e
else if (_PKTItemTick == 0)5 B0 ~" n" h- {* a8 @7 t. f
PKTItemRelease();
4 D6 m, H8 s6 F* n; X; d4 O* L0 `; q }
( ^/ f1 F# K8 M% f: {$ W" p, m1 `4 Y7 l% F E7 }- k
static BOOL PKTItemCando() & F Y$ b; O. a1 P( C' r
{. D h) t ~; d& h9 v: ]3 k
if (_PKTItemTick == 0)return TRUE;
( N/ _9 X. U( h, l6 L* s return FALSE;
! R7 R& N( {! v Y, m8 ? }
e% ~0 W- Y3 {4 u5 y, l' v# d1 `3 `% i# C" M
static BOOL BuyItem(DWORD ItemID, DWORD npcid)0 x* T% w) g! }: P
{$ M' a: o" L! R: {; C
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
# |5 D: f6 x' k BYTE aPacket[17] = { 0 };: |4 A1 P- ^* {$ S( g
aPacket[0] = 0x32;) G5 \8 Y9 L9 r6 Y) e/ Q& V& l6 K
::memcpy(&aPacket[1], &npcid, 4);
2 V3 y0 V$ p9 a2 p) X ::memcpy(&aPacket[5], &ItemID, 4);
& X3 K2 l4 e/ r1 f% H //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
1 Q) h: e7 r; R" F9 x$ @ D2Net::D2SendToServer(17, 0, aPacket);
( M! X" x# `% S. ~& p return TRUE;
+ G# r" B% P" L8 m; S3 }4 `2 P# A }! h+ m( p" p+ E# a1 _% @
4 A: {6 W; m0 n
static BOOL SellItem(DWORD ItemID, DWORD npcid)0 ]. Z2 I3 r h3 }$ P( s
{4 i' K9 R: p0 ]: R( {/ e, c
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
3 A" e( X+ `5 i E# I, i# w BYTE aPacket[17] = { 0 };
7 e0 u/ m _, k: m ^, ^ aPacket[0] = 0x33;5 @' Q7 c7 y' J( A" ~, m
::memcpy(&aPacket[1], &npcid, 4);
/ x; V8 ~+ T$ [8 ]6 C& O4 K0 ] ::memcpy(&aPacket[5], &ItemID, 4);6 r8 n, a% o/ L; m% w
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
4 k5 K7 e7 o" p1 O& p4 } D2Net::D2SendToServer(17, 0, aPacket);* }- c5 s9 G0 Z
return TRUE;% \+ D& _- s5 B0 A3 _
}) X+ T2 h' Y+ H0 T, x( }9 F( g
* A5 w* j$ T! z6 n$ D1 p+ W
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
) W. S1 [ I5 K: d$ q- ~& x
; Q2 B6 l4 B' R: V$ ]# s static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);+ B$ Y* Y2 u8 T x7 Y$ u
$ q! Y) ]1 T$ b4 ?4 Z$ M static BOOL OpenCube()
_( b' B T, A {
! W: Y' O/ \/ W5 x5 q1 v if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;" U& r' D! q3 b# b4 b7 ]
' `7 n1 E. y' {: Y5 V" E/ i UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);* p5 Y$ @2 Q/ _
if (!pCube)% k: \9 G3 t- J: T4 q" D
{8 ?+ j; O6 C7 c
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
, `+ Y! F0 G/ C" s K if (!pCube)
+ E9 b* n0 e4 Z4 o# Q4 J. d0 D return FALSE;
; O" v9 d" k) f6 e0 O3 I* y u+ b }$ A+ r. P9 s6 f+ n- b* F" s! A1 f, o
PKTItemTellW8(PacketItemMaxTick);
3 |% M, ^( h& b6 i# b# X) K6 _/ L/ q( ?: G2 I) w$ r* P
D2CoordStrc mypst = { NULL };5 Q9 Z0 ~- o" e3 D: d5 |4 l1 E/ }# |0 E W
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);' R6 {% |" Y' E6 H! e8 o
; `* ~2 Q2 ?- C) n4 ]6 x
BYTE aPacket[13] = { 0x20,0 };
. R) o/ l2 L+ K* r: M* u; S ::memcpy(aPacket + 1, &pCube->nItemNum, 4);# h9 u- {. Q- z# m: l2 @
::memcpy(aPacket + 5, &(mypst.nX), 4);* R1 x, T' G$ g- v8 _
::memcpy(aPacket + 9, &(mypst.nY), 4);0 g& e1 Q) m/ c, b
D2Net::D2SendToServer(13, 0, aPacket);
( m) O0 L5 o: ` x3 X1 C5 u' X return TRUE;
* l* Y' w9 e: F) g& m3 f; c }& z' G* w4 ?' P
' l3 K& q/ m2 b5 \: z
static BOOL ToInvxy(DWORD x, DWORD y)
1 }) p$ w, G) ~! Y4 a( z {; _2 X/ ^2 J7 I; e
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
% w6 K1 i3 Y) b; `5 Y5 a. k: y% F) g7 B2 t9 C
if (phand == NULL)
! N) _/ p L( k" C. y return FALSE;
* i4 |# B1 r m0 A8 \
! @! f0 ^$ b! H# k PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
, l( J) |5 C5 _# n0 q9 b. U g6 w3 h y$ s
BYTE aPacket[17] = { 0x18,0 };
# R7 E5 C e, [2 ^0 d1 L3 B ::memcpy(aPacket + 1, &phand->nItemNum, 4);
9 Z6 Z, |$ }" \4 j7 Q2 `8 o ::memcpy(aPacket + 5, &x, 4);( V0 x4 D2 b: {3 x( a$ I8 [
::memcpy(aPacket + 9, &y, 4);( Q0 S: Q4 L: P
D2Net::D2SendToServer(17, 0, aPacket);9 v- w2 s# {" k: `8 J
return TRUE;
: P5 {( @8 c) L7 `+ T& n; n3 O* q }$ s' E: n b2 l0 F
. l- M: ]$ |" t6 n& Y3 P0 { static BOOL ToInvRandom(BOOL bBagFix = FALSE)
9 v) m2 r. ? b! v- a5 ~7 m {% f- K) `) `8 Y* Z
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
. W! c1 R. e2 ], J if (!phand)
6 o* S F) V* m) Q return FALSE;
9 M1 I3 h& w' s) u/ H6 J7 y1 u int desx = 0;
- }8 |$ o% O# L' ]2 _3 Y1 u int desy = 0;6 g! [! R$ O% p, { F+ E
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
1 G# P4 _/ N# L7 n/ E {
) K2 g/ q( h# {1 k: p ToInvxy(desx, desy);
3 L$ N" w R8 ]' O# g( I; L( N return TRUE;. `/ a: |; R Y
}6 _/ u8 }7 |" H" e4 a* o. \
return FALSE;6 a0 a( y1 v+ h" ?% L" J8 l
}5 N( B* [: A! H
- D) @7 ^4 }5 ?' p, k static BOOL ToCube()
0 |9 {- O$ Y& Q" w% [" ]4 z4 M g {
7 V8 d2 N6 D9 } if (!(*D2Client::ptPlayerClient))return FALSE;" C7 C3 @% W( F1 w) Q& h E
) s! q! W- K' T' C2 N1 G
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
+ O$ W6 S0 `- T/ J8 Z+ t if (!phand)return FALSE;3 g3 f7 a% o' b6 p; l
: T( R% v$ H3 W7 v6 a
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
6 C( h$ _1 m' C- z' x" e- q ^ if (!pCube). T; F) q1 Q: |: n3 A, w# a
{
3 c- q* Z; R; w+ `, c pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
! u; p3 C$ a: l2 X! x: _8 P if (!pCube || !pCube->nItemNum)* V6 J3 J. F$ w' F2 G; W3 M
return FALSE;* {- Z6 A; U3 p% f
}
* f, J+ y7 p0 N" }" N9 t& O# K' y; L3 v7 Q+ s
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
/ J( _8 q/ ]2 s* x return FALSE;
3 S9 {3 ]8 {8 F4 M* K$ p, I# P2 D% q/ N4 ?6 I ]- M! w) Q$ x
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);1 }; ]9 |+ b0 n: s3 s. A
% z9 ~1 b* {, n, |$ @ BYTE aPacket[9] = { 0x2A,0 };; X d/ t: o7 P
::memcpy(aPacket + 1, &phand->nItemNum, 4);% A* ]# w+ D: D' x# ?0 F! ^ Z' \
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
1 B% H$ T# @' r; y1 x$ O2 x D2Net::D2SendToServer(9, 0, aPacket);0 h2 W3 u3 p% S( C
return TRUE;
( I& {1 r' V/ j" }+ E8 I I! Y W
5 q( A' J+ ]* ?5 ? }. w1 Y7 D% ~( x
[" u" R: r: `) h
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
8 f- I0 L9 Z$ P2 w' ~- u- \: F3 a9 Y
& t3 ]1 Q, `" O" _2 \. p! h) O" f8 z4 Y static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
- _, n+ |/ Q V1 N7 @, K {
d5 c$ ^4 @4 b D2CoordStrc mypst = { NULL };3 E3 O& \5 R, a' U
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
2 p7 }% F+ K' v# w0 U: }# D4 C0 _8 g! j6 K! f" s* \
if (!mypst.nX)return FALSE;
5 p5 S! m' ~; }! x- z ~ q
; }" q' |" b. Y; U6 A% A% O PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);! p. [2 O& Z1 j+ r/ N
) ?8 B% l) v1 }7 z7 S7 W BYTE aPacket[13] = { 0x20,0 };1 S7 R1 z$ y$ _7 ~: {7 l% n1 x
::memcpy(aPacket + 1, &dwItemID, 4);4 _! ? g0 q, _, `" L e1 H
::memcpy(aPacket + 5, &mypst.nX, 4);
* {( l; P8 y( b ::memcpy(aPacket + 9, &mypst.nY, 4);2 y7 ~6 S9 ?% [& b. S
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);' P* L3 I0 {. f, p) |
D2Net::D2SendToServer(13, 0, aPacket);5 S" T" M/ F( i. h
return TRUE;
7 L4 k- R ^' m$ @) J }! |* O& e: ~1 {
; Y% c+ I$ H6 f& S! d5 t4 |# R4 O static BOOL DropCursorItemToGround()
3 U2 U9 k8 K2 A {
2 Z) Y4 a2 Z1 t' H( `& d4 T UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
2 A Z; w7 j+ y; } i! e if (!phand)
X& o4 A% Q/ V5 h return FALSE;% B1 Y: a1 x3 Z6 _* C7 ?
4 ~; K4 H! s/ _) W
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
4 O6 S- q- `& w( ~' y Y, L3 N: i: `# d- k! G
BYTE aPacket[5] = { 0x17 };
4 ?" S/ e; e# y3 h8 V ::memcpy(aPacket + 1, &phand->nItemNum, 4);4 H' c4 ]0 U* a# i, ?- `8 X$ X" m
D2Net::D2SendToServer(5, 0, aPacket);
8 u$ a% N5 b8 C return TRUE;4 w5 H: d& c+ j
) ^8 ]" ^% B8 [! N. ^0 h
}
) q/ [3 Q5 \+ |+ g- Y" p- T- |* G- I& o6 w3 ?" y# o4 l3 e) t
static BOOL PickStorageItemToCursor(DWORD dwItemID)! C$ x$ [# G* B
{
/ _: a* J" z( I8 g" d PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
6 n0 ^* ~' f5 B$ ]* r& {+ o1 ^8 {
6 G1 N1 i: ?; A$ K2 T7 h3 k, ^ BYTE aPacket[5] = { 0 };
, D% D$ C6 {7 T$ F aPacket[0] = 0x19;
) s+ V7 B. p. } ::memcpy(aPacket + 1, &dwItemID, 4);, A( S4 J9 ^) I, r
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
b2 M& y C- ]. L# ]! j; Y D2Net::D2SendToServer(5, 0, aPacket);4 @* T! M/ @% \0 w6 b- D2 j& w G, ^
return TRUE;3 ` f: J( I% Y2 Q8 |6 A$ e+ R) d( `
}
& a: d# X# ~- h0 o4 Q* F( r+ P) R1 ^( V
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)- x$ ^% M4 Z9 P w4 t V
{
+ w1 I) x) D4 P; |2 i8 A# r PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
; b/ H4 q3 L3 j) c) k0 M BYTE aPacket[17] = { 0x1f,0 };& I% s" m$ @" A0 D$ Z4 I7 h
::memcpy(aPacket + 1, &ItemID1, 4);, ]2 \ l+ l# p @/ A# G# W5 D/ c
::memcpy(aPacket + 5, &ItemID2, 4); c2 u7 N! } t0 G5 m N: K
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);' z1 d+ S @( M3 c. X2 I( f
D2Net::D2SendToServer(17, 0, aPacket);
9 e) c! `0 O# x p1 }- f( p return TRUE;' `5 r$ _1 \ B- O; M
}
5 N: [$ b1 r d4 H+ @3 ]6 ?6 I7 V# l1 A, a3 @% K) a: Q
static BOOL Transmute()
, W: G+ Z- S) R {$ Z8 y0 S/ l. v' z9 N4 n3 _
if (!(*D2Client::ptPlayerClient))return FALSE;* V K6 \- E% q7 _2 X- f
7 @: x* H4 h6 p; c! U! G9 |9 v$ X if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))1 U' f2 x3 u9 n% |* c0 N* j% f
return FALSE;3 F# o5 B3 N/ X& S" q/ g, t
* }2 m+ J/ w9 w8 @4 p% S3 L PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
1 t& y( E* N0 F/ H' W1 C BYTE aPacket[7] = { 0 };7 p& w5 ^) i2 d; Y6 t( W& G
aPacket[0] = 0x4f;0 k% k4 a; {8 x
aPacket[1] = 0x18;
7 Z, |, j: B; e V4 n/ F7 r D2Net::D2SendToServer(7, 0, aPacket);. r2 {& Z8 ]" W4 p
return TRUE;
5 H; g! h/ q- R& P! ?6 J }, L& U' z j; c1 I- j
};8 W! K' z# ?; e0 ?! a9 I) I5 O
* m+ F! L7 Z. Q |
|