|
|
转载
# d, s5 t/ W0 i5 _$ R- Y自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
' T6 U7 e6 @/ w( @6 p9 ~ jD2Client:, t- ?5 `5 [' n/ s
6FB20AE1为拦截输入框(用于获得命令)
9 T& |9 |/ l8 A1 p3 H2 B" j6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
; T0 U# Z* T7 G5 c6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
" Y+ Q' `/ j* E, `6FAF4230为hackmap的loop点 我用的hackmap导出位置" }$ u9 T7 M4 G6 V
2 M, O% ~- h* W
% y* D9 M- X" A0 R+ [发包函数:
3 w! d4 k% Y8 M1 Rclass D2PKT_ITEM) ^0 t6 S. t$ J3 }; T
{4 ^" V% k& G: l( O
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
# _' V7 z: r: ?! `#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多. o( ?, p0 {5 L s
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
) M8 G) t3 m9 P0 O#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上5 K1 Q$ Y: m7 O7 ^$ b+ ~
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH3 V R9 |5 K! A! I
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
5 }( T6 I1 @* t, d, }: C#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏3 V8 z$ l" E2 k$ ^% a
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上0 r _( d+ ]& S: L+ F
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
0 A% _" G2 \5 P+ D5 F#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
7 a: z0 d Q$ a- M2 H' V- s9 `* X" \) E#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
8 d( @7 N3 c5 Y$ `: o) @#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 4 t* L5 j( r% M3 s$ R# B# l
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
( v5 ~, P* R j4 S#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
/ g' a) J# K0 {#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
* M- O! d9 T: z7 d7 _, f: X2 d#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
) H" N/ A/ f: ^#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
6 g4 K% Q9 Y7 Y4 n( I' k( m2 u/ r( f( V1 ]; v/ P
#define PacketItemMaxTick 150% k: ?' x* W8 L! N5 y% Q
#define PacketItemPickUpTick 20
# a" ]& l4 x& r/ Z2 c0 ^+ B8 o' j" ]4 X' f6 \, O
private:
! |: s9 f9 X1 a5 ?) b static DWORD _PKTItemTick;
5 [& j* r! W* l7 C0 F static DWORD _PKTItemAction;
$ k# a- ?$ D: H# C) h static DWORD _PKTItemID;, x. H7 j, a. {# ]$ Z& [/ d
static BYTE _PKTPKTType;8 z4 T, y6 G* R! t5 j- c# T
public:! T D! W. T4 j- |! s, G( b
static DWORD PKTItemGetTick() { return _PKTItemTick; }
2 ~) z: B+ ^& f/ i4 o z6 u+ f
' T* X& l4 Z# c. D5 }# a* I- j static void PKTItemRelease() 1 r5 _' ]) i4 K2 b M( |
{+ ^! l# N' N3 `4 q/ t
_PKTItemTick = 0;
5 [ }& ~6 m. u/ i _PKTItemAction = 0;4 M& _# e6 o. Q& s4 U' d# ]
_PKTItemID = 0;
: R, n) f" ? ?1 v: T9 D2 b0 D _PKTPKTType = 0;
! k0 w0 n2 _- R. m8 e }
/ }2 i+ k0 n9 o m9 s. B% ~7 }7 C9 u; {2 D7 [% T
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) : Z! y- j$ g3 X; ~& t2 c
{
% P/ K1 S0 }3 J: [- A2 M2 c _PKTPKTType = aPacket0;
/ Q/ I1 l8 C$ I7 Q _PKTItemTick = tick;& x- j/ M8 P' y, O' K1 _
_PKTItemAction = ItemAction;
! Y8 f" C u4 g7 ] _PKTItemID = dwItemID;
- V. a0 E* S. T$ b. o! t; r! m }7 `! r" H# m7 k W0 G
5 h+ Z" B$ M0 I7 I* Q# ]2 ~! y( s static void PKTItemTellW8(DWORD tick)- ^' C6 s, W: g
{
, @; R" [0 X; R; `" i' I _PKTItemTick = tick;% A9 ^) C% N6 I( d
}
, \1 ~ [) z- G9 t( q) f! u- ^0 y: @; z" X$ h; `9 ~/ L- J
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
" l" n: g7 @3 N1 K, G; L! ~* k {
" S/ ~1 r" j+ k if (aLength >= 8)
8 R" l. s% v9 A8 p6 W; P6 f {
9 w! G2 A- L+ P9 ?% Z5 y DWORD dwItemId = 0;
6 d3 t& t, F$ \2 E0 r0 T5 s9 i memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));0 T/ y$ A) U% }
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE$ k' J% q/ U; k$ L
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
; {0 z. U) |" F: n7 F && _PKTPKTType == PACKET_NEWITEM7 P4 v g7 |& e7 i7 P$ z$ d
)
( M) X4 M2 ?9 X8 U6 M) o K# s {- J7 q1 T! l* A
if (_PKTItemID == 0 && _PKTItemTick)
% z1 W& g, }! S. A {
* a) t3 a' D6 c! e" W8 M PKTItemRelease();7 O) P7 X7 e" B; T
}. B" Z7 t- j- y* i+ b
else if(_PKTItemID== dwItemId&& _PKTItemTick)
' Q1 }' _- i3 H! k3 n2 w7 ^+ H {& R2 n0 ~' }$ g6 s: u" D, X
PKTItemRelease();
# [# |; |5 x2 q% Z }
& K# _" V$ c) n& ~* j; o }6 T1 S' C S) K! N: v) G# K
/ C& L! A! I% p6 I0 E }
% }- v2 h; z3 z }
0 l& Z3 M5 N: r9 m. m. ~; F) {) D% W L4 u
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
7 t$ C, }' o4 D# T2 A {( q. p8 D) c; j- Z: ^: X
if (aLength >= 8)1 v* W/ l7 a# g0 o* N
{, R* c; A8 q- J$ t
DWORD dwItemId = 0;, Z' Z1 d4 ]) w: i+ o' ?
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
0 @; l/ O& y1 _# O0 K if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE2 M' N' w' q, n& J1 y0 W
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE% F7 ]! g7 d. ?$ D# Z, _3 `/ U
&& _PKTPKTType == PACKET_ITEMACTION/ h) D6 [+ \& L: m9 @1 {- c& o, I
)3 A5 K& z1 V0 ^4 y; L- a9 k/ L
{
. t" q/ z: L" i& P4 |: m if (dwItemId == 0 && _PKTItemTick)
# v9 t* v8 j: J {: ^0 N# y, m5 S0 d' E, q1 N" |
PKTItemRelease();
/ _" ~8 c3 n, a, x% o0 l }
9 `$ R/ s. @# N* c else if (dwItemId == _PKTItemID && _PKTItemTick)- @6 D; J' E# |( u
{9 \7 ` h p! E$ \& {
PKTItemRelease();/ L. W2 a" V; v, |
}
4 M% n9 I6 I) P. v E# Z4 H6 X% V }. K5 j) _0 F2 p. a' e
0 R/ R1 ?: w! ^* t0 M
}: M" o, s6 J! Y
}& E+ Y; P# f, _/ G7 ~
8 R; B) [, l0 E' X7 H. M) h static void PKTItemGameLoop()9 P5 T8 f" n6 s6 W# J$ O; k
{
- T1 O( \5 c0 a6 o( P* E if (_PKTItemTick > 0)
" a; t. W, y& j' m& E _PKTItemTick--;
( L0 I1 H3 T9 i' U! `- ~# |) \ else if (_PKTItemTick == 0)
: P+ j& Q& ^& F PKTItemRelease();& t4 F( f, O: o) e; H. B
}: U: T" x$ ]! |& V; O; o
" T$ G& t! h; w2 p ? H# f6 ^( K' I static BOOL PKTItemCando()
! w- F/ \4 \$ h6 D8 S {
& }( D& [; e W6 U7 m if (_PKTItemTick == 0)return TRUE;
, i8 Q7 {, `0 w4 a5 T return FALSE;* ^5 y# s9 p$ d! C- k9 T O6 J
}; G) j: A! w& F" x& v# s/ X
6 N: ]! V+ r% k8 _% }, T static BOOL BuyItem(DWORD ItemID, DWORD npcid)
& k2 q, K9 Q- r# j: D" f: e {
/ c; H4 U% k1 A0 J3 ` PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);5 [9 x* w4 X: i1 u
BYTE aPacket[17] = { 0 };
4 n1 N8 b' J. }$ x aPacket[0] = 0x32;
; k7 p; B% ^; a7 o$ y7 H ::memcpy(&aPacket[1], &npcid, 4);/ ?9 \4 C# G: x2 W9 m/ ?& ]2 N7 Y7 S
::memcpy(&aPacket[5], &ItemID, 4);& b7 N$ S9 Q+ k% ~. }# @7 u: G8 L
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);8 U, Z8 K2 i) U
D2Net::D2SendToServer(17, 0, aPacket);2 u& ]. D+ l/ X v: ^7 L6 W
return TRUE;* a9 u$ Q/ V; d ^) u
}
6 v( S. S2 K6 i6 u" I) D+ q: G* C: G9 o0 }8 t- m) R2 S' D9 w$ Z
static BOOL SellItem(DWORD ItemID, DWORD npcid)9 S# a% k: D. v& V: q- e& Z+ r
{
: s: }+ C0 w2 F* z1 W PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);. \& T4 z8 p5 d; H, S& q. A+ o
BYTE aPacket[17] = { 0 };2 C, h% ?' Y( g: D$ |+ ^
aPacket[0] = 0x33;
2 @) P7 m$ F* A8 ]4 ]( g3 [2 B ::memcpy(&aPacket[1], &npcid, 4);' B3 B5 Q4 f4 @& `# I/ k
::memcpy(&aPacket[5], &ItemID, 4);
0 W/ S- Z4 `2 C; Y* A //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
; o& x0 [" c' Z2 X" B4 A: v D2Net::D2SendToServer(17, 0, aPacket);9 T7 \8 X9 O7 R: P8 \) @
return TRUE;( K/ p* G0 C c! M
}, r$ L0 ]+ C+ [6 }( n/ \
) C6 q. k+ Q1 v7 t5 y5 t4 c5 N static BOOL Interact(DWORD nUnitId, DWORD nUnitType);- x. [9 m' E6 j+ M6 ?
9 S) S7 r. j! \( x- o% O8 Y* ~ static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
8 O8 _- N+ m5 E5 e* d! l/ t: ?0 Q$ }( ]9 H! f* @, Z
static BOOL OpenCube()* ^0 O. H* W, h1 ~. ^5 {
{. w3 X' q+ o. {* G/ j* j
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
9 o O* n* b4 l; Y% B, m" Z4 Y" }" y1 t p4 y5 x
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
0 X4 z/ S4 v+ b" G if (!pCube)
2 n. H+ n. t# ]7 {0 v( ?& O {
( A) w; f+ ~- T4 b# y# x pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
: T+ j- T0 s* U/ X/ i7 f7 d if (!pCube)8 u/ `8 X/ H0 ]
return FALSE;% d; ]' t! |7 I- {+ E
}
/ |0 n1 n$ C. F8 g PKTItemTellW8(PacketItemMaxTick);
$ c" H& k" d* f, [+ [2 k6 h0 o6 I
D2CoordStrc mypst = { NULL };
' `: M L* d! Q( }3 X D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
$ w r0 M& W+ S/ {( D1 A* {1 }2 i
4 G0 [& R4 {% `% Y: r BYTE aPacket[13] = { 0x20,0 };
$ T; l ~, G* I( d5 G ::memcpy(aPacket + 1, &pCube->nItemNum, 4);/ X, B1 S$ W N
::memcpy(aPacket + 5, &(mypst.nX), 4);9 W* s/ W) B `6 P8 P
::memcpy(aPacket + 9, &(mypst.nY), 4);6 W, k+ c5 F2 f6 R$ M
D2Net::D2SendToServer(13, 0, aPacket);
3 R( k+ j4 S* ]/ A( v& A" R return TRUE;
) U( d+ ~, x6 P1 s ~: Y4 J }* q. g% O) I' A; [- |
* H: k, I( I- |3 _! U static BOOL ToInvxy(DWORD x, DWORD y)
: o8 z/ W( R$ V/ I0 ?0 Z" q1 e/ Z {
( a5 f, l$ x9 c3 n8 k+ f6 x UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
' I d" D; U2 b/ \) L! R0 N: [0 M
! S7 b+ n7 \# C" A- Y# E if (phand == NULL)
& g# q' W' K$ i; ` return FALSE;8 u& h, j+ _- b% y( a. q& P3 E9 Y
, Z9 B2 [" J) i9 R PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);0 y+ p+ j8 E( {3 V& d9 ?1 S
$ [* O+ q4 X' ?! v BYTE aPacket[17] = { 0x18,0 };+ `) a# u7 ] o
::memcpy(aPacket + 1, &phand->nItemNum, 4);# @0 h4 D1 ^& I: I9 F0 s
::memcpy(aPacket + 5, &x, 4);
5 n1 q; u- z) r$ ]- i ::memcpy(aPacket + 9, &y, 4);
3 T5 w& J4 J5 y( G- m5 [ D2Net::D2SendToServer(17, 0, aPacket);
/ n& p# y/ B8 Y+ Z4 y' \ return TRUE;) @& V' p# h5 _" j/ }" c& ]
}
0 {+ y- H$ S, W% u7 N4 v2 Q9 {8 c# p) O! L
static BOOL ToInvRandom(BOOL bBagFix = FALSE) 0 Y# C4 g. F1 b
{1 J* ~. ^0 f3 s# s4 N" @( U
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
1 |! y! y/ I8 V! |. M- e if (!phand)) O6 N/ o" F: P2 H
return FALSE;4 F( l1 R# [. B
int desx = 0;& ~4 {' { O0 E/ e3 f8 U* O
int desy = 0;" K$ M; X7 ?/ i) H
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
: c- \* f# e( A- n {
7 }: ^4 a) R4 z% N ToInvxy(desx, desy);, k+ m% m! e. v2 ~5 C
return TRUE;
$ a$ j& H. e% [# c9 e }4 `# G, W& `; B0 k- y4 z. A; H
return FALSE;
; W( Z( G0 _+ S/ C) \6 N: d }
2 h1 B! o# i# k7 z% n& `5 ?& t5 z% s1 i6 U+ J- o* j' m. K4 `# k
static BOOL ToCube()4 V% E: b4 ]" z. g( X7 H9 T
{
# R: L* t& N. ]) O$ w! ^% C if (!(*D2Client::ptPlayerClient))return FALSE;: Z6 M. G- {+ g1 Z4 u% f; Z
( q7 R. W7 t- \
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
7 F7 {- ]+ Q9 q* R* @ if (!phand)return FALSE;
; z+ y3 y2 g8 l5 `7 |8 E9 g/ {& x2 r( O, i
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
1 w8 {( C+ S4 g if (!pCube)& ?7 L+ a+ ?# U. C' E f
{' ], S2 G, Y7 G0 _1 \% |
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
4 Y( E& H: A' J& ^4 q if (!pCube || !pCube->nItemNum): b) S* [5 j5 s% r& Z8 {+ @/ p
return FALSE;
: D, v- n( G2 j1 b" F6 N4 q }
" v/ ~0 `7 }" c8 O0 Y8 _, @' Q; {6 ]* H+ n# ?
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))5 ^+ t' S; O/ }; L3 K6 a
return FALSE;/ l0 e2 k6 o% q
- P8 h( ?6 x- T
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);) ?1 Y6 h7 B9 i0 L. }; |7 O* B' p4 K
- o4 r* q4 D% N- h8 p2 A BYTE aPacket[9] = { 0x2A,0 };9 q" ^' L) t$ P+ M
::memcpy(aPacket + 1, &phand->nItemNum, 4);( ]& M6 M, u* Q
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
. S# i* F$ i- U1 V D2Net::D2SendToServer(9, 0, aPacket);- L+ n( ~; b1 s9 m$ c, b
return TRUE;
$ }7 u* y' ~7 e. u: W0 f1 |, e7 g( c, q* g: K
}
+ P7 _6 o+ y1 q% n& n/ D3 h& y- u0 d2 X- s+ n
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);+ B: P& C n7 ^0 u" X* U0 f+ C
; m( B# f' v1 y3 {/ \& K: V
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
) P( k) r5 {( D9 [/ t {8 B, Z0 `1 U, I
D2CoordStrc mypst = { NULL };6 G& X1 e7 D; T
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);9 F7 O, H/ S( s; S
# y* u" ?( i4 \6 X* C if (!mypst.nX)return FALSE;
# z0 ]/ O. x1 k4 M: O$ x
* Q' F' X, ~' V8 z) G PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
~: u T' j9 q, X& _& `
& O0 Y: d) k/ B7 n BYTE aPacket[13] = { 0x20,0 };
+ _4 J7 v0 r# K# N) S1 S3 _ ::memcpy(aPacket + 1, &dwItemID, 4);! m; k; N3 s O9 G2 N& a* L
::memcpy(aPacket + 5, &mypst.nX, 4);- W( Z8 l% T2 r* G8 U2 b! a
::memcpy(aPacket + 9, &mypst.nY, 4);: G0 j0 X8 ~5 r& M4 C9 |4 N) l
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);% q) I x9 _+ P- f" \/ s' L
D2Net::D2SendToServer(13, 0, aPacket);. g2 m0 k6 S5 {$ C
return TRUE;
( i) T- G0 H8 F) m9 N# e- ? }( e3 Q- }/ q C
, k, n& E x' D" I+ V static BOOL DropCursorItemToGround()6 U, y, G9 T% I0 W6 J! _
{4 b3 B* T' p5 R/ U/ W+ M& G
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
, K( ]' `- Q; u/ z7 R if (!phand), l- E$ ]9 i6 y( \8 R
return FALSE;5 P( X) O2 z# x, D
9 V: g3 \9 m# A
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);7 }) V2 b- l% E& C
! _& Q& F M: d BYTE aPacket[5] = { 0x17 };, ?+ s0 ^/ Y! F1 b
::memcpy(aPacket + 1, &phand->nItemNum, 4);- z& E( _! r" T. u; v* P
D2Net::D2SendToServer(5, 0, aPacket);
% ]/ o6 O1 O1 g: H% U return TRUE;6 E# P+ w1 l+ W% x
( s. q% ]4 ~- ]! P( t0 Y) S ^ }' Z, J' ~1 k. z3 s" q
" T c/ y2 E9 Z1 V* ?9 E: S
static BOOL PickStorageItemToCursor(DWORD dwItemID)1 M6 d& j9 P! a1 y# P
{* U5 b& x3 y$ r
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);9 |2 E5 [6 D/ V( i4 W, x
6 M/ `4 `) u4 l6 Q$ \* p* p BYTE aPacket[5] = { 0 };' f) d! J! S8 N! A
aPacket[0] = 0x19;6 o Y1 e* ?$ ]* }
::memcpy(aPacket + 1, &dwItemID, 4);
( {& w% R( g0 i2 W1 K6 [ //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);% L) [/ X' t! E/ m4 q, _7 u* q/ J% {" i
D2Net::D2SendToServer(5, 0, aPacket);
0 w+ I4 P0 m" Z; R return TRUE;
- _ Q( V0 u2 w$ N8 ]- V }
- X8 A6 u1 c# ?1 i n
0 ]" V' ]* u2 Z2 I$ Q! a. c( ? static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
9 ]% }) `/ b/ E( A0 q- f {
' O2 Y+ |% h$ [3 y PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);# d* H$ V8 N I3 I# q8 i7 D
BYTE aPacket[17] = { 0x1f,0 };( G1 z' {7 m k7 |: M
::memcpy(aPacket + 1, &ItemID1, 4);
# P. k* u9 A) v4 O ::memcpy(aPacket + 5, &ItemID2, 4);* u6 K& t L& f# b H7 I
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
* _$ Z- ~2 r) ^: a" H: P D2Net::D2SendToServer(17, 0, aPacket);5 m/ w+ y+ g& N0 H8 |' a
return TRUE;0 a$ x, m4 H7 X
}
9 O: N- ]% J8 w0 [2 r% F5 a
0 u% ^6 Q4 D0 i$ Z( c static BOOL Transmute()* Q5 b/ t9 d0 T
{ V$ _3 A3 }0 w! Q5 B' _+ p% V9 r
if (!(*D2Client::ptPlayerClient))return FALSE; I1 s' O4 z5 C- n
5 }+ o5 o2 ?8 Z+ J# j0 s5 Y* D
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
1 p: S9 Z, f" y4 L% b# I. j" n) @ return FALSE;
1 e2 r# G0 ^. X- a+ R8 ?% |& P+ Z. U0 Q0 X+ B& N( B; ^% W6 g
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
7 [4 T0 N6 ]0 n7 i+ h# A; K4 j BYTE aPacket[7] = { 0 };" I4 |" r8 O# X6 L
aPacket[0] = 0x4f;
! `/ v: G/ `0 Q* |2 T2 E+ d aPacket[1] = 0x18;
' p8 z/ @5 q: I/ Z- u. B8 a4 O D2Net::D2SendToServer(7, 0, aPacket);
. l6 C6 B4 m/ Z7 _; ?: {$ h return TRUE;
0 U' i4 g* a1 @( y: C1 I }! c% V& }4 f6 H3 A- S
};
" T4 E# \: p, j& V
/ K! {& s5 o$ ~% u |
|