|
|
转载
+ A! b; ^5 q9 J# F! h0 n自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
: X; W. Q1 V& p8 S! T, o! KD2Client:+ i- `4 ]9 u; N7 t( {
6FB20AE1为拦截输入框(用于获得命令)) L9 U* T; t- f; r. n
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
5 X8 V! v! o6 }, n. k7 b' g, P6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发" I" F; P- j: }' J1 g& y4 ?2 O4 K
6FAF4230为hackmap的loop点 我用的hackmap导出位置* J# U2 C @( V9 m" H% F( Y
W/ U/ z6 x) C& X9 J, K& ^
9 R- n! G+ J, X# a# | W1 s- a0 y
发包函数:6 b! Z1 h- t3 i7 i2 H
class D2PKT_ITEM
+ v' i8 Z0 D3 u5 m{7 }0 @3 c% x' c( q/ K! V/ ^
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
& `" ?3 W" d: n% g u/ w6 ]' y: M5 J#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多4 q' G1 K6 n& a5 Z6 C7 L
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
( W. E7 a* e! o, `$ |#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上' f# O6 _$ W& D" S( A6 W
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
3 u- n# G) }3 y' R#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上1 m+ e# A0 D- d
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏/ N+ F8 z9 V2 I/ }8 l% ?9 ~( J
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上0 W4 k! w, S% v/ B1 U$ P
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -9 [, m* \+ v' n; b& B0 G
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
) r0 M7 b0 q3 K% C#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV2 }, x W5 L7 @' m) O& M1 Z
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
) A: R$ `- J- f#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
1 e( |( g# }/ b0 f1 g#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上! M+ E! ] U w9 R( I8 i4 N" f
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -& A( x! x3 z* w% A
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上4 {. j- }1 u, D) Z8 t; g
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
& G- i1 U7 I* c% d: T2 p- _6 |: i- T1 w( W
#define PacketItemMaxTick 1505 y# W. \4 s+ z/ O
#define PacketItemPickUpTick 20! E5 @& E' m2 n! |$ s
3 S; U2 q" b' h% E% X
private:
, \ Z3 O+ g+ [/ } static DWORD _PKTItemTick;
* f4 B+ f- n1 ~, L& `. p static DWORD _PKTItemAction;
) T, L4 l0 k" \; x$ v static DWORD _PKTItemID;1 T W: \7 S/ i9 e8 X9 {! Y2 ]
static BYTE _PKTPKTType;
# \- `5 l+ J! G; `1 Ppublic:
" Y. r4 h# p C+ e( d. W& y static DWORD PKTItemGetTick() { return _PKTItemTick; }4 C: T, b- t* T7 M9 ?) x" k6 K
2 U. X4 z' H, f1 y7 Z static void PKTItemRelease()
5 m5 o8 s* q" o0 c! y- E: ] {0 M% \$ n3 N- V8 g! M' L: ?5 W- R
_PKTItemTick = 0;- H- L& [" _5 T4 Z* V
_PKTItemAction = 0;
7 b8 D& u# T, p _PKTItemID = 0;
7 D" t Z A) B8 x3 I7 X) }+ h7 q _PKTPKTType = 0;5 `" M8 u% H8 Z+ a
}; h( c* |/ r+ [5 M
0 [) ~( b3 l A. I; C* u! Y
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) " y2 K' W1 g: M
{8 o# |9 ~$ ~# n& k( {6 n' ^
_PKTPKTType = aPacket0;
; i: R& X1 X8 X$ v n _PKTItemTick = tick;
$ K# I* w' L. a; s, p' A _PKTItemAction = ItemAction;, S. W1 z( U# b0 k4 d5 c
_PKTItemID = dwItemID;( P" A6 h B* H0 t- q: g8 L
}
3 E. f* S- h0 R3 _2 @, A0 G
) F( T# C3 k. H4 y2 X* r static void PKTItemTellW8(DWORD tick)8 R& F8 Z* ?1 }% d2 ^
{. c7 ?$ `8 s+ j b2 N! ~0 a
_PKTItemTick = tick;
9 z/ e1 _2 M [7 Z9 @ }: H9 G9 j& m$ l0 p: A
3 {: b, k( H! \4 i static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor2 a. C# T; n {& B8 [2 E- ^# Y, R2 _. D
{
4 Z' ^9 `. g! V* U( }! i if (aLength >= 8)
# z) s u( ~+ z8 v3 b4 u {
3 X9 @5 W5 T: F' g DWORD dwItemId = 0;) Z& M1 c6 H/ r, f4 ~( b4 D4 Z f" x
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
$ G! u, Q1 o. V% g if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
' Y4 G4 U# o6 \4 E2 h, S && _PKTItemAction == ITEM_ACTION_TO_STORAGE/ @* L1 l; ~2 n6 |
&& _PKTPKTType == PACKET_NEWITEM! t5 R$ W* `) a9 y+ F
): F: X8 s" B ~3 H
{; d! s1 Z/ n, H$ ~
if (_PKTItemID == 0 && _PKTItemTick) ?, z1 f r- ^- S! x2 A: r
{
3 Z% Z) x3 M0 H4 L6 p PKTItemRelease();
" t E$ d: y. | S, q }; h) }0 I; Y: l) {
else if(_PKTItemID== dwItemId&& _PKTItemTick): F7 _, l7 ^4 n+ \* n3 A
{9 q/ F4 g! d2 r
PKTItemRelease();
1 Y9 ?! ~- K. T, o; i }# P: V; ~; o+ f; c3 }# Q* ]& ?5 I
}
3 b$ m) K. L2 ~6 Q
3 e! G0 p* W# Y, h1 ^8 j0 a }) B& V# N; T: w4 v1 V `1 m
}
3 K, O1 g3 y' |# i8 D
+ N8 H+ b, e" }( ~+ @) B' x static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
' u" i1 t- E: C. s- D {
% B3 n" P5 w0 f) W2 f+ x/ g if (aLength >= 8)- F6 T& g7 e* W
{' h7 t6 f$ M2 V
DWORD dwItemId = 0;
; r; }1 X6 G# K% v% ~ memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
. s8 g4 q/ j# e3 R3 O if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
* c' p+ L8 F+ C: z# d && _PKTItemAction == ITEM_ACTION_FROM_STORAGE. s; I$ g, g9 D7 s) d( E
&& _PKTPKTType == PACKET_ITEMACTION/ \- i2 i: \0 s. O
)* A. }' X1 k/ x( q( Z3 w
{: R9 M. z5 Q' h$ J7 h M( }
if (dwItemId == 0 && _PKTItemTick)5 [; x) _& W5 N' [; `
{
5 P6 ~3 q0 W+ t0 v) q d& [ PKTItemRelease();! N8 x0 q8 H$ k1 |' ~ g( n
}2 Z6 X9 g1 h+ x0 M6 L! \6 h* N
else if (dwItemId == _PKTItemID && _PKTItemTick)* r. v( p5 b" _$ i4 r( ^3 E
{
; n" P" [9 ?8 s, U7 J; b PKTItemRelease();
* L8 K' i8 l' w }
( R5 d5 ^" y; b( k8 x: n' {! y) }2 B }1 p* W+ H3 K9 b( {- h
# N A, u% l4 z) M4 @+ x* { E }
# r* p5 W) c6 ?/ f8 I7 k. i }
8 `4 L. z# c6 i
0 x- h% g4 ~9 [% v# Q static void PKTItemGameLoop()9 ?: e) |2 q6 N' D+ m: Q* D- W
{
4 q& m, ^7 l0 o) F- F if (_PKTItemTick > 0)
: P% K9 V# H! Z- i* F _PKTItemTick--;: G u4 G6 V, t9 f6 `+ ^
else if (_PKTItemTick == 0)1 X. y% G, b- W+ c: y- U+ l
PKTItemRelease();/ m9 u5 I+ N( q3 n% z0 ?4 w
}6 C) v1 C4 _* F8 Y6 E
4 N7 i- G2 [: |- c- U static BOOL PKTItemCando() # |, u. k, j4 a. ~. F
{
1 W9 q4 W7 p1 U. K+ Q if (_PKTItemTick == 0)return TRUE;
, l9 L. u. v; ] return FALSE;
4 Q- ~$ ]8 Z; {6 P5 f3 ?4 t }
4 c6 U6 j' M$ L$ }4 f" d3 a# ]' Z& F& z' A/ }+ X
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
- J* J# @: b$ k# l5 h! a W! q {
; q9 n' y: T6 G/ w9 o% W x$ \$ H PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
3 f1 U; d c/ h) `* ~' M3 t) [ BYTE aPacket[17] = { 0 };" I$ y$ ]6 Z7 h) m
aPacket[0] = 0x32;) p2 T' ^1 }$ m5 f1 d
::memcpy(&aPacket[1], &npcid, 4);
t$ e9 }/ R' T7 \ ::memcpy(&aPacket[5], &ItemID, 4);8 @; Z' }- B( U! V) x# z
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
7 a( d8 d* w7 Y8 D/ j D2Net::D2SendToServer(17, 0, aPacket);
$ T5 i' B, l. }8 c return TRUE;
$ {: e# P! t1 k D2 } }
d- |; S0 t2 q' q% y( ^3 S/ o3 E/ J- d
static BOOL SellItem(DWORD ItemID, DWORD npcid)& q$ I' J! X: W2 O) b
{0 {3 Q, N# O& i: {1 j' ~- E/ C
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
6 \1 K4 W' W G3 T8 F BYTE aPacket[17] = { 0 };
' g$ ^% z5 O8 D9 E" e aPacket[0] = 0x33;# D p' r9 j9 V
::memcpy(&aPacket[1], &npcid, 4);4 [" C$ M+ I5 [* s9 c
::memcpy(&aPacket[5], &ItemID, 4);8 s; A2 b7 n5 T( V! D' l
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
, o6 }4 x e0 V& f2 ~9 ~ `; K D2Net::D2SendToServer(17, 0, aPacket);& Q o# z9 P* w
return TRUE;/ p* h8 e. Y1 o' N2 g
}. N5 T) B6 G3 l. @# W% e$ p1 B5 ]
" k( O6 A& ^' b* Y+ L2 e
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);" X2 I5 ]* _ t
/ ] N7 t+ D+ g1 K) P2 k* X
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);4 C% o: @( m a! ]8 U3 m. }
, w" S7 o$ \" o. p static BOOL OpenCube()9 r; f4 \# K4 ^3 l; o. y6 R* Y' ]
{4 ]& r: d- \; v+ a
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;. d& Z) h* t, u [3 |6 J
8 r, B/ r4 Y5 z v# s- X UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
3 t4 Y5 s( U1 J- A C9 ` if (!pCube)! D( v: _/ N7 n* i
{
7 i8 m5 W: s& N( z7 v: ? pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);' o; ?% ~. O `. _2 h
if (!pCube)
( P% G2 K3 B; u, ~4 w return FALSE;
3 ~5 f( P6 v z: J+ Q b }
/ H7 L. l- n E8 x4 q9 p: X PKTItemTellW8(PacketItemMaxTick);* M7 J- V7 z N( q( D
" B( n* F0 p. S/ |) | D2CoordStrc mypst = { NULL };+ n7 c) x, z% I5 l) d
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);1 s3 k7 a8 p0 ~5 @* `. m( \' ]
1 M0 t" R* R: b3 i' b
BYTE aPacket[13] = { 0x20,0 };- I# @3 Y3 w/ G0 I& l+ N
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
0 w% H, }" |" t- p9 B6 D ::memcpy(aPacket + 5, &(mypst.nX), 4);% b0 J7 d% Y3 O8 b
::memcpy(aPacket + 9, &(mypst.nY), 4);" p/ w' ^5 x/ d4 I
D2Net::D2SendToServer(13, 0, aPacket);$ v i7 t/ o+ @
return TRUE;
3 w* O% b. H' P8 s4 z6 q }
: x' J: ~/ h0 L: V/ r3 @/ Z& r1 B9 L3 y/ M0 z% J' `" x
static BOOL ToInvxy(DWORD x, DWORD y)
& w! ?3 |, L4 M: z8 i9 B1 v; } {/ H, Q5 Y4 F ~+ ~% @) g
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
$ V6 E( U; C. d7 |& w, ^6 d% @2 @* P- O" s
if (phand == NULL)( z% Z# ?$ V' k+ J7 {0 K/ o
return FALSE;. t, R) b( c+ a% {2 p/ X* {: S8 o
9 K2 z+ ]8 `" E- ~, D! \/ N, S PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
+ h& n8 h) c! Z1 a. s. _+ F3 |+ \6 q% q0 x' r4 `% W
BYTE aPacket[17] = { 0x18,0 };3 v2 g# L- _. P+ p6 x" T0 a
::memcpy(aPacket + 1, &phand->nItemNum, 4);
# C! j# a7 Q; I" m, z ::memcpy(aPacket + 5, &x, 4);
6 t5 ^8 x( S6 i ::memcpy(aPacket + 9, &y, 4);
4 o* W; o1 ^2 i# q* c5 t1 J D2Net::D2SendToServer(17, 0, aPacket);- N [- k V8 c. B
return TRUE;! a0 ^! Q4 e. i( D1 |
}
/ w( z, ~9 [+ Y c; @
, S2 a. q& ^! k: N6 s% u! f$ g static BOOL ToInvRandom(BOOL bBagFix = FALSE) / k/ N) ?* w5 Y2 d( d
{* S0 a, V( r# v. B
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);( I# R& d ?& @ w
if (!phand)8 Q; _% \& t* h7 G) H' m
return FALSE;
; N6 P* @- P0 I0 D0 G: Z2 u6 r ? int desx = 0;7 B5 W! _- v$ ^: H0 {
int desy = 0;
2 i& T! d) _% h) w% X: K: c3 q if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))1 B% }& p, r9 C- b
{* ^6 o8 k$ k0 P( U; c* q1 d& z/ S
ToInvxy(desx, desy);
+ {: r# F% a, X; d! }% f7 I return TRUE;9 f) _4 ~ A" m% [" }* }" a
}! |# ?9 m2 o: H1 ^3 \
return FALSE;, ^# E* W! T6 P' r. I
}, Y1 R; }4 ~7 x2 G$ o* t
6 a, J/ a9 a) U) K static BOOL ToCube()
" z. V4 P* c& o& S {, W. }- L& O3 d) A: a& |
if (!(*D2Client::ptPlayerClient))return FALSE;% q% Y5 E+ Y9 X6 K4 S4 K6 ~
& A; o+ f+ O8 ]* _) [; e* q$ F UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);* I) L% d- F& o; m. m
if (!phand)return FALSE;
) ?2 W, Q9 P3 v2 y5 j7 C0 c
) ]7 C; s% L; C2 V/ T+ {* q* l* Y UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块. l* l6 H2 }4 J( H, D
if (!pCube)/ ]: `( x- j. i- ?( y
{; [ F$ j& n3 K4 H. r
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块1 }, A3 \ C% V
if (!pCube || !pCube->nItemNum) L! i8 p% D. V2 X- g
return FALSE;$ ~1 n" l. v4 c y+ N/ T0 i
}3 j1 E3 X% O; x" G- h0 Y
# Z L% r% z1 M3 W. c( F. b4 T
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE)), z* v4 x$ d3 o$ c9 ? n
return FALSE;
* u. _# a T" F/ d$ d' ?9 n! R, |" c/ t, w( l/ x, r" s% \
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);! R( g' `/ `' V3 }
$ u3 {+ R, m) ?0 p7 N BYTE aPacket[9] = { 0x2A,0 };
) W9 Y8 n0 v4 {3 i ]* t ::memcpy(aPacket + 1, &phand->nItemNum, 4);
* x3 Y7 v$ L6 q4 z+ F, J ::memcpy(aPacket + 5, &pCube->nItemNum, 4);$ t0 S- \( f+ p: X3 {9 P5 I- W- J/ i
D2Net::D2SendToServer(9, 0, aPacket);! N% W9 i( H5 G! _: S
return TRUE;
) r( P" R, Q- f, P& F3 ^4 n2 ]9 [1 L& A. {$ h" J
}) S% w( P$ J4 d4 f5 |
1 Y6 [ F: P' G( Q static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
" k* i3 a( w5 Q4 z9 ?9 U9 F s( M& Q ~
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存+ Y+ m4 ~8 q6 U$ v# z6 {$ r
{
- B$ q1 C8 S! Y' i- V+ G D2CoordStrc mypst = { NULL };
/ N7 M8 k! a; N5 ~ D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);8 e" u8 I/ r. o/ S. G7 f5 T7 E2 x
0 \" k; i5 C# \, u8 O7 e
if (!mypst.nX)return FALSE;4 ?/ Z8 J# h- x1 F4 R8 h
# W7 g* |/ q4 W
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
) c6 y+ @) ~ g8 Z1 A' _% f
0 I7 D5 p: W" m* O2 c BYTE aPacket[13] = { 0x20,0 };
4 ~% }, R$ h% ^7 G! J( i1 h ::memcpy(aPacket + 1, &dwItemID, 4);
+ O; f& u" F/ W2 N ::memcpy(aPacket + 5, &mypst.nX, 4);
1 Z5 |' s2 z; C+ T& a) E/ l: X ::memcpy(aPacket + 9, &mypst.nY, 4);2 a$ d7 r! E: K& ]1 ?/ o5 I3 p
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
; H+ V' m! O1 }3 R+ b: ~ D2Net::D2SendToServer(13, 0, aPacket);
! j5 s9 q* f) u3 Y return TRUE;
2 @' b2 [, O+ r6 }" F; ^5 y- V% L }& @9 d) o: F9 _' F
; M5 h6 z4 R4 ^) A: R4 C% R" ~ static BOOL DropCursorItemToGround()- d4 n# E4 Z/ j/ B1 m
{
8 _$ b: l, _! \/ K; M& o UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);0 ~& k P* }+ L
if (!phand)1 r$ Q2 b( s9 p$ H8 y" j
return FALSE;
8 ^# X+ k3 y& l- [7 e
; \9 E6 ?0 J2 _, P4 {2 s6 X PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);# \% V! t+ V' n" o; k( h
6 M) t( ?4 \1 z+ l1 C" m0 \
BYTE aPacket[5] = { 0x17 };" t* U" |" _, J1 E: c: D. l
::memcpy(aPacket + 1, &phand->nItemNum, 4);
7 L( X8 p! }- T, ?. Y. ` D2Net::D2SendToServer(5, 0, aPacket);9 Z$ c' ?( |( f+ @8 Z
return TRUE;/ i1 P3 K' u2 X, a$ Q
4 k8 D0 i' _4 M! d6 o }
- P( a/ g/ v* Q& {% Z" i. I8 S& w8 P" c# A: I
static BOOL PickStorageItemToCursor(DWORD dwItemID)4 Z: _: q; a9 K6 H
{8 \, S0 q8 }7 p D" h
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);. L3 O3 M* }2 |% ]& @, }. u
- L8 S4 i' w0 \
BYTE aPacket[5] = { 0 };
9 K c# F: ~. ~+ y" |) P aPacket[0] = 0x19;
0 v: l9 `' d: G1 q2 `+ V ::memcpy(aPacket + 1, &dwItemID, 4);
7 K; S0 i1 F" k6 H/ {* I //return D2Net::D2NetSendPacketToServer(0, aPacket, 5); M5 C% Q4 D: i8 }9 j
D2Net::D2SendToServer(5, 0, aPacket);7 M# A: v! L3 M! Q/ x
return TRUE;
% |8 q4 u5 n1 L5 @6 [ }
: E9 x# e5 k$ X. D6 D/ ] f2 k# r) r. k5 D' ?( c: d9 R, p. \
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
( w: ^9 I( t& B& x/ R3 D {
% B+ J5 u0 z9 b, B' q. F9 P$ \ PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);- } `2 y( V" ~* e1 i6 Y4 N. r
BYTE aPacket[17] = { 0x1f,0 };
, [+ Y8 t6 q2 D) M ::memcpy(aPacket + 1, &ItemID1, 4);
- z6 K, t' z% q: y! s ::memcpy(aPacket + 5, &ItemID2, 4);" K/ m$ K/ C; O# h9 h
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
8 n% B* |# ~1 {+ \& [) w3 R D2Net::D2SendToServer(17, 0, aPacket);& w4 Z; p1 M' P2 I, I
return TRUE;
8 V, B, @+ K) S }
1 l( F: R3 R0 e8 p
& f5 c& X( x N static BOOL Transmute()
4 i) c. J( Q/ s; O' [ {, b8 ~6 X3 I; z" j% p9 H
if (!(*D2Client::ptPlayerClient))return FALSE;9 U/ f- s/ f! F
% o% ?7 @; e6 v4 T
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
i; A* c+ b' H7 l return FALSE;0 D6 | I5 E# Q
. f5 d4 e. Q: A" I" P* E0 v# o PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);. }0 T7 b. {6 k5 H
BYTE aPacket[7] = { 0 };7 e" Q/ k( j+ g; H9 }7 U
aPacket[0] = 0x4f;- B7 j4 ]. M' ~( u w" j
aPacket[1] = 0x18;
$ @) z4 M( U6 q$ s D2Net::D2SendToServer(7, 0, aPacket);
6 {# l1 D8 |/ b* s w, b return TRUE;
& g1 S1 u2 j' b( H0 j4 u- O }: o& u4 ` J$ t# H+ s3 h- |5 |% L
};
: z0 K. H/ J' t. v0 a; x
4 ] g1 H" ]: x$ C6 h' T5 [ |
|