|
|
转载- C" @, U4 B$ d6 z4 X
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:0 \. s. R. o( K; ?- k& f
D2Client:
) J, ^+ K; t4 @4 j, h# T! ~& ?/ f6FB20AE1为拦截输入框(用于获得命令)' @9 U7 C' s4 Q. l1 s0 V1 g
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
( k; L1 l5 v2 H! C3 @. ^: ~3 w6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
1 o' O5 J- b7 |9 K# O* ^6FAF4230为hackmap的loop点 我用的hackmap导出位置" l6 b0 \$ Z! e: c5 }# v
) A: i* }8 K0 \
5 c1 `1 I! r4 q' A( H发包函数:
6 o2 A3 L5 R5 o4 k2 z+ N7 W9 _class D2PKT_ITEM
9 V2 ^2 Z w0 b0 M2 d) q) e{( E3 }/ a. _0 x* X% v
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
% \- v& ]0 C& g#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多3 S) Y% e w" q" F
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上2 a* W3 Z6 L: x1 @& F
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上/ H; J7 f! }1 {
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH' |; C2 }% k+ g M* d- W$ Z
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上6 }$ f) u4 q. w% i3 A
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏, I7 z7 }+ u. g4 g, g/ g" E
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上! c1 z% B- R5 w! i8 ]+ i
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
2 P. A d% `0 p2 C#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
) t+ a2 y3 u- i) P$ y$ \0 `#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
+ _" S0 i5 q) A3 c$ [3 s l- L#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
E- ]1 V' U$ p D#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带# u0 l% ^# q/ j$ X6 a" q: a
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上$ a/ D; O0 N$ G. C U5 r
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
. F' T: {' |* ^! |1 I6 g8 F#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上+ ~6 X7 Z6 M$ K1 C' k! ]
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -( @9 i3 M% A9 I5 @, p9 M) P, F9 G
5 w& L8 g6 ]' D: u
#define PacketItemMaxTick 150
- [2 H4 F, W3 J* B s. B o J5 D) T4 e#define PacketItemPickUpTick 20
: @/ x! a: r% o, [6 B( u5 d* a2 E" }8 Z; p# V% K3 K8 z( I
private:
8 p; m9 O; p# K5 ? W$ Q3 `* G& R static DWORD _PKTItemTick;0 M: _. T# f, M, {5 S# e
static DWORD _PKTItemAction;
: m9 U7 V$ k. c. [, b static DWORD _PKTItemID;
4 U& }) I$ [/ E static BYTE _PKTPKTType;: n" P; H* H0 b9 l/ T4 H$ ^
public:
; e4 |! f- f2 L6 I% T7 B static DWORD PKTItemGetTick() { return _PKTItemTick; }" V# ]' ?: f: O/ T* B) p5 b
! p, E' x' m U8 Q' ^
static void PKTItemRelease()
5 `, ^6 \5 x a l0 C7 V0 y1 G( U {
( @4 _8 W4 f& r) G( P4 g; o; ?* i$ a _PKTItemTick = 0;3 \; Z- q) M& r4 U" [# U, ^
_PKTItemAction = 0;, b3 D: a" X. F& G9 d
_PKTItemID = 0;
0 z& n) Q9 x$ I7 ?- A, Y m _PKTPKTType = 0;
1 O. D$ I: D: ^ }
- g" t: i d z/ G2 K9 V2 M/ W) `4 g8 {$ X$ `
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) 0 }; T' b% x/ W d# q& A2 ~
{6 J* j9 [( c5 R
_PKTPKTType = aPacket0;/ g7 q' f( L q% y0 ?2 N2 x
_PKTItemTick = tick;0 v& F9 @" z8 O2 A, @! f
_PKTItemAction = ItemAction;
9 k, p0 X! U% l+ l# A% a7 I I- \ _PKTItemID = dwItemID;
5 U* w. b& T P+ o# H4 B }
$ L; R- V' h- u r$ d: R- o+ i( u$ L: q0 C+ I) r; q
static void PKTItemTellW8(DWORD tick)' |5 ~* r3 K3 x1 t! e. D; b
{
6 [0 w+ M2 \. x2 X, b& l Z _PKTItemTick = tick;
0 ?2 K. Z ]$ x9 `- J. m* S7 B }2 f0 W: l: C; F$ V; r
5 f! [6 ~6 a$ D( F* f$ L* _& r static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
4 e# X6 n# a3 t9 r {/ v* d' ?' B! j" a# ^2 H: ~0 x
if (aLength >= 8)
6 {" C, N3 A2 [" t g {
1 o; v# t5 |1 L" Q! e+ J8 e DWORD dwItemId = 0;+ ]: @ P) P3 ~
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
2 B- v' P% w% G$ w if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE: @0 T5 ~$ K6 m" v
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
9 A- d% X5 Z2 C3 K && _PKTPKTType == PACKET_NEWITEM
' f9 N' t( V4 ~. W )8 b) L7 I, a E0 m @! b
{+ l, s+ p0 e: w, k) w+ o( N
if (_PKTItemID == 0 && _PKTItemTick)8 _ K. |* D% t) j
{
7 x" U' A1 ?4 S7 n6 F! p3 q( k6 p PKTItemRelease();
2 z. e1 P+ P& q1 ?; F }3 k* h7 L9 w; n
else if(_PKTItemID== dwItemId&& _PKTItemTick)
" V# S( Y b/ u" k0 L5 }/ W' l { `; m( a% s3 p& y
PKTItemRelease();. J _; G+ H$ G3 S. C: `6 |. F
}
0 k* H# K8 Z) j4 E8 e7 Z! `& r }
, `. T0 r0 s" K6 K8 h / \1 P ^3 R* L7 {
}. ~; X) f1 k) ]; }
}6 C" D& v% ~7 g1 ^, ^& }9 N# u4 o
6 T. s$ U; @+ t/ f1 X0 S) o
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
& ~' u# V% c2 p! k7 a) K/ @ {( L6 Q0 b) u3 f. B$ V! i
if (aLength >= 8)6 Z- S H6 V& Y5 ^* O
{
/ f. o8 U3 S% G: a4 P3 B% l DWORD dwItemId = 0;9 s8 _" t9 P! M# I
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));) j/ e. M1 B/ ]0 _8 z. {0 N! a: P
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE5 [. m! Y* w2 d
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE( X# S( U6 C4 c5 m
&& _PKTPKTType == PACKET_ITEMACTION* `$ `! z: z9 V3 S
)
5 E6 D- G/ f5 x2 W( Z {: [2 l0 D. H5 y9 G/ G* l% D
if (dwItemId == 0 && _PKTItemTick) s' p. _0 X9 g. g3 r- k
{7 n) x* Q+ m+ e" X0 A% n0 Z
PKTItemRelease();
5 Z( r% T' E% j0 q& h0 W# X; j }
$ N' i' o2 S' I1 u4 I. [ else if (dwItemId == _PKTItemID && _PKTItemTick)0 b1 {) @4 @. _$ G4 D! ]
{$ ?1 }4 I, |. Z5 }2 f3 S8 _% r
PKTItemRelease();- L" i& }7 }' T! u% k
}
0 L: x! g/ k ]: e# n }
' U- x- n X8 n3 {3 `
/ q% g9 A0 g& P6 T }
+ S2 v T" ~: d5 C W4 r }
/ c* q* p: y; }4 h9 U# d3 q# }& H/ P7 M$ `3 Z
static void PKTItemGameLoop()
2 M3 O( L5 z( R0 T+ @ W/ d {1 X% \, U1 U. N: Y9 X! X
if (_PKTItemTick > 0)
5 J: v5 z) H* H2 l _PKTItemTick--;+ B" s9 b! V6 t7 r! E! N- p% a; ~
else if (_PKTItemTick == 0)& G. H! ^1 B4 D5 w( U
PKTItemRelease();$ R9 \; L& Y% A9 z; v
}' }; Q" J4 w+ o: R; \
3 o0 q1 M% n5 _% Y* R. ^, g( f# t( X u static BOOL PKTItemCando()
: m* W4 I2 T* C, \- o {+ [, V& a. H0 E2 Y |4 h9 l
if (_PKTItemTick == 0)return TRUE;! ^* g# T( h8 c9 ^9 E1 N
return FALSE;
* j9 I* _% R# S- u# w: N8 E/ z }- _8 ^' q) n1 n, `
8 C+ ?4 k) r, g! E static BOOL BuyItem(DWORD ItemID, DWORD npcid)
2 Z1 F0 s4 x# X% g* |6 q6 G {' D- x1 X+ P. A( l% ]0 i* j" K
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);, z% V$ r( Y, L) _7 k
BYTE aPacket[17] = { 0 };
+ z$ q {9 H% g8 @8 A8 Z4 \ aPacket[0] = 0x32;
- C6 ` x0 c9 G! U+ d& I9 D ::memcpy(&aPacket[1], &npcid, 4);
4 l: c; V. W% S7 m ::memcpy(&aPacket[5], &ItemID, 4);# c8 S6 E3 S0 W6 ?& T- d
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
" h2 g: T4 C4 _ D2Net::D2SendToServer(17, 0, aPacket);
) Y2 [& d- Z; t+ `- K; n0 _ return TRUE;
5 M) g6 Y/ ?8 |8 b }8 {( P) |, s6 J G
7 ~% M3 }0 L* f+ l
static BOOL SellItem(DWORD ItemID, DWORD npcid)
$ q/ g0 R% ` g {
. N5 g! v0 {1 N2 n7 r- z PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);- C+ h" F: G/ y* x0 U+ W
BYTE aPacket[17] = { 0 };
5 G" ~5 a) X5 ?7 ` aPacket[0] = 0x33;
- O5 I$ W/ ~; n ::memcpy(&aPacket[1], &npcid, 4);+ F$ h* U- L7 B: n* u: H2 H3 F
::memcpy(&aPacket[5], &ItemID, 4);! [8 W# r, b# K) {$ F1 X! Q% L
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);+ _3 O4 r( T+ O0 {1 V( O
D2Net::D2SendToServer(17, 0, aPacket);
! X' ] T: y- H) e. {5 o5 r return TRUE;! l2 ]4 s1 s% [7 z: [( r- v- ?0 H
}
( T5 }% i. s- H0 Z U/ m+ `) b0 j6 @+ V5 @, J8 D
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
. y u3 T( Z2 B* \6 |* a& q: I$ `! }8 Q/ u: M( m
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);7 P- S- _& Z8 s/ H/ z1 \
0 ? q# ^/ O3 u7 E7 y0 b, z8 L7 k$ Q static BOOL OpenCube()( G! s6 k* s1 }+ z
{
" o% u; S' q" a/ D if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;% O' l0 k5 m/ u; [$ }0 f
/ T' E5 Z# Q( k& s/ z1 m5 M UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);; _( L! s% X. j+ n$ A) \
if (!pCube)& [6 V) i$ u1 U1 o: c. ~' I: ?
{
( V; v2 @: d1 d" G0 s1 X2 {& s* c/ m pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
$ M/ h/ P+ I* J. o& P! Q if (!pCube)
6 J, {: S! ^/ Z4 x6 k8 }0 |% X return FALSE; m" F2 w: k' |; f
}
& D5 ?7 |( f: }( m* [1 b0 L& D5 j0 O: p9 s PKTItemTellW8(PacketItemMaxTick);
3 n/ F0 O! t6 C! A0 b4 A W: l- c5 ?8 U* x4 v4 Z% O3 q
D2CoordStrc mypst = { NULL };
5 I1 ]2 A3 r3 a+ b7 X1 l D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);4 \" t/ D& e- u3 v4 T$ }
9 p4 m. j' f& m. o5 T; [+ _ BYTE aPacket[13] = { 0x20,0 };
$ }3 U9 o2 C9 n: l ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
9 h; b6 t( n2 r% j+ Q ::memcpy(aPacket + 5, &(mypst.nX), 4);. U" r' Z8 R* H5 k, ? O
::memcpy(aPacket + 9, &(mypst.nY), 4);* y! _* c5 @' {4 r3 a, q7 H
D2Net::D2SendToServer(13, 0, aPacket);* |0 `4 ~+ H5 o3 ^* x
return TRUE;
' A; e" E* P* ]" r2 I' y }
2 |5 W6 d5 N3 Q# L" q% }# G3 t1 g1 `% v
( x) B; s( a" c+ S6 E9 { static BOOL ToInvxy(DWORD x, DWORD y). G+ d @3 h9 O1 K% t' i
{
5 ~6 [: h2 T9 z, @0 Y, E UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
- f7 |1 p1 o! C# S- P1 l' \: k# e f
if (phand == NULL)
' u7 w& p6 ?. L3 R* m' ^ return FALSE;& Y$ f1 X& S, o! J
. M+ y8 A( D/ {1 g9 A
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
$ s- C7 T+ X+ I8 o6 Y! ~5 a9 @% q8 @. t: }8 h; y; H
BYTE aPacket[17] = { 0x18,0 };
' B, N% I" R5 p) q( f% [ ` ::memcpy(aPacket + 1, &phand->nItemNum, 4);
8 ?: e e# P! A z; E ::memcpy(aPacket + 5, &x, 4);
5 V5 f: Q3 M0 s& o ::memcpy(aPacket + 9, &y, 4);4 h& Y# q; r3 v% [+ W
D2Net::D2SendToServer(17, 0, aPacket);
) R8 n% P" ^$ N* z" o2 p return TRUE;
# P4 ?& n" h( p3 s6 v' t# v }
7 m% E; M$ R' Q! {
# k7 M* V8 D& B Z& A# W static BOOL ToInvRandom(BOOL bBagFix = FALSE)
; _2 f" w; M9 Y {
6 S4 G" s7 K Y0 g UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);) K0 D b7 `& W
if (!phand)
5 q0 O# d2 E6 s5 S% v1 O, H9 O return FALSE;: m- k2 n2 q3 G5 Q. b6 x H
int desx = 0;
$ @# p4 b% B8 B- j6 }5 |* ` int desy = 0;1 q1 ?3 f: p# }' o# U
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix)); g2 ]" w# D/ Y/ ]0 |2 i
{9 f# }# ~0 S6 k4 F
ToInvxy(desx, desy);
5 B5 b4 ?% {2 ~" D: ~ return TRUE;
& _( ]! f) ~- D# L }, w# Q0 ~# r! E; E p9 z H
return FALSE;- b2 F2 Q/ {5 \
}0 O( R8 a: L: X; D0 k" d
; N( y& ?# h3 Z4 g! N5 ]' [' @/ M
static BOOL ToCube()6 `: _, q) w- m8 a& d# R9 Q
{! [9 ?# @& w# p1 e( V* P6 l
if (!(*D2Client::ptPlayerClient))return FALSE;
- q2 F% ]+ j$ ?8 O2 S+ i4 }$ R9 y6 D5 t/ Z0 K+ R/ X9 J8 k N- |
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
) Y C0 ^6 u- r: L if (!phand)return FALSE;/ p; ~5 |4 D e) h2 e. H
2 D6 \0 j! d3 d/ ^2 p O% q3 Q9 V# \; ` UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
6 p5 v1 c9 ~+ w0 r `1 \ if (!pCube); u* @4 k4 M; ]& X2 b, |
{
* K& y' ]) d4 Q/ y3 h7 ^ pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
4 ?" w1 N. d# b5 W6 I H( m2 p if (!pCube || !pCube->nItemNum)
% Q. `( e3 A8 x return FALSE;" x2 k8 X8 D2 a' @: _
}
4 J" h- A" @4 ]1 i& _; d. U) P" V" [8 `. i7 D# {2 D V7 S' t" E, x
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
; o+ _4 S* m6 ~: b6 } return FALSE;6 b! H! D7 T" p& @! j
% V9 }/ J1 V* R5 P" o& | PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);7 R& Z+ m, i2 J! e6 m* L& R' t
" a7 Q) j8 u3 e6 N BYTE aPacket[9] = { 0x2A,0 };5 p) G. G, g& V( [; _' i! E* q
::memcpy(aPacket + 1, &phand->nItemNum, 4);, k8 E$ Q# f0 k
::memcpy(aPacket + 5, &pCube->nItemNum, 4);1 o0 ?) w1 V' j* n
D2Net::D2SendToServer(9, 0, aPacket);. L( E! A1 p0 A. D W, Q
return TRUE;
) b9 b/ Y$ N, I7 K& b! o9 _7 l8 t4 {" A! R$ V3 m
}
* m& o9 o. J6 g0 h3 Y- t% O
: b5 q' ~: }: h static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);7 A2 K+ s! |' s/ c6 r7 I
; @, v# A" }+ U9 n& o5 h- S: k
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存& C$ @+ |( N( \1 {# m6 J* W
{
; H1 @. v+ q6 l1 K D2CoordStrc mypst = { NULL };
. l! q, i Y* u* l, O D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
$ m7 w$ [0 B8 X2 ?6 {, z
6 |% v! t. p: I% I# q) a if (!mypst.nX)return FALSE;
% T. \$ t" P* Y4 N5 j, D8 u1 s 9 P3 u! V* ]! J/ C& p
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
, f( E. [' [. [2 @ [ o* r7 q8 h, ~- s& I; S( u2 v
BYTE aPacket[13] = { 0x20,0 };
/ f$ r# |3 C4 V! T ::memcpy(aPacket + 1, &dwItemID, 4); z. \. N9 t% {
::memcpy(aPacket + 5, &mypst.nX, 4);
7 n9 p9 I$ w, _6 \4 v7 w ::memcpy(aPacket + 9, &mypst.nY, 4);3 H: ]2 i0 H3 K- r9 I W
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);; a% {: p/ a9 S' ]7 j, A
D2Net::D2SendToServer(13, 0, aPacket);
: ^% ^& P* ]* j& p8 w return TRUE;8 N7 m, B; @, I) y$ L
}
4 @% @' p# x/ L: b. z5 Q4 Q1 G( z1 B% P% A4 U) P
static BOOL DropCursorItemToGround()
5 I+ `/ [$ k% N6 M) _2 d; U' b {
6 S7 N# _$ O+ i: b! R: y: T2 s UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);1 Y; j8 v* c' O) m2 s! C+ r7 `
if (!phand)/ r# R% }# x3 E: B
return FALSE;
) @5 ?* `+ ^ t: k* h7 G/ U8 k) P. T. t. G0 b; d' G0 R8 b( X
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);5 c, B; Z7 D' Q' ^, V. k
& u% M4 }+ {) I& _$ U; H7 o; K BYTE aPacket[5] = { 0x17 };
0 V! z- @& D" T: y3 e1 l$ s; D8 \ ::memcpy(aPacket + 1, &phand->nItemNum, 4);
/ t6 N" c; @9 x& J2 C; `, y D2Net::D2SendToServer(5, 0, aPacket);
" w, N/ W0 U/ x' C return TRUE;. N8 A8 ?0 N- x4 X. Q
3 ]7 F, v) H, c n1 j2 Z
}0 E! L7 K& Z9 g8 F
- V+ k3 g1 N' u: E! n4 N7 ?- H0 U static BOOL PickStorageItemToCursor(DWORD dwItemID); ~6 k& J/ q n* J# d
{& c! f$ K9 j% `0 |) N* v
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);: o! d) Z7 E2 I+ E# E/ e: A$ P# D
) E G; W6 ]* Z N BYTE aPacket[5] = { 0 };
1 o4 h- S0 p+ @8 e2 Y" @# w8 m2 g1 z" Q aPacket[0] = 0x19;. h# k6 e0 T: E6 \) U
::memcpy(aPacket + 1, &dwItemID, 4);! |7 I3 G; I' h7 I# e
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
% T7 A4 `* }( K D2Net::D2SendToServer(5, 0, aPacket);# a4 `, _/ Q6 V) J7 z/ C
return TRUE;
8 _1 F" @) _. f5 F" n }
4 t' y/ K# }0 L# J8 S
' S1 T, f+ G& [/ H7 | static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)8 g% J; o1 B/ }) M8 @9 g4 o$ f+ y
{ d0 N5 u1 G/ k+ o! F
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
4 N4 V) [ c6 Y BYTE aPacket[17] = { 0x1f,0 };9 x/ W3 t5 G) b$ n& H9 f4 k
::memcpy(aPacket + 1, &ItemID1, 4);- n0 i% B. A9 o8 ^1 K/ E
::memcpy(aPacket + 5, &ItemID2, 4);
0 s" B4 b; D5 Z2 t6 s //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
. U4 X J' e, c4 N D2Net::D2SendToServer(17, 0, aPacket);$ C; M& b9 a( K) f
return TRUE;
* t \, k9 r/ i" H' c }
4 w0 Z }; J, d3 P9 ]( x/ c, j$ `& N4 Q* L
static BOOL Transmute()
$ _3 q# Y. a w4 Z {5 Z4 {; y0 o' [& N X) j
if (!(*D2Client::ptPlayerClient))return FALSE;; X0 m% U- t8 g0 z3 s9 A
- Z2 V% G. ^1 x if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
0 ?2 [1 j" \/ j5 A5 e; v- {5 m return FALSE;8 t/ m S7 _5 J' S: U
/ |0 O" ^7 S! F6 {8 U
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);4 s" U% E* W) m# M/ \; G
BYTE aPacket[7] = { 0 };
/ h. l! V1 E' I3 |7 J P aPacket[0] = 0x4f;
0 K$ \# n: ^5 J aPacket[1] = 0x18;0 a) S' F9 \+ {' M4 d! m
D2Net::D2SendToServer(7, 0, aPacket);
9 i' m, {; W$ u( u( C( j return TRUE;( ]+ A+ y# d. U1 F- Z7 @" d) j% n
}
- f! s2 N( o0 y, \4 K$ w2 a8 `};
& N( g7 a2 Y2 j: k4 E2 A% {' Y
3 A- p: w) h% u$ p5 L# O |
|