|
|
转载
( V1 K# S/ U- `' z0 \/ J6 J0 i自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:: N/ @% ^( G; Z, [4 m6 N
D2Client:
$ E* B- T; U$ y( y$ ?6 i6FB20AE1为拦截输入框(用于获得命令)* S* Q0 } R: ~
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
: d; Q- }1 H2 y- H) q' f" @( t6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
8 Y5 ], \1 {. M" l6FAF4230为hackmap的loop点 我用的hackmap导出位置
5 i K v/ K' Q |2 n4 B; @5 f2 \$ ?/ t+ c; a
z' i, P" U" @2 I发包函数:( C3 }4 a" S. R# o; X( Z5 X
class D2PKT_ITEM1 Q$ W5 w: s" i* B4 j
{
l- _, z, ~& \$ L' G# _#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
7 ?% y1 o% l6 T2 {9 `/ F#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
, x0 S6 D% {. K& Y: D4 |% ^0 q9 \#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上5 N9 G" \# t4 s4 L7 Z K$ O
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
- A5 c7 X J" v#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
. F8 H( M, i1 q& p* E#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上: V1 p4 Z& v8 E. C, W& V" Q
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏/ _# u4 m ?8 a D) K( J# }4 F
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上: Y2 _: W0 B) y. W
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
& q) S5 Z' l! T) b8 O5 y/ N#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店% _0 i; ~( G) h5 N
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV. J; V( {$ B1 H( |) d
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
) ?. J8 c4 a5 _! o( b7 j#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
0 [) K! V/ j: J6 ]' m+ I#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上& G& {; q& N' b
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -6 c: c* H i8 |# [2 v
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上% y1 J3 ]. V" ~* B) K" C
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
6 c4 n* n4 l2 ^4 p9 x d/ s$ q$ i3 S9 b! Q2 X! p
#define PacketItemMaxTick 150
9 U* R) a$ ~& u. T0 ^6 v#define PacketItemPickUpTick 20, q3 }- I0 W( U4 U( R
7 J- s" B+ o! z) i. K! X$ B4 d) Aprivate:! z. R' W9 a9 t7 f$ q! o
static DWORD _PKTItemTick;# N8 K5 R7 \- U/ r; T
static DWORD _PKTItemAction;
; y! a6 r' }/ D' z! ? m static DWORD _PKTItemID;( ^1 B0 S, P8 I, _! m
static BYTE _PKTPKTType;
* O& u8 n+ L8 @: }7 \public:: [8 ?! J' b' n+ ^9 O0 K/ \
static DWORD PKTItemGetTick() { return _PKTItemTick; }
, f5 Y" P' g6 e2 F0 L9 m/ T& W. r
' t, [( P1 a! h8 T+ T0 L% W static void PKTItemRelease()
, }7 t4 A( v# w9 i% ] {
6 w* a# ] K, L6 j# c! C _PKTItemTick = 0;
7 I& r9 \; [4 P/ Q- } _PKTItemAction = 0;* D/ N k+ o: i7 \! q
_PKTItemID = 0;
5 n! l2 j7 t; m7 R _PKTPKTType = 0;$ B& _3 k, Z, D3 c# h* b
}
1 |/ I" o2 y% y& f0 d0 H
# {: A s8 B4 ` a8 U$ A6 j1 e' }1 ] static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
5 g% U0 n! x( k {
9 W9 m( L" L' c p2 B _PKTPKTType = aPacket0;5 {2 ]' [, y+ L$ Z/ [2 |6 n
_PKTItemTick = tick;, q" S ?: m# j1 n) R$ _
_PKTItemAction = ItemAction;0 y0 `- _9 {4 W% P& L
_PKTItemID = dwItemID;& z4 c3 _. i7 b/ s$ X$ |( l
}7 \! H# y: L( L$ X+ X
6 j' e4 c& @' a; w4 Y1 o static void PKTItemTellW8(DWORD tick)
6 b* e7 ]. T |( a: t1 A& Z+ D# P {
6 o+ `! G$ q" g" I9 y- Y _PKTItemTick = tick;' z8 A% T( f* @% N0 P4 v( g( D
}; ^3 ~$ o* R+ A" t* w
3 {' A# w: m# U+ V+ b+ [8 j static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor5 ?2 _; x) q" g9 t
{; }/ q' \. F' p4 t* D( b
if (aLength >= 8)
/ ], C. o- d$ V3 t, V; u' A {
u C. W+ M1 T9 f% _: ?% V/ j DWORD dwItemId = 0;
( s: O. j6 b5 O! `9 w9 M8 l- g# J memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));; B( R p& J3 ]" l( ~1 u
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
' e, K& z# k2 f6 p: A& M K && _PKTItemAction == ITEM_ACTION_TO_STORAGE) H3 N3 N$ w7 f: ^
&& _PKTPKTType == PACKET_NEWITEM
j$ U: h; b3 z )
. Q! s/ A6 i* G% X3 l9 D/ m. T {6 R. n& }- K0 ?* R9 E
if (_PKTItemID == 0 && _PKTItemTick)* ]6 s5 Q) d% @7 t0 z
{
5 w0 T8 K) Z% E! k! i% r" @' D1 A PKTItemRelease();. ~" F8 l2 l5 w1 s( | H* z
}
8 V& _' o: V; L4 z: y. c$ }$ { else if(_PKTItemID== dwItemId&& _PKTItemTick)
$ o( [. W W* @ {7 O# y+ Y% n* _& W3 _( r' h. l
PKTItemRelease();
! V0 O7 a# l2 T7 X/ A: M }4 \) j4 _0 E& Q7 ?
}
% r; s& h; ]- z4 `8 n8 [
: u7 W# Z7 s G7 h* L } }8 q3 G7 o X6 Z5 @
}
' l8 j& m W8 b4 z' @6 X7 ]3 B' ~& y z- O S
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored/ O) a9 f* s' b& F+ M4 x; z
{- D# S) r r( `" A/ T! _3 {
if (aLength >= 8)& ~7 \; W% [! I$ f$ h# x! ^
{4 Y( ~: M1 J* G2 \& l
DWORD dwItemId = 0;
- S5 l0 {! Y1 v4 V8 n memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
& h: D" f) v8 G7 S) w% B) ?- M0 n6 O if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
- ?0 {" g" X4 |/ h && _PKTItemAction == ITEM_ACTION_FROM_STORAGE2 x; w5 }* ]& r+ e X, O+ L
&& _PKTPKTType == PACKET_ITEMACTION* L q# O4 R( `3 `
)2 T: i7 _/ r1 H! {. k
{% o1 W2 [: T, _* [" u0 w
if (dwItemId == 0 && _PKTItemTick)" W1 g" j: ]8 \$ n2 \* ]
{
+ w/ }: s# b9 r* F3 l PKTItemRelease();' l" d+ x+ L3 x0 K- S- j2 m
}0 F8 T& s. F+ A+ ]) {" ~4 Q
else if (dwItemId == _PKTItemID && _PKTItemTick)1 l" \- T5 M& U
{! v( k6 Y% A ^8 v
PKTItemRelease();
" e# C- t$ S# C$ s1 ]) l: g }" a6 y1 g" ~; a. I) o( L% O5 O& x
}
4 a5 ]4 b: Z7 R- v! Y ( r8 t! j" u& }) t' r) o" u$ X! T
}* X1 h% ^% \. P7 G: y3 @0 Z9 d
}
f$ F: V# ]; u: R7 f8 U( y9 f3 B o# Y( A
static void PKTItemGameLoop()
6 I# L0 m+ ?' K- A. t: s! G {
. ~& S2 P$ @% e9 a( d if (_PKTItemTick > 0)5 M* T/ \6 Z+ R% x9 j8 Q4 M) F
_PKTItemTick--;* N# a3 Y4 [+ R7 N
else if (_PKTItemTick == 0)
4 s% `. [9 a F PKTItemRelease();1 j* Z; j7 Y* P8 B
}
" G; H$ A7 k+ S' k+ O# v# h
1 ] |4 P9 Y# z8 ? static BOOL PKTItemCando() 9 [/ r7 [5 V$ `
{
* z2 B1 A" w# m: X. o3 V7 f3 a if (_PKTItemTick == 0)return TRUE;3 ~4 B* W$ o5 o7 H1 f
return FALSE;
9 ]& E5 [. `0 T* h) @$ V }
+ g( I- m( a6 b3 U4 l) M7 D
2 x) Y% J0 c" @ m static BOOL BuyItem(DWORD ItemID, DWORD npcid)( g& k+ \1 K; A
{5 O M; c1 }% o
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);% I0 {1 b6 e/ z% u2 u' M6 j4 ]6 F N
BYTE aPacket[17] = { 0 };) \2 w! {& H# h% G9 g
aPacket[0] = 0x32;1 C; e; B4 Y3 d* K# e) Q8 f
::memcpy(&aPacket[1], &npcid, 4);% O( H# F, `) u N5 y' R/ _
::memcpy(&aPacket[5], &ItemID, 4);
, l3 {1 x! i% k; z0 M! S: `( G& T; C //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
) k, C) [6 C% p D2Net::D2SendToServer(17, 0, aPacket);. D6 q) Q2 b6 V% k+ G6 z! M
return TRUE;0 d$ C% U* m- r6 q3 l K t: q
}* I6 G( G8 m% q# \2 Z9 J
5 `) m* f- D5 i' _% u2 c
static BOOL SellItem(DWORD ItemID, DWORD npcid)% e, A7 S L5 k0 Q
{4 Z, r/ R7 |8 D/ g( }
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
" N8 G! _+ |( V6 y BYTE aPacket[17] = { 0 };+ R! c7 r6 A- r: S }
aPacket[0] = 0x33;
' i! f0 g+ a- P. t. F ::memcpy(&aPacket[1], &npcid, 4);
' b" y% r! ]4 j' ? x& I ::memcpy(&aPacket[5], &ItemID, 4);6 a: E/ O: E4 _& }" H/ Q
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
# q6 ]( U% O. S: T7 d D2Net::D2SendToServer(17, 0, aPacket);3 L. E2 Q y* u4 f% y
return TRUE;
( p6 y. J8 L# Y3 z }
) b9 }) X/ F y2 \, k [, |
7 j4 {+ z l9 L" T static BOOL Interact(DWORD nUnitId, DWORD nUnitType);% N' J% c8 z# b* C; F' B+ u
! H* T2 p9 t. _) e% b3 ~ static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
2 K- c# p: [9 _ i% ^7 O, G( f' Y7 [7 l. f
static BOOL OpenCube()+ q! J* h$ c/ E3 {8 H& l/ P: P
{
" r8 ?* Y, G; {( M5 B, C3 X if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
$ }. D6 q# t7 D+ R* g, U+ w$ e
% F* \3 ^5 g3 y4 u6 ~( p8 L5 A UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
. `7 x, G" a! J if (!pCube)& q. e' K+ ~* o3 _, Y
{
8 a1 u2 p1 B. i* C. C) v) c pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);6 c3 G1 n2 l/ a5 C8 X3 b/ u: L
if (!pCube)7 j5 O: h. u g
return FALSE;0 z( D2 |# R/ U* v0 D4 I0 s; Z( ]* k
}
; y& [8 b3 N& k$ ]% N: |/ K PKTItemTellW8(PacketItemMaxTick);" y% M9 X0 X4 D e! |% i4 q( j
\+ i- Z/ x9 A3 w( w, L4 o D2CoordStrc mypst = { NULL };" F4 a! o& g0 E P) j) c! Z+ W
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);7 w' W5 ~% Y8 i3 u- Z, w- P
* G4 c) ~+ Y+ P' Q/ @# o* m
BYTE aPacket[13] = { 0x20,0 };6 f8 B4 W" D$ f- o5 X6 g$ N! Y
::memcpy(aPacket + 1, &pCube->nItemNum, 4);! }3 r# s G5 Q O! l+ Q# x/ i3 W
::memcpy(aPacket + 5, &(mypst.nX), 4);; Y# B* |; q$ D1 \
::memcpy(aPacket + 9, &(mypst.nY), 4);
& d: t8 B" D f2 j, F" C6 w9 z D2Net::D2SendToServer(13, 0, aPacket);+ x7 p- B% h" p- l' D
return TRUE;
, ] b g8 j. B5 D1 S5 \; A, v V }
1 J+ f/ ~5 e6 x) D' n6 [) }) d% B9 U0 t b
static BOOL ToInvxy(DWORD x, DWORD y)! y5 a" M6 n% v, r% [. A5 J7 p
{1 X4 j6 _- _% M4 g- W
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);+ m$ p. N3 R* }0 i
1 D& ?5 m V: H, b: Z if (phand == NULL): p/ Z' P' b' c; b5 _
return FALSE;
4 J& j2 a7 e9 S7 J; c. o- s, r. ]" U! \$ K8 Z% Q1 Y# q; S, |
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
7 U/ Q5 W+ N& a+ X! Y6 y. x! M" {' l
BYTE aPacket[17] = { 0x18,0 };: t4 G6 P, L$ e1 v1 W0 ^
::memcpy(aPacket + 1, &phand->nItemNum, 4);
- f* s: \3 K' x ::memcpy(aPacket + 5, &x, 4);0 o3 Y& k( I* W! }
::memcpy(aPacket + 9, &y, 4);. p& s) T ] @! Q3 T# n
D2Net::D2SendToServer(17, 0, aPacket);
- H D( g' O: _0 L+ F7 Q% r return TRUE;
6 W* W6 z+ Q4 H& Z# _5 Y7 l }" t3 p/ }+ m) J( ]+ S% V. r
t6 i* N% I R' l. m. E( k8 } static BOOL ToInvRandom(BOOL bBagFix = FALSE)
* {+ j% r! Z: L' L7 Y3 @ {! M% V- ~% b6 `! O, G$ U8 ~
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
1 s, y4 b8 E3 ~+ W if (!phand)
9 O# ?; o, c( Q: ^; W return FALSE;
# r7 n7 K0 t4 q, Z9 G; L( m$ T int desx = 0;, U7 Z G& G `/ D0 q
int desy = 0;- J0 b# R u" H4 z
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))) w* j' q2 { ~: k
{: k+ `4 i3 [2 T0 l( V/ p
ToInvxy(desx, desy);! G* w: K" ]+ o+ ]) i' y
return TRUE;
8 D9 K5 s. B/ ?1 k, ~- [ }( }. S4 w6 U3 i: Q3 ?
return FALSE;0 o4 V) h F' i2 K
}1 K* L! V2 e: h6 c$ }5 k! T" U8 R
5 T, b& X6 C# V7 i1 |
static BOOL ToCube()
/ V& _5 Z. O* }) p2 _$ f5 h* z {
+ y u5 m, g* L, J) L( I% y if (!(*D2Client::ptPlayerClient))return FALSE;
8 {4 m- V; I7 _
/ V+ ?1 j& ]) Z" [ UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);5 ~$ l" C" S0 k" }
if (!phand)return FALSE;# x5 `' m/ }/ H9 E$ p8 N
1 }/ c' O% R9 }& \ UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
& Q3 x9 F/ S( ~3 E$ Z1 s4 A9 J if (!pCube)
* e: K9 ^( ?( s8 ~% b @/ l! } {
' o- U7 G" E4 j8 ~+ i pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块6 w: ~% O7 T7 _- F1 J* p* T8 J
if (!pCube || !pCube->nItemNum)! U7 e. [/ Y( ~& s3 b H0 X1 s
return FALSE;7 j- V8 w3 D- D) @
}
+ r2 e. {! H- S2 j( H
3 l$ f& ^* H. b- {2 s) E/ v% f if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
5 c$ R: k8 }3 N/ ~3 c return FALSE;
- i/ C/ ~/ h/ R
! C f w4 }7 G3 T- l. m PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);4 h4 K; |1 `" }' q. s/ b8 M( I
6 \; d5 k! n C4 H% w( u
BYTE aPacket[9] = { 0x2A,0 };
* K' X4 `4 ~+ Q# `" ? ::memcpy(aPacket + 1, &phand->nItemNum, 4);& R& @- A a0 d; \/ c1 B" v
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
" C9 ]. [' k7 N. [- t, ? D2Net::D2SendToServer(9, 0, aPacket);- x, w! v- C. h' T. |
return TRUE;
9 `! Z# A6 U% J9 |! [! D; W3 B- e. I6 Z
}
0 Y) H; x/ ]# A" r! V% r
: g6 x1 [0 [! G static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
: X6 i$ ]0 O7 `4 c. T
; h! T; y: G1 f2 M. H; ^0 L static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存0 E5 P6 @9 h8 g1 K2 ~' C' e
{5 Z# k: f: a$ [' J
D2CoordStrc mypst = { NULL };, ^$ Q3 r& L/ K- B, w
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);2 A- ]5 k; M3 v: |! g0 }5 }
0 v3 Y+ W% ?3 |0 X& \ `' }
if (!mypst.nX)return FALSE;/ v4 i* i% Z9 \8 A" W& c$ r# J$ K [
2 O" ~, h8 }, J' D) s# a# ? PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
! }6 b: S$ V( ?! v* M, R: [8 ~! z. e5 ]8 |: ^3 f
BYTE aPacket[13] = { 0x20,0 };4 n+ j2 K1 H+ y; N& v' A
::memcpy(aPacket + 1, &dwItemID, 4);
3 M: u7 u; c& ?; N ::memcpy(aPacket + 5, &mypst.nX, 4);: D( S7 j0 Z* x5 p& d1 @
::memcpy(aPacket + 9, &mypst.nY, 4);
/ z7 x ^4 d, V; [ //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
4 W0 c/ ~: F, L5 k% s& G% x P. G D2Net::D2SendToServer(13, 0, aPacket);: s& C" d% [( z4 X# W3 x6 {3 u
return TRUE;; A1 W% u: L3 M, R8 W4 `
}5 W" G- I, E; m. q2 D, W/ s
9 A. J/ m5 k! N. V/ t' w/ x static BOOL DropCursorItemToGround()
& a; ~4 k/ s5 n5 T- k, x8 y {/ v' [9 {! y* K/ ~- i* y
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
5 f( S2 j, J m: `. S if (!phand)) m+ M+ ] j8 ~9 Y: O
return FALSE; k* q7 H! t7 \
; a/ g" C' T& O6 ?* ]& x L4 @2 v2 o PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
M& { b& B0 v4 K0 [
5 a; \$ L- O# `7 `% g& s- q BYTE aPacket[5] = { 0x17 };
, T/ A* K `8 R) h/ B$ } ::memcpy(aPacket + 1, &phand->nItemNum, 4);
' c" Y. ^9 C* a# n5 [9 Q$ } D2Net::D2SendToServer(5, 0, aPacket);
+ D! _3 @, P0 o4 q% H return TRUE;
0 z1 O1 `5 J( C# U9 m) I2 P1 e9 O; J+ S9 F3 x$ d+ v8 R
}6 B$ S( S! K8 C2 z) O: w
+ A, @( c& ]1 l6 r/ ^
static BOOL PickStorageItemToCursor(DWORD dwItemID)5 a1 [7 N% o5 F* B1 z
{
! i& t8 o* U2 [0 ]- f1 `( k PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);( H% {4 G! `: d6 K2 x$ ?7 E
W' Y6 `1 N8 g; e9 B
BYTE aPacket[5] = { 0 };
p7 R( y; O# a6 D aPacket[0] = 0x19;
+ L1 k6 P) x( ~' u# l ::memcpy(aPacket + 1, &dwItemID, 4);( z3 o+ |, c, ]# R ]
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);( e6 X! H3 {% M( i) I' H
D2Net::D2SendToServer(5, 0, aPacket);1 O! _) E; i9 P$ Q, j
return TRUE;
- T5 M) |4 G2 B- k6 v; ?: {% _6 ~ }. s, T4 A. c G% |( F _0 {
- J, w8 h' v2 ~0 q
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)/ q- Y8 I) a# k7 r% K, z
{% p+ P. g. x* G% g% |2 g
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
$ r( \! N$ H" p8 T g! Q BYTE aPacket[17] = { 0x1f,0 };
& G! W8 d; ^1 V, d0 Z% @" R& g" f ::memcpy(aPacket + 1, &ItemID1, 4);
+ A1 o5 V# d, O ::memcpy(aPacket + 5, &ItemID2, 4);
! |* h5 w: M! x/ [- q2 G+ ? //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
9 B& R: h1 o$ c T; _$ R" ` D2Net::D2SendToServer(17, 0, aPacket);& ~- q* s; Y9 }* S( t
return TRUE;* ^' E+ [$ G0 E4 H. l, w
}
5 c& {. [4 ]7 a. t$ [* e
0 n% f/ {- ^+ l- ~4 @, W static BOOL Transmute()$ }' W0 L6 s- [$ ]6 W* ^+ Q
{) C# S; J! t; Q8 `& P6 J
if (!(*D2Client::ptPlayerClient))return FALSE;
' T7 N. K9 w. W
* Y( H1 m+ p: R( X: c0 D: _ if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))& E$ n9 S& c0 ?! }# i- F
return FALSE;0 p) F6 U3 Z% E' ^$ t
4 K7 t" c! `( [9 }4 l j; k
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);. D/ i p) y" T( L
BYTE aPacket[7] = { 0 };3 Y4 B9 O6 a, M) [
aPacket[0] = 0x4f;: S( X$ X9 B+ {/ t, }
aPacket[1] = 0x18;
9 z! x! v% t; l1 L' \ D2Net::D2SendToServer(7, 0, aPacket);
! g5 i6 Z7 O2 C0 V# f8 z return TRUE;
) ]* w$ y1 |0 ?3 r7 t0 ?0 S }
1 w; I) B+ k% ~2 u* A$ x- D};' G. K; ~8 x! o
6 O, o8 P7 b. d0 q% n5 C3 ] |
|