|
|
转载. C. G; k' T3 {+ |3 u* q7 t% L7 W7 P5 w
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:$ q& b% @8 a3 _% t
D2Client:
4 z1 _+ \ w3 `1 |3 c9 a6FB20AE1为拦截输入框(用于获得命令)
/ k& t, e7 Z0 b" i) P( P8 u. S7 A6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
- K1 g5 Q5 f1 Y6 R* t6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发+ b8 ^4 y' @1 x' _2 d# M
6FAF4230为hackmap的loop点 我用的hackmap导出位置
% E* C9 `! ?4 |2 |+ G* h
+ _2 q: \, G8 i h. D& f& [2 ?* j
发包函数:$ r! V' u6 O. @( U# Y; c
class D2PKT_ITEM
/ C, l. N. x- }- k+ r, X1 u{
6 C3 n, C& J4 i6 p, `#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上6 g( f% n! {( \; U; ^8 i' d7 k
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
, T1 i, r9 q3 w: O1 |( A! [0 {$ k: r#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上# g3 Z# b! }; F
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
. n! X& p, ^7 o: v! j#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH) \9 ^- z9 k( M2 Z
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上8 }% B# @3 {& [; m* W
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏/ v3 S( J6 |! l/ ^
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
* M% a+ a8 S8 _6 ~#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
& P: z# z" x* n# \, K8 D7 A#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
* s1 L: Y& B5 p#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV* }& e: d3 W! ^$ z3 L
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
% r: H. b2 h c#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带' `0 d0 ?8 ^/ u/ p$ q9 K3 a
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上& b4 Y! T4 s" y/ R2 B8 Q+ X. F
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -7 a! x. i( o/ G2 g5 d; \; P$ E
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上4 K5 G1 }* P% v4 L% i7 V
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -- ^+ a; u7 S6 \* s" t$ e+ t& y
- f4 K8 z0 e, \3 f1 D
#define PacketItemMaxTick 150
& C& p8 }. ?" X#define PacketItemPickUpTick 20' i- G2 k* G4 E2 h H6 V
. L9 g* A7 R/ P, ]private:6 G; d, n* N5 l! @2 f
static DWORD _PKTItemTick;
, K) C7 K& N9 B5 E( D$ H- `/ K) ` static DWORD _PKTItemAction;
e# E& q' v* ], C3 Y5 m, _. t static DWORD _PKTItemID;
; _9 c6 B% b3 F% S9 m: t0 q0 \7 o ~ static BYTE _PKTPKTType;
& P" c) Y2 o7 X8 H& W* J [public:% y' _ ]0 |7 x/ B* G$ p; P! M
static DWORD PKTItemGetTick() { return _PKTItemTick; }8 _7 t: V( f6 l! O. \: C
1 y7 P9 e y; ~/ |" |2 m9 M static void PKTItemRelease() 6 @+ v6 X" [1 J- c0 R4 U- ]2 o- k& ]
{
8 l; a. u1 r, @- u% k9 ~ _PKTItemTick = 0;
% C: C; F% h# b" G _PKTItemAction = 0;4 m. S2 P9 u# A! k8 F" d9 s3 }
_PKTItemID = 0;% x8 d3 E5 y! ~/ h
_PKTPKTType = 0;0 x- r. |! D8 P7 b" k! B
}" d: W+ s9 D3 Y0 [
o1 H( d$ i! ?8 g2 t, h3 ^: g5 t- F
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) 1 \3 x" I$ [# n: M6 D/ x0 ^
{0 n6 r, ^5 E6 R) [! G0 N
_PKTPKTType = aPacket0;
1 T3 Y o {2 {0 g1 c; d5 O _PKTItemTick = tick;: P% q( T4 m6 `- o% i. y1 u6 P1 o
_PKTItemAction = ItemAction;+ ~0 M2 D% r4 n, J2 b+ M9 }
_PKTItemID = dwItemID;0 i' r. d9 D$ I7 R
}- k! t$ w, M6 Z) U1 i7 H$ Q9 M
5 q6 \& }5 B4 P* i+ Q static void PKTItemTellW8(DWORD tick)) v9 w& r' w5 e' p
{
% v0 O* ?$ c4 Q7 _" j6 B _PKTItemTick = tick;
3 j$ ^- e, Z2 k: |" {9 p }
5 @5 h x5 y$ g# `! {
6 u( p. K0 Y1 ~; V* E. v static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor" h& ? e! h, D+ D
{) Y |1 r5 H8 U8 ]
if (aLength >= 8)# |. v$ {8 F$ w$ C& e
{
/ U# r# B* u' Y8 h8 k DWORD dwItemId = 0;
5 L0 @- I7 a# s. |2 s; L, l memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
2 V% O' o& r1 u* C% G if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
. j" d# a1 A$ a+ X* q, } && _PKTItemAction == ITEM_ACTION_TO_STORAGE
% [: f) q4 q9 b; l7 r && _PKTPKTType == PACKET_NEWITEM
0 {5 @; n+ i/ a# U Y, L9 z. @% ^ )) }% v* t# y8 {+ E8 l
{
% A8 n/ R8 H) {1 a if (_PKTItemID == 0 && _PKTItemTick)
# [, _% T: D4 N6 s. ] {* K/ n+ D% k0 @# H/ Z
PKTItemRelease();3 g- U, m. v8 Y8 l% h
}# L! X- ~" k% Z P5 j
else if(_PKTItemID== dwItemId&& _PKTItemTick)
1 l8 {) S* `' r( I, B$ T {2 q5 n J0 E( v; S- {/ {# B
PKTItemRelease();, G8 u' ]; D {+ H# {1 @% l
}2 ^ o2 f/ D! w) K% Y
}
7 }4 b* b5 @1 J* }: Y( w) G , [$ v$ b$ P- d; c- ^) e
}# E, H. Z0 k& [! A ]* r
}' l+ c; b# Y) {1 @3 I t
4 [( D8 U4 i' b2 H static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored$ O' D- E$ ~7 o5 x+ k$ J, X
{: d, v+ g' ~+ ?$ w' R7 `" o
if (aLength >= 8)
& W) r8 _- c8 p+ P2 s9 O9 C {
: ]# u$ _/ k+ o/ u7 { DWORD dwItemId = 0;
2 p+ R3 P/ R$ H- _ memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
+ W: j* @2 Q/ l1 u if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE1 H3 S+ C" K! T0 r9 _: d9 {* J
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
) s2 I% R+ Z% z1 U6 y3 ~ && _PKTPKTType == PACKET_ITEMACTION
9 w/ B% t! r4 U6 u( _ )" Y+ h+ Y; N( ], J+ a" Z- r
{9 R) b1 Y$ u& O- Z, W; A2 s
if (dwItemId == 0 && _PKTItemTick)7 f6 `$ K3 k& i' `8 f
{/ c+ Q0 w/ t. [3 p' p
PKTItemRelease();# V0 R+ y3 a2 [, P$ r; |3 L4 h
}
$ t+ X0 P) U) I/ c3 ? else if (dwItemId == _PKTItemID && _PKTItemTick)3 ~- c; z+ n Y" Q& U8 N
{3 Q: d+ o |& Y/ G8 u
PKTItemRelease();
5 I3 o0 \$ j+ \& a0 r }
5 r( m d' |) X, |6 x }7 e: r8 c* H2 ?- c/ l
( Z1 _& S/ G! K% w9 P; r
}- a5 Y/ k% `4 V/ f& r
}! w, Z( |' q- r; s: J- }4 O
% S3 E% y1 _9 ]( D* C
static void PKTItemGameLoop(): y t1 d* z. F2 p3 G
{* X U5 q+ @6 x5 A
if (_PKTItemTick > 0)
. m1 R# B- R# N% F/ U- \ _PKTItemTick--;
) \! L4 j1 ~! x/ u else if (_PKTItemTick == 0)- X+ }3 O0 a0 V6 b) R8 p
PKTItemRelease();
* q3 D2 y+ G: h1 `0 H; n }/ J* L) |4 x9 i+ K- b5 k0 ?
& {& t9 |. U4 T8 M4 ~$ }+ W: k static BOOL PKTItemCando() % v) w I1 i X" M6 n
{: Y4 P: h( [' [6 s! M- k1 r z% a& z& L
if (_PKTItemTick == 0)return TRUE;
t8 U9 m0 U; ^1 |* Y return FALSE;& R4 j. c6 @& x$ h! U5 _
}$ p# X; j+ r& }
6 X7 p9 X' d' Y# l static BOOL BuyItem(DWORD ItemID, DWORD npcid) @3 I; M9 q2 O" z @
{( v& P; i H- n
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);: i! K1 S/ F1 c8 z* N( T% N
BYTE aPacket[17] = { 0 };
9 R4 ~2 P! s2 D- |; P% n$ ] aPacket[0] = 0x32;
: X4 O4 l3 ^+ f! [& Z ::memcpy(&aPacket[1], &npcid, 4);
8 s8 U! w" E2 n: j9 `$ U ::memcpy(&aPacket[5], &ItemID, 4);
! ]8 n6 u4 j' A' y" t* E2 b //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);4 K- J7 a8 ^+ I% }6 g
D2Net::D2SendToServer(17, 0, aPacket);) u0 t h1 v2 p! e: ?" `, E) B
return TRUE;
* U# {- R9 g3 p# i/ t& @+ m }2 b( Z7 `3 O* i0 X1 m. L
) B" k C8 H k9 d. V
static BOOL SellItem(DWORD ItemID, DWORD npcid)
% `. g& [- h. y {0 k" R$ A# E7 Y6 U5 ^
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
+ C$ w& e4 @4 z1 Y8 U% L% h0 U BYTE aPacket[17] = { 0 };
0 O# o0 g6 _& z. X) N- L: Q& Q aPacket[0] = 0x33;
4 J+ Z# |+ n& M0 ~6 f% z7 C ::memcpy(&aPacket[1], &npcid, 4);
/ v. M0 V2 A% @4 |+ y, Z ::memcpy(&aPacket[5], &ItemID, 4);
% S8 j4 f1 }) [0 j9 }0 A //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
2 I5 {% `; l9 ~9 i z3 X D2Net::D2SendToServer(17, 0, aPacket);* w; y6 R8 {' |3 V* g1 }7 \ Z) \
return TRUE;
' z Z- L" B& {1 M9 L2 c1 u }" T* z5 A: Y, `( ?1 P8 B
" B/ @; z; u3 S
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);# m: ^' I& [0 s. n S! {+ ]; @: n- r& u5 Z
I9 [5 |& _0 f9 b
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
( [+ [# O& N0 N! d: e) A+ b) t% s _$ H( [9 S6 p A
static BOOL OpenCube()
* @; M( r( B! j0 { {
" M0 r I; ~; K( F# Q8 q# n) g% m if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
) Q& k1 @! r1 t: x7 M4 l7 c/ V: @3 M% y* q0 u2 G# S
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);9 l! \' v$ N4 @, {
if (!pCube)
2 O F, ]' |# W8 b+ t9 m {
1 c* T. }# W# q8 d pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);. I1 x' Q. }- I: H S: V' C. ~$ K
if (!pCube)
, K2 C9 t' q+ w, I* P. p& g2 Y: r return FALSE;6 D. o& c5 j) |( P! e. m8 R$ A5 E
}
6 {3 U& i9 @$ H+ @ PKTItemTellW8(PacketItemMaxTick);2 O* G: c E- Q. m. k
* {5 y7 s( l8 c- h& J D2CoordStrc mypst = { NULL };
/ O3 X9 h% E+ y' K' @5 Q- K# e2 Q D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);* P9 c3 p. X# q- k7 M- l5 F
# @: b) u* K7 @2 N, y
BYTE aPacket[13] = { 0x20,0 };
, Q2 l( t0 A, D/ d ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
5 E8 ?' K! @/ v- b. } ::memcpy(aPacket + 5, &(mypst.nX), 4);. i4 \8 K: P9 u% p8 B0 a1 x
::memcpy(aPacket + 9, &(mypst.nY), 4);
' _$ p. T$ \5 G; X1 O# w) G D2Net::D2SendToServer(13, 0, aPacket);, t* ?9 v- O! K% C3 O& Z
return TRUE;) S1 }; I3 ^; U: c* L
}# I; B' A% O- F" @
. o7 b! P# P( E1 k7 N/ f0 T& N static BOOL ToInvxy(DWORD x, DWORD y)! Z# d6 c$ H' S* l# C5 C
{1 O7 p. {, ` o. U2 a: N; S* F M
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);& z7 Q0 X" W* k9 u
) A: \2 f6 c r+ f" R$ i- q
if (phand == NULL)
, F! c z+ [6 j2 R. \ return FALSE; r) U; H* G1 ?9 A& h+ i
9 C1 n' {5 `3 R5 i; u. @1 f, {& g PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
; U/ j; f9 T! N, ?7 H+ Z$ h( U$ L: o$ N& \/ [( q
BYTE aPacket[17] = { 0x18,0 };6 N4 f( W/ \+ n# {( t6 V3 P
::memcpy(aPacket + 1, &phand->nItemNum, 4); p, J: |& Q0 Q9 y5 u
::memcpy(aPacket + 5, &x, 4);
" O8 h8 \7 Z0 e5 a ::memcpy(aPacket + 9, &y, 4);
* ^0 g# V/ j/ A4 C( t7 j) x9 e D2Net::D2SendToServer(17, 0, aPacket);" a# d b& L; r' {
return TRUE;. O$ b4 |1 q5 D! v+ }4 `
}: I o- p' e0 p" ^, U3 C3 Q. h
. X7 f; z6 Y+ _1 Q% L% X) e static BOOL ToInvRandom(BOOL bBagFix = FALSE)
# g' ~- }3 C6 U. c2 i {3 B% Q# a0 r/ G, D6 {
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
! X9 _' g+ \( R. k! E/ I if (!phand)
" L. D. g! n3 y5 {# z7 A return FALSE;
! t: D" k: s- X( l' R8 T/ u int desx = 0;% p* Z2 \. z3 s7 o. N7 E1 p% \
int desy = 0;
, P# z0 l$ T, E- \9 V" } if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))4 Q; q+ k$ @$ z1 O( A; p8 }& h
{
: d% H5 o$ R0 f# r ToInvxy(desx, desy);, K; i- b( y8 H8 G& I% v; D# `8 {
return TRUE;; i7 x: S3 @/ {1 `1 F, |$ J/ r( f
}7 M% w! r( z2 c1 v! @ O
return FALSE;
5 }; Y) ~' r% j$ N! b/ U }
7 v: ?" B! u5 m
5 o2 K) R& n0 b7 i3 B static BOOL ToCube()1 U _# l: Q4 Z" O3 ^; D
{
: ^8 A; _" k6 Y# L9 d6 C5 B% i' L if (!(*D2Client::ptPlayerClient))return FALSE;
+ B- }) L6 g7 z$ V, n+ j
9 u0 E0 {3 @, ?' v) C0 u UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);, I# |- \9 }- b0 J; y' n6 x' b8 k
if (!phand)return FALSE;
( \6 I; ?" Q7 Q- _7 I6 s1 `7 N X( y7 t+ |9 S$ j# I
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
! A; D) U0 B5 u' _' m! _" a; N B if (!pCube)
. S. }" S" Y% }! X$ J: |' I {% {0 V; c8 ~- A; h
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块0 k" P1 s" v% a' N
if (!pCube || !pCube->nItemNum)
7 ^1 l0 L; R; ]9 T$ s+ y return FALSE;
4 Z- w! F9 c" P3 x) ^! G. y' N4 d( U' e }
3 x$ Q8 ?/ L5 u/ w3 ]# y4 m
" c* b7 ]# @9 f1 W5 }( I if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))& U0 Y$ n: Q! m/ @
return FALSE;9 v9 E* G" G2 f( r* Z
, l1 A# y; b I
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);) z$ `7 o/ y& y$ m9 i
7 b* h" W4 Q3 s7 B7 Z: }( Z BYTE aPacket[9] = { 0x2A,0 };
: i: s2 E/ F* ]) W$ ^ ::memcpy(aPacket + 1, &phand->nItemNum, 4);
3 |' j" g* A2 ?8 U- z) d9 i ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
+ F/ k* h( r; e& A$ x& q' i6 F# _* J D2Net::D2SendToServer(9, 0, aPacket);
4 x R; m" A, k' m2 r- x# g6 H# A return TRUE;& [2 @1 i6 y4 t: e# ^( b0 ]- r
0 `; g. T8 E3 Y3 N- A% q" \
}7 ] ]2 f3 W( B- l: E2 c
u9 F7 R/ j$ `! L; x static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);7 _: n2 t& v" R8 u6 E7 D P( \
`/ O& _5 i- [9 p9 H/ i; C
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存& \+ ^7 G' {0 V* c) b) ]+ s9 l
{
: P: d7 }3 l9 @3 O9 w ^ D2CoordStrc mypst = { NULL };1 I/ X) G# d" n8 ]' A+ l9 k
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
5 R1 e! o% R) Y6 E2 ]2 r7 t9 @0 I7 A" y- f! U/ u! ?, J7 E
if (!mypst.nX)return FALSE;/ H1 V6 U9 d0 ~; z
, {: b4 I' z: Y4 X( ^ PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);* _+ d+ J# H# U6 ^3 ]
$ a- r5 s2 _8 J: [& g
BYTE aPacket[13] = { 0x20,0 };
# o, m6 `" Z! h ::memcpy(aPacket + 1, &dwItemID, 4);+ |0 y, u" w: V( z- X0 c$ k4 o
::memcpy(aPacket + 5, &mypst.nX, 4);. m) p0 r3 m" u, L' {) d( l( _
::memcpy(aPacket + 9, &mypst.nY, 4);7 V. K; R3 |$ n! ?, t; B. d
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);4 H* p" x0 C b# \
D2Net::D2SendToServer(13, 0, aPacket);& N* `) w. \# q( u
return TRUE;5 I: _9 f+ C) e( }9 v, s: c9 l
}
* U- s" R8 @. ]2 D+ |
; X: `* P8 u6 p static BOOL DropCursorItemToGround()
+ u$ r8 ~/ r* s' W: c- p {
5 H9 A8 U8 B5 |" q UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
3 _6 t `; Q. V" `" R" V% c if (!phand)
) A& x: }7 r/ T: }/ E* { return FALSE;
! B8 @, U2 T- x8 \6 J) ~
) h8 p4 o+ C. ^% X: _ PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
3 a6 M7 Q1 e, N1 R
( A# x1 L8 l' P8 l* o. q BYTE aPacket[5] = { 0x17 };
' a( U0 v! a+ _2 x& i9 {& d. }0 ` ::memcpy(aPacket + 1, &phand->nItemNum, 4);
: l7 j9 z, y* ]! r8 C5 G& [ D2Net::D2SendToServer(5, 0, aPacket);4 Z5 w" t+ F$ G8 }7 p( r
return TRUE;
+ V6 |6 v! O9 ?3 N$ K5 ?5 n6 Z& d6 C4 M! b6 p6 u/ z4 S1 I; _7 E
}% R- H4 N. o1 E) O
% P. C6 d7 c( P" }- A static BOOL PickStorageItemToCursor(DWORD dwItemID)
/ \, L# A5 f' j {+ `1 P3 T* r/ K
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);" J2 x5 E9 X f% z, w
. l9 J( F; G& t
BYTE aPacket[5] = { 0 };
8 x: W0 t' F* D! Q2 {& ? aPacket[0] = 0x19;' F& Z1 q& y9 V4 p* J
::memcpy(aPacket + 1, &dwItemID, 4);. W; ?) b" |6 c* z8 E# C( |
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
# |1 J/ }- i: h! @& j y' d0 \ D2Net::D2SendToServer(5, 0, aPacket);
@& c6 ?. M" z return TRUE;. C! y% x' X' w( d$ C
}
, I8 ]# T$ O* o$ y: t# Y/ ]- g( x8 J
3 U: @/ A8 s$ ~/ i4 k static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
0 q9 [9 ]" M: |4 q1 I3 c {
4 K, |! x4 p* p4 h! [ PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
& Z! ~3 Q4 J' r# m/ e* e- ~3 K BYTE aPacket[17] = { 0x1f,0 };5 ~2 a5 F0 X. E3 o5 m
::memcpy(aPacket + 1, &ItemID1, 4);
: d& x% |" ~" h' M% v ::memcpy(aPacket + 5, &ItemID2, 4);
7 c0 K) P8 u( F! M! d( H //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
7 Q4 S; t x6 c q% T D2Net::D2SendToServer(17, 0, aPacket);
3 u+ t# y3 n$ H; U. x, E return TRUE;' O4 ~/ y1 g: P: u
}
) t: A$ P$ Q5 S5 Y* [: t' r% Q! i, X6 }4 g$ O8 Y5 R6 v) g
static BOOL Transmute()$ z: ]& f9 {8 f( K9 }
{
, J2 Q/ E3 f6 i3 i4 A if (!(*D2Client::ptPlayerClient))return FALSE;
& H" } h) f& Y
, c- p8 C$ y4 w" h' w& }, {+ N if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))# A+ X6 q( I( A! R! \9 S/ O
return FALSE;
/ [' o8 M1 K' i. [. U6 d0 h; b$ |2 \8 j- M* j
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);+ t0 i3 G2 |1 v! s
BYTE aPacket[7] = { 0 };
) [1 j' v" ^! O% p1 L$ A aPacket[0] = 0x4f;, r$ u* Y+ j j) k% x
aPacket[1] = 0x18;
, S) {' b7 u; v D2Net::D2SendToServer(7, 0, aPacket);
' r5 w: ~8 E6 H/ R return TRUE;
' L% N3 P- [8 L; c. d- d }
" R- O; S: U% Z/ T9 Z};. C. p% ]* L+ C# _) ~. R! h
( l6 s- Y, f7 |. c
|
|