|
|
转载 j- k$ B1 D, N/ ?+ r8 z0 f4 ]: G
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点: v' }2 s' ?( C3 r! J
D2Client:& |! v+ R9 W/ h4 a0 B9 U4 f
6FB20AE1为拦截输入框(用于获得命令)
, v4 t* Q( B1 _) _: H2 G6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
4 i( O% W' v1 q s: V( Z6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
9 e6 W- `. [ N, }1 H/ s; I6FAF4230为hackmap的loop点 我用的hackmap导出位置
' l4 q7 f& ]1 m2 M/ X) y F+ U! ^; q
/ ?( a" B1 Z5 U( d$ T. {$ _. D; g F- O
% v! T3 Y' m, ^* P& q$ J发包函数:
8 a, {7 J6 o( p: K: l; b6 g! P# aclass D2PKT_ITEM2 E; @0 B2 n4 K
{
; @2 {5 K; g! B* ` _8 ]+ I#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
" o7 p! k! }) \#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
3 [; a, w2 O$ C3 Y8 d#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上% f8 J- ^7 N5 X3 C8 y/ R& f) N
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上8 a" p$ k1 v* j, T
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
; \% X# O0 u+ U. n! I k2 O#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上' m2 l) e, P6 J( f! ~: I
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏/ I3 z6 K/ p. Z% q' X! _7 ^
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上/ u( \6 G. M+ ?
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
3 H- a' [! v2 L( C i#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
4 n- k( [3 w* i7 Z: Y& d5 G#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV. ?& R: {9 @# t- R+ f3 K( E
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 : G# W& E1 F6 o4 e& W
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
. o2 W4 ?, k. T+ ^2 o#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上$ b$ d! L# {- _; l+ v, d9 c
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
( b; D8 l+ Y$ Z; K' J#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
. E! \, l/ [* S% o" R4 K0 ^#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -3 g1 O7 ]* i4 {8 i1 p7 _" |
; U! ~* W0 w/ l% m
#define PacketItemMaxTick 150( L) u' g# C8 n5 ~" A
#define PacketItemPickUpTick 20
0 Y* w; m9 X- K* W( m& ?# I' b
5 l& B5 a4 ]8 ~/ Rprivate:
( _: X( i, W7 `9 J& ^; h; H static DWORD _PKTItemTick;
( L5 N' X: `: ?: K static DWORD _PKTItemAction;% Q0 R2 i' t; D
static DWORD _PKTItemID;
' N$ z) j% D3 j; l4 C8 A' W' r static BYTE _PKTPKTType;
; P4 [+ F* p; _, y; Qpublic:
; S0 i) c$ [* C4 I static DWORD PKTItemGetTick() { return _PKTItemTick; }' x* i# y; y2 e( s7 N
8 t! ^% C; l6 e' ~/ D6 W: R
static void PKTItemRelease()
- S* Q5 E; g% t2 y4 J {
/ {" S( y K4 a* {: c _PKTItemTick = 0;# |+ n5 q$ P0 x6 j) V& M$ I
_PKTItemAction = 0;
) t7 q8 l/ b# }% w- U" f6 | _PKTItemID = 0;
$ t+ W5 {1 c+ Y _PKTPKTType = 0;
9 Y- b; K4 b2 n# Z1 R }, I1 U! [& L- ]9 T" E
7 H; E- o. C+ ]9 X8 X+ F
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
& W8 F+ j1 j7 T0 M4 _* O9 E {
9 b0 t; L, Y: v6 ]: S. a t _PKTPKTType = aPacket0;4 @& [! {6 Y/ c6 A1 b5 }
_PKTItemTick = tick;
) S4 `. L1 l+ U- c5 \) Y _PKTItemAction = ItemAction;
4 n- H4 a) C3 r# Z, B+ V _PKTItemID = dwItemID;3 l' J# F: c/ x5 @
}
! M$ u( j, s# y" i8 |, u4 n+ I' e8 ]8 o2 Y( |
static void PKTItemTellW8(DWORD tick)
, C7 S5 w: \& F# G8 l/ l {
2 n3 W0 G& @+ C$ ^0 J/ @7 h _PKTItemTick = tick;
6 N& u b2 {: f! _: m4 N, E }& ?1 |. m$ t! Z
6 ^# l9 H" ?, N; J# H: p- e e
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
! `! S0 S" d. }) p0 D {$ e; h+ m+ R' J" |1 e0 _: d, o
if (aLength >= 8)( L3 G% A0 Q# ^$ b* D/ @7 [! r
{
7 M6 j: o; k6 F9 ?) {$ U DWORD dwItemId = 0;
% a# d0 Z. l! O5 D memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
( m# |' d2 f$ \$ J% `! c if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE3 T4 Q. \* a- `+ `8 N% U: y
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE, [: {9 p- ^0 b& H7 s: p3 f
&& _PKTPKTType == PACKET_NEWITEM: s/ t2 P) ~% p- }) p
)# |! l/ C; O2 r: p
{
, ^0 w: r3 K: S; S( C P if (_PKTItemID == 0 && _PKTItemTick)' ]/ e0 @ M8 W; ?( b1 D
{6 T; z, R6 b* h" @. o0 ^8 t( k
PKTItemRelease();# }3 I# p. Y/ f/ I
}- \( f& F5 \" C! n2 o7 B% y1 r
else if(_PKTItemID== dwItemId&& _PKTItemTick)
) O- U6 M2 [ E& W/ o7 r* z {
9 n, b1 c* b& k7 Y; k' g/ u# h# @ PKTItemRelease();) `7 X# m! n T: C: M# r
}
^8 _1 { \. N3 H- s8 T, i5 U, j }* T) B8 B: W' ~' h3 \: [$ v/ y6 l
& a# |; E9 G, u3 V: K }
# a4 t6 W: P8 z" X% r( _/ e, J3 [. N6 n }* K. W3 j' k% U2 X$ ~
: A6 r7 k% g; `" F7 ?
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored9 ?, f. Z2 p* X+ b9 s# a: d
{! J1 P* T5 @! m* P" X. }- N
if (aLength >= 8)
5 K3 u& ]1 I2 K {6 ~3 f% s8 L) h4 }
DWORD dwItemId = 0;. B) X ~7 h3 m
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));. n {* R' p! q/ D1 V ]# n+ _
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE% z! s; h& y9 k9 @1 `( h
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE% i# X Z1 `5 E" G, t0 d
&& _PKTPKTType == PACKET_ITEMACTION6 ^: d# Z0 n0 _' o, F+ U
)
+ Z! s- s; v/ `) M4 ` `! Z {
$ b& o& ^, }& ] if (dwItemId == 0 && _PKTItemTick). T5 t5 D* R a( a7 L" P: u3 H/ l( m
{% R9 W7 @* n8 g8 K! K
PKTItemRelease();" Z( e4 ]/ b1 |5 K. L
}
* ^! v3 \8 \$ k/ N3 H/ }/ ~ else if (dwItemId == _PKTItemID && _PKTItemTick)) d4 \0 }2 [/ }" D2 T
{* o: H& ?( Z b: {: n2 d$ Z) B9 K( I
PKTItemRelease(); O& I; c! W. ~! N: _: `, L, ^8 C
}4 t9 ]1 D4 Q* \
}* e' K' U$ x) |# a% m q: l) b
/ k& n; }& U9 v1 f }( A3 Q+ g+ n! s8 E0 ]
}/ S5 [ Z+ N# k; V% q
; t# Z3 d0 o9 s& m# Z0 E static void PKTItemGameLoop()2 Z/ Z8 P) _' {9 w
{6 s/ r3 k' i; g
if (_PKTItemTick > 0)
" i7 i. X3 M4 j+ @ _PKTItemTick--;
$ r& t7 Z) X5 Y `6 p& ~ else if (_PKTItemTick == 0)
- d9 s/ x6 j8 H a! | PKTItemRelease();
7 f0 v6 L; r$ v6 }/ r }0 K0 h1 A. p+ T; Z! ?
0 e* V$ n1 t z: r9 O; O static BOOL PKTItemCando() ' E7 ]0 n' `9 n4 }; Z+ }+ N; d
{
. T$ N4 J; f1 x% S8 Z if (_PKTItemTick == 0)return TRUE;
- d9 \6 S4 N' M7 G return FALSE;
: T! p4 C/ ?# u }2 B. q. R Z* |: I2 m. e: y
! o8 t0 ]) H4 P+ `. B/ s
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
) T' Z# R6 M, F+ B2 k' k9 f. s {
0 V& F4 P" g% ^5 I. h3 C PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
+ ?1 R) Q8 L; W; t BYTE aPacket[17] = { 0 };& C, ]. L' M% r& p
aPacket[0] = 0x32;. x4 t2 S& U; }' y2 R$ A9 b. _
::memcpy(&aPacket[1], &npcid, 4);
( [8 Z) @, l$ u4 O l" ^) Z: ] ::memcpy(&aPacket[5], &ItemID, 4);8 V# ?3 t" i3 u( x# R
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
. s: T9 X7 X6 Q2 J+ B+ A D2Net::D2SendToServer(17, 0, aPacket);& e% d a- x1 U2 M( t( P
return TRUE;6 |( ?- O3 e8 E! E
}+ A! _0 y. N# t: D5 C! Z. N- ?
- f* i8 L" n3 l# g4 \6 z) u static BOOL SellItem(DWORD ItemID, DWORD npcid)
! B1 {5 c2 F( o! U1 }$ m0 ? {0 T6 M1 g w0 D' Q& o
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);" ?9 Y( \% W$ }' V" ]6 }( ~
BYTE aPacket[17] = { 0 };
. l; C1 G- F- W6 t! f" J1 O aPacket[0] = 0x33;7 }' J, @" J8 r# s( M5 u% G4 h
::memcpy(&aPacket[1], &npcid, 4);
* l! q$ ~, q, C# n. ~& g- c7 k { ::memcpy(&aPacket[5], &ItemID, 4);; O# v. k: }0 m
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17); r" I( O' s3 n* E2 q
D2Net::D2SendToServer(17, 0, aPacket);9 e. H" B" }0 A D( }
return TRUE;2 q, F: U9 e5 E7 D J" V! {
}
% J& d3 w, m$ w6 D: L3 o" q) o
" G( l& K0 e: z( B static BOOL Interact(DWORD nUnitId, DWORD nUnitType);" {; p5 g( L5 D D( ~
9 u0 x% u* E) q% [& \ static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
$ [4 M X2 j" l. M9 H& Y0 J( h: R$ y3 k5 v+ Y! e2 `
static BOOL OpenCube()
9 a1 s. D* A* l2 D9 h {
# B: S9 X N- I! W8 i if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
2 ?1 E* n% A7 `4 }* j9 L, P$ t2 A5 X' W7 J {8 s* r$ L
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);* t2 Q3 O6 h$ V# T" q! {
if (!pCube)! C/ t# F+ }. W( ~
{( {- \( x! i5 ?$ z' S+ u* J! I9 x
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);0 R' { T2 A: p$ @$ R+ t
if (!pCube)* Y3 _' V& V0 w5 b# b9 [- E
return FALSE;
5 b6 h- A- T7 J' u3 } }- D; C& e7 }. b6 f1 `
PKTItemTellW8(PacketItemMaxTick);
3 _4 i3 O+ k: X0 l- Q; Y2 }$ Y8 f5 m* R4 ~, A) O$ d' V7 D
D2CoordStrc mypst = { NULL };
( i3 D" X/ ?% }2 L7 D D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);# y( b! D, t2 y5 U5 {, ^0 c
) b' ]* ]! B8 ~* \8 @% b BYTE aPacket[13] = { 0x20,0 };! k* V/ S e$ G$ V: V
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
" o6 Z4 O# {( w: e1 H ::memcpy(aPacket + 5, &(mypst.nX), 4);. f$ ^2 K6 p. a
::memcpy(aPacket + 9, &(mypst.nY), 4);
9 M$ J7 b, f& Q6 b$ T2 L! P D2Net::D2SendToServer(13, 0, aPacket);. f0 k; D; n# ?. _
return TRUE;/ L0 b% T# f7 x$ d) V+ R+ u
}" w& o5 k8 ~0 w4 i9 C! L0 f
, O) N+ `" O1 k0 o
static BOOL ToInvxy(DWORD x, DWORD y), s9 V: s$ J$ N
{3 U; n2 \$ ~) A0 d8 A
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
3 F' L8 l2 I4 Z# [ S: D/ a$ i: J7 A4 s6 s
if (phand == NULL)
0 y) u9 H4 x. U. I0 ?! B return FALSE;8 y) b( ^% X x4 L5 r6 ?) b6 r
* r9 S/ }4 C3 a9 y% r* i, \ PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);. k" y( |8 K- q7 `: h X7 m
# h/ W- i. A* x/ |9 y BYTE aPacket[17] = { 0x18,0 };9 w/ M! @; V3 k H1 g# P
::memcpy(aPacket + 1, &phand->nItemNum, 4);4 z/ P9 J9 H+ m
::memcpy(aPacket + 5, &x, 4);0 V0 K6 n2 `! L' @) G! | B
::memcpy(aPacket + 9, &y, 4);
9 ]* N+ |% \- s3 v0 N+ L. J) m D2Net::D2SendToServer(17, 0, aPacket);$ k# \% j$ y* v! M' a# o# ?
return TRUE;
' F: j0 t9 c m: [: Y( y! h }2 G7 o$ f& N5 a! {
" a2 m+ r3 H5 m2 L3 b: ^4 J4 Q3 x static BOOL ToInvRandom(BOOL bBagFix = FALSE) ) w8 e% _# U; ], e* V2 J+ j
{
; n6 S9 V) q2 Q# i UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
& s# o" P* h+ R5 f% } if (!phand)$ w S; r! h8 q: C: S& K0 O
return FALSE;
- @7 _9 }2 F0 o- I8 m+ v/ }) p8 S int desx = 0;
1 ]! ~4 Y ^( a$ L int desy = 0;# c3 g9 m; R0 a6 f1 M( Y* h
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
9 n( n+ i6 u" R/ U( m* i3 i' u6 V {6 i( g: y" D% k
ToInvxy(desx, desy);2 p5 i( W9 J' }; q: r N4 ?
return TRUE;
: s+ U7 I9 m+ c, V" x; ~2 {8 | }
) f5 f: D: u$ d+ I, J* ~, q5 k return FALSE;
. z) r. w5 a1 e5 M6 s }
% j0 j( O* b- G( g: ^5 o6 S! S0 y1 C1 f; I
static BOOL ToCube()! d' _$ w# F4 t& `7 v: [
{0 e! M0 @# v) i* o+ n
if (!(*D2Client::ptPlayerClient))return FALSE;
& E4 F4 K- J; I) h8 J3 e$ Y. h; @7 j7 o$ d
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
7 Q7 c: n2 k B. \1 ?# _ if (!phand)return FALSE;
. Y# J9 C4 w. ]1 {7 ]% V/ O) _
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
, z& v6 ?2 H3 ?+ t- Y if (!pCube)& I* Z$ E- Y# |
{8 e0 }0 _" G* t, Q% r
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
# w- `5 Z, y2 E6 H( _0 P' f if (!pCube || !pCube->nItemNum)
5 Q+ [; w8 Y7 W' T return FALSE;
' i- H( X0 V# ]5 g; i# l }
; n8 d; r8 h. Q6 |
+ |, X" j0 w: d if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
B4 b+ g) Q r9 ]% E4 D4 e return FALSE;
# f! Y1 b5 i$ f! ]3 v( P% x% @' a# L0 ~
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
8 m: b4 _9 V) `+ |1 F" K- J5 c4 @$ n P: p& Y/ O/ t1 c( [
BYTE aPacket[9] = { 0x2A,0 };
# S! I3 x0 g# E$ q$ {2 F" I ::memcpy(aPacket + 1, &phand->nItemNum, 4);$ }/ i( l/ F3 B' @; S
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
) G: o8 A6 V. ^& H, V2 @9 @6 U D2Net::D2SendToServer(9, 0, aPacket);
( u) _( ^" o% P1 q3 p% S return TRUE;7 t. y. z- i5 R S& K- ^: r" b
, P. g$ |0 T4 p) \, F }& {1 j* {. S: y$ `8 h! \8 \
1 n" F( r$ \% V3 r* e
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);3 x+ p q5 h; a" l
$ L# L5 L; g1 \ static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存 {3 h! \# }5 |/ G1 X
{* B- \5 A2 R: }, {2 l) _0 p$ I
D2CoordStrc mypst = { NULL };: D# T! { b: } i3 F
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);0 v X0 U5 b, B: y: b* \
; o+ L! I P! i7 y( u
if (!mypst.nX)return FALSE;# r- N* y6 Q: D2 v5 K% R' e4 u
) d$ G1 i2 Y. C* O0 j
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);: P+ [2 O2 j# D% _5 d
' ?, I8 Z, D* H! q BYTE aPacket[13] = { 0x20,0 };1 H8 G/ ~+ D7 X% I5 b- Y! v
::memcpy(aPacket + 1, &dwItemID, 4);- a8 K) z: O! ^+ J7 B- M4 X* i( j; V
::memcpy(aPacket + 5, &mypst.nX, 4);
% J. o \) T, C/ A) e ::memcpy(aPacket + 9, &mypst.nY, 4);% T" K: I/ q9 L# O' f
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13); k0 k' [( q- |
D2Net::D2SendToServer(13, 0, aPacket);1 \( O. m/ y+ n! ~. Q2 L! V1 x9 ?
return TRUE;& [* x7 w- p- |! e# h/ Y) }
}
/ N8 b3 a1 G5 Z" o3 l( R0 r' z* W3 M4 v' n: |1 B. o: W
static BOOL DropCursorItemToGround()
n1 v' k- A: G+ H1 A7 H% I* x {! v2 }! s; m5 V" Q' k! Z! ]1 \6 q
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);- T, @( Q n, l m! M* T+ A
if (!phand)
' n$ I5 {, R2 j, u, n: _- x return FALSE;0 r! y0 w3 S- R1 K
6 a( |. T3 ]$ W1 D D
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);" |1 A- R d; m6 e- o0 v/ Z
( I$ g' \ k$ s% R l1 Z& T' H' @
BYTE aPacket[5] = { 0x17 };
! C# ]# S3 j, r" m& f( S# g ::memcpy(aPacket + 1, &phand->nItemNum, 4);
1 F% H9 \7 ~ T* D& l D2Net::D2SendToServer(5, 0, aPacket);
6 T8 f/ G, t: c7 J3 c" Z return TRUE;
' q( W7 K" v( a: M3 I8 v2 i* @& P# y, I9 r! ~5 }
}+ g! F% ] E9 `1 o& q7 a; `1 [
' M% E' N# l; q. [8 t- v0 M7 Y
static BOOL PickStorageItemToCursor(DWORD dwItemID)
+ r2 N4 k/ c* P% G {
% c. ?2 D$ c5 L PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
( `9 e# Z2 b5 U' V0 ]* ~; U+ m" _3 K1 _' \+ b0 ]" l1 P3 O
BYTE aPacket[5] = { 0 };, K7 R8 w( E( k2 |8 y7 h' y
aPacket[0] = 0x19;% f2 \: x/ @ L% Y
::memcpy(aPacket + 1, &dwItemID, 4);' c4 n$ f/ C7 ?! |# R J1 \9 I
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);0 I1 y% @4 u# y; b6 M/ I. r4 v
D2Net::D2SendToServer(5, 0, aPacket);) z* m/ r+ b. P
return TRUE;
' \( C- v" z) X: s- } }' L" U# A# p6 }1 b
9 ?+ j1 c( |% ~" O
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)* `1 ^: \. a5 Y# o
{* z9 D; \8 y0 c. L# g
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
, e# E; E8 H5 H) q- z BYTE aPacket[17] = { 0x1f,0 };
! [( O) n( m( t% v8 v ::memcpy(aPacket + 1, &ItemID1, 4);; f8 e: g8 g4 H t# U4 n3 C
::memcpy(aPacket + 5, &ItemID2, 4);
6 u, P. \% m, m5 [ //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);1 G+ @$ s$ h: c) r/ n
D2Net::D2SendToServer(17, 0, aPacket);
" b) X9 q+ ^; y! b. X' S% S return TRUE;4 @6 k. [7 h- M2 K) ]% l
}
' h! e; }1 M# K2 Y7 J: k. e$ K
+ {. k( F, o- B% u4 A# {7 G" x2 U static BOOL Transmute()& M, r* O$ ^2 M+ [3 `+ Y
{
7 B5 V$ L1 _6 _. k% O$ p if (!(*D2Client::ptPlayerClient))return FALSE;
3 Z) X% z) s7 f# x5 L: Z3 f Q; ^6 V* L/ @+ }. @6 N- B, I
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))/ A* @4 f I: I
return FALSE;- W- N9 V1 J. F6 c; ^
# p0 u8 [2 v) s' X PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
" i" K/ T# B# k0 j' i7 Q' S BYTE aPacket[7] = { 0 };
) ?1 H2 K7 F( `, t) f" p; J9 X7 h, q aPacket[0] = 0x4f;4 ?3 k" e( ~7 Z4 n( ^; v. z1 d! Y
aPacket[1] = 0x18;
( S( r0 S1 Q5 H" u4 W3 H5 A) g* J) D+ v% i D2Net::D2SendToServer(7, 0, aPacket);' p) Z/ L; w/ q( }
return TRUE;# [+ C4 w! C9 n9 u
}5 y3 k" T6 t1 G1 Q( [
};, t4 j3 l: Y r$ i6 c
: T7 F6 B* N" [- O: T( j |
|