|
|
转载; b! k! [' Z0 ?1 S
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:8 h S; l d: Y& B7 K- n8 R8 `
D2Client:
- r. Q. V/ \# O: S+ B& r5 [8 P, Y8 n6FB20AE1为拦截输入框(用于获得命令)- N! i2 H4 q6 ^* w* F) g
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
6 B( K( h0 ], I, W1 Y6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发* _2 ?' l. O: Z! Z: O
6FAF4230为hackmap的loop点 我用的hackmap导出位置# f B: U) s) k2 {
9 o0 B9 A' d+ T4 \, x" c( Y% j& m F. @: ]' g! \
发包函数:) P$ x7 h( Y1 j7 v( ]( m" @
class D2PKT_ITEM
2 [) h" |! f" D/ U/ n; \{
, M9 O- ^& [2 v#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上9 [$ \* [9 r1 o
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
" `% i1 u$ Y1 M; k C#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
1 p! k: X" C: s, D#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
) F8 N, q) }: Q9 O#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
2 g. V5 ~& R4 B* O/ ~#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上) ]/ u1 q1 h* K* i6 r; O8 ~
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏5 J+ ^+ \( W: E7 C8 Q+ T- f
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
( O0 i* w7 `# y2 ]#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -9 o" R3 n$ l) L" ] q* I6 G" Q
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店5 b5 f* \5 n* F3 T( _0 x
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV3 T; H. \! f K/ V) x. _( b
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 ; y! E X! b+ R+ r! f9 u% `/ d
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
/ K3 }$ |3 ~* E" G0 b' {; G- S#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
8 r& R6 s" b- \ f8 \; R#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -+ w4 G2 I" ~; n% k
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
0 a7 G! ]! _ _! T#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
* v/ N) N6 Z, r7 m9 W1 N2 E
, N: M" _& ^3 ~4 b/ N V' W#define PacketItemMaxTick 150- s. V. F5 Y6 F# E. r; E
#define PacketItemPickUpTick 20
% P. o7 t; I4 |/ H) B* B$ T# P P5 g6 L# ? W, \% W
private:& t9 d2 A1 R( i; [% f$ d
static DWORD _PKTItemTick;4 L8 `, } d u
static DWORD _PKTItemAction;1 Y! ]$ W$ M) \- j
static DWORD _PKTItemID;
& k9 V- z! q. z8 I* [/ `# u- | P static BYTE _PKTPKTType;0 N* N2 S' R4 F
public:& r# n7 E( I I( H% F6 G3 G* ^
static DWORD PKTItemGetTick() { return _PKTItemTick; }
! e: Q- N0 b; [( u' _% _1 i' r$ s$ c: V$ `: H; z% u+ H
static void PKTItemRelease() $ P4 |% A, u4 p E9 t! m# }1 _- }
{
D1 g7 O- T4 \1 ]% e _PKTItemTick = 0;: Z) ]2 _1 |- T5 ^! ~ ?8 o
_PKTItemAction = 0;% I/ \# l$ y' z' `2 f. \
_PKTItemID = 0;
8 i/ B+ J) Z8 \' V6 ]7 B/ ^ _PKTPKTType = 0;
1 r5 X8 u3 N) Q: E. P }7 c' z* ^2 B. l' |8 H% z a
! ]! Y$ B2 n( u static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
* E: N* j5 B$ [0 O* t4 X# K Z {
" \' _; ?) I$ m$ I3 V0 a) f0 E _PKTPKTType = aPacket0;
. g$ {' Q, F' I/ k \0 E _PKTItemTick = tick;
% Z# _# Q4 Q2 g7 t _PKTItemAction = ItemAction;
1 `: ~ x( ?/ m; d2 m- F _PKTItemID = dwItemID;
5 A. k; F* S8 i# u z }% i4 |2 ^$ c$ q7 U0 O! s
) J" m9 j1 C5 y0 {! W
static void PKTItemTellW8(DWORD tick). w7 f; O; y1 e# [" ~; R/ I
{* j3 R6 B4 s0 C) B5 m8 r
_PKTItemTick = tick;
% H- i& G6 E( R }5 A5 f/ Q. L8 j) O" q. Z Q$ B3 ^
/ _5 X7 n f% _" G# O static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor" ]8 ]7 i2 ]3 v5 s! d8 X2 t
{
. v! w( f3 K/ @ if (aLength >= 8)1 M' o/ G+ Y. H2 i" m) r _* S
{
' R7 G5 H* q9 D: ` DWORD dwItemId = 0;
. D8 L7 q9 _( c" o' L; P& ~1 I memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));8 Z: J! [0 _& \
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
: A5 o5 R- c" M6 f2 l && _PKTItemAction == ITEM_ACTION_TO_STORAGE, d0 D* x1 ^* x: O. n# P2 U
&& _PKTPKTType == PACKET_NEWITEM
- h9 g0 Y& C" I% _6 p3 r )9 S& K4 W7 G! q) B# U9 G3 m I
{( l7 D; ^: v% ?9 M' l* B8 Z( A
if (_PKTItemID == 0 && _PKTItemTick)$ x( [- j. Z" I2 c
{
+ f" r* V. Y" V+ Z( l; z8 ^' v9 { PKTItemRelease();
5 o. a; R' O s* ~ }
/ Y* }) U/ I( L: ~ else if(_PKTItemID== dwItemId&& _PKTItemTick)( G6 f- x* S4 S7 l* j+ `5 N& `( c
{, d) T4 ?+ t3 U8 ?( X; `( ?6 Q5 ~
PKTItemRelease();
; P* l% U$ P2 ^ H; Q+ X$ [! I$ p }
4 A# j2 c9 p1 x0 @( R: _! K& ? }
% f/ ~ d. J# {; o( x( x
) A5 X, B" J/ _2 B t" m0 B! d }
7 v5 k% E" J( b, U }
t. m: y- [ r \0 G* ~1 {! s; A; G; i9 C! p ^
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
- N7 k- E) l b+ m/ a {/ t3 T' F6 R! L/ ]$ P
if (aLength >= 8)
0 S" o6 H3 ^6 T' s. ` {
6 ]6 }( g X5 X& M0 u DWORD dwItemId = 0;
) O" ~& q& ?, q" Z3 T memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
3 x% P4 v7 ?1 G& ]0 y, D$ k if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE0 [0 n' B0 ^; `, n, W! w
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
5 n* X9 \0 n* S3 T" O( b: @+ Q, k && _PKTPKTType == PACKET_ITEMACTION
5 m' k* @% b6 [0 g; F. R )6 J9 j1 K ~% \7 j$ ~/ \
{2 ?6 Y) _7 h% u6 ]: p
if (dwItemId == 0 && _PKTItemTick)
# ]* b) d& [) R; e+ C$ S) n! E8 b0 a {
) V4 C! B( ~/ D# V4 R3 c+ {+ ] PKTItemRelease();
* \4 w2 q- b y0 J9 A }+ O1 Z3 o% u8 h7 U% ?, j/ l" V1 ?
else if (dwItemId == _PKTItemID && _PKTItemTick), y0 [) T: h: y! t' ^, \. ?1 Q- [
{0 [( I9 S! \2 n( p( Q
PKTItemRelease();
/ ]+ U2 m8 R) I* c5 D6 n( U7 L7 N7 V5 t }5 N( E8 Z/ z0 W" ]' a. L
}
: e1 a3 {1 T9 ?0 S: @1 B: e, Q4 c
, i2 ^0 T) L N- R* n; S: } }" c7 z5 c; J3 ]6 L, v) j
}8 `1 Y4 V. O2 j1 _
& y3 w% ]6 K" m) G7 ?( _; B static void PKTItemGameLoop()- T3 s4 q- T4 Q2 w4 C6 Y
{
7 P+ h. G5 f1 G2 R6 m if (_PKTItemTick > 0)5 \2 A z" k6 O
_PKTItemTick--;
2 i; v$ X2 e/ ^: w6 I3 Y else if (_PKTItemTick == 0)
0 M+ x% A* s" N, ] PKTItemRelease();
/ `6 C/ X, w7 P1 j }
* @; L+ H. y* X& e
; Z( r( t7 y" H static BOOL PKTItemCando()
$ X. {$ a1 F# V6 `- @' h6 ] {
4 S. o) p7 f4 Y- D$ n l if (_PKTItemTick == 0)return TRUE;
0 m. _ S. j& ? return FALSE;
9 B7 Z. D; Z# V3 V7 f; U% A: G; {5 | }
. e' O% }; W- ]' j+ W! m8 @, W) D2 s+ p
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
6 l \) [/ S6 ] {
9 O2 x) s* ~5 @5 d% g( D2 q. U PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
1 o2 w7 j! g: i BYTE aPacket[17] = { 0 };
6 X7 h( j+ [; l1 p/ V: e aPacket[0] = 0x32;0 p4 o( X. N: L8 S5 y
::memcpy(&aPacket[1], &npcid, 4);
/ v( o+ b$ E) g+ a% _' W5 l ::memcpy(&aPacket[5], &ItemID, 4);6 m7 S) \; x- O! s9 O5 i! t
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);' M: h# [ R6 f
D2Net::D2SendToServer(17, 0, aPacket);
) {1 r7 t' s' N9 C return TRUE;
$ F0 m0 H& j) ~* y( E }
( q: k$ G9 p) C2 D1 @+ O0 k, Y6 F2 C: h+ z! t* E+ n+ A, P
static BOOL SellItem(DWORD ItemID, DWORD npcid)
& u! M) m& X8 V {" U' X" |* x. I+ F8 i* a
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
% M! w2 |7 h$ b: g BYTE aPacket[17] = { 0 };
, L* [, }8 f. a5 f g' D v/ L% x aPacket[0] = 0x33;6 H' D+ |; O* H/ X3 B) A& a
::memcpy(&aPacket[1], &npcid, 4);
+ U7 V6 n2 a5 G' t8 p5 u% ^ ::memcpy(&aPacket[5], &ItemID, 4);( `- I4 {3 | _9 P$ m2 d, f+ `
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);4 ~9 U- Y& u8 X ~ C
D2Net::D2SendToServer(17, 0, aPacket);1 V* l0 B: f3 T) e" p
return TRUE;) ^% ^+ G6 l* M# T1 @
}. S! m7 k1 }. ~4 n4 s, ]0 f5 B
: ^7 W6 P8 m9 { static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
D" P% p0 f1 g7 l" {3 K- u6 J, x3 B) b' P4 z- b* Y6 p) N/ r
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);8 ]8 G/ A/ [5 {1 E# ` s* e
2 m3 T0 L1 q/ F static BOOL OpenCube()
( |# A D2 g! a4 D: ~; e6 E$ ? {" ~. B! I, s' d, m9 B
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;+ d$ G2 G$ [( Z. ]
" [& h4 S) h* _, E8 D$ K& U UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
; }( \& h2 ~$ j if (!pCube)% _! c3 m1 b$ T7 u' C, J0 N
{
, l" {* d! _- ]1 t% b2 @ pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);* ?3 c& \3 F9 F. j8 l8 y# G( ]
if (!pCube)
7 [0 e7 P7 Y# d* k% K( O7 q2 y return FALSE;( d' c c$ r9 {8 `( z9 r$ J0 q6 Z' A
}
! w& R4 ]0 c+ s9 S1 f PKTItemTellW8(PacketItemMaxTick);) {' y; P3 n3 U
6 w I) C- d& h" f: `5 R4 X6 K D2CoordStrc mypst = { NULL };
3 G, E, _2 w* U1 @ D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
5 y) F, Y+ [# ]. X) z/ _, o' w! t: V6 F& }# w
BYTE aPacket[13] = { 0x20,0 };
$ k0 y! E* E0 l; [" a% B2 i ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
# i1 R" i U1 Q5 K8 k5 P3 X ::memcpy(aPacket + 5, &(mypst.nX), 4);* b' J2 X4 p+ W, i2 |. z$ \% J
::memcpy(aPacket + 9, &(mypst.nY), 4);
" t& x; i: U9 |& c$ \5 Y( _ D2Net::D2SendToServer(13, 0, aPacket);
! t6 }0 n' \' @ return TRUE;
; h( e. _3 B' B) h+ R7 h5 P3 B }
# b' ~1 X- |4 ]" J# g- \% D$ w7 J% S2 `0 g" K
static BOOL ToInvxy(DWORD x, DWORD y)
5 _, Y1 x" {: S4 _- m, A7 q5 O# \" ~ {& m! U& M2 j( w M0 J: a
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);* | z6 K" C% I* l4 W
$ A4 u# L; Y2 r+ m/ c: k. U" b if (phand == NULL)
* `% ?; F+ Z' Y2 D5 C return FALSE;! p! L- U4 K, R4 G. p% `, h
5 v. a9 N% E' d
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);' M u0 ~/ h! l1 X% r! x$ S7 e
5 J8 e% h- M/ E& G/ j& u BYTE aPacket[17] = { 0x18,0 };
1 X1 [+ T* K! q o ::memcpy(aPacket + 1, &phand->nItemNum, 4);9 U t8 R' }& h! |# y: Z5 {
::memcpy(aPacket + 5, &x, 4);& R) j4 V& K- P" j4 W
::memcpy(aPacket + 9, &y, 4);
+ s4 ~4 V9 {) |# r3 A D2Net::D2SendToServer(17, 0, aPacket);. I/ K& [. @2 @& p, ^, C" O
return TRUE;" Y& ^8 `6 y6 W' a3 }- F
}" g6 @# V$ X: I1 T; a) [! t
; z) l5 u1 {% t static BOOL ToInvRandom(BOOL bBagFix = FALSE) ' M% u$ ?8 ?- O0 |7 `5 b: v
{
2 V* G8 }0 h8 X, g7 u+ F3 { UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
) l; E& B1 C& T: K- g: h if (!phand)
' X0 ?6 V& @, S2 |6 p k# [ return FALSE;
7 M4 Z8 v+ G7 [6 r0 f int desx = 0;
% X) O7 ?' i' r$ E int desy = 0;
5 R* K$ x- y- Q+ t- @ if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
' v- o+ N$ n3 \) I! @5 F9 s {0 Y" v$ ^& M; ?& f7 y+ ?# y! d0 G; V
ToInvxy(desx, desy);
8 w, `- V1 p: }: z+ f& s return TRUE;1 T; ~" }/ [" I0 I% R' L. _
}& O6 Z7 {, c! M: r- Z) T
return FALSE;
, B9 q/ ^( m& B( G+ Z2 z* K, J }
% |0 s$ `3 Y3 z1 S' J9 |, \! k% i& A5 u5 m- f! k+ N
static BOOL ToCube()
* G: |* Z+ Y3 ^# |+ ^* Q$ ? {! M. W: g1 p8 D4 f% [
if (!(*D2Client::ptPlayerClient))return FALSE;
* J: _8 B. a! ]. d- x) |4 ^
6 d( r* A% M7 S% \. t. F& |8 B9 R UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
! u/ i2 ^- E$ }9 Z% [2 g. l) Z if (!phand)return FALSE;
! m: K% e8 Z$ V2 s) i7 x' A1 _6 u, {/ J, X% @6 b, V# B* w- Y+ G
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
( B7 U e/ F: b( R if (!pCube)
& C9 D9 _+ \% n$ H# B9 H {! n. f" u7 o! F6 c
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
, Y8 F# b9 x3 ^( \/ k if (!pCube || !pCube->nItemNum)* a5 B$ m" T6 ]; T* o/ o
return FALSE;9 X4 [# s' ]( [1 A
}+ e- R' K& [2 u9 W1 j; E2 T9 n
; W h% X9 P) | if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
( c: l, T6 J. p5 d& w! C' K return FALSE;8 s- f1 T0 Q5 v, `
, `9 @0 e6 m5 c1 c
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);0 S- f* W8 s F
' N+ l4 b; H: o
BYTE aPacket[9] = { 0x2A,0 };
4 H7 T* I; Q- K1 q, l/ A ::memcpy(aPacket + 1, &phand->nItemNum, 4);
# N; r9 m2 i+ l% h& G, Q0 w8 z ::memcpy(aPacket + 5, &pCube->nItemNum, 4);2 v5 M Y) d0 z( v" D% l) o D
D2Net::D2SendToServer(9, 0, aPacket);
6 u2 K/ o" [: D& _; B* w return TRUE;
# n; v- f; O% H; y( z5 J) v; q6 S0 l% d9 {
}
. k% j8 w/ H( a9 q: k/ z5 s& D! f4 r& H% A2 O" B0 U+ B. V
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
" z4 o% z2 P% G& A# y' Z2 [* H" E( i; w3 S
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存1 [* q/ v9 f Z1 E+ e
{9 x' W- H8 h8 ~1 [+ [5 e
D2CoordStrc mypst = { NULL };2 t0 O( _4 h" ~9 D6 n; W2 K
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
) [) i; U7 a, u9 L4 Y* F/ V3 s# Z+ v8 R9 _& Z
if (!mypst.nX)return FALSE;
- C s" |" E: _) i A9 O * T! x: a; [" o. z2 h
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
3 c) N2 y9 G! k* H: l3 L, p. ~3 p! r& J; |
BYTE aPacket[13] = { 0x20,0 };
9 n0 U R6 X, b5 G9 {) S, p ::memcpy(aPacket + 1, &dwItemID, 4);
; Y8 q+ \' Z1 \3 n3 ~ ::memcpy(aPacket + 5, &mypst.nX, 4);
: X4 d8 s3 S+ y ::memcpy(aPacket + 9, &mypst.nY, 4);# r! a2 c: `% e& V$ V0 r
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
$ K+ E! r3 u9 j e D2Net::D2SendToServer(13, 0, aPacket);
" ^( t. z$ D! L$ X& P; A! Q return TRUE;
2 x; V4 A$ a3 a! p; ]4 P* C8 A7 y8 z8 W/ r }
2 w! X) g1 c8 ~6 v3 n( r9 F9 Q/ \/ X- M: C% E7 V2 T
static BOOL DropCursorItemToGround()' J- V. p( t+ s0 D+ P
{# [7 {2 w; w6 j6 i
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);1 a$ V! e* N) k0 b8 }; Q
if (!phand)
; x) D' E7 b: ?8 X return FALSE;/ L: m9 [1 J% P. D
* o7 J5 Q. ~: |- ~. e* c& J/ z/ l% K: s
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
; g4 o1 m" _* [+ y* J4 `( G+ Q3 W# g. O# q2 }+ F7 o* u& M
BYTE aPacket[5] = { 0x17 };+ V y: {4 E# U' j0 K5 S
::memcpy(aPacket + 1, &phand->nItemNum, 4);
, e2 |, V. N9 p9 S! z- k! g D2Net::D2SendToServer(5, 0, aPacket);
7 J# G7 O, d7 X6 h0 n return TRUE;6 @! X( l6 A: n/ v! U9 V: }( ~4 m
2 ^5 g( {! U* T8 X; e
}
6 C% H9 i" ]$ ^; W, n+ N! y: ^/ X& h7 k$ t3 T6 ]
static BOOL PickStorageItemToCursor(DWORD dwItemID)* P. k. G9 r4 n) G+ w. g& Y
{
+ M' [% y7 Z9 P PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
6 n W: I( A' x8 u8 U7 R6 A% w8 O/ K/ C1 V! c
BYTE aPacket[5] = { 0 };
; a0 ]3 S/ o9 @3 W) [! w ` aPacket[0] = 0x19;* s9 p3 T$ o) r+ m( E& e7 \
::memcpy(aPacket + 1, &dwItemID, 4);; Q: `' w+ F. {4 M- @! j2 l
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);1 i% R i2 Q+ O7 C) [: @
D2Net::D2SendToServer(5, 0, aPacket);( N1 `' `3 [3 F$ t# k
return TRUE;
6 z3 t+ p) c! R! y) ?' k }
; }4 t4 Q0 Q& w6 `9 L# [, x- T2 A6 v# F, j7 c. B
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
L* c8 l4 q( {! z, ~/ ]7 J {
8 j' P d# s8 e% l PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
+ A8 M2 h9 n/ v7 U BYTE aPacket[17] = { 0x1f,0 };
& F( |+ s- t4 V# D ::memcpy(aPacket + 1, &ItemID1, 4);
* Y8 j$ j6 } K ::memcpy(aPacket + 5, &ItemID2, 4);
$ a, M6 m) @( A2 I1 O* |+ l: ]3 m //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
) D0 R c. I4 z D2Net::D2SendToServer(17, 0, aPacket);
: H) _4 u9 u) K6 K8 B return TRUE;: I& Q( z. w8 s$ N" U% R
}$ d4 ]+ ^- c2 n9 W) y% q" L o
. ^; V+ x% e/ s; L t- _ static BOOL Transmute()6 E6 j% N, b% D, T
{4 k- Z& c) c# s! g0 v4 x
if (!(*D2Client::ptPlayerClient))return FALSE;
6 |7 `8 h& M( \4 H1 |# W$ z: v% h0 n: j- A e* x2 b% Q
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))# B6 \6 _7 g* G9 T( M& `
return FALSE;% Y Z: L3 Z1 K i9 N2 J" ]
: U3 V4 c; B( d7 W0 K5 s/ u! Q PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
3 ^ A: k& S# N. c' g8 z: U BYTE aPacket[7] = { 0 };
% x' Y! c9 L+ X) i4 Q! h/ ^/ N aPacket[0] = 0x4f;6 Z, F: q; D8 c
aPacket[1] = 0x18;
1 I" O+ x' C7 }' g! e D2Net::D2SendToServer(7, 0, aPacket);
) ` [! s" }, [6 A return TRUE;
4 u) k- h$ R1 b0 e7 y, @ }
$ ^+ m( u; ]/ j& I7 p# H0 m};
% O3 N5 K) C) t
1 p: r1 @. o0 X& z# a3 i, a9 [2 V |
|