|
|
转载0 s. x6 R2 A+ A
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:6 x7 r3 E; B, c) `2 O
D2Client:
# h/ `" F3 k% p# W# P6FB20AE1为拦截输入框(用于获得命令)
# |2 |2 c6 C, ]; p6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
$ o: J7 }- x! \% ]6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发 B u9 `* O$ x7 n3 L- Y
6FAF4230为hackmap的loop点 我用的hackmap导出位置/ M; J! b4 g$ ?) G* R
$ x9 u7 M1 f' n7 F& p( P/ e! I, U/ ^$ @4 y
发包函数:
( ~0 j* u8 |1 r' @6 Rclass D2PKT_ITEM
( {, S3 z2 m- V. M. F{
& L* N! X" u% n9 P#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
9 E( d8 b( w9 n4 w- }, W8 m& n#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多) \ B; k- G; ?5 g5 o
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
' b+ a0 B5 E$ i2 z, V#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上! `, a5 l: r+ H* I
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH0 Q% n* C9 \) ]3 i
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上- W% h; W# q/ I, M2 d1 f4 n1 a
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏5 }2 C2 L5 O1 E% C1 D2 o7 {" m. G8 c
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上& S# O9 g/ J& L
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
6 i- Y( m0 T5 I# ~ F#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店5 Y; ^8 \5 |8 F: t( D0 f# d
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
* i0 S3 W# t# F0 o3 {9 U#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
3 I& O& S8 @1 d! D' O#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
7 B( i- [: D" t. D9 l: p) x6 q#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
. K6 B6 G' Q: {9 e2 H#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -* {3 ?# m4 H2 a6 G, t, C4 L; j
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上9 U$ i; T1 k; d$ j! i
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -: n x$ I% M" T6 l
. q. ]0 v- N* j' ? m#define PacketItemMaxTick 1508 K* ?" M. i$ Z T
#define PacketItemPickUpTick 20
. g6 P: C* a" L9 Q1 @: \7 Y* Q% @0 d% o, i! ]1 j
private:
0 e+ ]1 ?5 W: ?; g6 L) O0 X9 g static DWORD _PKTItemTick;+ m& }$ a) n# i1 f4 i: ~3 I. Z
static DWORD _PKTItemAction;
7 f9 T- E1 Z5 t static DWORD _PKTItemID;
) f- O* C* t3 n+ [0 Y6 y" `) j/ b static BYTE _PKTPKTType;; _0 d9 T* v4 m' s! B" q
public:* J0 y4 \9 ~1 ]' Q. \) b9 X# {
static DWORD PKTItemGetTick() { return _PKTItemTick; }- _& n6 p' V# `$ {/ {2 n# ~
: i4 ?5 C2 s9 k: Z7 W' W, k static void PKTItemRelease() % B3 U j7 ~. |4 g4 _: Y
{# B3 ?% x! \9 A! n4 [
_PKTItemTick = 0;
0 i' m( V+ T( k2 o2 b$ X8 H: v; \ _PKTItemAction = 0;. q7 t& S( W+ P6 d& n
_PKTItemID = 0;
r0 k1 G$ l! t: Y _PKTPKTType = 0;, S" ?% G; B7 |$ N- Q" X% R
}
" B( u' C& m2 Q) o: f/ W1 z
* {2 o. ]( Z% G4 Y static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) * n9 _" C/ `1 `8 L/ l, G
{
4 Z1 J/ a7 z/ R7 r# c _PKTPKTType = aPacket0;# O6 Y3 ]6 o$ |% S# l
_PKTItemTick = tick;
+ Y- e1 Y- u2 b. G* n8 N _PKTItemAction = ItemAction;
% J7 X( z3 X: u1 ?; G& h# f; D _PKTItemID = dwItemID;# h( a* |( K; f8 h/ r. V c. X v
}" Y: h' t$ d; ?3 x- h8 u L
4 s4 _. c3 o5 o+ ^8 a& O) S
static void PKTItemTellW8(DWORD tick); Q. l, A/ L: s, H5 B3 ^
{; t) X, `/ X/ \- N9 M% d
_PKTItemTick = tick; g, k* J0 x* T a8 {8 E, d X
}; V6 @4 _. ?" q6 @" M- u
, G; O" J o- \ static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor% A8 q' F9 Z8 S( P2 x+ N
{
+ u( ?/ W" u* U# W$ M+ S" B J if (aLength >= 8)
- n7 f8 Q5 A/ D5 W6 q {" O; g/ o8 N6 Y5 i7 a, E
DWORD dwItemId = 0;2 L/ w" u6 Q+ b) `/ Z, |
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
[" s- P I" f c if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
# N6 }3 [3 X) ^( W5 W && _PKTItemAction == ITEM_ACTION_TO_STORAGE
& m) t6 H; }8 O$ r3 D$ y, v && _PKTPKTType == PACKET_NEWITEM
, T3 [" O9 L* J/ v% K ) s% ^ p; N* R! F8 V+ t
{
% Z9 s1 B; J( e8 R if (_PKTItemID == 0 && _PKTItemTick)
+ ~( a8 i6 j7 m% } {
7 i! Z; K: ?, M% k/ M( b PKTItemRelease();
7 S( ?9 B: j7 C2 e% t2 n4 A6 {7 b' p }
( R% r; n8 t F1 R2 V O else if(_PKTItemID== dwItemId&& _PKTItemTick)) W. M( n/ N+ D( Z6 A3 u
{6 T& J% F" A( a; G3 m" B" G
PKTItemRelease();
1 T/ F) R6 A. I/ b6 L" K }
' A2 C* ]5 C! \8 y5 M" K; [9 q# W) z }% a6 X8 _4 H( c6 o# j9 d; g
' d; f% a( m5 u/ c% n+ D3 e }- a" t" Z9 I! M- e: N
}
+ B" Q: O4 I. O- e/ d
2 a' E" j& p& p' s8 ~' G3 ? static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored8 o' ?4 }% {: @7 h4 R9 [% D# P
{
# y* P* T. U" z; {; \- i* j" C, } if (aLength >= 8) ?+ F V k$ L6 R9 `4 L
{
* Q% L# Q+ X# |- s# K5 N9 ]. H DWORD dwItemId = 0;
1 @; f2 g+ L' D0 y( _ memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));2 s+ L1 _( k* W( q I* @1 R
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE, ^# S! \0 p. q9 m
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE. m, K6 g! \& s& K( B/ ]% Z
&& _PKTPKTType == PACKET_ITEMACTION
1 k$ t! `% H4 B3 ~% ]3 b )2 Z; X+ r6 k- K- G1 f' J: Q9 X6 m. a
{
* N- A$ z& ^# w1 [ if (dwItemId == 0 && _PKTItemTick)0 |9 G* c& B0 @# v% ?% \: i
{" y$ ]8 e2 b8 m1 E0 ]8 A6 b
PKTItemRelease();
' B, B$ x3 r( G7 U6 ] }
' l- D' @ |5 H6 z) \ e) R S else if (dwItemId == _PKTItemID && _PKTItemTick)
* l( Z! f5 u+ r6 a: B6 L( C. ] {
6 @' \4 @) Z. `* G. a4 a& m# Q PKTItemRelease();) z5 T/ N5 s1 l
}
$ q# Z7 q! p- \( t' q0 L }
7 M8 ~6 y) r% V( f4 |8 g . f% r. E- Q7 \! B; A. b( D
}
9 M- n- f! r( ^/ L+ N }
{; z7 H# N l+ y# G E
! u) B, E( r$ j8 q* U* T static void PKTItemGameLoop()
& L6 s' d( j) r3 g {
- Y$ A6 u2 d/ g if (_PKTItemTick > 0)
; R' i7 _" Z: v$ Y _PKTItemTick--;1 N' r n1 a- t7 T5 i3 p& i
else if (_PKTItemTick == 0)7 P" G. T( j" p' J
PKTItemRelease();
$ d' t4 ~7 S' Y+ c* n5 K' g }
8 z1 f" l! h! I. P- _" ~6 n1 Y' w( d( ~
static BOOL PKTItemCando() ! Q3 i2 r/ v. N, o$ q
{6 u% d* F/ X* T* j
if (_PKTItemTick == 0)return TRUE;
3 b/ U# ~5 l2 z( @8 R/ W return FALSE;6 f+ Q+ ~, ]9 J3 _) B$ l
}
+ W3 `/ D. @# k0 ^( ]6 H) f* _8 Q. y3 s, M1 s) q C, j+ |
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
6 K* V, \( t& {+ K, y {# U( v G. k4 O1 H0 g- c* m% r& H
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);8 ]% @8 f) u/ q! S+ X* X
BYTE aPacket[17] = { 0 };
, o& J) T( a, P/ B- [% G- M aPacket[0] = 0x32;1 x+ d4 T$ o8 D" x7 i- r" S
::memcpy(&aPacket[1], &npcid, 4);) h5 q% c, R1 w$ ^
::memcpy(&aPacket[5], &ItemID, 4);4 n" L6 C7 g) G
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
U0 G, [4 s( }1 J; r D2Net::D2SendToServer(17, 0, aPacket);
3 c3 G$ Z9 V7 ]; \3 s! `5 r return TRUE;( d; ^8 U3 r( M( @0 V/ r
}) s" a( x7 H- M- c z- y
{/ V5 r P7 | static BOOL SellItem(DWORD ItemID, DWORD npcid)
% |( q/ R: s6 V6 e, P {: J+ u# f0 h1 e1 Z
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);# g C5 W: z& ]) Z
BYTE aPacket[17] = { 0 };
6 f+ E# p: u% @& j+ O, }1 I9 Y aPacket[0] = 0x33;
0 n: G- x( F4 k4 h% X( B2 U8 v2 X ::memcpy(&aPacket[1], &npcid, 4);
' D* b# n I& A. L8 Q( V ::memcpy(&aPacket[5], &ItemID, 4);: a& \3 J' E# B. F
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
, l& }3 n6 _( Z D2Net::D2SendToServer(17, 0, aPacket);
: d# V+ S* |4 P: j return TRUE;
' k: ?5 l+ a; x3 J }
, V3 \! j, G7 t' }5 U9 R
9 t* ^9 J! N4 W; y9 U5 ? static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
7 k# W7 b' @1 e4 e" I" {8 F. u" U6 v& q3 l
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);3 o- H5 U' A9 V$ j
/ N& K1 z& Z+ C$ ]5 ?: f$ x, {. D
static BOOL OpenCube()* ]# P6 C7 ^& w" H4 t4 s
{5 Z; A; t6 Q8 W# s4 y
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;: l1 H7 z, L8 I7 T- h* E( S
. S5 a! Q {; M; s2 {5 f! G
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);+ v7 r- o [4 ~4 b; C- S4 d
if (!pCube). n9 h Y) h* Q( E4 g- I
{
u" C" L- L4 Z$ g pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);9 R3 p! y) a# @# T+ S
if (!pCube)
+ |' ~5 z0 ?. s4 W' u return FALSE;
7 x' N; ?1 b# i% a4 s5 G- E }
# {" e) R" h" V PKTItemTellW8(PacketItemMaxTick);
) H l# h! ~2 O( {7 t. |
+ d" b$ F2 x5 ^) w! c D2CoordStrc mypst = { NULL };
7 S/ J$ X1 Y$ E+ H {% k D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);0 N( i9 z4 O; [- Q5 b
% X, g) H, ~/ E/ S- V9 ?) Y( N BYTE aPacket[13] = { 0x20,0 };" a# ~4 z! _5 @) W E9 Y
::memcpy(aPacket + 1, &pCube->nItemNum, 4);5 @) w, n% p( w% W% J- r l/ M4 m
::memcpy(aPacket + 5, &(mypst.nX), 4);6 s- B+ ^, K9 _2 x0 b
::memcpy(aPacket + 9, &(mypst.nY), 4);
& r0 X- t; [. @" {# ^; d" K& E D2Net::D2SendToServer(13, 0, aPacket);
- i9 |3 o! a2 C" l return TRUE;6 A6 C( \( _: F: Z7 R7 d5 J6 f
}. E. k$ _' U$ K: L6 N
, T$ G) H+ \# t8 f& M! C* i static BOOL ToInvxy(DWORD x, DWORD y)
( }8 I8 M. `( O0 b9 m+ E/ c {
' X& o! |" g, f' a$ s" F3 L& o v9 F UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);) N; z3 O/ j" `0 \ g% _% D
( w& `6 M6 R0 p R4 U
if (phand == NULL)
- F2 o D& n: B2 w" Y return FALSE;1 u- v. {" Q' D! f9 E- g: ` j: ]
5 ]& U4 V% q) _. M# |9 i1 M4 J% o
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
9 Z9 l8 Q, f9 E% k/ G; T# {7 M, k: b8 \- i8 `$ f3 ~) k
BYTE aPacket[17] = { 0x18,0 };: \8 i( l8 r- F; I8 a
::memcpy(aPacket + 1, &phand->nItemNum, 4);) f& ?) q6 A7 g+ P/ ]& g3 O
::memcpy(aPacket + 5, &x, 4);# D6 m* \. x; ^5 h
::memcpy(aPacket + 9, &y, 4);
- Q1 m$ o, D( w D2Net::D2SendToServer(17, 0, aPacket);
, ?% {5 C# b1 f2 w# u' N# p( i return TRUE;) c2 Q0 Q, l) e( Q2 n$ C1 w4 k( p
}
; h! k. d1 U3 t7 ]" x+ G3 ~/ c( \" ?5 Y$ S( N3 [6 p
static BOOL ToInvRandom(BOOL bBagFix = FALSE)
) [; a- ]* V5 Y0 X3 S; K {
2 X. v+ ?1 ~7 o; [* o9 D, } UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
; f1 Q: o1 ^* M/ }$ `" J if (!phand)+ m7 \7 A2 \. q8 ^. C
return FALSE;2 `" A: H1 y6 T
int desx = 0;
& b `+ I9 @5 e4 O/ K int desy = 0;3 y% [/ [( h- k2 n1 o& v* B& e7 L8 ^/ A
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))" |! {1 G v7 B/ x* v4 Y; v* X+ G& S
{
& I# o' ^* S; R" d ToInvxy(desx, desy);
" }0 g" a* H# G" o* ~ return TRUE;
6 M& G3 V$ `: m" e6 D }
, p& k5 A* W8 w/ |- \+ H) P/ B return FALSE;5 m4 i6 Z/ B/ N9 s! D" M! I
}) p" y, ], }0 _: u: v2 M( O- s
, D* p' w. Q u
static BOOL ToCube()! K; D! ?" n y$ Q, d. q% g
{7 l8 H8 Q$ [* P2 C. g( f
if (!(*D2Client::ptPlayerClient))return FALSE;
$ w1 m: T; ^; I& D# M9 e# }8 i
) w7 T }8 K- I UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
* l8 l* `2 U% J1 Y* D2 P if (!phand)return FALSE;* ~) v/ @ w0 z* C
4 r, u0 J0 n5 T/ T, O r; O
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块; N6 U" ?% q% t$ H/ s
if (!pCube)
- i" }4 F2 L. ^, H0 M/ }! j7 g( j {( O1 G! D' E! g& }1 x1 F# m
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块1 f1 u* \% l& f1 X
if (!pCube || !pCube->nItemNum)2 }6 Q! B; ?( Z+ l1 u9 F b( H
return FALSE;3 H: |2 P) N* L2 c5 s) ~7 R
}
( ]6 B A- q" h5 \5 J
3 s" y1 g0 G4 w5 [; K if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
1 N0 i+ e+ }. ]3 X, | return FALSE;
$ h+ l/ Q B, M1 D+ {/ t
8 J p* \1 o; z* P: b, \) } PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
- p/ S( m n& m
9 M/ z$ S- B( c2 f j8 j+ b {9 V BYTE aPacket[9] = { 0x2A,0 };+ b$ k/ P8 y0 O' @# ?9 I. m6 A; }
::memcpy(aPacket + 1, &phand->nItemNum, 4);
* M8 A3 b9 A5 b7 U1 G% N4 c ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
0 N9 _ S6 ]" [ D2Net::D2SendToServer(9, 0, aPacket);- x2 |% _9 J, i# B
return TRUE;7 L& W" b0 i4 C- \; S2 L+ X% a
: [( J# r' a" J4 _2 e
}
! ?1 x/ v3 N0 o7 m5 C& F6 T N! b h" c5 m4 Q$ n( `
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
5 y% @; M8 C/ C2 h. k
3 n! P( Z/ P5 o static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
5 v& ]: _4 e7 p& @6 `. c9 O {4 I- T) V0 o R0 C0 @6 o& w
D2CoordStrc mypst = { NULL };. K+ r8 p2 O& h
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
- i+ R; L% U% ~7 r9 Z4 E% n) d: J0 M; o
if (!mypst.nX)return FALSE;/ a! S0 }, a& O' L$ ^4 e+ }4 }7 A, @
( d# n. [" R1 P& N2 d PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);* K1 E* N) \) v* X# l
; y; m. W$ g; T) ]4 K* P; k1 n9 B
BYTE aPacket[13] = { 0x20,0 };
7 g! Y. ?) s0 M. F9 x7 ? ::memcpy(aPacket + 1, &dwItemID, 4);3 x6 r9 d w' G" ?
::memcpy(aPacket + 5, &mypst.nX, 4);5 u$ R& R. l7 A
::memcpy(aPacket + 9, &mypst.nY, 4);
- U7 j1 _3 W* V! k P8 ` //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);* J' r" S& j$ R+ a& e" z4 i7 [
D2Net::D2SendToServer(13, 0, aPacket);
# `, @2 [. j. g O4 l: u return TRUE;
7 K0 S$ M4 j$ k4 O; x+ f: l/ O' z+ f, w }: r# h |) y1 {3 X
+ o: t: q" t. l
static BOOL DropCursorItemToGround(); @2 X' ~/ u9 z: q( ]0 _
{
6 T; p" L9 d' ]/ r0 ] UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
7 u, g+ K+ e8 h3 L; B5 n% U! l% \ if (!phand)2 E: B7 ?; \# J4 j
return FALSE;
1 o: K6 B5 h; B, _) ` O9 a1 l6 `
; o4 c, u) K4 ~3 g" L4 r, g h1 [ PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
1 E6 W) a2 y2 C3 O, P3 k; V3 ~ p1 F. w3 z( u* {
BYTE aPacket[5] = { 0x17 };2 {$ J; A- I; v3 _. _
::memcpy(aPacket + 1, &phand->nItemNum, 4);: j( { G; `- M- H0 X/ f
D2Net::D2SendToServer(5, 0, aPacket);
0 b) t' r: p" g# w return TRUE;
1 r8 }6 I7 r* t/ r+ ^/ d6 z* f& V& T* Z& y$ A2 J1 Y
}+ f# X9 p, C# m! S4 M
! `* {- j& N+ W ^
static BOOL PickStorageItemToCursor(DWORD dwItemID)
# v. U2 Z( Q1 Y# Q; j% V {
- G4 z( ] b9 A9 |. r8 A PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);4 {. @) d4 U, \7 g: H7 g
" R9 y' |4 `% y. @7 w5 N
BYTE aPacket[5] = { 0 };
9 x* n. R. q# {; q X aPacket[0] = 0x19;
* W# @0 s6 ~; @4 S/ y ::memcpy(aPacket + 1, &dwItemID, 4); ~: m/ h+ d0 Q+ |
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);2 V7 J/ c# F) s/ Y
D2Net::D2SendToServer(5, 0, aPacket);
& l( }3 c% m6 f8 V return TRUE;8 K! Z1 c- |/ ]& l& I% [
}
6 |. D! N! C, I
9 ^: `" J U( _1 O static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)" c0 o2 P9 `# [6 r
{ ? Q1 l$ t5 ?' A! d4 ?
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);9 c! I! n) M5 J3 _& z. }$ c
BYTE aPacket[17] = { 0x1f,0 };( l) m% d& N1 L4 w& R3 r9 z
::memcpy(aPacket + 1, &ItemID1, 4);0 P7 E3 i2 H% q
::memcpy(aPacket + 5, &ItemID2, 4);
1 v- I5 C7 S# e //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
( m- O- X" H2 I. I- \6 s D2Net::D2SendToServer(17, 0, aPacket);
& D. f2 m8 \ G# n. s% Y return TRUE;
0 X' ]8 T6 b3 Y8 L. Q }
& _! ], H, o+ T! \$ F, X' T! @# s5 f: u# H0 a9 o
static BOOL Transmute()4 \7 k# @' A4 x' c1 v
{
1 B; q* n1 j, o' l if (!(*D2Client::ptPlayerClient))return FALSE;
* r! {4 `8 W; ]. }# U+ e6 I6 F7 M: f) u9 ~' O- r: x. H1 k
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))7 f0 W, O, f! Z- j* N* R( P
return FALSE;2 \8 b6 M% f- f j
2 K) n4 x" \1 r! g( T
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
/ D3 a; l% g3 p1 z8 D) _4 p BYTE aPacket[7] = { 0 };5 D/ D4 ^/ V$ C2 }
aPacket[0] = 0x4f;
, T7 h9 O' c" m& Y2 i, }3 r! z aPacket[1] = 0x18;
) T& B7 | E! x5 k! D. D0 p D2Net::D2SendToServer(7, 0, aPacket);
. X" N8 ^% N9 p* T1 x return TRUE;
" w- v& h" [4 N ?# p+ n }% p# |4 D2 y% D1 a Y! Z
};+ V3 r$ M4 x$ k9 u5 ^
6 w7 N( r1 ^& w1 S! R
|
|