|
|
转载/ L" R7 d" B* U6 O1 v4 w; N
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:. W9 V; z; y- [' ?; m c, Y2 I
D2Client:
9 u" T0 K3 u% _ d! `7 }8 y6FB20AE1为拦截输入框(用于获得命令)) D$ ^* f9 z* s" \7 S
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
W& V0 G9 }* M$ z6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
V6 D# H8 _% i" x2 C6FAF4230为hackmap的loop点 我用的hackmap导出位置* O7 t; ]- Y6 R+ D. L9 ^8 `
" d4 C/ H, U0 D5 r
5 z5 ?# h" s$ h- b发包函数:- V! l. J H- H- O3 U9 R+ s
class D2PKT_ITEM6 \2 s# l/ g2 E5 P( K
{) |* [/ \2 O4 j0 |$ ]
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
5 j8 m" Y- f, a2 k- p/ S#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多: |9 B$ @& k6 k0 P, P
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上1 {6 I, A. \: e0 o
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上! r3 _; c: e1 M0 C# p }
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH1 s2 n+ V. d' X& j
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上- h* L, P8 o5 D }9 J4 q
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
' z C; K. X5 ]7 u1 g* ~( z#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
9 o: {5 \/ R* P0 C% A7 T+ j3 ?5 f#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
2 a M: Z! P, h: P$ i2 ^( V. A#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店* b# t9 `2 q4 {/ g% S: _
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV. B* |" l; r4 r0 T, A P3 m
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 ' C& J: F# i7 @& a4 D
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带4 Y- e6 s1 ]8 Z8 _/ @. P
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上: M4 E" C5 \+ h$ Q' A& W
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
0 ^4 C% q$ g, s) @4 E#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上( q: N/ ~- {2 f& r2 H' K3 d# f: N" L
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
% n, T2 t, ] W0 L. ^. t# c& `5 I4 k4 m5 v
#define PacketItemMaxTick 1509 N) m' M- A' W. u5 G/ B" R
#define PacketItemPickUpTick 20
5 ]4 y& b: O- ]4 K; N2 K9 Z2 q6 t0 r5 b8 F! @
private:# E/ w7 B7 R$ O9 j
static DWORD _PKTItemTick;
- l! F {$ ~* A1 A static DWORD _PKTItemAction;
, m- E: U5 p* K! T7 I! x static DWORD _PKTItemID;- B# R1 `9 ~! A1 `+ d; l6 q4 ~. U% |9 ]
static BYTE _PKTPKTType;. ?- Q: s( H# U2 `, b/ h* d M# T3 q
public:
4 A+ j: ]1 P& w7 { static DWORD PKTItemGetTick() { return _PKTItemTick; }& j( M t! s6 E, K6 ?. x
) w: Q! l$ n3 X/ v- K( ^1 B
static void PKTItemRelease() 8 T8 e. H% e& N
{' Y! K1 i; k, H9 V0 n9 j3 U
_PKTItemTick = 0;; ]) o% p" D3 U9 D4 q$ [
_PKTItemAction = 0;/ N0 ? H% G- v o+ {
_PKTItemID = 0;
- I# r9 x" `+ E9 ? _PKTPKTType = 0;
" @- \% ]- E7 Q- j- m( p }2 W% c% }8 s: z8 K* g9 f6 U9 j8 h
8 |) f" a& R' M: K, v3 g- M4 d
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
' m& D9 C* e- k' p% n9 P {" m. Z8 \/ ]1 D
_PKTPKTType = aPacket0; Z* `! V7 e& U/ }! }
_PKTItemTick = tick;* y, ]# p% d' Q- _- g3 B: L. p
_PKTItemAction = ItemAction;
1 m E$ Y* E1 X2 V _PKTItemID = dwItemID;
# o# y1 J% l8 [- C }
+ ~( w: W% t/ g- p& }
2 z7 Y; z' C0 n' M static void PKTItemTellW8(DWORD tick)% d0 M& ~1 [0 }. X/ P0 z( j
{& y) V+ o+ W& c0 ?- N! O3 J
_PKTItemTick = tick;; K7 `) Q$ b/ s+ L5 C' F B
}' [6 X: I- l( _0 Q/ J+ \& r
$ {1 R9 R7 n( C9 }; w& u. K- L) W/ M static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
$ C' h) r5 L: u) i' L$ P, K {
6 j5 E# m2 x9 v$ h; } if (aLength >= 8)
$ H/ C" s, O$ I {
1 s& S8 e$ I+ n) _( p* h DWORD dwItemId = 0;$ U, ?7 E, X* b K
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));3 I3 i% w6 c- E2 B
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE# K* N8 ~0 W" S& S, o
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
) t ]- l ~$ H4 Z" }7 P8 |& F. @ && _PKTPKTType == PACKET_NEWITEM
) g v0 }/ F/ J4 |. Z. i ), d. `( h: Q" c, l! }
{
' \/ v6 U" i c; y4 Q( F0 c if (_PKTItemID == 0 && _PKTItemTick)
0 G; f2 \: D% A0 R7 |. P% L {
2 U: w- \( Y U& u8 l# M PKTItemRelease();
& x7 Z# J6 q1 M }
! }' t& A( i1 Y! Y1 l( C3 d# G else if(_PKTItemID== dwItemId&& _PKTItemTick)
. [& l9 s% a; g! R- r {
7 A: H3 _8 K, Z PKTItemRelease();
" ^2 c( R' `9 R; ^ }/ O+ p) |/ H. o; d( q! `
}- J6 @; S9 L& j( {- l
) ]: r t- p* s }5 W( S' U7 {3 o! c6 m
}
6 e+ Y r+ m' v. f$ e r: v( H8 P/ \- j- j0 w; g! ^1 N
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
. n$ J8 w a8 W( X, _4 v {
$ o3 S- c* c7 Y. C5 `8 ] if (aLength >= 8)
! I" Z o6 n8 S+ x$ B {
" z% L$ x1 ~! s DWORD dwItemId = 0;
* a% I( r/ D A/ k5 S- f J c$ s+ u memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));9 E3 P/ m6 {* ?( F" G5 w+ a) k
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
( F6 _ M$ I/ e" J( F2 V# H2 m5 t0 Z3 n f && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
3 z9 }0 I/ r$ b7 ~0 ]5 U && _PKTPKTType == PACKET_ITEMACTION, c5 j6 t7 ~5 X5 y: e6 @
)$ L. ~9 L' ~3 v
{
- ]" d1 M- B# S) J& S, v6 P, j r( ^* r if (dwItemId == 0 && _PKTItemTick)
/ ~7 O- q) ?- ~ {3 D' Y! E% O5 E- Q9 H
PKTItemRelease();4 U5 w, M6 `8 d0 c4 p) N
}) |; ^7 j0 t+ Y z; }% k, h
else if (dwItemId == _PKTItemID && _PKTItemTick)
4 o. z9 ~$ X: H6 d/ J" y {
- e% E' v7 K. }) X8 U6 V PKTItemRelease();. H2 n' J+ F* [# B) s8 ~0 h
}5 a' K3 @) U8 v8 `- z# Z& @' ?4 Z
}: a8 p" y1 K" R! u0 {) X( f; r$ s
1 K" ]* B: I" j r) ~: o& H
}2 r# Y4 z3 J7 O( y5 f
}
. Y* f9 t+ q0 V) c& C
: A3 L3 x0 M% O6 P static void PKTItemGameLoop()
# w5 e5 _* M8 |8 c5 c {
) T2 F+ W G8 R2 W8 g if (_PKTItemTick > 0)
, _& ?1 h% i- {1 {0 G _PKTItemTick--;
$ m. w2 C3 q! [9 b2 j: k4 Q else if (_PKTItemTick == 0)- W" v/ e) g# u( T% a2 B
PKTItemRelease();
- V- d# p3 g7 A% X. w9 _3 c* \ }4 j) E5 D: [4 Z0 U' D1 N
a$ O. F; @4 N# ~* ?7 W" |# } static BOOL PKTItemCando()
# L2 p- V- R7 V$ {! g {. m4 {; p2 g6 n9 k3 t
if (_PKTItemTick == 0)return TRUE;9 P' p0 g" [- Z+ A' I
return FALSE;
% ]. N: I5 E B4 E# v }% k# Y6 Q }+ q2 ^$ f5 D" } u
6 R v- z( i6 L* p static BOOL BuyItem(DWORD ItemID, DWORD npcid)
( ~; l. b3 P8 z% o" k# p {: a/ z8 [) c4 g* \
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);8 J+ S0 B' O4 d( V- i: X
BYTE aPacket[17] = { 0 };; G0 Q, B! K# L/ |* S9 s
aPacket[0] = 0x32;
0 j! N$ p( C6 l ::memcpy(&aPacket[1], &npcid, 4);
& ~- o% J7 k; z1 \. i) z ::memcpy(&aPacket[5], &ItemID, 4);8 [( x% F$ y% I8 r
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
& e2 ?# v. A0 h, P4 S" O D2Net::D2SendToServer(17, 0, aPacket);
8 [4 x3 C9 s& j; L2 f0 } return TRUE;
+ Z8 k7 L' p2 y6 h7 f }
& F3 l7 v/ |' z* P O ~) A& W; x: o4 @) I* G3 x0 z; w+ J6 y
static BOOL SellItem(DWORD ItemID, DWORD npcid)
, V2 m4 a5 b/ r8 g0 D {. m6 I1 x4 Z1 J2 k: a0 M
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
7 \$ q O; F1 { BYTE aPacket[17] = { 0 };
. w/ M. r& j: `! O! d aPacket[0] = 0x33;6 ~1 u3 s+ c7 o" z# M9 P& V
::memcpy(&aPacket[1], &npcid, 4);
. L7 m0 V. t4 [: d) e ::memcpy(&aPacket[5], &ItemID, 4);, \) }: h2 g6 u* c
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);8 f F6 s% X# u" c* u B0 R
D2Net::D2SendToServer(17, 0, aPacket);
' W3 Q0 o9 g1 K8 L$ g7 q& M- @, R2 F return TRUE;1 q! o" }& G$ ]! l \, ^% `
}4 f3 B& U" h: _
3 i8 E- N4 _5 L9 ^5 o
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);* R/ C* M6 J9 A
, {; M2 W! P8 p& y2 a7 a) I$ m
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);, ]1 a2 S, i/ ?2 p9 m( i
+ k1 @( P: [/ R E7 t
static BOOL OpenCube(): i! x# y; m1 @8 M
{
& e; R* E3 x X' D1 v' ^ if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
0 P! x( H2 Y3 G! V' ]6 T1 ^2 r" ~7 E1 | b* \0 s: U' ^
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);/ H; O1 g9 x" p: V# P! x, ^
if (!pCube)
8 e1 h& N: Z6 }& R {5 k1 x- H$ [! u: ]0 n9 s. w1 J4 v% r
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
) r' t' K. D& |5 g4 [& x4 J' p( A if (!pCube)
, C( l3 P7 z3 O, R9 d. i7 b- A) w return FALSE; K& I3 e) e, W/ j/ {3 g9 @( w1 ~) R
}) ^; R' p- x5 m3 W* `
PKTItemTellW8(PacketItemMaxTick);! H, \$ L& r" E2 o- Q
A. ~$ Y+ e6 q/ z1 n
D2CoordStrc mypst = { NULL };
- D( f: _1 U! Y! P* j D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
. \' k# _9 s0 h6 R& L( T) a" q v5 z" U% x! m& {6 l, f' }
BYTE aPacket[13] = { 0x20,0 };! w* K- Y6 y) v% u
::memcpy(aPacket + 1, &pCube->nItemNum, 4);; @7 u7 d. L1 u0 ^
::memcpy(aPacket + 5, &(mypst.nX), 4);
9 p# Y3 F% Z, {+ j ::memcpy(aPacket + 9, &(mypst.nY), 4);
$ w0 N& n" ] ]8 A+ N/ [ D2Net::D2SendToServer(13, 0, aPacket);1 a& ` c8 ]: u* f u! |' F b
return TRUE;
- g: _3 w) T$ f* W! R3 f }
5 E* ]& A0 h$ Z w. I% ]( M( F# P7 Q/ Z! g
static BOOL ToInvxy(DWORD x, DWORD y)7 i9 {2 e2 D M4 O8 Y* U0 _
{' `3 Q6 O0 e; {( a0 L) }
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);) n9 E8 @1 u* l
- |4 z% W. ~1 J4 _
if (phand == NULL)
; K) J1 W. i& p+ c: r, l2 @ return FALSE;
- G( ~% n* C; y/ Z4 ~' I+ d0 U7 @# I, i- |7 ?
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
$ Y5 l7 k7 v% ^1 ]# `1 F# `) |' V3 K: T" T$ V$ Y- W, |
BYTE aPacket[17] = { 0x18,0 };1 Z$ m* Z N' b
::memcpy(aPacket + 1, &phand->nItemNum, 4);. ^& x3 x* [' {2 Y! u$ P
::memcpy(aPacket + 5, &x, 4);
1 o# G* A( m& }! J7 }5 r ::memcpy(aPacket + 9, &y, 4);3 b! C: T8 F; i0 E. X
D2Net::D2SendToServer(17, 0, aPacket);, ^7 d. u/ O' e& q3 J$ ^( k
return TRUE;
) T8 ? |2 K9 [/ m. P( o }
# \+ v. r- T G7 m
5 j8 u, d+ W9 W" P o$ P static BOOL ToInvRandom(BOOL bBagFix = FALSE)
- z: ?7 D d" ?& j {, h. {+ U* b# C% t2 f
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
* F( p# G f& V6 w& { if (!phand)+ J, T* L. D8 Q. q6 n8 J0 E- {8 J
return FALSE;
4 d8 h7 f# R; }8 ]$ g/ R* [" M7 a int desx = 0;0 M5 K6 Z! |% m2 ]$ q
int desy = 0;
5 J- _3 @- i: A/ H' e if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
' \' K2 E: ?% D9 j! F) R4 x {7 n. ^7 t0 P# C3 {( a8 i0 X% w$ X
ToInvxy(desx, desy);; d4 q! a' h1 A
return TRUE; @$ j/ M4 y8 N6 [2 `7 O- Z. u4 u
}6 L+ `6 J$ T. \, p! ^5 v/ s( @, p
return FALSE;
l$ [7 ^& U& { }
+ W+ x w3 s4 b! F* I$ ^7 S# f! V
/ a; D& o' m% Q, G v static BOOL ToCube()3 f8 W' Q- R' Q$ y( |# D
{
6 @4 d. U9 B5 [% d6 H1 e. |, a if (!(*D2Client::ptPlayerClient))return FALSE;
3 E0 v6 w4 X6 ?' ^/ c) Y
) }% M6 \3 y1 ^/ A8 Z% Y+ I UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
`3 V+ J+ _/ \' s if (!phand)return FALSE;
0 D1 K, ^% o9 H/ c/ G) {. P
9 `2 i. Y/ M+ h& k# ?+ y UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块! {# {- l1 c5 N- s1 a& i3 E& f0 p
if (!pCube)& n, x9 E1 X+ i B* Q; y5 ^ K( y
{
( f( e* G" f$ ] pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块' [5 ^! J' k! R
if (!pCube || !pCube->nItemNum)3 p I, F: q& b0 c$ N
return FALSE;1 K4 o6 k. X! A
}
- K5 x5 l4 n) w, Y* h3 J1 u6 x
4 A* w- ~& U: ]+ | n0 ~ if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))6 m/ m3 O0 U6 {! y
return FALSE;
. ?, j, o. `5 K C
4 }. J; _& o5 V/ l! n( I5 q PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
- ]* N8 f6 A0 g! r/ g4 w7 v( M R+ j9 [3 _/ }1 z! V
BYTE aPacket[9] = { 0x2A,0 };
' d8 `3 b n4 _+ r ::memcpy(aPacket + 1, &phand->nItemNum, 4);. Q1 G, x" V. ^: h! s8 b% h
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
: ^ ~( x g$ k+ b. \ D2Net::D2SendToServer(9, 0, aPacket);4 `6 Z5 c$ A8 j4 V0 P) b0 l& K
return TRUE;; [ B# ]) m. ]* X& n+ ~/ Y
/ {" |8 n2 K5 W3 Z! g3 s; Z }
7 z2 U6 m: c$ B" O" f- X6 f' }7 K
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);9 D" R4 `: P b0 N9 N) Y
; J" ?3 Z1 z7 Q# ]& d2 e3 `' s, ?
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
5 i- q1 E4 x1 J4 d {5 q7 O/ c- } X5 T& j! u* k2 B
D2CoordStrc mypst = { NULL };7 Q0 O X: N) R2 U i, h1 I6 h
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
0 @+ t" {% u& W* r. D ^& v2 q1 v9 K9 D+ k
if (!mypst.nX)return FALSE;
" q5 k8 q. q2 u; Z2 m" B r* Q 8 b X, t7 ?. [( j
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);0 d6 E' e" J; _9 f2 @
7 j' f( s/ @. ^$ I R* h BYTE aPacket[13] = { 0x20,0 };- _) h( y2 V3 J- T/ i- [1 R
::memcpy(aPacket + 1, &dwItemID, 4);
. J, c+ \; \( u8 j/ O4 { ::memcpy(aPacket + 5, &mypst.nX, 4);
4 Z$ z5 s# S- R ::memcpy(aPacket + 9, &mypst.nY, 4); T& ?& p, r! m& d$ `0 }
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
) }5 R4 m: i2 l7 v h2 @3 E/ E D2Net::D2SendToServer(13, 0, aPacket);; \/ t) n$ n4 B }/ A
return TRUE;4 d" x$ B) S5 {4 Q9 p! }9 \" Q
}9 \; L7 A9 M4 Y. M: R6 q# ~9 l
]6 S* y& v; t3 H4 l$ ^
static BOOL DropCursorItemToGround()
6 w. F. c% T. F+ N' v$ Z* Z {! \4 @, j& ~( X
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);* B8 h; D; b, E3 I2 i
if (!phand)
+ |- U3 b# @1 _& n8 |1 F' a% u6 K return FALSE;, _+ s( \# b4 \( X0 q# |
# w5 `6 a* p# O" h' M
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
& b4 }, j6 p; v# B6 I0 C. r! E5 \2 l8 N
BYTE aPacket[5] = { 0x17 };* r$ [% k D% B
::memcpy(aPacket + 1, &phand->nItemNum, 4);
0 [: [/ A2 N6 `! L8 H- _& `0 \ D2Net::D2SendToServer(5, 0, aPacket);
6 t! q/ h: |+ B( @8 O2 d8 c+ P* {# P return TRUE;- S9 d3 L% ^5 B8 @5 h6 S6 X
+ | D, u5 C! T& h4 e/ E! N
}
( P+ m4 L7 x$ _; E( P2 f7 A0 p* n& W3 s3 o* ^4 I+ A6 s# d
static BOOL PickStorageItemToCursor(DWORD dwItemID)% b3 B& }7 p( K3 h* ]" g
{
C( P- K( S# _ PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);' v$ P! p! @& R0 s
& k$ Y" N; A8 T5 {2 c5 r# I BYTE aPacket[5] = { 0 };+ k$ l; w: H7 t1 S/ s; v
aPacket[0] = 0x19;: p2 j2 ~; P6 v+ O
::memcpy(aPacket + 1, &dwItemID, 4);
# T4 i' I% k O# d+ `& j' I# G. G- X //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);/ Z" x$ Z4 g3 w
D2Net::D2SendToServer(5, 0, aPacket);5 M9 _$ e; P0 `* D+ T; R- G9 C! s
return TRUE;
# H/ w$ D6 o2 [- \$ u0 v1 R }
+ [# `# r1 y/ V* t
' B9 g0 |, v/ L static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
) i, l5 \2 f+ s" o, z {
+ t- a- c, L8 a) `+ C PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
# G* }$ w6 ]5 Z* |6 ]& h8 T- A BYTE aPacket[17] = { 0x1f,0 };
# g1 i" a; v$ b0 a& b; ~8 F ::memcpy(aPacket + 1, &ItemID1, 4);
* y b5 K+ H2 s; p( x4 } ::memcpy(aPacket + 5, &ItemID2, 4);; g; [% x: i. l4 z% I+ [. H
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
) T8 M8 S$ v0 Q' ] D2Net::D2SendToServer(17, 0, aPacket);' s% n" ~ ?/ n9 g# i N
return TRUE;
* m( U$ J w6 u6 G% `. s8 t3 B }' q0 Q. E0 E3 S1 S0 k# M0 o
, L0 Z& A) `$ t! N0 s static BOOL Transmute(): S2 u6 k8 B$ |5 _6 `! ~6 V
{
: p; Y% T, Y# C. k if (!(*D2Client::ptPlayerClient))return FALSE;( o6 ~! C) Z/ [8 l- v0 g
: b4 a3 _1 R" L4 j if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))! K2 |' Z7 i) D/ x
return FALSE;( }4 f% f) G4 c4 ?0 @3 s
3 E9 Z s" F) c; Y# p+ m PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);, I$ d; F U% W4 ?& M
BYTE aPacket[7] = { 0 };% w! x5 h ]# Y6 n R+ O2 J
aPacket[0] = 0x4f;+ h& Z$ s; k) S* Q$ n {% t
aPacket[1] = 0x18;8 } G0 s6 T. m: f' x) z" z+ I s* p
D2Net::D2SendToServer(7, 0, aPacket);: P9 D, ], s7 [
return TRUE;& V/ `' n. _& h
}
; e, |: g9 x0 y1 O( k- j! j$ q};, N5 [4 Y6 t0 y/ H- S/ t) r
9 v8 G- d8 ]) f3 }8 u7 i' y |
|