|
|
转载( k% Y% X8 z a) c3 q8 J9 G
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:; D& m! ~ k+ K' p, O
D2Client:
% R4 X# q* `& w4 g! k6FB20AE1为拦截输入框(用于获得命令)
# V( n& s6 G) q- U7 K2 p6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发 o; N) F8 t( k: |; P9 I3 [; W
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
! q5 J9 L5 T7 D- m6FAF4230为hackmap的loop点 我用的hackmap导出位置6 I& }* u7 p, B/ c
) M0 g% J+ e: g
6 |$ U1 k: ] D9 |5 e4 b, n发包函数:
0 }$ [/ a# ]) f0 t- d6 uclass D2PKT_ITEM0 _! U9 ^, f2 L
{- A4 Q q5 ^2 l
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上# h; ~, v$ }; X0 J, {
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多5 V& g) ?! w3 @+ Y9 o
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
: w5 m4 w9 B" w( @#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上) Q% P/ P8 A8 G: l. f/ E H5 y
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
& T! q* ~! }. S#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
, v ]1 [$ a2 |- I4 y7 N$ L#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏% P+ t* ]1 J& v1 ?" M G
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上* R, f" i& B H) e8 x
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
" J5 r# t w, c#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
6 O" r, h, i$ U9 s' K. L! C' `. o#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
8 L% t' [7 ^) H& y. N# X#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
- L D: N5 H i2 s- K#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带; c5 {4 y5 V+ Q: G+ o$ ?
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
9 D U$ R9 f7 V/ M6 \#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -4 ]+ M( ]! a" x/ a
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
! d7 |- j4 `5 c9 I#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
' [$ Z: A4 `5 T) n6 I$ j
7 [3 N* i' _7 S* I9 B# [: y- s: q#define PacketItemMaxTick 150
; m7 w' O% S6 S( s) q; T#define PacketItemPickUpTick 20
8 `3 S6 `& q" f I4 x9 k. E' t7 l8 J/ c& O
private:* x" Z, R3 g' y6 H
static DWORD _PKTItemTick;
0 F6 E, u( F) C6 @ static DWORD _PKTItemAction;
- ~- s; A' \ u, k9 T static DWORD _PKTItemID;. Z# L- ~. x! u2 l: ]9 ?3 z
static BYTE _PKTPKTType;, L0 M4 Z: ^9 G6 t3 w$ K' S; d( l
public:
& p' c( j2 t1 r# h' Y# R static DWORD PKTItemGetTick() { return _PKTItemTick; }
; K/ t/ ]7 l5 U, r5 l1 L+ |6 S; v4 O" j( H/ u* N
static void PKTItemRelease() / l3 D* I; }! V0 B( G8 o# ]6 }5 }6 \
{
" r1 P, D; o$ x4 a8 J0 { _PKTItemTick = 0;
2 S- M) \8 s+ F _PKTItemAction = 0;( y |! H" C: e3 B0 f$ v
_PKTItemID = 0;
1 {: a% d! N0 O" ?+ W+ S o _PKTPKTType = 0;$ M: g5 T2 B" S( N
}
. e; P! z7 n1 F. Y
6 d4 O* h! G& v2 {2 b" ?0 P static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
3 m3 q) ~/ @- T& e: ~, \- H# n {
, |! f/ o9 ?' r8 a/ n1 Q0 R _PKTPKTType = aPacket0;
) g6 @- G4 ]* }0 l _PKTItemTick = tick;6 G/ t1 j1 _# H; f
_PKTItemAction = ItemAction;
1 l: j1 a M# W _PKTItemID = dwItemID;
( V, H& u( `: T5 j0 L; f }, D; f9 r: w! }! L Q4 V! U0 f
6 \2 M* b" F5 J0 X# ?" |% N+ M! a4 j
static void PKTItemTellW8(DWORD tick)( ^ K" ?2 ]8 O/ n. G
{
; t' P% p1 O: D* M+ b: N# ]3 p: w _PKTItemTick = tick;. D, r6 `: C+ L* }
}- Q6 f! Y. A% T9 J
# @2 O% `/ C6 f- y! D/ Y, [ static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor/ B) y% r9 f! S y, n
{
4 C1 _, \# `8 S/ u( N) } if (aLength >= 8)' a5 ^9 R/ i+ B, K+ x8 G
{# I1 P/ s7 ~7 c1 R- W2 B3 ?2 x0 W
DWORD dwItemId = 0;
, |( [( I8 }) e) g4 ^' t( s memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
0 e) x, f5 T/ @1 L" O6 U if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
6 k0 \! j( F3 a4 c G && _PKTItemAction == ITEM_ACTION_TO_STORAGE3 c: z7 d0 e7 E" ?% @( H* }
&& _PKTPKTType == PACKET_NEWITEM
5 \* D1 W2 v; E' i6 C, ^) W+ k )$ |9 X. V' f3 c) B$ E
{
: H- Q7 ^1 x* a( W6 p5 s9 j if (_PKTItemID == 0 && _PKTItemTick)2 ?- T5 W/ M3 h. D: B3 b+ g- R* C& N
{
6 k0 q+ x% z, _6 Z2 z& C PKTItemRelease();
8 s$ ^2 B ~) x6 }8 Y- a }
) r' o! S3 E. ~: N9 s K$ T else if(_PKTItemID== dwItemId&& _PKTItemTick): X! ^0 O j5 R! B
{- C$ k: \3 {* ]) M+ L0 [
PKTItemRelease();, D# v+ F8 M/ ?8 w
}
8 d& X2 d4 O5 W* Z5 m }
7 O5 q) j) S. X; Y' t2 L
6 `1 o2 S( ]- n, ]" |# R F( i( A }' m( }! p. A( y; b0 K$ r2 x6 x# G
}3 |2 Z8 y# `: n& t
4 E9 _7 a% [& J7 {- A" _% ?7 q static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
! U* l0 n6 f7 P6 P3 m {
4 X- \% i) q9 s* q if (aLength >= 8)+ K9 \3 |. S6 Z$ f3 C7 N7 W/ D
{. V% ` Z0 y' a
DWORD dwItemId = 0;
1 G: R6 T2 g7 ^% Z memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
0 [3 p4 F* Y1 [& B' h& Q' f l; T% e if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
/ V& D6 \4 {; z5 R && _PKTItemAction == ITEM_ACTION_FROM_STORAGE$ j2 B- s/ G5 i# s
&& _PKTPKTType == PACKET_ITEMACTION
* v4 X, F2 N$ d6 V )
u2 m: E. ~; x- ^+ e9 x9 e {2 s8 U! I7 E+ k4 Z
if (dwItemId == 0 && _PKTItemTick)
6 S7 T# U& @# O- q {) o2 m$ f# g; p, [ ~% v8 G
PKTItemRelease();
3 h2 p) k& H! n9 k }1 A1 [7 o. y b
else if (dwItemId == _PKTItemID && _PKTItemTick)
& h) A4 U+ \8 M+ S {) h0 y5 q3 P+ ?8 M8 ~
PKTItemRelease();
# j! i4 G9 f4 d3 r) m; Z% v }
% z4 V# n, r' y7 f E( o }2 k$ K/ n- X3 z" L* t% L" ]. J
* u* K* @. `# Q# R( b/ j
}! i5 J8 M4 s: s# O+ q
}7 i+ q% K1 e* T$ R
7 ] B& n l$ ^+ {3 z
static void PKTItemGameLoop()
& t4 t8 x0 Z; |$ u" F- a/ m {+ i9 Y3 b2 W* w' Q- i
if (_PKTItemTick > 0)
0 F- Z. v' M3 \ _PKTItemTick--;% R5 E0 g: [6 A6 z
else if (_PKTItemTick == 0)
/ g e8 d/ A3 @- z PKTItemRelease();
; C4 ^2 i& E; a+ G4 L }2 {% i U; u3 S j+ }
U$ ~$ e2 J$ t1 r$ m7 Z# X( l static BOOL PKTItemCando() ! K/ \+ K; y+ ?8 t$ b; l
{
5 F+ w N) J/ Q) L$ I if (_PKTItemTick == 0)return TRUE;1 P" l* W. X6 g/ `
return FALSE;% v8 n3 ]$ w! O" R0 q; `2 p
}# c3 A: c2 N$ x( ?
; }+ p. y$ ?, W' ] static BOOL BuyItem(DWORD ItemID, DWORD npcid)
/ R7 P9 ` H2 T" D {
- Y6 \* ~3 q" C8 h5 c PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
/ D) M6 K8 I& |3 A8 r& t% [0 a1 j- ` BYTE aPacket[17] = { 0 };( m/ Z, D, \1 y U. C" _
aPacket[0] = 0x32;- t8 I! b- X$ v( |2 b9 x
::memcpy(&aPacket[1], &npcid, 4);+ K9 q+ c7 A) k7 A' f2 j s
::memcpy(&aPacket[5], &ItemID, 4);( `1 Z8 E9 _* u0 j
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
& W, i3 w. O) t& i D2Net::D2SendToServer(17, 0, aPacket);0 `9 b- G' k _9 I( L, V: c5 g
return TRUE;# m; R( F* k/ d0 U. t: j: U! I
}
6 p, g( P: }, B# j/ J6 v) \9 u
2 u) D2 N7 {- [7 b static BOOL SellItem(DWORD ItemID, DWORD npcid)
9 b, R1 d! H3 A {
6 Y x4 ~+ {8 ^6 F: v4 i PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
" ?( m; |- n4 V( ^% l/ x BYTE aPacket[17] = { 0 };
9 C2 W% q7 f' N. h) R aPacket[0] = 0x33;" o( Y9 r1 b- K3 V
::memcpy(&aPacket[1], &npcid, 4);9 q7 Q/ s, m k: q
::memcpy(&aPacket[5], &ItemID, 4);
) g& L' c7 s: J1 _* \6 w$ T //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);# B5 m' i- S5 i9 @4 r
D2Net::D2SendToServer(17, 0, aPacket);
8 A! Y8 L+ B) q return TRUE;8 [8 {' Z; ^. U+ J3 L& `( {2 b
}. [ ^! Q, c, c% ~
% ^9 }" |# K4 o! c
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);$ U+ T. l. A/ Y$ E7 o
i( U# C3 X8 W+ n( y
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
( ~/ `5 j& A$ x2 S1 h/ W, ?% U- P" g [8 Q; Y" M
static BOOL OpenCube()4 ?+ s% q& F( ]
{
( q7 y/ [9 M8 K5 {" E; \" O9 x7 v if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
. |( j/ i# i: r
( c' I7 m" p# u' k UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);* x, N. }3 k$ k: ~. ]
if (!pCube)
6 t h! X$ D: Z. B% f1 ] {4 B7 y+ N$ y/ S
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
% j- ]9 G7 j) G if (!pCube)% _; M8 b- U' Q! j
return FALSE;# v. Q: k" t8 y" o
}6 v" e4 T; H B7 u" Q& ]
PKTItemTellW8(PacketItemMaxTick);
9 J( }1 X/ `* T6 q" K5 V# v# i* k& q, O8 G+ k6 l* R
D2CoordStrc mypst = { NULL };( f- K, i6 j5 \" F+ }0 X# `
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
' c) i" |" g( s: H0 m
+ `& [/ K( ]# [ BYTE aPacket[13] = { 0x20,0 };
$ R( ~- m; a; j4 F( l ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
0 Z0 ?1 [( ]+ c9 H% Q4 o+ l. ~ ::memcpy(aPacket + 5, &(mypst.nX), 4);
: m# F H' e, j1 M ::memcpy(aPacket + 9, &(mypst.nY), 4);
& ~7 }! R5 F% u5 Q S, ^# B) l5 [ D2Net::D2SendToServer(13, 0, aPacket);
8 V# S3 W' x5 m* O7 E0 z return TRUE;
: u2 ~1 s, c! z }
9 v2 G8 j. I' B1 {% e! d/ _8 l2 z6 }& G. `
static BOOL ToInvxy(DWORD x, DWORD y)6 X8 a; N6 l# P
{6 F& N# l+ A3 F, L, n
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
+ x8 t$ I6 U9 D- h9 }' J6 d {" [
3 l c& |/ y h+ e" U if (phand == NULL)$ {9 ]( X e+ M, H0 y, Z
return FALSE;
x7 h; q6 C) Z9 {3 {- u
5 G; \2 r# W' T, x# k$ f; [ PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
; d) }; H1 a8 \- Q7 m
' I: ?7 f$ [& w% g BYTE aPacket[17] = { 0x18,0 };
6 s) u2 j: ~6 ~; |8 G7 m ::memcpy(aPacket + 1, &phand->nItemNum, 4);
) M( W/ T3 a- i, h* G1 W" j ::memcpy(aPacket + 5, &x, 4);3 q1 I7 |- v4 l
::memcpy(aPacket + 9, &y, 4);- |* x& }8 M( W9 ^7 {
D2Net::D2SendToServer(17, 0, aPacket);
* s/ _9 R9 C' M Q; t return TRUE;5 a8 L$ }. z. {2 }0 s. M, n
}
0 W3 N2 b3 I6 ]3 G0 L' L/ x$ h; t5 q% y+ o: {. _8 J; K
static BOOL ToInvRandom(BOOL bBagFix = FALSE) 9 {! L4 @( `* v& ^0 A8 ]3 I
{' C3 `; k! T$ ?, g" c7 w+ i
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory); f$ S3 ^1 t4 B
if (!phand)$ ?1 I, ^4 ^0 o, ~% x) d( H$ k4 R
return FALSE;
; K8 c+ U% ~0 Q% i& E$ S1 J int desx = 0;
# R7 J3 z' \3 ^" [) k( Z3 ` int desy = 0;, \/ {) P5 f3 z ^+ I" e1 w
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
9 M3 T3 d# w! ]( N) b {
" l8 i8 b9 B0 {7 r ToInvxy(desx, desy);% v5 ~6 I4 s L ^
return TRUE;
* z$ Z2 m0 V C0 z- |# s. U }& Z8 c8 Z! @$ H4 [
return FALSE;
' S: E* q9 L+ p$ W }* v) O( L& U: f0 B) v
0 V0 M0 D7 T8 s, `. h static BOOL ToCube()
4 @8 H' `7 u& U& j5 t {) {4 K2 i7 x. {2 c D
if (!(*D2Client::ptPlayerClient))return FALSE;
0 G( S" u9 g( ?! }; y& q( z8 r- ?: Z1 u8 H) x
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);0 a) i$ c, ^4 z! S# y1 x& Y
if (!phand)return FALSE;
6 S) P2 b2 f6 e! k8 Y
% J2 x- T1 U- i& p" L( o0 B8 t9 G UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
; L+ \1 e% b, W- ^ if (!pCube)# U7 v) b7 w. M9 Q) S
{) K6 O; t( N! J3 x' D9 z0 t
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
' f! [' z, W; ~/ B if (!pCube || !pCube->nItemNum)# A' h9 P' D7 \* e$ J0 n# Z: r
return FALSE;: V- O5 [7 C, w5 W" k* w
}* X- [% r5 L3 c- l1 z: \
! [6 Y, U, i' q: i3 j; ~* ^6 ?( T
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))5 T( K: X0 ~" }
return FALSE;
3 Y0 s5 v' L/ N; \% h- ?* L4 t, R D; R4 A5 @/ {# p2 W
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
/ k5 G j- s1 x4 C4 [7 I
/ j3 s* x. e& e BYTE aPacket[9] = { 0x2A,0 };
+ i, b, |3 a \ V, g7 Q& p ::memcpy(aPacket + 1, &phand->nItemNum, 4);4 W$ v! o3 g0 @1 Z: q& G0 A
::memcpy(aPacket + 5, &pCube->nItemNum, 4);( {: `. M+ z2 z% o* C1 Z. ]7 w
D2Net::D2SendToServer(9, 0, aPacket);7 [( C0 q! A! A5 \, |
return TRUE;
( {* }+ ?* O0 y, X5 V; q
8 l2 g7 a# O+ s }7 ^% f; C$ Q3 F1 m
+ w8 g) R& ]6 B, D8 d4 n. ] static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);( l$ |- j1 t; N" a* G/ u
( i) t( H3 Z1 c9 ?. s+ | static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存) b9 K+ k# T; n& W, H5 {
{
( p# K; L4 b1 e5 V5 P& n D2CoordStrc mypst = { NULL };( {3 e, T) H- ^- a
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
! N% }' _0 ~! D: n2 G6 r% b" X8 M2 }5 B4 y) a
if (!mypst.nX)return FALSE;
% j0 o; r$ w+ C # G p" Y1 i+ f Z
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
& p! R9 m) `8 s9 D- y, [: B8 t
3 G) ~6 X" x% o BYTE aPacket[13] = { 0x20,0 };0 U+ G$ ? R( T6 s7 v( q9 b0 P
::memcpy(aPacket + 1, &dwItemID, 4);
9 e D( a' J W0 S& ?2 i2 [$ O ::memcpy(aPacket + 5, &mypst.nX, 4);' p, S. ?: j: H0 M9 p) P! M
::memcpy(aPacket + 9, &mypst.nY, 4);( o% z' z- \/ { M( m0 O7 i* K
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
8 Z2 ~7 Y9 k( V D2Net::D2SendToServer(13, 0, aPacket);
! T# k0 @ C0 r, r _- f' I- X+ n return TRUE;
- {7 y7 v7 k! S% z }
7 _3 J0 |9 U7 z
, m! j" x6 ]: N8 B static BOOL DropCursorItemToGround()
0 Y* X( T) t: n- m) |- Q {1 D) j. I I' a; m
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
: Y. T0 w9 Z3 r/ W: a! M if (!phand)6 c' k2 v- s7 o2 i! X
return FALSE;8 Z0 u5 L; M2 H! C
* K7 r }4 a! g
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
1 ^8 E! \& N( W1 _5 a/ N* ]3 G" u
/ f% Z3 `3 A. p3 _ v BYTE aPacket[5] = { 0x17 };
" F) l- ]3 @3 M6 T ::memcpy(aPacket + 1, &phand->nItemNum, 4);
! b% |4 ]4 N" a( ]# q- e- B D2Net::D2SendToServer(5, 0, aPacket);9 w5 l; d9 Y0 c$ D; ~* V( w
return TRUE;7 p% X) C2 x& E. z1 G& S9 S
G5 k% V1 g" U' c
}! z7 R6 w9 i! _( l' I
+ T; J7 Z7 \( b* o1 g1 t4 Z
static BOOL PickStorageItemToCursor(DWORD dwItemID)
5 ~$ O, h& e3 x* K& ? {& j: m( G" S% R# d, V1 L
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);( m) U1 h) \, G+ q. G# E' O
2 b3 {4 t3 S5 p: C. J0 @& O b j BYTE aPacket[5] = { 0 };" R9 P" y) j [
aPacket[0] = 0x19;1 K x% o( L6 R3 x" i
::memcpy(aPacket + 1, &dwItemID, 4);
/ ~5 e4 o4 T" i2 h //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
* }! P, o+ v5 ~) D/ j& e: x% p D2Net::D2SendToServer(5, 0, aPacket);# n; Z/ _3 p1 Y: a0 {7 {
return TRUE;+ C. r0 k* I H5 }0 U8 b
}
/ a& T. N2 H9 e& s) p) l9 `% e5 l1 M$ H6 v& d
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
L5 V+ z( i& }) x @9 ^ {, L0 ]( c; p7 |2 N
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
- z+ z2 S7 W6 f, ^0 {+ B BYTE aPacket[17] = { 0x1f,0 };( E, D2 l# @1 \0 i6 g, Q" ]
::memcpy(aPacket + 1, &ItemID1, 4);
0 \1 Z8 h8 R$ p5 t |1 x0 O ::memcpy(aPacket + 5, &ItemID2, 4);
7 @, N" ~- w. Y4 h; U1 l* Q! b //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
; n2 D" _- e2 F D2Net::D2SendToServer(17, 0, aPacket);
( I) P+ e+ }; O9 Z# ^% ? return TRUE;
' F1 h3 Y; w( j }) J, |& r0 i& |- @$ k0 j: O
2 X' d4 o0 V/ ], J4 L5 A- b; y* W
static BOOL Transmute()" `3 I0 C3 j B3 z- g; b. ^
{
# C8 L n+ J; Q! s* d! p if (!(*D2Client::ptPlayerClient))return FALSE;& | j m& z" e, y3 u0 J
1 t- }! o5 G' s. M6 i+ d! ~2 ~ if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
5 C5 n5 ^0 W) y return FALSE;8 Y4 y/ t- S7 K( m) [8 U. M2 H8 ?
& G! M, ~# }/ s. m9 E8 T" ~ PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
0 f3 G% b4 x; ~9 G$ S7 R4 e BYTE aPacket[7] = { 0 };
! S0 e5 J u. ?) W1 e; ?5 L/ M aPacket[0] = 0x4f;3 }8 i" b( \7 t& ]7 u) y/ v- l$ \1 q
aPacket[1] = 0x18;: K# M3 C+ b5 X: S) k
D2Net::D2SendToServer(7, 0, aPacket);
+ u6 b6 a. F, ^) |3 T return TRUE;* v/ z7 a7 R7 [5 u
}
$ p- R3 g4 q' ~$ J9 x};/ |( S' N* c1 `8 A
7 o0 l+ L+ P& U. ]6 E$ D |
|