|
转载6 G! Z, Y5 e; n
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
+ f2 w7 m1 _$ JD2Client:0 O0 f. Y0 c8 w0 t* M. |
6FB20AE1为拦截输入框(用于获得命令)! _# T8 u X2 M4 ?2 s% f
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
! ?3 x( E8 C; l6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发+ k& v( N. c1 r) |$ j! n
6FAF4230为hackmap的loop点 我用的hackmap导出位置
, I/ ]' i+ J' y, y9 @6 |" f
" F: h6 F0 v0 Q0 Q0 l& r" ^8 C9 X' A9 n1 Q1 m1 \
发包函数:+ [+ r. C7 p/ }9 y- x/ I
class D2PKT_ITEM6 T" Q% T* \: e( i& `7 B- {# l
{/ K! C; E6 |# t; I" j* s
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上- J- I3 R3 r) g- ~1 e* T4 [ N
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多) Z5 @4 J- Q' m
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上% `- D7 h4 k; W' N- Q0 d5 R
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
9 g5 Z& X7 a( E. u u#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH, ?2 [5 X. \ E& t2 v- I0 |/ I( F
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
- e" U" R& n( Y# k& \#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
$ V) c. p/ f8 A1 l' L' \#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上2 P! F9 ]3 [8 v! y1 r* s
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -+ i- Z; N; H( `1 V2 B
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店1 U! g9 }( T* Y1 |7 h
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
! G) r$ x! q& i/ ~4 S/ a# X#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 " }. X. k# Z2 {. }# @
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
1 E. Z( L: g; S V/ F#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上+ i- |5 E! O7 S; m; F$ i
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
! \- }8 m( q& g: r$ s$ P3 q% L$ \#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上2 _/ r Y2 o. E5 c- A% c. L+ ?: ~
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
/ c4 J! H' F0 i# y1 I$ P v( ]" g6 g4 ]
#define PacketItemMaxTick 150
, m2 C% p( f! H4 x#define PacketItemPickUpTick 20' s2 X9 ~, O9 U* P( ~
w& }# O+ y% m9 h
private:. O8 N" Z* B2 e8 U
static DWORD _PKTItemTick;
& s* D/ F& F+ S; v1 j( o3 ]8 _ static DWORD _PKTItemAction;8 I g ~6 Q1 v2 k5 H
static DWORD _PKTItemID;8 r6 ^2 `" \/ M# H
static BYTE _PKTPKTType;/ G2 D0 F: g0 I. G
public:
# P1 [) d1 i7 N! @/ w$ }' { static DWORD PKTItemGetTick() { return _PKTItemTick; }
- g) ?1 g$ [8 a0 A/ i! ^
1 y- }( j( G. ` static void PKTItemRelease() 6 ^1 V3 F3 W0 K$ }7 D& F0 i% G
{6 R8 m' N' f# U* I0 p$ Y
_PKTItemTick = 0;
- I4 |- Q' t% j- R _PKTItemAction = 0;
3 k2 M( e% D, p7 k e/ [ _PKTItemID = 0;0 o6 k, z' W. M7 c6 |
_PKTPKTType = 0;9 v, \5 m. Q& d# L4 U2 c. i
}6 k9 E2 l9 }! i! E( [& {2 q; G$ L
' m& o5 b; ?; w5 G; h static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
. N6 _, ]! l: `( s {! P9 y. a& ~$ F8 ?' \, J2 C5 h
_PKTPKTType = aPacket0;7 k j8 e; N, y8 i8 @ U
_PKTItemTick = tick;) t0 C3 e" ^; U6 U
_PKTItemAction = ItemAction;) U" U/ x3 ]7 _- @% A
_PKTItemID = dwItemID;" r$ h! b0 g" k& G+ P5 O
}+ [) ?# A- z% G
- Q |0 S1 Y2 B% L6 O
static void PKTItemTellW8(DWORD tick)
2 Q# t' y* z6 e7 a; S {& g6 D6 z' u6 {/ f" v/ k8 s' T
_PKTItemTick = tick;
4 v$ R- f6 z# m1 S" S }
7 ]% E E7 i! K; H1 G% z% `; P& N2 g% k- N, s
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor: z( q9 V% O6 F
{6 u0 N+ Y1 }/ g2 O9 O9 a5 ^
if (aLength >= 8)* t W* I: k7 y$ e) b
{" k" J& [! k$ i
DWORD dwItemId = 0;3 N$ A4 k5 T' z# G4 n1 T: J
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));* H/ x3 P! x- q! t0 \. a
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE0 m( C) k7 F1 ]( G1 p3 b
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE4 |" J0 {/ c6 P! y
&& _PKTPKTType == PACKET_NEWITEM
0 e7 e7 f5 M) ]: r) E4 Z )! X. R4 u5 Y( c0 h( _: Y
{
8 B4 c! @7 S* {, h5 Q if (_PKTItemID == 0 && _PKTItemTick)
9 k6 c ?* x- U7 j9 a/ C# p {
: A4 i4 w* }: V( { PKTItemRelease();5 N k- E" [- _3 J4 L5 q. y
}
- t8 F7 c( W& r3 F+ s else if(_PKTItemID== dwItemId&& _PKTItemTick)+ Q* P; q$ ]2 O) C
{4 O, E, l* r9 g( j
PKTItemRelease();
5 Q9 f3 @8 D3 Z8 k" [* ~' K }
. C1 V4 ~% j) B# T4 Z6 p$ O) c }
6 i$ O0 N/ w2 T. v" c# k
% T3 ?; D& v0 N) U3 q" l$ r0 F& O }
, G+ K# d1 U: w) u& j }) X3 [3 ?- ^, Q
- l0 [5 m2 e7 a9 {. i% Y. j
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored$ V U; o4 c- n* s7 n; x/ O
{% e1 ?; `3 v' u) E: T: ~& K
if (aLength >= 8)5 x7 Q- G% \8 K
{
" Z7 b; J) G5 R/ y9 p) D) S DWORD dwItemId = 0;
: [5 F$ q ?' w7 a+ g: j memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
0 ?5 B2 j8 v) \, E z0 ^& x if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
) s3 o) _4 D5 ~0 U/ e && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
, w3 e( Y0 @- V5 |0 \# V% g && _PKTPKTType == PACKET_ITEMACTION, Y, P8 d2 L7 s- C
)" O. G. ]+ A. w9 p7 E9 ~
{
- B% W) x! D8 F if (dwItemId == 0 && _PKTItemTick)+ s6 b# F% e* z3 ?. C8 [' y
{
8 z% d2 a9 Y0 x$ T9 V& g4 x PKTItemRelease();
3 C5 [5 b( n6 u- N }
6 \ G8 u6 |9 Q) ?2 Y7 | else if (dwItemId == _PKTItemID && _PKTItemTick)
- h% ^) |8 q; k6 x1 S: l {1 r3 P$ L$ y1 T0 v
PKTItemRelease();- T {6 V0 P; a: |" N4 S
}
9 i# s! H; Z; w7 R* o/ E }
; e/ M3 _0 e! s5 G) P ]; z' Z8 l6 d; _5 t2 r/ z
} e! Z$ d8 A: q- ?
}8 t: [0 l" f9 V- W4 b8 v$ ~: K
" L9 K. T" N) l; W+ U2 j/ ?( z9 d( j static void PKTItemGameLoop()8 B) Z3 O. f0 `# Q
{
6 T3 q" r7 U; ~/ i1 T if (_PKTItemTick > 0)
- m: t! Z, w6 T: `$ F' q _PKTItemTick--;
: @- E# ^1 J# d. I0 O else if (_PKTItemTick == 0)
8 o1 B+ N5 |0 ^/ z; T PKTItemRelease();* G2 ?# U1 t" u R0 l
}0 a$ I+ i2 }# a/ s9 H- _' `
" w5 W, O6 K6 F2 h6 e. X
static BOOL PKTItemCando()
4 N" z4 a) a' P% D6 d; m1 F {' |8 P" k# q1 m$ C4 P$ X
if (_PKTItemTick == 0)return TRUE;! y' C! H. K6 L
return FALSE;
* k S- G B+ `& |& ?1 ] }
/ x$ W7 J7 P, v3 j& D) F# C, x( } a# p5 k6 D. V# f
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
. h0 p& N8 A: H$ g {) L+ ?4 Y9 y4 {/ \ {) _+ s
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);* ^8 [- T& [# d5 s& K% h( T
BYTE aPacket[17] = { 0 };' g5 G+ H; s+ b* t3 F4 M' \ ~, h' Q
aPacket[0] = 0x32;: Z9 Z7 ?/ C. E |' G7 A
::memcpy(&aPacket[1], &npcid, 4);: _) z9 A9 l; g% v4 A8 v* {
::memcpy(&aPacket[5], &ItemID, 4);
( @3 a# B! }) X, G" J; E' K //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
( K( B3 j/ B+ S9 L D2Net::D2SendToServer(17, 0, aPacket);) c# [) O. x: B
return TRUE;" ^; _% P( j$ H& l4 c# {
}( B# m( d1 c7 v/ b k$ {
' t# ]9 _* Q% D6 Z
static BOOL SellItem(DWORD ItemID, DWORD npcid)2 S) j8 ~" s& K+ ?9 f3 K0 g* g
{( E9 H, u0 B" |& p( }# h2 `: G c) h
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);( y" I- |: ]/ o% l/ ^" j! p
BYTE aPacket[17] = { 0 };. w$ Q' _4 N! i1 a2 \0 K8 L
aPacket[0] = 0x33;* Q. M8 V9 X% _% _
::memcpy(&aPacket[1], &npcid, 4);
0 G$ o2 O A& |) ]; l) G( N. C ::memcpy(&aPacket[5], &ItemID, 4);
" m& b9 N3 m# f9 ^# A1 A+ |! ^, U& D //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
& }2 z2 U0 ^9 d# ~! x0 k D2Net::D2SendToServer(17, 0, aPacket);. Y" B/ K4 q/ c( k; d |, o8 P
return TRUE;' L9 f. S( `, m- k2 l; @& Z& ^" }7 A5 H) I
}0 L) S5 S* `' `( D1 B0 d
( t( ?% k* d: l1 a, P% e
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
7 |8 X' E) a5 x9 T3 `. C
1 ? R: O& X' o# A$ E6 F# k0 [- R static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
/ A( x( O. _" X+ K u/ C! ^; ^
. |) x/ E& e V static BOOL OpenCube(), {5 U: y% [" T% D2 i7 [4 n, [0 y
{
# S8 S' v# ~7 y3 {; L$ A4 D+ b: ] if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;; s' } i& ?$ h! P! l8 j* B
+ t3 O0 k/ ?! w; \ UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
c2 k" e7 B; F5 r7 h if (!pCube)) l+ \* g5 V: i. L2 z' j4 l
{2 V* b5 Q2 `) s4 N% r) H* K- q) q
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
+ N% N7 j5 e7 s- W8 v& f# z$ [ if (!pCube)! O+ h! H d5 K4 b0 O+ d
return FALSE;3 g, ~8 D7 K. A8 f: ] X8 m
}9 f" G) I- i$ q
PKTItemTellW8(PacketItemMaxTick);! E7 n) k: \0 r3 S: M+ a
! r3 W" }4 [: x D2CoordStrc mypst = { NULL };- J, j3 L& j) F
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
. W/ A0 W8 @ A" _' I& M( _& I w7 Q& g) O5 A' r
BYTE aPacket[13] = { 0x20,0 };
3 ]* ~' q }/ c$ ? ::memcpy(aPacket + 1, &pCube->nItemNum, 4);. j. w: i$ R0 @- _6 p' p* F( L
::memcpy(aPacket + 5, &(mypst.nX), 4);
. W5 i5 c: D( z! t: R2 S ::memcpy(aPacket + 9, &(mypst.nY), 4);4 n. b; N2 F) D& o' f
D2Net::D2SendToServer(13, 0, aPacket);3 C# z2 P( Q3 {0 e
return TRUE;% c* b4 b1 R& v" Y
}' C1 p7 B1 h) }! d8 d
+ M X1 N% |( p- g0 |7 A( M static BOOL ToInvxy(DWORD x, DWORD y)" V( d" n7 L5 o" s7 F* u( Z
{' s* x" y# p6 B1 W5 h0 A' n
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);$ i+ a% E3 i! O4 d+ P; _+ [
# s" |4 \& h& W4 z L% a# g8 p
if (phand == NULL)
. `3 t& y0 V- o: S$ U; {+ L8 R3 i/ \$ z, O return FALSE;/ S5 `+ V4 a2 g* a9 k }9 B
& d4 S; O8 _; D( F1 V. c
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);2 r7 T9 n; j( j& J8 R3 n2 G
* N$ P9 o6 G0 n. @( W9 i# d9 X BYTE aPacket[17] = { 0x18,0 };
( e* Q& _% Y% D, \ ::memcpy(aPacket + 1, &phand->nItemNum, 4);4 {/ Y3 J' f8 x' x7 @* h
::memcpy(aPacket + 5, &x, 4);. b) t l; F/ e
::memcpy(aPacket + 9, &y, 4);# E, j# j, h/ O5 }7 ?1 o
D2Net::D2SendToServer(17, 0, aPacket);
) w+ W9 K9 @! @/ W1 f' Q! \/ P return TRUE;$ _% q! D8 Q2 h1 L1 G1 t, l5 g6 e
}
/ B; O# f( P/ ?# f5 @8 ^4 Y8 t$ v
: q7 R0 {* n" H% v static BOOL ToInvRandom(BOOL bBagFix = FALSE)
, l" O6 i8 {8 J$ O: o2 k {4 R) h2 [8 q+ w( f. K
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);( Z$ y' O# u6 i! l# }7 _ O
if (!phand)
8 A% [- r# d1 c: y( M3 k return FALSE; j# W3 @8 u$ l% S* q A
int desx = 0;
0 v& O8 j: e9 Q& o, P" N int desy = 0;: w% P; \3 s2 j+ \: w; S. o/ ~# u
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
7 X$ o2 w; f5 G' H/ r3 C# o {
) }" u3 @, z J4 ^) O" A% o+ w ToInvxy(desx, desy);1 g' c1 T5 h$ F! }# Q# U P, |. r
return TRUE;6 }4 Z- h, e- Q5 i
}' j2 I" O% ?. i
return FALSE;/ i/ k2 ?. x+ p( S8 m( [
}
3 C4 G6 K! N/ U8 u$ J7 e* l5 e: |& D& I( Q# z
static BOOL ToCube()* p& g% a* C$ T, z$ _( ?! [
{: r# c& B" T3 w8 [6 H
if (!(*D2Client::ptPlayerClient))return FALSE;
" ]- _: _5 y3 A9 g) [
; e! W9 b. l; S& Q$ p UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
8 ^2 E( x5 D7 g1 U+ r( L if (!phand)return FALSE;+ i; u3 v# B. K: u, v$ v
* V# e! g8 ^( V UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
: I4 A) I5 c3 |7 e8 l if (!pCube)# t7 ?. y! e% R
{
* f: u6 V5 E5 y: ?( F# M pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块2 o( W3 h9 [/ A0 V- W* A* l
if (!pCube || !pCube->nItemNum). I: K3 T& V% ~- n
return FALSE;; S3 {0 g) [* H: p$ [! _( I
}4 `) g. [. Q: X3 C1 J' p6 m5 m: D
1 ]: D. a4 v! l* s
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
' s* H( N1 ^" |% ~1 d7 b* w return FALSE;
% V7 M/ p& f5 ]1 c# l" M5 U) m3 l; [; h. B
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);) p7 L4 s0 M6 B2 \
/ k; ~4 j- f! [) m: j# i
BYTE aPacket[9] = { 0x2A,0 };4 v5 y7 U6 C( L$ Q; N- @5 t9 w+ L
::memcpy(aPacket + 1, &phand->nItemNum, 4);' I- W6 Y$ D& d; d+ o- f4 Y
::memcpy(aPacket + 5, &pCube->nItemNum, 4);! q: [" a9 q$ M! ^6 K
D2Net::D2SendToServer(9, 0, aPacket);
: @( H `2 l! z1 c, B' R8 O* s* H return TRUE;' n" i0 s: Y) ?. H, `
( _9 g a6 f8 T' t- C }
2 e' W; G) b+ N L" z: H/ U* X: J2 J' b# Q2 X
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno); b2 K5 n8 M9 s! V+ V |
7 B, }2 {3 k/ n) S' P c4 z
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存" i3 n/ a& g1 f) X; O
{5 `! N2 s5 C# q. Y6 T. |$ r! {1 A
D2CoordStrc mypst = { NULL };$ m, J- J, r6 G
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);# `! g! f" a: O- ^
3 C: E5 t' R0 \. d- G+ ]2 K
if (!mypst.nX)return FALSE;
" n6 i( x0 H2 F: U0 L6 \+ o
: |$ a4 \' e$ i3 p* Q PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);2 m3 p0 S, C2 e# i! I
7 Y8 G: }* x! d* r9 v/ _ w* _
BYTE aPacket[13] = { 0x20,0 };
0 c# o) W; C) l, l3 I* o- D ::memcpy(aPacket + 1, &dwItemID, 4);
) ^ V7 a( c T7 v B% o+ W, N* F ::memcpy(aPacket + 5, &mypst.nX, 4);2 D: l$ @7 \0 I( L G5 ?# o
::memcpy(aPacket + 9, &mypst.nY, 4);
( B7 D: v# N& I3 C4 A //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
% O' [/ W$ ~( }9 g D2Net::D2SendToServer(13, 0, aPacket);- L& _. N' C+ ^- y+ Q
return TRUE;* C% }+ o! K# I0 b
}
, O8 ^, t/ ~# z/ r+ B4 T: X% j' a) q3 b, L$ [; t+ r0 p
static BOOL DropCursorItemToGround()$ l+ K# m& X* C/ k1 h8 P/ E* x
{7 P8 ^3 z' e7 X
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);2 ^& @7 v# @0 l0 N5 i
if (!phand)
, {! r. D. \* U+ j! e return FALSE;
3 u4 u0 i( V5 q2 X! f% y- w/ s' N+ a1 W3 r: A
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);5 e& m0 Q$ F# h, e) r! P0 g
; S( W; w! @) r8 y BYTE aPacket[5] = { 0x17 };
" l/ t- k- ?2 F0 T/ u# N/ L ::memcpy(aPacket + 1, &phand->nItemNum, 4);
! {: X: L5 b4 z6 l* V m D2Net::D2SendToServer(5, 0, aPacket);! Z% Q1 p2 r. d4 D+ H8 L b1 t# a
return TRUE;( }1 X& |3 |4 e& c
1 P4 T/ R) M: J# A P3 e r }! A) D! Z1 x% B" W) F6 X
/ G0 U% L$ z( n! U static BOOL PickStorageItemToCursor(DWORD dwItemID)) g* h. r! |) A I W
{! b" |6 e1 {3 e0 k7 j! F( m" V
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
+ T! z- h' t% M3 T
. M1 I, K$ v. H$ E7 ] BYTE aPacket[5] = { 0 };
, Z9 k p4 K+ G4 z" I aPacket[0] = 0x19;
/ ~% ]) b: _. h T! e8 m ::memcpy(aPacket + 1, &dwItemID, 4);
+ L! | u. p) L$ r //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
; V, s Y% [" F. n- e7 C0 I D2Net::D2SendToServer(5, 0, aPacket);
7 l9 g& p# M1 c( O return TRUE;4 ~, i; o! [: S; d& }7 w. F4 z& j$ P
}
m: |/ J: b/ [! P3 p$ J$ u4 _! ^: a* B. m
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
) T' x7 c3 A4 S {6 j! Q* W- N, l$ h2 w0 S9 \( w
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
; f/ M: c8 t/ Q. R3 f. z5 s; ]* M' x BYTE aPacket[17] = { 0x1f,0 };
' R2 a! w% c0 a ::memcpy(aPacket + 1, &ItemID1, 4);
5 L. {: I. k/ U! i" V ::memcpy(aPacket + 5, &ItemID2, 4);
: R, j9 \, `) s" N //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
: Z" e- l7 G: Y0 t I" K D2Net::D2SendToServer(17, 0, aPacket);
9 d. d; E: r, b' w return TRUE;
0 w! K) i+ X) _0 w: T# {& J }' n; Z% [0 h7 ~9 K2 `
% @& z; K+ `% C0 c3 O, ^
static BOOL Transmute(): S3 p0 D( n% N: c0 G1 N, G5 D2 n
{
3 b& K/ c* U" v+ r: j if (!(*D2Client::ptPlayerClient))return FALSE;/ i+ [: d7 z9 w9 _+ k w: `4 i8 o
. N: j* J2 V8 G' L7 q& h if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
* V8 c$ S$ S3 f4 w1 ?# o return FALSE;' L: Z" ] l* y1 f, v: w0 J& k
7 |4 {- S! z8 @) Q) ]& `" t
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);( j/ v0 H7 K4 L: t k* {6 C: v
BYTE aPacket[7] = { 0 };4 b2 V9 Q: e. E* H1 u' j7 M$ f, h
aPacket[0] = 0x4f;. k1 D; v3 h4 ]4 ]/ {. s
aPacket[1] = 0x18;! d* R2 O4 t; ~; s5 j+ B
D2Net::D2SendToServer(7, 0, aPacket);
+ Y9 i( ?9 x/ a+ m7 Y return TRUE;
; w2 H8 ^( a# F/ Z) k }
6 k) |4 K+ g# t! V" t};
% G/ y' u6 V6 C9 z0 m6 `
% Z s% Q! @8 i/ l+ {1 m |
|