|
|
转载! b& C, X B2 K4 Q7 o6 x, b
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
; _7 O( F+ L+ u2 R+ a% p6 \, sD2Client:
! ^ j) i; ^ [. p6FB20AE1为拦截输入框(用于获得命令)7 i/ P! p' Y$ L) \' j9 V" ?
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发+ J, z8 I. I- r1 C: G
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
" G& D# \* S# a! c4 N8 X% E6FAF4230为hackmap的loop点 我用的hackmap导出位置
6 O9 i5 L! I& J& H5 a. b+ H+ Y% Z3 l: N- x$ J& w# I
% w _$ R* k7 `; k4 U
发包函数:
: G; N6 h, F0 ]& G5 c2 g0 h$ dclass D2PKT_ITEM; K1 N1 @7 a8 [1 G8 s
{
3 H. Q6 @4 N0 F& N! f#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上# Z+ c2 T3 N. b/ B4 ~
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多& r3 O0 Y% s4 Q% h3 V) T8 n! @
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
& V- ^3 o3 t1 I% O6 a& ?( e#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
+ @" o5 Y3 F1 ?8 H/ F0 S# X+ J#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
4 T' c( x8 K% E3 ~; p) K#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
( @* o/ H7 b) T8 O! |) Z#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
6 n% }9 r9 D2 H/ [7 T#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
0 L {& c# f/ X: }#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
) h, ]8 K0 @" Z6 V#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店: a9 m" _4 _! i
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV( y3 h4 Q* b. z2 ?
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 , p, M& e# \' L& h+ L* X
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
6 G$ E5 }4 E# f+ w% m#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上. _, D( B% _) J3 z+ y
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
% L2 K y4 G/ s( k2 m) Y2 m#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
L8 ^( y* L8 x8 a7 y7 a#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
* C7 l) f+ T% V* O
. c) o' }) z) P% s1 N#define PacketItemMaxTick 150: @; @# d6 C: Y) A; ^' w
#define PacketItemPickUpTick 20( T7 x+ F3 r& O/ ]& E
& {+ P& j! w/ B- ~
private:4 G6 I6 T3 H- S" @
static DWORD _PKTItemTick;9 J# R1 s4 i9 n/ c1 _7 U+ g
static DWORD _PKTItemAction;; |2 h j# {9 z: n' g
static DWORD _PKTItemID;% ^+ {/ Z, t. X* |; z
static BYTE _PKTPKTType;
- p4 m! Z5 c' L/ X! m4 tpublic:* T8 V8 h! N7 Z2 N
static DWORD PKTItemGetTick() { return _PKTItemTick; }
7 v" P1 n x! I) l# T8 h% k/ f
# _" v/ S# a! }1 U( G9 g static void PKTItemRelease() & R3 E2 l9 s0 R- \
{, D" H6 m% q3 D; G: p' w
_PKTItemTick = 0;" X5 q8 L* y# V# F6 |* J
_PKTItemAction = 0;
/ _2 z- `* [" Z$ } _PKTItemID = 0;0 y0 O6 ~, V% L2 G) L1 J) `
_PKTPKTType = 0;5 f2 K, V* x! C
}
/ a& Q3 s3 h. @* v6 k% }
: I" E& b/ h4 f+ S( ~ static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) / h/ G( C9 B! W7 h
{0 B) p& _4 }; h4 _( z* ?+ {. {5 l: ~* D
_PKTPKTType = aPacket0;/ k! N" h# ?1 D3 j" | Y# l
_PKTItemTick = tick;
) I V+ S9 Y% }- h+ F3 E( k _PKTItemAction = ItemAction;( Q9 ^+ B" ~' j; ]( A! m
_PKTItemID = dwItemID;
8 \( |% g# y( V+ N i, l }
8 J. q5 K, s ] k( Z! X3 F- i: V2 Y3 f
1 [$ M% |9 h3 J3 c4 g( S static void PKTItemTellW8(DWORD tick)
+ @( Y3 M# u! @# u' Y% T/ C. R, S {
# @1 A% V% A; p _PKTItemTick = tick;
" x0 i5 n/ P+ n# U }
7 \( h, V9 O3 A2 j- S* ]! M% i% _# f z
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
8 F3 I+ v( p- R, Z {3 F0 g9 G! v* z$ @" o% k
if (aLength >= 8)8 |* Z! K! s8 H3 O8 K
{
0 p8 g& \! z+ s! `" C DWORD dwItemId = 0;% r* Y) ]$ [ _- }2 n, w
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));! B- {% {; z k+ l
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
. K; T: g' x3 E7 k3 ~ S && _PKTItemAction == ITEM_ACTION_TO_STORAGE* V& e' X. L' u4 n2 h
&& _PKTPKTType == PACKET_NEWITEM$ w _9 l+ z* p) g* e
)' }: ]; ]& `( Y8 N' G: ~
{: `9 O8 D. A9 u) q& h1 o4 d7 s; D
if (_PKTItemID == 0 && _PKTItemTick)9 |6 s% w9 y6 p, L) W6 Q+ e2 [
{* x7 H" u; g4 ^5 R1 i/ T: ]
PKTItemRelease();6 r0 Q% U. e! e* j
}8 ?% w+ B7 b% H# f. G+ @
else if(_PKTItemID== dwItemId&& _PKTItemTick)- Y5 p: m, J H) D
{8 o! C4 M5 }7 H! j1 n
PKTItemRelease();
5 `. c- q6 X* c0 h }
) F: _; @# J/ |- F2 r- h7 H6 h }
6 R& F, t' U3 t' I # X E9 W4 T3 {" s; ^) L
}
) x+ Z$ p$ Z( L6 [4 f }2 n5 Q" f) Q2 i6 i( m7 a, [
* g* D2 k9 n$ r' }- I, {( [+ I static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
3 i2 N+ g6 S/ ^9 w" F* `& Y! J: l- E {# c( {2 X' k2 }, P5 Q2 `
if (aLength >= 8)' v' L! C0 g. M v3 r" ?
{% z( Y5 P+ d0 U" Q
DWORD dwItemId = 0;4 g+ z; l: j% r; X
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
; ]* N! S: B7 ^) H) T' K0 M if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE4 @3 S( D) e3 N
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
. y+ w3 M( N. A0 I0 l/ C! ` && _PKTPKTType == PACKET_ITEMACTION
, P I9 E: Q2 l, D9 m" Y0 @ )
0 }, n* C6 [& K% i/ I {
" b9 ^$ T/ b2 k& [/ a if (dwItemId == 0 && _PKTItemTick)+ s% L% f; c# x$ T7 J
{, T2 M& u/ K$ J( _, @6 _
PKTItemRelease();
- i$ ?3 L2 {( q/ X( ?/ m }
{" r) Z5 D) Z2 U4 G* | else if (dwItemId == _PKTItemID && _PKTItemTick)
' d$ R6 V) @- R8 }$ F {
; J# O% N3 _' C( n8 j PKTItemRelease();
& p8 }& ]1 w6 ^6 k- q }
! c! a, ?6 f2 C& ^5 \6 j }, Y t( ]$ p0 B. x9 a+ E. o4 r
$ ?) o: `2 P- C; w }, M# |, x) p g, P6 _) g1 H
}
. d* l$ d# h2 q! o. S: W! o- ?# \5 G5 e. K+ g
static void PKTItemGameLoop()( {0 z4 b7 N5 K3 u0 f8 Z: o
{
3 w; }, I( L3 T, a& K8 ?$ w4 n if (_PKTItemTick > 0)* h& }) e/ u) u
_PKTItemTick--;# E `* D$ N5 r. l
else if (_PKTItemTick == 0)' O/ `7 C. |- N; W q4 H3 M
PKTItemRelease();: }2 Z9 Q1 o; N
}& r3 X4 J/ L; R7 R
8 B2 j2 @+ a2 z0 K static BOOL PKTItemCando()
( G( E0 @5 e) P7 D {
0 `! P8 b& F8 h( Y. P if (_PKTItemTick == 0)return TRUE;
- q2 r8 w; |$ `! }( F/ O return FALSE;
" X: [" c3 h* U0 |+ H( h }3 X, C' F; g$ `( w
4 Y6 x' u) ~% Q+ }2 O1 G static BOOL BuyItem(DWORD ItemID, DWORD npcid)7 r2 u4 _' H* ?# ~3 j; C
{4 a7 o6 ?- ]- t4 ` i. @
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
- q" p* g2 o" _4 `0 f6 G1 L) j' {/ p BYTE aPacket[17] = { 0 };3 j; ~& i9 y% O+ y w
aPacket[0] = 0x32;& \, i% @# X' Q' S& [& @1 G5 }
::memcpy(&aPacket[1], &npcid, 4);9 q3 z% @' t4 Q! }3 {9 w; X- \
::memcpy(&aPacket[5], &ItemID, 4);
. I% ^8 l0 f# p% Z; h6 Z //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);5 D2 i2 H& S4 w! [) {
D2Net::D2SendToServer(17, 0, aPacket);/ G. c1 \% P- ^* Q5 z
return TRUE;; Q+ Z) ?" w& [" H* v% _# B; P
}9 j% u& L# c0 o
# ^/ R% y/ u0 n static BOOL SellItem(DWORD ItemID, DWORD npcid)
G, s3 v( A5 Z8 V8 `8 W* M {1 [1 \+ b$ ^! ?
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
7 S' b* M& X& c9 @- v% t BYTE aPacket[17] = { 0 };
! D# U" s8 d, o aPacket[0] = 0x33;
) c1 `' u4 D0 Q3 ]6 N ::memcpy(&aPacket[1], &npcid, 4);+ _5 t5 b v7 X1 G
::memcpy(&aPacket[5], &ItemID, 4);
" v& E5 [3 `( c: [ @/ a //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
' R. S+ _) G) \+ @ D2Net::D2SendToServer(17, 0, aPacket);# G; {% C2 W! w) C
return TRUE;* E/ M& x8 n, A( l3 n+ C. G% A
}
' ?& b6 a+ v1 i/ z% P I/ o% o# I+ \! a# h5 ]# |
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);/ W7 |, q" |! t* R8 q) {
$ E2 f% |" c7 N4 |! ~
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);+ `% L! `" A# m" u. C
# b% s2 h4 O: o
static BOOL OpenCube()
$ J c8 w6 x! F$ l; c* ^$ d {/ V) h6 i9 {) m0 F' o* a, O
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
- w5 Q! ~6 S% j+ @6 }/ N' s; P' P4 g7 B$ N, J0 z$ ]' r
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);+ j0 w H0 I' s" N% ?6 @
if (!pCube)
& c( U! L+ C& b, y! Q {
/ T' q0 B, U& q! {" b3 a pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);0 U1 W8 H+ A; M c
if (!pCube)4 L/ v- U& i, q: M7 H
return FALSE;; g* o% n! H+ Q% g+ _/ q) }
}( o4 i( ?! I/ i+ T* W. p7 A% ?
PKTItemTellW8(PacketItemMaxTick);
/ y1 P) y/ b+ u; }" c
( Z! @: B5 v2 F* q D2CoordStrc mypst = { NULL };/ }1 \, l7 h6 _( [- r; Z& R6 A8 h
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);- i- J' l' V/ G. b1 d+ L! Q
" m+ l2 S4 Y+ w3 j( }
BYTE aPacket[13] = { 0x20,0 }; E& Y) T/ G, W5 \0 ~
::memcpy(aPacket + 1, &pCube->nItemNum, 4);: C" p( a- `7 H
::memcpy(aPacket + 5, &(mypst.nX), 4);4 ^, G$ }4 B a) V$ v$ ]9 |
::memcpy(aPacket + 9, &(mypst.nY), 4);
% f5 M- f" s/ n6 v8 J }, o4 @ D2Net::D2SendToServer(13, 0, aPacket);
0 |: z; p4 \. f Q; {7 }- Z; Y return TRUE;. A" N5 V9 G W2 H0 _
}
: x+ |3 y: Y& m- G M. C6 V3 ?5 f5 z% X9 T& z
static BOOL ToInvxy(DWORD x, DWORD y)4 L9 s% ~# a# N+ u I
{* h4 f9 H. u" d+ ~" E# p% ~+ K" d
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);+ z+ h+ \ J, o( ~5 i9 ^! F% t1 ~
; J2 ] Q2 l" b/ q3 b0 B+ @; P
if (phand == NULL)
1 g+ M& j1 H+ s3 u/ M. m# W return FALSE;
* j. U: G/ T O; |
: e) E+ @2 D& Q PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);; h1 E2 F1 ?/ n2 M/ c, j
# A) Z1 V1 r# ~2 P! Q
BYTE aPacket[17] = { 0x18,0 };) g% T1 `1 Q) K
::memcpy(aPacket + 1, &phand->nItemNum, 4);; q; U+ S+ N. c" d% N7 f) F7 ^+ _
::memcpy(aPacket + 5, &x, 4);0 d% ^) Q" D# b* c2 a- B' D" Q* e
::memcpy(aPacket + 9, &y, 4);
- i$ w4 D% h# o9 e% s D2Net::D2SendToServer(17, 0, aPacket);5 t; ^# i ]4 L
return TRUE;$ Z7 { k2 g. E
}
7 t/ ~, r K3 P" k- M& |+ f* n: F/ Q4 C2 N8 s8 y6 W
static BOOL ToInvRandom(BOOL bBagFix = FALSE) ) x# u1 G+ j) C, M, T! |" r) G
{0 H( p* ~- X! ]- I6 E" s3 v4 b
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
& j/ s, f$ e2 x9 f# s if (!phand); \/ M$ ]3 {7 o( f# v ?
return FALSE;; t- _" W' i) k6 W; B
int desx = 0;) y! d9 U- t4 o1 \; x
int desy = 0;; V+ s; y$ i- A# l0 A+ O
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))& J! W( t9 j- S5 D/ L$ k
{
9 I0 j. G/ L% ?# } ToInvxy(desx, desy);
5 q8 Q7 n. f& n3 K4 O9 \: s. b. ^6 y2 s return TRUE;9 c7 M, u2 t q
}+ \- z5 ?# k3 R2 U* ?3 m% Q' n* F3 G, R
return FALSE;9 n6 f; Y7 ]- ^. B, E! z4 \4 L
}" E" Q0 u1 X; H0 l
u. Z. O% l$ e) F
static BOOL ToCube(), p' _0 V A: @3 d8 c5 n; L% r
{& E' _* m) C/ o
if (!(*D2Client::ptPlayerClient))return FALSE;
- K7 k1 w* _3 Q6 {/ F
: b; |% F. O7 u6 U0 Z8 E& E UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
" G7 c$ V% D* O4 x, | if (!phand)return FALSE;( m- S5 V* ~7 @7 b1 e9 K5 [
4 P- g+ D7 H9 _# `' \ UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块# q- w, J0 j+ z# q! L3 Z) l
if (!pCube)# k! `9 V; S) N" D* b3 Z4 X
{* o6 M1 ]2 z* r# G
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块2 r$ p: Y9 @; r. {# g
if (!pCube || !pCube->nItemNum)0 D, Q& z4 C* ?% J
return FALSE;
) l+ a! b7 G" ^$ F }3 N( L# y7 H9 f# }$ y
% Q* L0 I7 g# ~, B/ E& F if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
0 A' a: M5 O( U return FALSE;
; a% D0 `+ ?+ }: K' e* n3 [
: K, c- ?9 i+ S/ d PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);# E4 n; v) T/ D
5 j2 v" _5 Z5 Q BYTE aPacket[9] = { 0x2A,0 };7 W& q8 {+ w& H( h
::memcpy(aPacket + 1, &phand->nItemNum, 4);; d G$ a, I8 E7 h( l9 A S
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
- j8 X! I; P# L) n. C D2Net::D2SendToServer(9, 0, aPacket);% Q* f/ Y/ ^9 I6 X! A
return TRUE;
) [5 H) K% k' `. D: o, X- f2 U, ]6 A. J7 |7 R' P% B
}
* n7 B2 D6 g8 B5 v0 m% q; O6 W$ r7 B1 w. q
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);4 G8 u. t; ~. j# `! }- C1 I' X# g
1 L$ Q |* T# r& F6 u4 G
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
6 q, n6 U# r; @ {1 u! R' ]* O3 k
D2CoordStrc mypst = { NULL };! f4 T/ m8 J( T% d( p; k: I
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
7 `( U2 ?% w; v
. }2 K2 u) Z& r+ _4 X! |; i; a8 j if (!mypst.nX)return FALSE;
* X8 D! j4 i% Y/ D1 X* ^
" J: K; m. N- b' O! a PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
! G* |! e4 }! f- \% C0 @+ N) f+ p) g# J6 a* K6 b; r G: T
BYTE aPacket[13] = { 0x20,0 };
J; ?3 Q q6 o* i( ` ::memcpy(aPacket + 1, &dwItemID, 4);. P. A1 T1 j* ?9 `5 V4 f1 f
::memcpy(aPacket + 5, &mypst.nX, 4);
6 N: u: s) M' R2 p9 @6 ~6 u ::memcpy(aPacket + 9, &mypst.nY, 4);
; ?: |4 ]7 a- V# Z; \6 x- K //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
3 f. q3 z( ^; V, ?. C0 F7 E! w D2Net::D2SendToServer(13, 0, aPacket);
0 M2 K/ U- F" e1 g$ y6 y0 v return TRUE;
* m4 k1 P. u3 d. V; Z* y1 d4 m } a& f- ~( \' C4 a: Q' S
$ V/ M. S K! j: l+ n; ^: z static BOOL DropCursorItemToGround()
) a! ]1 Z) T$ b! s9 Z( D' Z( g( `8 @ {# E- i; z+ i4 s0 s
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);0 R7 A( Q" f+ r5 Y$ N
if (!phand)
3 j6 H. u$ c" [) f7 w return FALSE;' K" r; h2 _7 |% R1 m. N3 p
/ Q4 D+ p, t6 i6 H" x" G PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
6 z* a6 j! U2 \+ w B
4 X6 t Z' B: P BYTE aPacket[5] = { 0x17 };& S, r* m& k1 b7 J I) n) L
::memcpy(aPacket + 1, &phand->nItemNum, 4);
: d% w' O9 V' \% v+ a5 g D2Net::D2SendToServer(5, 0, aPacket);
' Z; w+ s/ M9 W/ |, i1 { return TRUE;
# L& T" [: M; D1 O
, M! b, i4 x8 @+ }4 T }
H+ G( B; N$ U. I
' E# N2 _- z* _2 e/ S: @ static BOOL PickStorageItemToCursor(DWORD dwItemID)9 h J, Y- N+ d0 P0 }- Z8 d
{
1 H; C& [; y5 r! a ?/ P PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);0 J* m+ c4 }$ }; v* o
3 ^6 ^& B" Q1 b e0 F3 l8 Z [4 y
BYTE aPacket[5] = { 0 };
# ~' V$ f8 N! E4 Z) M- @ aPacket[0] = 0x19;! N" T3 R7 A% a4 V+ l
::memcpy(aPacket + 1, &dwItemID, 4);
" f( k! m; j" q: Q4 X //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);" {. ]% T. b* c
D2Net::D2SendToServer(5, 0, aPacket);% e9 Q; B: {& r, @* V2 Q- C
return TRUE;
3 \( q% a2 T! K8 Q0 c l9 } }
, a) B& A+ E1 v4 @
E! Z( E7 H9 D4 `, Q, ?# H static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)/ N3 }% o$ f3 g& R
{* f* k% P% p Z( A
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
% e6 i0 u% r! m9 n, F BYTE aPacket[17] = { 0x1f,0 };
% x8 r. B0 R. l y0 }+ `8 w ::memcpy(aPacket + 1, &ItemID1, 4);
, \2 }, S5 k9 [% A ::memcpy(aPacket + 5, &ItemID2, 4);: C/ i5 x& M" |' u) h
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);8 O0 f8 c* w" B+ _4 m' ?
D2Net::D2SendToServer(17, 0, aPacket);; z4 F7 k- @5 v
return TRUE;( x. ~8 y- Q+ ]4 g s
}
& H- v$ ^6 R& T' I8 @6 m6 Q7 a) _3 H& m; N' I
static BOOL Transmute(), O( G9 M! q9 @
{
6 I4 ~+ c4 F4 d/ N: s3 ^5 d if (!(*D2Client::ptPlayerClient))return FALSE;7 T ? W' U+ g; f
3 y4 E/ ]; L, F% J$ t
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))3 N4 \4 s9 h' ~
return FALSE;$ A2 @! C5 Z3 W& W- _' U7 J" `. L
* p1 K' o* ~8 D# m/ r5 y
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);) f8 `8 V1 y- x% ?
BYTE aPacket[7] = { 0 };
4 Q ]1 I' ^6 s+ G aPacket[0] = 0x4f;
; ]& P0 P2 a: d5 W+ F3 T aPacket[1] = 0x18;
2 C( \+ P! k ^' p, O D2Net::D2SendToServer(7, 0, aPacket);
% J. b W! O) X D8 q return TRUE;
& W% [! N; Z. n# S x4 x }
; q1 J4 C/ P' ~1 h$ P5 `; k8 X};( c1 M j/ Y! }, Z; }2 s
# }( z/ C: n+ [) N: I' L
|
|