|
|
转载
, c( C: K) q! V& ] b3 i& ~( h自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
q' a. q: N# i* UD2Client:2 Z2 w; |% t7 `' p6 e
6FB20AE1为拦截输入框(用于获得命令)
0 G( s% D3 q& k/ M2 U6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发7 \: u0 j! F0 F& r' f6 x' V
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发$ k; A- C3 ?) Z* Y; B
6FAF4230为hackmap的loop点 我用的hackmap导出位置
; e) H; O3 L! e. Z1 A) [0 _6 t8 k
) Z8 Z% c) c. u7 e% J
+ r% k7 i0 l& T2 L9 a+ b8 _发包函数:
" i% q1 l; H% F8 D& w6 sclass D2PKT_ITEM
9 G2 D# f# [6 q% \% i{7 i% ?2 H* d# g; ^7 {9 j8 x! `
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上8 M# p7 q1 a5 W! l5 R2 b8 Z* ?
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
9 a5 |/ q) W- A. j {#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
" w! I8 x& }. Q: X) }#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上" L. o3 f; ~+ g# b& s
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH" r4 |& ^, ^3 R. z/ R- f
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上/ p }( N4 h& c& O, h' ]/ @4 q h
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏4 A6 V* K* P$ K3 X$ k; z1 T% x
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上7 J2 Y& D' D, v2 ?
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
7 M3 ? Q! l" V4 v3 N+ x- n, ?8 Z#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
+ d5 E* B: W9 E. u" S, x# h#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV+ ] x; H; `1 Y8 }2 E6 _9 L5 L
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
9 l) j0 P* F2 e#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带/ V- E0 \, Y* m/ A( _
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上) t/ W2 c! z9 z+ l7 L/ b6 B
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
! K- |9 k# E! t. x& [# m. ?#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
) V) U2 m1 j' D; _1 t+ p#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
- g( n$ n/ w5 N# O7 ?
& T: z" n3 F+ L1 L) M#define PacketItemMaxTick 150
: Z. _2 @9 Z1 s( ]! P4 N#define PacketItemPickUpTick 20
; [. H" I1 @; M. w! a3 p; A
- U$ }$ {8 _5 b; r4 oprivate:$ U: `/ j# X2 h u3 X- q
static DWORD _PKTItemTick;3 b' g' k" G4 x4 c0 A
static DWORD _PKTItemAction;1 g, [# Z4 t7 ]" A& V4 _* U
static DWORD _PKTItemID;7 @: c x0 X; s; z& }8 I9 T
static BYTE _PKTPKTType;- f0 Q- {# ^, k$ N1 N
public:
0 k6 D- C. Y3 M, G static DWORD PKTItemGetTick() { return _PKTItemTick; }. c! m9 @7 @6 h t' _# V! e
, ]6 s* o. J2 Q$ U4 ]% N0 V
static void PKTItemRelease()
9 |* x9 x. m, S+ I; P! \ {
' C% d; Z8 l+ G& a" E! n# d$ S _PKTItemTick = 0;! `2 l- x9 B& I9 e* G
_PKTItemAction = 0;
7 u8 s$ O" k: T3 m# o" s. I! ?; k( c- n _PKTItemID = 0;( {$ ^ }( }$ [" a
_PKTPKTType = 0;
2 R9 l) m4 y, X; k+ a5 @ }4 P: W, p4 f1 R9 k& A8 j5 A5 s1 O4 M8 o
. R6 ^' L0 P) x
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) ( q( V% N! [% g7 `' ?4 ^) z
{6 L; a! b3 }% l' [* i
_PKTPKTType = aPacket0;
+ J' A0 L) Y/ j7 e _PKTItemTick = tick;/ C( b5 m! w* A% S/ _2 }- D% h
_PKTItemAction = ItemAction;8 W/ j6 T' t$ o
_PKTItemID = dwItemID;- b5 l r% B* v7 i7 @" U5 p/ z
}( I' s) J: m! Q1 c* b v4 L' R
% ?1 E" k, E3 N, j
static void PKTItemTellW8(DWORD tick)
' _! Y% y& n0 H7 V3 e5 z% i, ^ {
1 f/ W7 }$ y# P, x0 M _PKTItemTick = tick;9 I& @( X9 p) f" j* e }9 F
}
) o! @8 T- c, Y, {) J7 T: Y( q1 {% L t6 U# D1 s- S" U
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
( [+ ^& o# c i6 q8 h" w9 k {& q- ~3 p, j, Q
if (aLength >= 8)
]: p$ l: A1 O& e; u) ^ {
+ Z' D& W# \& M) w+ @ DWORD dwItemId = 0;# t6 @% P! O1 Y& j& l* i
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
+ O( \; U2 @% I S if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
9 j6 K2 z& }$ m+ E && _PKTItemAction == ITEM_ACTION_TO_STORAGE4 E8 s- l# e. |
&& _PKTPKTType == PACKET_NEWITEM' U5 U# Z3 D- `) U8 Q
)
, X, f' w2 C! u2 }& V/ t! Q {1 v. a1 W* o8 _7 R' y, ~
if (_PKTItemID == 0 && _PKTItemTick)6 g$ ^# b( L3 ]. O3 ~
{8 `# N! i& c3 p3 A: r' K6 w5 F7 D
PKTItemRelease();' ^0 L4 U5 l) ^; p
}% M) l! a9 `# q' W! Q
else if(_PKTItemID== dwItemId&& _PKTItemTick)' Q! f1 E: t4 P! y6 K6 k5 S
{
1 m/ N" K. s: q1 C2 y- K1 s PKTItemRelease();! K# m: U( U$ \4 S
}* g% z8 B0 h! n* F, ?
}
# ?0 h7 D: y. y" s7 [; j 9 R6 @/ S0 J" Z- o; I
}/ O# f( F3 k; b) q
}* x# C) {6 _ N: q3 d; \' n! r
( v6 X' U2 g* Y2 X X6 v
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
9 A( p' k. Q$ Z/ A E {0 ^& @9 I9 c% \$ q$ N
if (aLength >= 8)! z/ T* m3 t' S: r; z5 g8 S: D
{
. {8 d3 Z# f/ {. Q H- { t% R DWORD dwItemId = 0;9 E' o/ y9 A. x- i
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));2 M P5 ]; a$ j3 e
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE9 h5 R! {4 ~& \1 V2 R
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE3 h- \' ^1 J" Z- @2 @/ P1 S1 `
&& _PKTPKTType == PACKET_ITEMACTION
/ @5 I) e; H s* f6 t4 M1 R )
- Q1 v, G% D; I: f {5 | {$ C! j: `. z7 G, x* w# Z m$ |
if (dwItemId == 0 && _PKTItemTick)
. ]: j3 f1 a- x5 K. {" m' ^ {; H9 I6 L, N; {. W2 d0 O7 o6 c
PKTItemRelease();6 w% D0 |& w* H! u8 N
}7 U( K+ M9 p2 _( f5 E" U: N+ K
else if (dwItemId == _PKTItemID && _PKTItemTick)+ V* Z! v- v I5 n; V
{, Q) V; f, ?3 I3 k
PKTItemRelease();, R7 \5 D V) q2 y
}0 \0 M+ U' [% z1 X! n
}
! }2 e" v! ^2 f& Y; a/ l3 m& I
3 x7 q# x' [& ?/ | }
6 k( N! N4 L7 U" J$ t' } }
* m! q3 x- ?. a( `0 m y. Y3 b" Y
static void PKTItemGameLoop()' I: X( h/ ]( p6 s: `% R* \
{1 k7 Y% W" f: K" \: x: T
if (_PKTItemTick > 0)# P# E8 f5 }, s' `; `0 A6 i8 C
_PKTItemTick--;6 Y# ?0 l. U) r$ G% x
else if (_PKTItemTick == 0)9 d8 j: T3 X0 _+ B
PKTItemRelease();1 K6 `2 t) }8 w* p: ~: _
}0 y& v4 f7 E" |1 w( A- O1 q) T
4 f7 H. s/ r/ m0 {; }3 N: y static BOOL PKTItemCando() `* `) G6 w0 ], Z5 o- w. R2 f
{
. G9 f$ X4 C/ r/ o3 k if (_PKTItemTick == 0)return TRUE;( i% j* a# y+ t' p! a
return FALSE;; `! g. I! s- h3 Q
}
2 Y0 A, I1 l! s8 F$ [0 }) d4 B& U- K
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
4 q5 a) D- M4 s% j- j7 J {, o, Y2 e+ I$ D( h
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);" B* A" n7 }; |/ L0 P* n9 O4 l/ C
BYTE aPacket[17] = { 0 };
; ~! s- |1 {+ s: `0 m aPacket[0] = 0x32;7 e% V/ r9 a- O/ c
::memcpy(&aPacket[1], &npcid, 4);
/ k) t- }1 _. z, {4 ~* P ::memcpy(&aPacket[5], &ItemID, 4);
0 e. A" q- q, L3 A# S //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
5 v3 G: I$ ?3 {0 s3 C D2Net::D2SendToServer(17, 0, aPacket);7 O/ Z( C G. A& f$ }/ p
return TRUE;0 i9 L9 ^) t& @- `7 W) }
}1 Z% x# ~9 U1 F$ ^" y A
, N7 J1 y* X( U) I
static BOOL SellItem(DWORD ItemID, DWORD npcid)
$ C! O) p: r/ W" Y {
* P+ b0 ^+ q+ Q, q j9 y' V4 N PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
: k' O w* j1 c9 A; W$ |' G BYTE aPacket[17] = { 0 };
$ e8 ^8 g# c5 r% }8 O aPacket[0] = 0x33;4 `' Z* a: g Y( y- k
::memcpy(&aPacket[1], &npcid, 4);) E' w2 r$ z1 ^2 L- P& S7 s
::memcpy(&aPacket[5], &ItemID, 4);
+ b+ Y, J2 f8 _' q0 e/ L //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
- s8 W0 O0 g" j0 u3 h' V D2Net::D2SendToServer(17, 0, aPacket);
6 Q Z% X4 J& N m; Q" g return TRUE; ?: n2 W9 r& c' E9 `6 Q3 @) N
}" S+ H# X) P3 W9 V
, c6 Q) V( I2 R) r
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
* a& M: o0 }" J1 U* n @* k9 g7 Y7 [
) V4 \ }, d# q9 W" }. h- c static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);- q- _* s& R+ a- J3 `* A
! S& P" e7 j' t+ s static BOOL OpenCube()
* v7 {' h" U+ w; f3 q a {
! O- F# G3 r7 C7 x/ R3 I if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
8 ~ G' q9 x- r. X6 I9 e( {, J+ }% B" k
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);& N& p) R1 m6 w/ [2 h0 F7 K, q; Y
if (!pCube)4 L6 {9 l3 r7 |# x" _( b( {) \
{
) i% h" l- _; l9 Z, c pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
+ b1 q1 W3 I# Y0 u, P# b) C7 y+ D if (!pCube)
* I( F4 G) J/ j3 C- ? return FALSE;. p1 c" S& U% U- g
}
& G h& @; n8 e' Q& Y6 f PKTItemTellW8(PacketItemMaxTick);$ Q5 n4 a ]: C" s; r
1 ?8 s! \# D+ Z# { D2CoordStrc mypst = { NULL };
6 X' k# v4 W, o- W) t/ \( \8 ^ D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
+ ~$ Q; R, U# B# T. |. @! x) M0 ]* e& ]
BYTE aPacket[13] = { 0x20,0 };
, A0 r2 C2 k$ Q4 Q" N+ e ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
/ D! G5 M- S2 d$ M/ z ::memcpy(aPacket + 5, &(mypst.nX), 4);/ O. g$ a8 y4 ]2 F2 J4 `' n; ^: r% a# U
::memcpy(aPacket + 9, &(mypst.nY), 4);
9 t1 a3 `) ` X9 I( y5 q2 ? D2Net::D2SendToServer(13, 0, aPacket);
( @/ h7 m i4 K3 W return TRUE;0 x$ w: A' a# V3 T7 k
}
+ f! ~: N! z& K: e
: G8 F, ~1 l3 Q' n: b4 |) _ static BOOL ToInvxy(DWORD x, DWORD y)7 f( C: i: J5 B2 h2 s: _2 g! r w
{* o7 Y& \, v b" U% N2 f' k% j
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);0 r6 C& r" L* U1 r1 }
5 r) a$ G& T; G) L
if (phand == NULL)
4 R: W" u/ s# k! u; u return FALSE;
1 c! ?4 b& @* Y9 E+ h; u- q( v
" q |9 T) m. J/ T7 R4 k1 Y PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
- B5 X. h! Q+ y5 _, v: L/ h9 ?. Q. Z
- a: d0 A/ m# K+ ?8 v4 g# u' S BYTE aPacket[17] = { 0x18,0 };: | p' d) y& ~7 j6 `
::memcpy(aPacket + 1, &phand->nItemNum, 4);3 B) J% s: h. m, j% H; p8 ^. Y
::memcpy(aPacket + 5, &x, 4);. e' c. w; C9 W( Z: A: Q
::memcpy(aPacket + 9, &y, 4);! V) a2 h# y: \! a& i
D2Net::D2SendToServer(17, 0, aPacket);1 f E9 e, t9 N
return TRUE;( U9 P2 C3 y2 O6 v7 ]" Y
}
7 o5 z* e# H" S M( U- k. N& N# d' ^" J$ y0 u: J' r9 W3 Y Q# d
static BOOL ToInvRandom(BOOL bBagFix = FALSE)
" U! q" G+ L# G K! s0 ~ {% u2 Y7 P9 s2 }
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
' ^' ~ ^' ]& W6 B7 P$ F/ a if (!phand)# p$ {4 O$ s3 |( c9 G" T
return FALSE;4 ^8 B7 j% r4 `# D5 w9 U
int desx = 0;
+ K9 o1 G/ \: e* | C: I( ? int desy = 0;
! g8 [3 i N5 ~) c. `$ _. Y, j if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))1 x5 i1 [( \3 A, Q
{. T6 u! X8 ~ b1 q! B1 }1 X3 a
ToInvxy(desx, desy);
6 _& R5 D( ~* S return TRUE;' F! I; h6 I, P3 M( L
}5 v% E, a- `. r
return FALSE;
2 j3 W: v( R7 s: p }. Z9 d4 Z) p6 b1 Y$ d0 {
/ x& X9 |6 W- A static BOOL ToCube()
! h' Q! f2 H7 H/ L3 Z* I {
" q+ s/ A* l3 F# j+ J7 V if (!(*D2Client::ptPlayerClient))return FALSE;
/ H# N5 ?& e9 \$ f$ J" h/ I) N3 k
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);2 Y7 X, ^8 i2 m: ^/ ^4 y B% Q5 _' I
if (!phand)return FALSE;, T/ c( e4 X5 @8 H' k
- d! M; Z% r: E! O! q% {1 @
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
8 G$ S( @' O) M$ ` if (!pCube)
! k- X2 N1 F9 P9 T {
6 Z4 d2 J. I- X* f/ I) {* n pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块- W( q& J+ S# Y
if (!pCube || !pCube->nItemNum)0 C/ @4 g; w3 j+ C" C( b
return FALSE;( n/ V! i4 u" d, w v$ W
}
) g" v0 t: t; A9 a/ `$ a! U6 E5 ]2 ^& r M, E
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
# Q P. [4 x, j2 e* S0 T8 k. b return FALSE;
' X4 Y4 Z/ ]0 e9 ^5 Z/ T4 ~+ e! D' J+ d4 P( R) ~5 Q$ x7 p4 C
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);# M/ Y" f0 L! i* t
* t0 \6 a9 N. {/ T
BYTE aPacket[9] = { 0x2A,0 };
% k% T# J$ ^& t2 ^7 _ ::memcpy(aPacket + 1, &phand->nItemNum, 4);
+ q! E b9 J' n# z( P# M" A# X ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
% f. S T! T# G: k3 j D2Net::D2SendToServer(9, 0, aPacket);
/ O9 W6 v8 _* K/ o# z& r+ f: U return TRUE;. r3 U; r# e7 J- m }( f4 s q6 N
* R7 P5 H7 x( ^ }2 R" t7 Y; m _9 M) _* k# o/ W1 Y) @
' I! {2 j7 P4 _4 Z; w" v0 S% Z static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
* J6 N7 H, k+ m% p6 a, O! Z/ w+ R& Y
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存4 I8 o2 y, J' M3 A- w
{0 u1 F: |6 `' o' x3 y7 I8 @
D2CoordStrc mypst = { NULL };
. [0 H% S1 o: d1 a' J! Z( k) t D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
4 ~: l5 U! D4 @. A4 _9 |2 k! \- B8 F( @, R7 R
if (!mypst.nX)return FALSE;4 x; m! Y7 g, ^0 u4 [# I
9 Z& [/ ~. t0 x PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);: g4 b6 m/ b( V2 ?/ p
. d2 \% V2 f0 A6 r/ h BYTE aPacket[13] = { 0x20,0 };3 P! w# w v4 H; U+ |. i" O5 p6 i
::memcpy(aPacket + 1, &dwItemID, 4);: |7 z( e; r" V h w: `
::memcpy(aPacket + 5, &mypst.nX, 4);
4 R7 v; n- \& [: c4 H ::memcpy(aPacket + 9, &mypst.nY, 4);3 d3 |/ b' [- w$ I
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
' J( C" M: Y# k* w0 @ D2Net::D2SendToServer(13, 0, aPacket);5 ~$ S s$ c ]3 h+ }5 O% X
return TRUE;
7 E8 I. y4 z, K! z' `- Z }; }7 F4 Y4 _' W9 r) k
0 j; T [) X# I; D static BOOL DropCursorItemToGround()
# `. `" F, b6 I0 e/ K. d3 Y' W0 y {+ R' H6 W* T9 a2 h r4 k
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
& ~! k! Y$ @5 E2 M if (!phand)2 J$ G; A# t- z/ }
return FALSE;
- o' L6 q d6 _% {* i6 m
2 O `5 e# _! Y9 q: N. G" X# s; j9 s" Q PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
: d& j$ H+ h: ]( |% U% Q3 i; ^5 J7 K
# _1 A3 a+ \" H# v; J BYTE aPacket[5] = { 0x17 };
4 t$ J! T* i% m0 C; k, q; w ::memcpy(aPacket + 1, &phand->nItemNum, 4);
/ S0 g8 T9 g/ S" G D2Net::D2SendToServer(5, 0, aPacket);+ q: u7 ^# h. d, F/ G. I) o$ B; t
return TRUE;! h( ~% F, G& z' s
! X) ^' E, p1 j3 f8 K2 [: p }
+ w1 u) `' q. X/ j1 ^6 X+ w% t! w- b, m: N
static BOOL PickStorageItemToCursor(DWORD dwItemID)
4 S' V7 w& q. D( ] {
1 n) }% E" | a& t PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);* A G. |- a& M- J2 f
0 U9 m' D5 H. z8 v( A
BYTE aPacket[5] = { 0 };
7 ^9 K* c) w9 J( L6 Q4 I8 J, b aPacket[0] = 0x19;; Q# o7 n2 l7 q+ @
::memcpy(aPacket + 1, &dwItemID, 4);
* I/ n9 M: K. I //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);1 N4 ?! T0 U" u; j
D2Net::D2SendToServer(5, 0, aPacket);
" o H- u% y* ]8 W# ^7 q4 p return TRUE;8 |* P( y, C# Z9 v- v
}
6 R: v' z# X, p- u1 z4 \
' F9 ?& ^2 ^3 z3 B5 y* T6 } static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)7 p: f- {7 v% z8 G
{
- c: A4 A; }: @) o4 E& G- s PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
R( c# n4 y. h' I f( J0 g BYTE aPacket[17] = { 0x1f,0 };. A! f/ f5 W+ J5 @/ }% x2 u( @
::memcpy(aPacket + 1, &ItemID1, 4);
0 J @1 F' [8 B ::memcpy(aPacket + 5, &ItemID2, 4);0 i7 {3 n# \2 I/ i0 }+ ^
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
; W- h" o% T* ~; M' X+ }; S* X% Y' R D2Net::D2SendToServer(17, 0, aPacket);0 y5 I$ C! O9 T& ]3 }4 v
return TRUE;
! i1 T1 n& |7 @3 }4 A3 r: { }
/ c" c2 }" q m& m* N7 R% O9 v- X( x( p: n
static BOOL Transmute()
. G! o0 a7 e* `, @( s {
4 A' }! {: i& I g if (!(*D2Client::ptPlayerClient))return FALSE;
- ?4 z1 I" V: ~( V4 A: I8 t1 m, s* {
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
) F: l; @1 |$ @6 d return FALSE;
. T4 k% |! Q1 U. x& B5 R3 U: r+ k4 ^5 J
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
) S7 }0 C3 ~9 @4 n BYTE aPacket[7] = { 0 };( ~2 P4 _! r: }- X
aPacket[0] = 0x4f;
' f9 A4 E6 ?, X$ E0 E3 o- [6 k! f aPacket[1] = 0x18;3 y% ~6 K- W5 D
D2Net::D2SendToServer(7, 0, aPacket);
% `# _1 q6 l+ ?. r. m8 g- m return TRUE;, [; T9 f8 D& g
}9 X0 p# ~" Y* O; @/ P4 _: x
};. e! m. `4 T0 G7 K2 d4 L
. p( p2 f z# @9 S9 U
|
|