|
|
转载
! I4 N) {" a0 }' V/ g/ P自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
4 ]+ ?/ G% I& ^) H- E: X8 `1 iD2Client:
: i) c+ b9 i" B4 f6FB20AE1为拦截输入框(用于获得命令)
, T/ G" e# s5 T' b* P- d: x6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发. w* o) f) X+ j6 m; r; o6 E
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
* z& m8 f# n& i1 i1 m# e; b& I6FAF4230为hackmap的loop点 我用的hackmap导出位置
" h+ a1 F/ U* K& e; n; b* R3 K& _3 W! f$ g3 Y8 z
. B( m# U \3 B: _
发包函数:
9 J$ k+ g: S3 ^- K# P2 g% P+ e$ Wclass D2PKT_ITEM$ s$ ]( e! b$ l- G. `5 D
{6 ^: E4 ]; U1 m+ j2 f
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上9 ]# Y) u# W+ y6 C+ O8 t% O
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多) V" c; J+ ]+ E( u
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
8 Q' ? X, m Z" Y2 }: R#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
; @+ G9 K1 k$ x. V+ P: a#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
* u; t# c" m8 O4 m8 X1 T( [#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上9 l- d( o) v& W6 p4 v5 g
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏6 N* ]& [$ j4 {: K5 _# }
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上; k( B K+ E7 p! r. K, z6 y
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
# O- p! _; k+ ^( g& B#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
$ L% O. L% {7 G5 {8 @#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV( y. B2 {! U( l/ R3 v6 C
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 3 |1 }0 B: Y E; W v0 X- c
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
" i0 X; R2 s+ O) \1 j- ?: ^3 \/ ]8 L#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
# l7 b- d8 I7 w" \+ B/ ~#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
$ g' m/ D8 r# O+ x1 l#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上# ~' w$ v0 J: r! I$ r
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
- N$ j6 A; [5 | k9 n' ~0 B7 f
1 @7 X! b3 F, G! r7 Q, F9 K#define PacketItemMaxTick 150
, k# t2 }4 U, o0 D/ O% U/ c) q#define PacketItemPickUpTick 201 w0 s, [5 I1 L
) f- f9 k5 V0 S9 iprivate:
0 F; |3 ], ^& O4 p( Q static DWORD _PKTItemTick;. S' L4 X4 _* A
static DWORD _PKTItemAction;7 [; Z& V, W' f4 L. i
static DWORD _PKTItemID;4 x+ Y, V: v. n* e( S
static BYTE _PKTPKTType;3 k! P. A: H5 D$ N; {, l
public:
5 ?! h0 \( N O: @1 a static DWORD PKTItemGetTick() { return _PKTItemTick; }. R$ F; g. ?, W. j) I' P: t. w" d
+ C d( s! D0 \; w3 ?$ I static void PKTItemRelease() / ]$ r. s: ^$ t: {8 U" N7 U) L v
{: g* A7 j3 z* f4 {; ]" X- s; p! x8 `
_PKTItemTick = 0;
5 e e1 c. A5 s1 y _PKTItemAction = 0;
+ C& P* q; `% I2 L _PKTItemID = 0;
8 P) s) N% q W _PKTPKTType = 0;3 i8 ]7 ?8 r& N) U6 w( V t
}
) E _0 o, o' w4 [
# Z# K- \$ X% b) _5 Z" X static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
7 _5 l0 ~# @- n {
1 i# x3 Q O+ O' M3 i; {6 ]6 f! k X _PKTPKTType = aPacket0;
/ P$ @) ]' X2 |7 G+ _3 A+ e _PKTItemTick = tick;
! _* A; R9 e6 ~! s- { _PKTItemAction = ItemAction;1 f: Q* H9 v3 F4 p
_PKTItemID = dwItemID;2 H8 W3 h7 @ W
}5 f/ h- ~$ A0 N4 g; z1 M' d
1 k: u, [6 l% B; n7 I static void PKTItemTellW8(DWORD tick)
5 g0 @% `. R2 H {# q+ ]+ ~, h# I
_PKTItemTick = tick;
! b9 ` r; ?2 l* m; W0 m }
: ] L. g5 F. j; e( z0 z/ R' |4 b j! j1 ^6 O
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor& A& B% G5 d# H4 E2 u1 m
{
, P; D7 |" @2 I7 X* U! T- W4 P if (aLength >= 8)
3 b4 T+ P, u% A% R3 Y- }' B9 N {
" R N5 T4 ?8 N7 l9 ?2 Q DWORD dwItemId = 0;" s, ]! q/ Y, r" ]
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));8 P6 e A' p6 N! I, Y) c' V
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
N" n5 J' N8 C; b && _PKTItemAction == ITEM_ACTION_TO_STORAGE) |& C. r, O8 o, ^
&& _PKTPKTType == PACKET_NEWITEM2 e, g6 |1 t/ x% q v
)
+ a9 |* W$ d1 S8 i" q. P {( {8 K, a) W: h+ ]3 U
if (_PKTItemID == 0 && _PKTItemTick)4 K) r, b) L8 B" ]1 u& y* r
{
2 _; u( m3 x" C% g+ j, M' { PKTItemRelease();% R6 z6 e/ s9 t3 D5 \8 X
}
8 t' K: x% u6 _: J2 q4 q) B else if(_PKTItemID== dwItemId&& _PKTItemTick)
7 |) L( X0 h& B, y) Y {7 J; a6 M- g. K: M+ p
PKTItemRelease();
6 D, ^+ X8 ~* X5 R- M }$ c& f8 K' v1 e- G3 N
}1 R& O) h% |6 u
Q( O5 P3 k# R- f9 m2 \: O }
! J3 _" |5 r* n! A1 f% n/ e }
' [" ~ v# H s/ g6 Y
4 ^' J; @* y- R" f+ ~0 d static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored, N, Q0 W- c6 J' u/ v1 h
{
# x) L; `9 @, A if (aLength >= 8)
- V/ P& E( [: u* M' [# N5 D- s {! c8 h1 }7 y0 F% n' T
DWORD dwItemId = 0;; h4 j* D5 N) ]% Z9 Z
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));% u4 a7 b" l5 e1 V' s2 U' {
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
. A& z' u) g* ^4 F: i && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
+ x3 X3 s5 E; [+ a! D8 _& }) | && _PKTPKTType == PACKET_ITEMACTION
$ O+ A( S" @4 u! o9 O6 l4 s% }! N. f )
4 B7 V6 ?! b; Q Y7 J {& f6 a, D* V$ V' _
if (dwItemId == 0 && _PKTItemTick)
, R* M, a, Q( l4 U# Y p& x {1 _5 ]8 C3 {+ q5 ~. T5 C7 p; i
PKTItemRelease();
& r, }% M: ]- w; S2 {8 | } W9 @9 m4 G& @8 Y% ^
else if (dwItemId == _PKTItemID && _PKTItemTick)/ |4 V/ M) p1 {8 W6 f- B% w, ]
{; w5 h' D* i" X4 x* z5 I4 p+ v1 v
PKTItemRelease();9 ~6 T. H& D! c! j; v7 M1 @1 e; I9 z
}+ ?7 S. ~' H3 \2 m
}5 x% `6 I! }% C4 s
2 L/ Z/ N. J2 b$ {
}
( _2 h: w( [, v! _) s, D }
3 V2 r8 E+ [5 o' s- e; g4 ]( ^0 H
- w5 ?8 q6 ~% g8 M; c& T static void PKTItemGameLoop()* [! m" j& ^. \( \$ ^
{5 C) J; V! ^- |0 v8 [
if (_PKTItemTick > 0): N G2 j5 h) D2 Y, r/ ^* @
_PKTItemTick--;
: Z! l6 v* x( f* F9 g else if (_PKTItemTick == 0)- O0 _# V* }! [1 u
PKTItemRelease();
$ o4 c" a7 u% h( _ }
! k( b4 U, l' p: N# u) w; }8 R0 U/ `% C0 _$ C
static BOOL PKTItemCando() + G* s9 V# Z- t
{4 g1 ^' h. @: o8 D6 c' b
if (_PKTItemTick == 0)return TRUE;
" ^2 e% L" j/ J return FALSE;
& T) Z0 }3 J u8 {+ R8 h! `) O } h1 q% Q* s) i* }/ U; c, \5 B
$ P1 P2 C9 k8 \: d8 [! H
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
. J ?7 ^0 s8 O6 o4 ]) W {
' x, d% N+ j% W6 G- E7 {; W2 H PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);2 b- u; S# F# o! {
BYTE aPacket[17] = { 0 };
+ o7 \4 ?* y3 B, {! l4 Z aPacket[0] = 0x32;
& L* K0 ^) c0 I4 u$ N ::memcpy(&aPacket[1], &npcid, 4);* k# k' w, o1 m3 Y: M) H$ `$ O0 q
::memcpy(&aPacket[5], &ItemID, 4);3 ]( d8 G/ `/ [9 `% r [/ ]' f) o5 i
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);- o5 A) [) s0 g+ U" S& N* k
D2Net::D2SendToServer(17, 0, aPacket);. o4 w: m( J5 j, K
return TRUE;% @2 Q* k# p, Z2 O1 i- c5 E
}. F4 H: C) u9 |7 P; L8 s; y+ H
8 S9 \* ^4 W) \3 C6 f
static BOOL SellItem(DWORD ItemID, DWORD npcid)' F% O' w8 J& \
{
' H1 \: l7 ~% [/ ] s1 J0 } PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
8 v$ x! J: e/ l7 J J+ j BYTE aPacket[17] = { 0 };
& J2 I0 b8 \, p- K aPacket[0] = 0x33;! L; u+ z9 t7 X' _; F; [
::memcpy(&aPacket[1], &npcid, 4);; k" U1 } o3 c) _+ P2 v
::memcpy(&aPacket[5], &ItemID, 4);
( C$ b/ q( v2 [1 d- ~+ E0 n //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
! W; H3 w. C' { D2Net::D2SendToServer(17, 0, aPacket);. l8 M: a/ J+ Z/ a0 r2 X t% H# o
return TRUE;
) U& V/ l! a( H- i+ k6 m }" ?- I5 u8 ]7 I0 J! r$ c% M: F( K# F
: Z4 x/ L5 c( L1 j: @8 B
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
% t- q4 v/ a: I4 X6 h. w
5 a" O ?$ M+ d# R8 v2 P4 } static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);: V. o/ @( Z! v8 v' q5 I& i) c4 \& A
7 R$ c3 t2 p5 Q2 C6 f5 R static BOOL OpenCube()
) H/ k+ p s! _% E6 v8 F0 w* F2 I {2 O7 j3 Q$ f- [( X
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;* }+ U1 ^ b3 m" b0 V
% n: d" A* W! g) z% Q, r UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
3 g0 i9 `5 a; D/ [1 ~+ z' L* Q if (!pCube)& w i( q$ Y7 P" C1 ]3 e- D
{
& {+ D: r/ D+ ^ pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
2 j- [0 w q& J* @% F/ S. h if (!pCube)
+ k( `9 V( {% [ y y* [ return FALSE;
" K% M5 `3 L8 f2 C4 y9 x7 r; T, t }% I5 b2 ?4 n ?$ @3 J
PKTItemTellW8(PacketItemMaxTick);- a1 E+ }9 t/ N& w* Z
% C2 }, d X6 i. s! ~
D2CoordStrc mypst = { NULL };
- N F! t9 u1 k, F' I; o D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
0 h ^8 Y' X% |; a! h
9 k/ ?, r W+ a4 ^7 i: t* V( \ BYTE aPacket[13] = { 0x20,0 };6 ?* R+ S2 U( r1 j" [3 _* p
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
! l5 I5 z. s& f) L1 R, f( R9 B; q j l ::memcpy(aPacket + 5, &(mypst.nX), 4);( P" Y/ Y6 y: I. z. c% V% o4 J
::memcpy(aPacket + 9, &(mypst.nY), 4);) {" i& S6 c/ K* w: W P
D2Net::D2SendToServer(13, 0, aPacket);' @$ [& X/ f* r( A, ?
return TRUE;
! X( ]6 H; z% ~ c& x5 `+ L }
% `, v( P, O% N/ _2 v( C, n# s0 L8 A9 o4 m/ e# B+ N
static BOOL ToInvxy(DWORD x, DWORD y)
0 p9 f1 T8 x. J* c C6 l {9 i2 k. m ~' J. Z x/ H' E
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
; H+ c2 `6 A. P0 g* _ f/ ?3 x! A2 j* G$ f6 H
if (phand == NULL)* X! Q& L. ? T" Z7 D
return FALSE;
Z5 r+ _/ |1 B
9 ]4 F7 v/ j: O. R; i* v& b PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
, d6 j* B: B6 h! v- @' @( Y3 `$ I- r
BYTE aPacket[17] = { 0x18,0 };
5 ?" d- l* g' P# g ::memcpy(aPacket + 1, &phand->nItemNum, 4);
3 B, J% v& J. a. ?7 d* ~ ::memcpy(aPacket + 5, &x, 4);" z7 M* R6 Z" F6 h. X; I1 N- F7 p
::memcpy(aPacket + 9, &y, 4);
e; Z+ b; ~: ~& L$ l# F/ \ D2Net::D2SendToServer(17, 0, aPacket);4 n- L @; M( O' a
return TRUE;
$ [/ z3 k5 B6 ? }/ ~3 J: ^' C3 [9 t
# T Q4 H0 x) r+ O5 y4 b static BOOL ToInvRandom(BOOL bBagFix = FALSE)
) H+ ~) l& v& r$ ~ {; O! J: ?; h2 c z# f( L- c: n
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
G* T' Q- q1 c( ~" ]7 f5 ] if (!phand)/ u* z2 t. r) S! c1 R
return FALSE;
. t+ H( z" K: d; t2 C& `. e9 f$ V int desx = 0;
7 U5 C5 \8 J2 M- b int desy = 0;( X$ H% A7 U7 _( G' R
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))9 E, L9 W: Z& Z
{
7 S6 T9 G4 T- |; Q' T ToInvxy(desx, desy);6 K* y0 e. H2 k( b. ~
return TRUE;/ R' Z8 m! y. c
}
r2 C9 U( `: j return FALSE;0 s5 t r, P y c k& i" Y
} ?+ E/ v3 B; v) v
3 R! ~* ~: H4 r9 H: W static BOOL ToCube()- [5 i% D, b2 s+ F: g5 F2 ?
{
: o1 D m' i' C$ k" I/ F, F p/ l* m if (!(*D2Client::ptPlayerClient))return FALSE;
% S0 q% `& {! ?3 i5 k
0 I/ I$ N( a2 c; P- W" i9 S; e UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);! q" E* o6 g! t8 d; R# v! G% Z0 y; \
if (!phand)return FALSE;
( W4 R4 c+ d2 l5 r7 e' B! U
5 ] P& |; S6 P& v* P; ? UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块5 \- H$ Z/ A2 D {
if (!pCube)8 ^4 U: J! O: S! y
{
- E* z& y3 J6 s: n! H pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
& u$ u2 b: C! r2 M; f1 b) v% J if (!pCube || !pCube->nItemNum)
4 r$ D( m8 v* B$ A* |. j return FALSE;
! H9 y/ e0 t z }! @. j* Z4 N7 D
" S( p( f f6 ?5 T- K
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))1 F: _' G' _& g8 b# d7 R" g
return FALSE;3 W" _# A0 L* p$ E8 |3 Q4 N& B8 q
, R1 N5 y( w( b4 d# B PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);. ^6 s/ D4 ?0 m: }# M
7 f& ~' I' Y/ k$ c6 M BYTE aPacket[9] = { 0x2A,0 };/ }$ ]- O* l, `- ~) P2 G
::memcpy(aPacket + 1, &phand->nItemNum, 4);
) q; c; ]& \! E7 j3 G+ Q ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
: A' Q4 K% i9 {6 J d D2Net::D2SendToServer(9, 0, aPacket);( h9 {* U' s5 m4 i6 S# [. @; s' u' G4 s
return TRUE;1 ]( ~9 X- I; V% B* M
4 h6 x, q( y: f8 |4 L }2 I; A8 M) a; R0 Y. n
: ?' {/ G. y# H4 _- W6 `
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
, G3 Y n' \# O3 T* @: L) T) o! g+ t N, y) W, O
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
, y. Q# s' H( a8 Q {4 G1 Z- O0 t( Z- F. Y3 X+ P
D2CoordStrc mypst = { NULL };" {9 {0 J" a o: o# A" l: @
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);$ E2 i2 e2 F0 l
& W4 d7 |/ u+ V+ _, `5 a" S
if (!mypst.nX)return FALSE;3 G/ k' @( a3 X" [# m- m- _8 c
6 j& d [* T2 |$ j: u/ D A, |
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
$ x) R) g( ^. O+ [) m, D
- i' w: p+ J9 V) J( A d4 o( z BYTE aPacket[13] = { 0x20,0 };3 K; r1 {( k* \; [& _1 A/ U) d
::memcpy(aPacket + 1, &dwItemID, 4);
3 P( Z3 a* H+ U' K" ?- `6 Z ::memcpy(aPacket + 5, &mypst.nX, 4);3 Y$ M: u1 o2 n" u" D
::memcpy(aPacket + 9, &mypst.nY, 4);
" k0 I7 k$ N. h" _2 M //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);4 ~; S. Q9 O8 `: _0 G
D2Net::D2SendToServer(13, 0, aPacket);& i2 V, p6 Q1 _9 b
return TRUE;
( {+ g" d. \' Q: l% O }
- w% K- c! z. q. q9 W0 f! p4 g% ~$ @5 f
" V) z1 @( k! @* U6 q static BOOL DropCursorItemToGround()
3 g' @% X [( p6 R( k4 N$ R {' a+ l4 F( d$ q% L
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
& \6 m' z3 [: H if (!phand)1 W+ r" M0 g: G8 @3 M
return FALSE;
, n4 h; n9 X3 j* L* [. t6 y! k& g: F( T$ D
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);! B) m: p9 O' z ~
& E' }. V3 ~9 _, q! G
BYTE aPacket[5] = { 0x17 };2 d" v' E( o/ c7 o9 A: F& d
::memcpy(aPacket + 1, &phand->nItemNum, 4);
* @8 ~% F- |/ c0 `, ^9 a" J4 i D2Net::D2SendToServer(5, 0, aPacket);
/ {; O+ C7 b1 w& V return TRUE;
( J* C* B3 e \' U% |, U
: F3 e, Y& h! n6 m7 Y& T) l }
?. v2 R& i0 c% K+ |* h5 [ S) g3 D( b
static BOOL PickStorageItemToCursor(DWORD dwItemID)& M8 d0 m8 t T# O
{
9 N- ~3 n5 @( d$ B- j4 Z! G' Z* A PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);) @. ] ]) H; v& S
3 G' T7 e& J @/ p! Q/ b7 u BYTE aPacket[5] = { 0 };$ r: n/ E3 I4 B+ l' z1 j
aPacket[0] = 0x19;
7 R" C h* ?0 G2 }$ ?& s ::memcpy(aPacket + 1, &dwItemID, 4);
. R. L% y* k7 ?% ^) `/ _9 `0 [( Z //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
3 x9 G p+ l9 R9 U$ d- ^ D2Net::D2SendToServer(5, 0, aPacket);
8 l" w4 C2 F6 E* M! P return TRUE;
8 \$ x3 G- x6 N& y }
2 x+ V9 ` U+ x' q) o& p: V4 O2 w
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)6 _# Q+ Z$ e5 [3 d2 h
{1 K1 L$ d0 g. ?
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
8 K* ^3 j: c( w BYTE aPacket[17] = { 0x1f,0 };/ R. U% ]' u, z
::memcpy(aPacket + 1, &ItemID1, 4);
7 K3 Z; L- L' ]9 Z. @ ::memcpy(aPacket + 5, &ItemID2, 4);! G$ C4 {+ k5 u g
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
W5 C j( C. N D2Net::D2SendToServer(17, 0, aPacket);
7 P' a3 F( F: e" H5 ~% P return TRUE;
" U( M/ }& w4 a }
& j7 W' U0 [+ ^% b
0 t+ U6 a, b, I2 e5 E& Q$ Q static BOOL Transmute()' a& {, Q! v t. A4 {; C
{
! ~# ]" x: h4 R, c if (!(*D2Client::ptPlayerClient))return FALSE;
6 w7 i% p% F' B* Y# d1 d0 _( V9 `+ C
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
4 j% A( Y9 M4 X# ~6 U m return FALSE;
" K0 d |4 a3 ]' a
3 e& F8 c9 U0 [5 E PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);& G$ q7 q! K2 L0 |/ o0 X
BYTE aPacket[7] = { 0 };% B) i' W% i! D/ @5 V) \- J1 |5 h
aPacket[0] = 0x4f;
+ K- w# l1 l1 s! l8 c8 U" p" w: | aPacket[1] = 0x18;
7 c, V- y* x q; s: G; l ` D2Net::D2SendToServer(7, 0, aPacket);' C1 {# u7 V7 T6 [" y
return TRUE;
- ]; l6 b1 v; D8 m* x; a }
9 I4 O# i' M) G5 P; g9 v};9 i8 G) G& k; `
`1 B4 x1 X% L. H% [ B |
|