|
|
转载
1 M- D" i1 v3 Z/ J: f0 k! Z T自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:2 V7 g. n7 M! C7 v
D2Client:
+ X& M4 S* V/ s7 n6FB20AE1为拦截输入框(用于获得命令)
9 _- x2 X4 H8 X# r: F6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
" n4 G- n6 s, F. P6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
6 ~4 l3 S t5 a- |. F- e3 b6 y4 T, U6FAF4230为hackmap的loop点 我用的hackmap导出位置/ r8 t7 Y2 {9 @, R; v- e& X
# Z! }1 y% n/ B0 F5 @$ E0 z, H9 U+ ], T
发包函数:
3 U- O" g+ U0 u4 sclass D2PKT_ITEM) }# z" B) m9 v' ^1 d
{
w2 [6 E6 C- {( o4 Q1 _#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
0 V$ k7 {9 g3 {! t/ E1 E% G4 u3 \#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
/ a; G7 n8 ?" U#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
3 ^4 k" Y, e9 H- P3 A#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
3 P" N: |9 n. y#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH* A( u' W* u& P- C, F
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上. c0 R4 }+ P# k6 M* B; q; n4 Y
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
1 ?0 `( o* _0 l#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
) V$ g0 q5 H. ?4 N2 N$ v6 Y#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
4 w, L# f8 g. P#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店4 ^- h" [) b4 C; |. h( F' X
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
d4 e7 ^+ D1 G9 @' `' f. |#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 & | I: P( d) i" U
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
- I% _1 ^0 }( i# i1 g#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上* ] K) [9 j: N7 x' O
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -$ Y2 p: B6 M1 s( f" o
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
& j" T- K4 ~8 \5 W5 z#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -4 X" d7 w6 J0 I% J6 }9 u2 v
& J0 N/ g8 U/ G4 @. S; F
#define PacketItemMaxTick 150. L ]" d! Z7 E! s1 ?+ w
#define PacketItemPickUpTick 20# w8 D9 W2 I$ S5 ?7 g" D: v
/ F4 n6 E% I6 B2 M' a" b. Q; \
private:
! d& K' i' ^) T3 I5 N static DWORD _PKTItemTick;
9 g6 {* \' _0 A0 P: V, H$ Y, A static DWORD _PKTItemAction;+ I7 C" T6 K. Q
static DWORD _PKTItemID;
" q: V% f* Z- H! b static BYTE _PKTPKTType;
# b, J' A4 R" H8 Z) m( _6 wpublic:; V( r9 E! ?3 S/ t% m
static DWORD PKTItemGetTick() { return _PKTItemTick; }2 w4 i B- V9 X3 e
3 _) V1 T/ c! S# p4 D static void PKTItemRelease()
, F3 R- Q$ x6 B m0 M3 y5 A {% \2 C4 g7 i$ `6 }1 e5 X& W
_PKTItemTick = 0;/ {$ T Q7 u7 X' I1 P) a" e
_PKTItemAction = 0;9 K* i) J0 i$ }
_PKTItemID = 0;
: Z& q! I- z* W8 q, ^6 w9 T _PKTPKTType = 0;" b$ d. D0 h9 f; j( ^
}$ m, `7 z& p6 n" j r
8 L+ M ^/ f/ Z* {1 X static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) , a# N4 X" d6 x5 a
{7 K5 F& u$ S$ a7 o
_PKTPKTType = aPacket0;" e# z; Y0 n7 V! m M
_PKTItemTick = tick;$ e& i0 c2 o* |2 V/ c) k" r7 E
_PKTItemAction = ItemAction;
' d, K5 |4 N& {$ d0 _ _PKTItemID = dwItemID;
, S+ v/ n9 r+ t$ N8 Y }) K5 s [8 t/ P
1 B3 {" y3 G6 B- _4 O. _' D' \6 i
static void PKTItemTellW8(DWORD tick)
2 h0 z4 s+ O$ P. ]* f G$ J {) E1 G" [& U) o6 a' |
_PKTItemTick = tick;
; Q- Y. ^" O1 s9 H n$ Z }
0 d @/ [0 Z+ ?5 u3 @; t* V( l! ]; W: @5 V
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor( @; ^( d, H/ T; m+ l
{0 z4 c& T; r. K7 P8 G" W3 R# Z
if (aLength >= 8)
2 i1 C# k# Y. G {
O3 [6 g. N+ J# T9 s I DWORD dwItemId = 0;
k! t B/ F% C$ T memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
. i1 a$ d, o+ t. R if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
* R: }# o+ T/ ?2 N && _PKTItemAction == ITEM_ACTION_TO_STORAGE
5 o* `) h+ r* X8 U) v0 y. k && _PKTPKTType == PACKET_NEWITEM$ M3 ~, K# k6 u; @
)
/ K( T; }$ f8 z9 A {
6 b7 M5 e+ _4 M. Z, L if (_PKTItemID == 0 && _PKTItemTick)( w! E v, S/ ]3 ~6 m
{
) s* ~$ b) F" M& z2 P1 h/ \ PKTItemRelease();
1 S# V- b J1 K' N. h }
2 s/ U$ a# G. q. {& s else if(_PKTItemID== dwItemId&& _PKTItemTick)
% T7 M, P8 B; {. B" u/ g& i {% P7 E2 j- p/ |. }3 k
PKTItemRelease();
: Y6 R. ?3 M; c+ d, j) C }
$ ?4 d& L5 C2 e$ u" R& Y- k5 f }
' a: e8 _3 s# ^5 G( x
3 }3 x/ z9 U4 b6 t }8 `1 V/ x3 a# P* N" n9 z& S
}, }# r9 N ]5 E) h7 r# r
0 w/ s, Y# |/ P1 e' @ static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored5 Y9 z; w1 d6 X' m' [ j% C
{& B5 I1 J3 } d
if (aLength >= 8)
, i1 u1 |; ]1 Q {% J! U8 d# x8 g
DWORD dwItemId = 0;/ {6 p w& c6 J, d: o
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
, r3 w( W5 f9 n6 R, v9 j! u if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE0 L1 \9 `2 J9 U( g# ^7 O
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
9 s* C5 j9 z! y+ C# w8 c && _PKTPKTType == PACKET_ITEMACTION
4 F2 ^* H+ `: c& A5 m( i& g )
D. g$ T/ @* q; Z% \* E {
$ O4 S6 k/ ^9 d1 v8 h" d! N if (dwItemId == 0 && _PKTItemTick)
3 ?( j/ n; f0 ^( w4 i {
/ F& v9 `6 Q5 B) c PKTItemRelease();
: T( r j+ \, f }
+ t4 @* z+ I6 R; F0 _$ \2 |+ t1 k% J else if (dwItemId == _PKTItemID && _PKTItemTick): s0 L" [* V0 t! R1 H
{
' P& v S4 Y! C# y PKTItemRelease();( R0 ^! c& b9 {) N
}
, X0 }, _" O. F/ c' U+ M9 w8 i. S }
5 C! p- L) ~6 w6 h% x: R2 m& ?, v
' u, ^ W% f& G+ e/ _5 E }
r/ \% t: R6 ~ }. K% g2 m0 f4 e: \0 j) b
B3 N' H6 S2 ?
static void PKTItemGameLoop()
3 X P1 c/ F J2 u+ i) k" N {8 ?4 Q/ E& X8 j2 p" Y6 R# E$ A
if (_PKTItemTick > 0)- h8 t* d- a9 }; H+ A/ c! p3 B
_PKTItemTick--;
# P# A, w/ m' q& i6 V- z$ C" W else if (_PKTItemTick == 0)) K ]* p: \5 T- @6 ~
PKTItemRelease();4 K) |5 Y& }+ s k( ?% J
}+ _, X+ Z5 f! w) {
4 }# k) K7 g! K0 v( }" \
static BOOL PKTItemCando() . \6 a. K) A* M5 ]: H7 {3 t1 g0 p w+ k
{. Z2 d8 e1 i$ l+ q. ]5 k* A" M. [
if (_PKTItemTick == 0)return TRUE;
7 u9 k' }. n' E1 M return FALSE;
& e3 r* _5 K Y- I, k# m- r0 v% M }
6 ~6 M1 w! ~$ O" W7 ~9 D- `; y; P5 y' U; `
static BOOL BuyItem(DWORD ItemID, DWORD npcid). n7 D9 l/ {& L1 g+ r6 O2 S' g
{8 K) \0 L. Z& Q, c
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);1 ^/ B- Q* X0 g
BYTE aPacket[17] = { 0 };' w0 ?" y0 k2 A/ c
aPacket[0] = 0x32;
- z! n* c3 x, n. f ::memcpy(&aPacket[1], &npcid, 4);+ I- r: F8 }; m6 W& P2 n
::memcpy(&aPacket[5], &ItemID, 4);$ v, H) n& y: X0 b- i
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);* C1 V X& K, o& t
D2Net::D2SendToServer(17, 0, aPacket);' G; Y6 _) B& c) d: ]
return TRUE;" H n# `* R$ y5 [5 Z. \
}0 }2 w" a* u# x6 E! U2 {0 F8 K
7 V6 v5 \) X# g, a* C: B
static BOOL SellItem(DWORD ItemID, DWORD npcid)
9 R {& K/ L1 }7 U5 X& _9 l' u {, H5 u8 Z: R4 ? P9 s P
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
% m8 {3 ?. Y& _2 [) `" H7 k BYTE aPacket[17] = { 0 };( O" w0 a7 p9 X! [* \
aPacket[0] = 0x33;
. Q: o+ D. N! a% G4 e ::memcpy(&aPacket[1], &npcid, 4);
9 d' F2 q. H* J ::memcpy(&aPacket[5], &ItemID, 4);
( z" ~& a6 t$ N# r! t7 W6 _) Z* E //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
7 y" Y) z* ]+ @2 k) E/ H D2Net::D2SendToServer(17, 0, aPacket);% j! s& A2 {! t; q2 Q Q1 `
return TRUE;
4 t3 s. Y8 X" A, } }
3 C) c9 J. L1 C9 T; g1 R" p/ }7 [& J6 e% E( g; C) }& |/ S" y# e
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
6 y, ~" a# e4 z0 u+ {4 }: M/ }' @! P
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);1 t, v, x. n: w8 l
4 j5 U6 N: t, a4 j( ]4 j5 X% ?
static BOOL OpenCube()
. M1 c; u& ^5 g7 l" } { j/ t% E8 K% m$ q4 ^
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
4 x; {1 {, [% Z- l/ o+ v# ^8 u0 Q9 F) {( Z
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
" l3 s: p' C4 d; t* ~) {! l" f+ ] if (!pCube)
9 b5 a6 x+ x& }9 M% i {2 X* G# f6 ^' a. ^, L$ M: E
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);/ m/ K. k* i" v' a7 H/ |: I
if (!pCube)* h' n$ C& x- Y: q3 g
return FALSE;
Y* b( A N; [ ^ }& F- x3 V3 m. W9 z2 R1 k4 Z- t
PKTItemTellW8(PacketItemMaxTick);
' {7 X5 V1 `3 y' |3 C5 `9 d( V4 T' Y+ V( y h
D2CoordStrc mypst = { NULL };
$ g7 e+ ?- l, u$ {9 ~! U/ W. I D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
! Q# g( P! w" i6 y. R- y
m2 H( b' g( I; ^9 o: \8 v1 y BYTE aPacket[13] = { 0x20,0 };2 X* j, m0 `$ t$ r: ^
::memcpy(aPacket + 1, &pCube->nItemNum, 4);3 V+ X# \ X8 p& \6 D9 B {/ Y. `
::memcpy(aPacket + 5, &(mypst.nX), 4);2 H7 @: V& t7 w1 z
::memcpy(aPacket + 9, &(mypst.nY), 4);/ B0 g# t2 A% n
D2Net::D2SendToServer(13, 0, aPacket);6 U. M1 v7 Z6 @- G
return TRUE;1 r) V k s% H2 g( M. {1 s
}0 y; X- N1 A: {7 I$ ]
2 L9 z# O Z2 s! p5 s; k. ^' u0 a static BOOL ToInvxy(DWORD x, DWORD y)
# J Q8 f0 W8 I1 [4 n {( A% {8 p' u, r5 }7 S7 F' n
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
- @8 Y/ x& f; t; r2 D1 L
/ O0 B7 X# E& k* e" D# z' E if (phand == NULL)
7 w3 a! k( y: [% F1 T3 C$ p% R return FALSE;) D" j9 @9 p4 m" P" j5 y( M
( d4 b# V1 Q9 f |% |
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);5 w: K0 u) r/ @# A- |$ F3 \
: z# m" U" S" n* b
BYTE aPacket[17] = { 0x18,0 };
. N4 c! M \+ y0 P4 ~0 b* ]; h* E ::memcpy(aPacket + 1, &phand->nItemNum, 4);
- Z- o. y7 {; x/ _ E9 v0 s ::memcpy(aPacket + 5, &x, 4);( V' V; e0 I6 ~! e( p5 [, b
::memcpy(aPacket + 9, &y, 4);/ F& \4 m/ }+ b
D2Net::D2SendToServer(17, 0, aPacket);
8 ], w2 O* `8 |# J4 M' f return TRUE;
5 @# h2 }- g4 K( L, ~ }" z3 H9 x$ s5 p+ W4 r1 {: A* K
3 Q6 W0 N# B: i) \: F* Z5 N static BOOL ToInvRandom(BOOL bBagFix = FALSE)
+ ]& k# c7 o, H+ J* z: I) |! A7 ` {
' @) A0 m/ t% U: F# O( k8 j UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
/ H5 f f! s, {$ w2 C1 v; [) R if (!phand)
$ z+ C4 l9 z: u6 Q W return FALSE;
$ z" o" Z& @5 f int desx = 0;
# |% J9 d, d3 L8 c int desy = 0;. O8 L$ x5 ^+ [8 N1 z* }' Z3 q
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix)), F% {9 M! ?2 X! ^7 A+ M; H
{1 H/ m- m! B _9 e, p
ToInvxy(desx, desy);5 a! a0 a, M8 [6 p7 _
return TRUE;
1 R W( O3 T7 e% ?0 w1 F }+ G1 {3 P* v% R# K) p" f% u; T! v
return FALSE;
4 `+ ?! h, q" s0 h }
4 \* N f, C- s7 z" a
- [ V6 A- D9 l: r, t9 o8 P static BOOL ToCube()/ @ a) o r- _& j2 L
{
J3 F) U4 C% f* ] if (!(*D2Client::ptPlayerClient))return FALSE;& t$ C7 c9 X z2 D: K
' K6 E9 k9 i$ i2 z* S UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
0 N+ @) d0 K9 [, P, R if (!phand)return FALSE;* k9 J: G. k( u' {
" B8 V3 a; m9 D, g) ?& Y
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
7 U. ^5 _7 n' ]$ o; e& K if (!pCube)
9 n* V1 k' j% t! w {
+ P7 y: |& e: f7 p" z pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
' Z4 w) \9 g8 M3 q. D8 V if (!pCube || !pCube->nItemNum)) v' u& D/ O7 C3 C
return FALSE;
) d: n3 H: ]# Z } @: ~" D) I2 ?5 V' ]
' y8 P& m* V4 h. _
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))+ u3 U. x+ R5 D/ J/ w* D
return FALSE;
; H0 ~, j3 ]( t6 L* Z0 ^3 F" V4 ~* w6 U7 w' x4 ^
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
% m5 m: B, J, x0 o9 a, Z( [/ z6 w( w' }. Y
BYTE aPacket[9] = { 0x2A,0 };
/ X8 V1 S1 z0 U ::memcpy(aPacket + 1, &phand->nItemNum, 4);
$ |. Y* h2 m& ^2 [5 r! P1 W ::memcpy(aPacket + 5, &pCube->nItemNum, 4);5 |2 W3 X2 I& x1 e5 d! f' n8 w' y9 U
D2Net::D2SendToServer(9, 0, aPacket);: Z: A' E( N6 I% f
return TRUE;
! [/ q8 r; ^( |% ?% e9 k5 A0 K1 m: R8 t# M: v/ R
}
4 v, T' u l2 w: o F4 n, C5 J" q O# Y h
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);" O/ l6 c$ C- ^! n- B
3 W+ A' D, |! [5 F E static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存5 k& Z$ z, l+ y/ x, g
{
( Z5 W+ z2 p* z! }- X1 {% e. E D2CoordStrc mypst = { NULL };- S4 R1 P8 {: H
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
+ M' N; x7 |. R3 ~/ G8 v7 Y9 B% P2 c. t* C F, }6 y# v
if (!mypst.nX)return FALSE;
9 r z7 o- X; h 9 {! B5 d8 v4 ^; w, n
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick); |$ |( N& S9 K, J0 R7 m6 z
# f8 V3 j2 N' d1 P0 H, I: [' Y
BYTE aPacket[13] = { 0x20,0 };
! v/ M8 ]3 I A+ v1 \# B ::memcpy(aPacket + 1, &dwItemID, 4);
" T8 L+ E* O; V k ::memcpy(aPacket + 5, &mypst.nX, 4);4 ?: N6 `9 P& n$ n; L
::memcpy(aPacket + 9, &mypst.nY, 4);! }6 q; ?7 K8 J
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);# g5 }/ s, b$ Z R F
D2Net::D2SendToServer(13, 0, aPacket);% o) s% J2 @8 u0 J( A
return TRUE;6 r) u( E# _2 R2 q2 l6 g7 T
}
& U- `) O( G b' _+ V' S8 b5 z1 q6 i) f8 ?; V( j( x
static BOOL DropCursorItemToGround()
7 E7 A* L1 [7 V( l2 c- L# q B, U {
7 b# q& R, N2 f: s3 i UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);2 G& s; ^; ^& w" n2 ^% R* S
if (!phand)' r- k, r) [; I! W$ G# k9 L% o
return FALSE;
* }- N% T( m" ~6 i
$ ?$ G/ D$ I7 d PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);9 y1 H T1 G$ Q5 j, z1 Y" U
$ C( P: W' d6 a3 M
BYTE aPacket[5] = { 0x17 };
; }3 [( E! b7 n# Z* o ::memcpy(aPacket + 1, &phand->nItemNum, 4);9 H) R: ] m0 V, R" a
D2Net::D2SendToServer(5, 0, aPacket);) {5 o# b7 x* z( e9 }% C/ E
return TRUE;
+ L+ B8 `1 z0 U) y% T
5 V ~8 T& L. C5 Z) f! R. x }& o" P( @0 U, H
% ^' Q1 @5 W- f static BOOL PickStorageItemToCursor(DWORD dwItemID)
- V$ p' I- j! Q) j$ X {
! _. ?, x! C# I PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
* F& ^6 C: [$ |% s/ k7 b- U6 [! c# d- O7 _- _
BYTE aPacket[5] = { 0 };' b0 S/ S5 g* G5 U" t" j+ H1 q
aPacket[0] = 0x19;
8 a+ I! x! i4 d( v7 W- ]7 H ::memcpy(aPacket + 1, &dwItemID, 4);) W$ ]; O% n& P- S3 ^' d1 Z. f
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
$ b8 q( s' Z9 s, W1 R D2Net::D2SendToServer(5, 0, aPacket);: h+ v, p5 R: L2 L& w
return TRUE;. ]6 ]/ Q* |. k [3 L; v
}
' u' P. N" Q& @. G" C8 `! s# ~( l* U+ Y
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
& Y7 n+ W; c; d1 i7 B! `7 `8 x {
' e2 h( Z. o9 M PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
5 D! I: b) w! R6 T7 ` BYTE aPacket[17] = { 0x1f,0 };
. k8 i$ t: P/ w2 s ::memcpy(aPacket + 1, &ItemID1, 4);. L% `. k6 G. F4 E
::memcpy(aPacket + 5, &ItemID2, 4);; |6 i2 J# K& U+ B0 L7 d" m/ ?
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);7 V7 N3 J2 A6 P3 l% I8 W5 J! _# O
D2Net::D2SendToServer(17, 0, aPacket);
! n5 r: J7 ?& b, P7 v8 d1 v return TRUE;
( {' I2 B: @ M! H }
( n8 m) |1 P+ P$ `, \. }2 N b* ]# l4 z6 c0 ]0 a: Y3 p
static BOOL Transmute()
1 @- `8 s3 ]) J- Q {
4 r. _! r; ~1 l/ y if (!(*D2Client::ptPlayerClient))return FALSE;. {7 o5 D4 Y0 g d8 \* \4 |2 A
1 l! d- [2 `3 f$ \
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory)) f9 @# B) n" ^. b* G+ b( m5 }6 W
return FALSE;0 _% d% ~2 v( G E$ f6 b3 J3 ?
4 L- I9 Q% o3 n: H# x! J# v PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);7 l8 q1 k* P4 g5 s# S$ ?( {+ V
BYTE aPacket[7] = { 0 };
; H* K! j) F# v" i( l8 x- }1 [* r4 w aPacket[0] = 0x4f;% K! u0 b7 W2 ]! O* Q
aPacket[1] = 0x18;
+ H* c* ]! u y# q D2Net::D2SendToServer(7, 0, aPacket);
+ Q# x, O' L( d return TRUE;
$ e1 \3 W G0 {5 k& E" k }
' s0 v9 d6 }8 Y! O8 |0 L" p$ F1 L};: X2 C+ g# w- ]: P+ W
1 F1 `- H, V; B }# |$ \ |
|