|
|
转载) t. n2 |# G% H, Y- {( J% w, n2 H7 ^0 h
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:4 P; B) ~- U, B
D2Client:' S2 p; v$ F. _) \% V2 H! w5 C
6FB20AE1为拦截输入框(用于获得命令)* y/ w# e" p" L. c8 q$ a
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
7 k; R* x! h; N* N) R' R0 a; T! \6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发' ~* r `, U7 Q4 j( `# g) \
6FAF4230为hackmap的loop点 我用的hackmap导出位置
! `; T* k# M# P, O- ~" _, o; l) r; v' r2 j- o( `
# {+ A. A3 a; q& Q3 ^& z% I
发包函数:
_* t3 {8 u5 nclass D2PKT_ITEM
. s8 r' v, z; K& z5 L4 n{
- ~9 W3 e$ B+ F; j! D" U#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上0 B3 G0 L2 M7 j
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多2 c; A5 a4 b* c+ I8 ]3 g
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
* \( Z# M! K1 q5 S#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
( L7 ]7 p$ J7 ?8 {: e$ ^#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
& n( S, b( I+ p5 i, b p: C#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上' q% Y" K$ h# G$ e5 j% z) o* S
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
/ n; V1 ]8 | T/ l#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
+ H& X6 e# b3 J! A; t. Q: C1 M#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -$ @ N* p6 t5 S+ D% o; ~0 L/ l
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
; e' x/ a, _$ j5 y#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV8 T ~; a5 B: K) ?
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 3 x Q5 A' t- M/ q
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
4 ]8 {5 D5 n. B) i/ c#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
0 a, p/ g. r9 T( }; @; E#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
& B# J0 k1 S8 |/ M# G; A#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
5 g. d' j- C7 c; V#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -8 z3 [& i* e2 {' y8 @. l
$ r6 B5 A: w/ q& F#define PacketItemMaxTick 150; {4 E* p6 l/ ?9 H
#define PacketItemPickUpTick 20
' H g) x' M! L8 ?* D& S2 K3 A: P e1 o2 v" Y0 W" l
private:
9 {1 a6 u/ Q+ b& h/ V: t static DWORD _PKTItemTick;' H: A+ s I+ m: {! X5 u1 L
static DWORD _PKTItemAction;
% V3 h& u# R) u. w V5 q+ O static DWORD _PKTItemID;
% o3 p! \' d6 H) P$ w& o% Z* ? static BYTE _PKTPKTType;& L6 W7 K" r* D! N
public:
* q7 H1 a# Q5 ]: c% K2 J2 C% e static DWORD PKTItemGetTick() { return _PKTItemTick; }
$ F9 e, N7 b& X6 I! }
+ G2 Z9 y" }+ B# P6 d static void PKTItemRelease()
1 Z4 b' S2 r- ] {
* F# F, `& X: J _PKTItemTick = 0;$ c* b3 a2 p$ e) W( A
_PKTItemAction = 0;" s! T+ C$ B3 _
_PKTItemID = 0;
% A5 q, W/ P+ F& c8 D* R5 [ t _PKTPKTType = 0;
* A% H. d$ F9 \1 y, ~' Q- R }: j8 S1 P# K& t& \
5 L$ J/ O. q: X% b( [
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
9 E) S+ R# a, P. Q; ]6 m {
+ x; [) l% x0 u) X3 \& _7 o _PKTPKTType = aPacket0;
4 s# h3 a5 L1 O; O# D4 n M _PKTItemTick = tick;# f8 B! E; G3 r1 p& V
_PKTItemAction = ItemAction;4 x, I$ @/ S* M, D N! n& \, j8 ]
_PKTItemID = dwItemID;
: J# G( q* s) |% R8 i6 R7 [$ n }
9 v$ E: _5 G9 w
- u- O# d) ^* E# l- t5 C static void PKTItemTellW8(DWORD tick)
- {$ Z3 T8 I$ R) c4 E( Q {7 D# _# Z* O6 [6 E* z: b t2 m- Q
_PKTItemTick = tick;
: C# S% Q! |5 F( q# o }! N& W+ g9 D% W2 n4 i" w
/ M' h. q# j ` E) ~
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
; y: f' _/ f3 `1 E {
% B2 ^( }; y. [7 \ if (aLength >= 8), E# b% O. |( W
{
( b3 O- @. q9 T6 B8 j) r% p DWORD dwItemId = 0;
8 g5 {# I% {: J' s7 h) q/ V. r memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));9 a' s( z5 ^( ]5 L; `1 Q0 W
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
1 E6 _. j# i: i/ j8 i# ~ && _PKTItemAction == ITEM_ACTION_TO_STORAGE
6 l6 x4 [4 P' Y! ^; j R && _PKTPKTType == PACKET_NEWITEM
# d7 H1 O* L m9 J )# ]7 T2 o6 t0 O; l# k3 f0 s/ B
{: G' R6 v( h/ N0 L& ^6 }$ E
if (_PKTItemID == 0 && _PKTItemTick)8 H, A4 {) r/ ^5 R+ B
{
: W) a; S' c5 O% _4 i) R6 u8 Q PKTItemRelease();9 V3 D; i8 \3 [/ n" s9 P
}
# j9 d8 u3 i! C/ o+ O: h else if(_PKTItemID== dwItemId&& _PKTItemTick)( E( b* G- |, ~
{0 I$ K; P5 W! y: T# x
PKTItemRelease();
& R! m# Z. c( g) @! u2 f* e }
0 W! ^4 j" |& T }
0 ~4 A" T g' O$ g : D* v0 t) u" A) T: F$ L7 [
}
* N2 J+ @+ w0 S- R- j/ c2 t u }
# G) u( `( V) }! X$ [& G5 t
5 Y4 U: w4 w" y; V5 _ static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored$ ?/ T3 Q5 C: {, L) b) r; n; L! V5 O
{0 M0 p `5 F7 @1 j
if (aLength >= 8)
# }6 V/ b! o) g5 u5 Q {8 S; ~+ ^& w/ e2 t& e% b4 a- J
DWORD dwItemId = 0;
% f* E e' X, w! y; M+ g, V ]; F memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
* e4 i( D' [6 T- J0 [5 t if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE4 ]- R7 e! p9 y( b1 V. y+ u
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE' n7 [4 c7 }; F! J
&& _PKTPKTType == PACKET_ITEMACTION1 E5 d! v8 a% p; \& G
)$ y3 e% \5 ^+ D" Z( X. g+ @
{
$ j \; _0 F4 ^; \. W3 W$ r if (dwItemId == 0 && _PKTItemTick); l. P+ } W9 a8 j+ ~. b
{
7 K4 M1 m: |6 h ? PKTItemRelease();
3 c* s' ~$ s8 j5 Q }
! b* S. I1 Y& r5 ~# P& Q else if (dwItemId == _PKTItemID && _PKTItemTick)
' M$ } }2 k8 d5 A {
, W' m) n# b/ E/ ^- U( p; l: J PKTItemRelease();
1 o* @9 `( ?3 m* {+ ? }
6 M1 r y! k8 f, }. w" ]7 B1 K- B }
- y9 i$ I7 @& _4 M C& }* u
# Y3 l( |% U6 D. ~; i1 u }) \; B7 @) j: Z5 y9 D, s, i1 a
}
5 j$ ]) a5 u% C" ` y% Z
4 N8 y8 H% V; E' C. U static void PKTItemGameLoop()
- x/ X1 @) ^* a$ F, m! ?- w* { {
. j3 z) w" y# ~/ I7 Q; y5 U if (_PKTItemTick > 0)9 m0 g' j5 d* P
_PKTItemTick--;% r) d7 R: t h4 z7 W: L8 V" Z: }
else if (_PKTItemTick == 0)6 I0 [) Z) a. V9 O# N( ]! [5 Q% K/ w: ^
PKTItemRelease();
5 h k( I+ R; }# y }+ ^" A |: ^! _3 ~! E: ?
" P3 g( @+ j) h
static BOOL PKTItemCando() & w+ B* p1 ^$ h$ y$ ?: v& ?8 ]
{# o7 \7 D& u- U' Z7 {5 w) ?5 [
if (_PKTItemTick == 0)return TRUE;% m, F* @# L, X
return FALSE;
/ ?' Y- k9 }4 g6 z8 a/ o r' G }
8 ]$ _) I! h$ R3 p
$ Z: v% O9 P. l& z static BOOL BuyItem(DWORD ItemID, DWORD npcid)
+ w6 I3 Y6 U( r2 p {
& ?0 I3 J9 ]1 o1 L7 j% |; E PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);! l+ u9 F1 A2 O# G. J& a
BYTE aPacket[17] = { 0 };
5 V y+ _+ i$ {7 ~) C aPacket[0] = 0x32;
/ A$ t! d# Y; S ::memcpy(&aPacket[1], &npcid, 4);( w0 Z5 w( ^& J$ a3 u" \
::memcpy(&aPacket[5], &ItemID, 4);. B& E3 Z) S# ~& ^4 x$ E
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
[) h! Z% m& t! [$ D' ]$ Q9 N0 L D2Net::D2SendToServer(17, 0, aPacket);
. Y6 K$ N; ~9 O return TRUE;
' H' [8 T' P" ` }
3 Z. s0 e: T3 o5 p9 D
' U8 c) s' Z" ^ `2 S }: Z static BOOL SellItem(DWORD ItemID, DWORD npcid)' o2 e+ I( H/ {2 z) s) r
{
4 k6 G, Y, Q9 l' c( r/ F7 R PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
, G: B! v0 Z, ^7 X, J& A BYTE aPacket[17] = { 0 };
5 e. l2 B. `: Q aPacket[0] = 0x33;
2 y. \( ^3 k' S* }' w ::memcpy(&aPacket[1], &npcid, 4);
7 B! e3 r- d V4 z: i# J4 X* ^ ::memcpy(&aPacket[5], &ItemID, 4);
$ l# l! q6 N5 i6 |) g% u //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);6 q2 G, a8 G0 m: O1 n
D2Net::D2SendToServer(17, 0, aPacket);
$ w/ `' W: H' [! G5 A$ R" r3 ? j return TRUE;6 U) e7 f7 f4 f6 u. W5 V8 e0 r, q0 n
}
2 Y) ?4 ]% [" t/ i- i8 b* g* v1 l, p% d2 p# Q
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
" I3 n+ [: A P: f
: t3 ]' S% _" A+ t% K static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
$ z8 ]( j5 e3 ]) ]$ d; M) P) j( v1 k% F, u1 N" p$ u- \2 c
static BOOL OpenCube()
8 z" u7 t" Y3 q4 B; v {
2 d% H2 i6 S7 S, i7 f if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
2 Y: _3 ]+ D0 s/ O& g8 _
% Z; G1 V9 ]8 ?' a UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
* T. l9 P# ^9 I. C" t e" s if (!pCube)4 j/ c0 M+ i9 W3 |$ l* ~
{
9 M! b7 ]% E. }0 [ l% b pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);; G5 S# W* H0 z+ [; W4 m2 }9 W+ `
if (!pCube)1 a( E+ A; L9 K! O' E
return FALSE;/ E3 }, ^$ ?+ w6 a
}- q$ G" |6 \7 \: O1 I
PKTItemTellW8(PacketItemMaxTick);
" V+ O+ z' l7 X" t! o* v
2 ]" @& b! o5 m: C; h* F D2CoordStrc mypst = { NULL };
, i$ O/ {8 ]! c' U2 O D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
7 y, x4 O" \1 E N6 [4 y2 ^, g3 n2 B- v4 A1 T) V8 i; {
BYTE aPacket[13] = { 0x20,0 };
% z2 k0 E U$ g2 H7 b- `( f ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
+ h& G, W9 ~2 ?1 l ::memcpy(aPacket + 5, &(mypst.nX), 4);
( \3 I- c- ]" W0 k ::memcpy(aPacket + 9, &(mypst.nY), 4);
3 x3 ]$ h3 c# R& A1 j, w% S D2Net::D2SendToServer(13, 0, aPacket);) {. P4 i* F" O# l
return TRUE;' V) V* S- n/ z3 q6 C! L1 x
}7 W2 l* z! n' g& {/ F
1 z9 i) h) W$ c( ~) p
static BOOL ToInvxy(DWORD x, DWORD y)
+ m4 W( m3 T+ G" f$ y" c {
* a% Y: J, v: A" ] UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);' K6 ?* ^/ k4 s3 _
' y8 [4 U# L( E- f: l$ ?3 N- [* `$ X
if (phand == NULL)
! Y& `+ m2 l+ W return FALSE;8 C. n L: W; f4 v. ?5 ^
) N5 U' Y* |8 @% ^, u9 d
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
0 v# q8 R; F- S4 U. V3 a0 |; } c8 ?( r7 G# t7 u
BYTE aPacket[17] = { 0x18,0 };
0 e) y6 j3 A" O/ S+ w, l6 M0 J ::memcpy(aPacket + 1, &phand->nItemNum, 4);1 q2 C! V! l! s2 u: ]/ b2 r
::memcpy(aPacket + 5, &x, 4);" z: F- c0 V/ `6 D/ \/ W8 \3 J3 L
::memcpy(aPacket + 9, &y, 4);4 S M# T+ _: G1 N8 b7 a
D2Net::D2SendToServer(17, 0, aPacket);
/ Q8 [+ G) o5 ]) F' ]/ S return TRUE;9 I5 H" m1 `- P' c8 D
}
8 E: F7 E; u& N, g) r% O
( e+ ]0 M2 w. `: q* ] static BOOL ToInvRandom(BOOL bBagFix = FALSE) * X5 G1 S& q5 ~$ `8 S: c
{+ D% W# S1 h/ t% x- T( c
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
! x* V, e5 Z) }3 K# j if (!phand)
3 a/ ^: Z+ \. M" J$ R9 x return FALSE;- n! a, }3 W/ w* a _8 x
int desx = 0;* a+ `+ n4 D- n
int desy = 0;7 w: o( i2 ^5 f" T& v
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))) ?' q8 P* d' @# O, p
{9 y7 P, g' n; u" \ s
ToInvxy(desx, desy);4 |! S7 C3 ^& p* }
return TRUE;
$ f; ~# j: u4 ?8 Q5 D% r. t+ R }$ f8 z3 Z+ |- @; D+ j( p8 C
return FALSE;
1 @1 |* l, G7 } }
1 \% R; p1 H4 O9 L3 O; z0 A. V7 b: V0 g* W9 p
static BOOL ToCube()0 r# Z) R9 A; H
{
2 r" K- O0 N2 D L; H* M if (!(*D2Client::ptPlayerClient))return FALSE;
& `$ T0 V! w" b8 P! U4 q8 Z9 e" [' r# J( f- y( G! d
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
& A3 G& u" W) r, T if (!phand)return FALSE;
4 M7 y% _1 @2 F: z/ e( L5 Y4 @8 f5 h; r. f4 s
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
9 j/ f7 z% ?! k3 q2 K5 b/ g4 }$ Y if (!pCube)
& Z6 U" y6 s r8 u { Y& M* [5 D) p6 u& S4 ~
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
5 H I C4 H) B if (!pCube || !pCube->nItemNum)
4 S1 F+ r% t2 U$ k return FALSE;
. A: r. m: }$ B" s }7 [2 Y; z; I4 ~8 a1 [1 X9 ]
+ Y1 I2 w0 ~- T* S+ q8 _4 k
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
0 {, F# J5 r' c! @ return FALSE;: u# u$ m8 h. \' o* X: Q ?& ?' y
1 b6 }- p5 X# ~2 ^8 C2 v% {
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
& T% \/ H( P! M" v1 C
' {! i3 V8 l4 [6 `7 h) V ? BYTE aPacket[9] = { 0x2A,0 };
1 ?- | f1 ]# \ ::memcpy(aPacket + 1, &phand->nItemNum, 4);
% V0 o9 o8 G! q+ Y5 z ::memcpy(aPacket + 5, &pCube->nItemNum, 4);8 A8 j' R' Q5 S
D2Net::D2SendToServer(9, 0, aPacket);
& y1 v: Z7 t+ B- F/ `. N9 K" b ^ return TRUE;
3 Z0 U- }$ M$ N4 V+ y) c7 G% Q1 W& J% q
}
' V% j1 W: y3 K0 t, X! g! g3 K6 B
8 F9 J+ ] y$ r4 C" |: @ static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
( |* C* M% @' y. M) H5 u6 t
/ c; ]. t) u# o. B3 k/ L8 Q! O static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
( S8 a+ ]4 p% y7 q( A Q/ W {( F* F) ~" p0 n3 j/ L9 c! h- P2 {) p
D2CoordStrc mypst = { NULL };
1 W& f; x/ s2 x: y: N) B3 ? D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
% k( `0 R# r9 v
8 V4 S: C2 \8 L+ { if (!mypst.nX)return FALSE;
j6 \% i" w1 B0 E/ |% H" p7 n * E9 T9 ^& ?. z& b p( O
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);* i9 y( t* A5 O9 R
4 c# i7 Z7 }4 L$ _% W. l
BYTE aPacket[13] = { 0x20,0 };& _- S. q% {* A: q3 A( ^. u
::memcpy(aPacket + 1, &dwItemID, 4);8 P( L: q% t8 m: \
::memcpy(aPacket + 5, &mypst.nX, 4);
& W6 K6 L& s5 r% W ::memcpy(aPacket + 9, &mypst.nY, 4);
' F* y# R/ i. v* Q //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
- u _2 M- G# f& G' _( t D2Net::D2SendToServer(13, 0, aPacket);
4 Z! w# B1 o2 b& B1 c0 f |. U return TRUE;
, Z7 i& ^8 Z3 `; T b }
' i" i% A9 }$ _8 [- b9 ~6 B+ Y5 o. J% d& v
static BOOL DropCursorItemToGround()
) u& @$ d& ?0 q% O* q" v X {
$ e6 R- a) Y4 U% Y; t/ Y UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
4 F0 l" q+ R# X; L# c8 | if (!phand)
$ T3 U8 w- I9 K9 ]8 }( h, j return FALSE;' q0 C+ h9 K; u7 X. o& i( f
' z! t# [- ?0 u; V% H! f PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
: Q" [4 \ y( _6 d
, h" }& ], {. F( Z( [ BYTE aPacket[5] = { 0x17 };0 s9 P+ K2 z& T. ]. v0 ?
::memcpy(aPacket + 1, &phand->nItemNum, 4);; E1 ^/ j; h) A+ ~: S7 v, p
D2Net::D2SendToServer(5, 0, aPacket);* g0 i0 r, m; v+ U
return TRUE;4 \) _! A6 O1 H9 s+ S' Q3 O0 C% |
* r/ @; a) W$ n0 I N/ w c }
0 V& z8 w+ g: ^1 W
& m, q6 s4 N" v" Z$ D' \+ t static BOOL PickStorageItemToCursor(DWORD dwItemID) J3 Y6 ]6 F2 h% T y3 r
{# d& m! c/ b$ [" F Y H; \/ {
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
7 y& q5 z; \9 e9 s6 j" W4 E/ e8 d6 r3 _' h" g% [
BYTE aPacket[5] = { 0 };' K5 t) {- c7 w# P8 w- u
aPacket[0] = 0x19;
8 ~) t; G6 x& M3 G ::memcpy(aPacket + 1, &dwItemID, 4);" b7 q* y. e2 S9 V3 L9 r5 w
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
# b4 X* |9 i8 |1 I D2Net::D2SendToServer(5, 0, aPacket); t1 Q# }4 R* s9 j- `
return TRUE;
8 I8 K3 ~( C6 X" ~ }$ E. w1 u5 x" c' p# m
0 o7 Z! L8 i; @* F2 E static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
7 Q) G$ N% h) m& q! V1 k {- C& o0 s5 Z- f2 m6 x
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);3 b, J/ ^, K4 e0 p
BYTE aPacket[17] = { 0x1f,0 };) |7 ?! E6 [5 y+ k# o
::memcpy(aPacket + 1, &ItemID1, 4);
0 l$ ^- e) x# n9 w2 |) O4 M ::memcpy(aPacket + 5, &ItemID2, 4);+ E$ n" t T9 T. `3 v+ Y i1 L
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);* d- T* r$ R) C; A
D2Net::D2SendToServer(17, 0, aPacket);
$ ?2 m- C' u7 w return TRUE;' \/ g! w9 K6 Z9 _4 u' [
}7 _" v0 s% T# v* A0 y5 g m
j. G2 B8 s! T6 K- i9 f3 s static BOOL Transmute()
* U5 y0 y/ l j {
[8 j# A( I) @& O h+ s6 S if (!(*D2Client::ptPlayerClient))return FALSE;
0 [- c" }( [6 K% z. T8 n
+ V6 R O. p! i- `$ s if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
; Q4 O7 N5 O" y& D return FALSE;
, v6 ]5 z; a3 g8 _) ], W# W
* v' }$ r& i1 r+ E PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);# F* P0 d' X2 {, ~
BYTE aPacket[7] = { 0 };
1 P; s6 a( @9 S: S aPacket[0] = 0x4f;. p3 C+ Q4 C: {
aPacket[1] = 0x18;! K. z) ]6 f6 J3 M& ~: o
D2Net::D2SendToServer(7, 0, aPacket);' Q1 Y7 {! y( o! S( \' P
return TRUE;
: [6 e1 N# H+ q }5 V% e& I3 L* M& `$ w% n
};% ~+ c2 k- K3 H7 {: I3 r
! O7 u2 a) Y: B( k5 \
|
|