|
|
转载: o* E- v3 r2 l
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
. |; Y3 p: `! l {2 M8 {D2Client:
3 Q6 r' q3 O/ z! R1 G: o5 [7 l6FB20AE1为拦截输入框(用于获得命令)2 h# c- r8 n# U, e `" p: t
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
$ H; K! B$ B, V, P& V6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
6 T; E; X7 d0 e+ H6FAF4230为hackmap的loop点 我用的hackmap导出位置) }3 N1 z. c, j2 S- P# e
1 w/ r+ M8 a$ Y; J* x; ~
/ Z& `( n. [# _$ d6 N发包函数:
* f) ~9 X' m l: v& I% Z' u6 v( yclass D2PKT_ITEM
# ?7 T9 Y! c1 u{
' I" b0 y+ z( L! j6 u( b X#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
" ]( H. N q/ |, ^4 H$ B! H#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多" ]% u2 B u, r7 ^+ e3 N: U5 w
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上- O" y: c* Y" i$ m/ j: y$ \
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上 i( w0 ]5 y+ Z) t3 \, f; d# `: T
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH3 g' V( b. |( m+ W0 j
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
8 q. _9 t5 u" R( o2 S. g6 u#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
( r' e! }) k5 Z#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
1 w2 k" n1 r' x @* H#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -: J8 ~+ I% N# U0 b$ V
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店. S) }/ D% c; n5 |
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
5 D# U8 r) M3 h0 ~#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
# ^/ @6 `& @& B#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带% n2 c1 n( k% x5 i2 d- A2 j
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
$ u# i- l! o7 B#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
5 d2 A! v8 D* [: v% n#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上* E) T) _, c9 x6 n) f3 w
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
3 E5 ^* a5 u6 G. O3 _$ W- [; y: V, k3 o
#define PacketItemMaxTick 1502 k1 B& g) j' ?
#define PacketItemPickUpTick 20
$ I4 n6 L9 R' V$ Y' N4 K# h$ y* q
2 E. X6 |) N! Yprivate:
: T& [4 b' F# P6 J% q9 T static DWORD _PKTItemTick;0 S7 Z/ ^9 I* n1 f
static DWORD _PKTItemAction;' }/ T3 ]% Y) b3 W1 l4 i: d! j
static DWORD _PKTItemID;% g5 F- {5 m& r0 o- ^& Q- ?
static BYTE _PKTPKTType;2 N4 c; u2 v: R6 Y0 o, f
public:5 D; n) l: I( B1 U0 X
static DWORD PKTItemGetTick() { return _PKTItemTick; }
* \ {- t3 K, w/ }0 R
3 e# {" i) Y: `/ Q/ c( j6 c static void PKTItemRelease() % |6 \4 d# P+ N' S6 E+ v
{
; C3 P/ R! o6 y( z& } _PKTItemTick = 0;
' j2 s0 B& Z: P/ k1 b" B _PKTItemAction = 0;
# s# y1 m2 I& } i7 M0 n _PKTItemID = 0;( G% P4 Q( S9 p |- R$ n8 B4 _3 b7 R
_PKTPKTType = 0;, C. D# |& w% f( _* P4 a8 {2 x3 `
}
1 ?; K* A" m8 L, H. P& r! C9 A7 i9 f2 S$ ]" U! X1 I
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) / e; o: e! G. h
{; y/ f* P# v' G6 d8 M7 l1 Z
_PKTPKTType = aPacket0;
: u, `: F3 u* h1 ~* `4 l _PKTItemTick = tick;
) U2 V* C0 O- f4 u- V* H _PKTItemAction = ItemAction;
7 s# g6 i ~6 H' ?" D5 x6 f _PKTItemID = dwItemID;9 N/ B7 s% x& |/ R$ E
}" k8 [7 l1 o) M J, ]9 i. w3 _
) L. j& _0 K2 @ static void PKTItemTellW8(DWORD tick)
% W5 E5 s: a* u1 d8 e- ~4 O {
3 B6 Y7 e% o O3 W5 D( G( ~ _PKTItemTick = tick;
. \0 e5 x# q/ s }
3 W/ h* h/ @( d4 g. ]0 Q- O6 A# o# j3 v- |" q. ~. H. ]
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
3 s6 {- z' s5 `0 V0 n/ R x, i {2 G: n) o6 q/ m. \8 F1 Q
if (aLength >= 8)3 [$ r' |, W" S8 n$ {
{
+ B4 N0 o9 d" A1 v3 w DWORD dwItemId = 0;
8 b+ T [3 B; \4 S8 S" ]8 T( u memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));# q! C, y3 n9 H7 A0 G+ V% ?# L
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE8 n' b! v1 n" R3 R+ `$ n& Q
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE. z7 P# \0 H# B( Y1 x
&& _PKTPKTType == PACKET_NEWITEM2 }# Y; Z0 u+ h& G
)' |" ^+ ?0 X$ ^4 W3 G
{
- h: e g+ d( j7 _. F if (_PKTItemID == 0 && _PKTItemTick)
5 q& p- p; p! m: I4 {1 g- D {
7 M. s: c- ^3 k7 H$ h3 A PKTItemRelease();
; a* u% J' ? g }
, F/ \; Y c G* x5 V. X else if(_PKTItemID== dwItemId&& _PKTItemTick)
. S8 V9 @6 w1 i. s2 Q {
U/ G" b. L. n4 ~: y, _: q PKTItemRelease();) M' K( y4 Q X8 _9 V/ W5 u& [" W
}
% F U2 w) l" i3 k9 L }
% R# _; F+ {1 q. E8 C& Y 6 z9 O- U2 ]) W1 d) X
}
4 V; ?8 j* s5 ~ }) u4 H6 n }0 a8 S3 S" m$ O
. x# c! e9 I7 e, Y& X" y
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
2 B% I) D7 W, S { ^/ Q; G2 L8 c5 ?1 q. {$ A
if (aLength >= 8)9 j1 \$ b! I; U4 P8 b# l- F
{2 g. v' B5 G+ i/ J0 K" J8 E
DWORD dwItemId = 0;$ p) B; I" h9 |' E1 g& w2 g, F( g
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
2 ]' o( U0 Z- O$ e8 ` if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
8 q- \" n7 G2 M) L1 B && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
, n( ~* n2 |9 q! ^ && _PKTPKTType == PACKET_ITEMACTION. J F* @+ s. j1 z( i# }+ c: s ~
)
3 m9 { u( E! L) l) ~ {
7 J. Y- s% G1 E7 w3 T if (dwItemId == 0 && _PKTItemTick)' s B' O! n M/ P# B4 V
{+ T" A/ |8 V# R0 \
PKTItemRelease();
' k3 |5 ~" V; |6 v, R- f }
) n8 e: d6 t: T2 f( Z7 o else if (dwItemId == _PKTItemID && _PKTItemTick)
0 Y/ |, t% ~" N4 `. d2 t0 K7 \ {
( \( F) w# s5 q PKTItemRelease();/ t2 p! A( p: k
}
] Y2 L4 v# i! e, |! F }
1 |" i+ _; j9 L# k" k: g 9 Z* d+ V! q, [5 ?: S
}
2 N& l' B9 g- } ]+ R }
) s7 [2 S% q" ~; J6 [ P/ N8 w1 H( [# b- h& ^7 }) z# P1 G" S
static void PKTItemGameLoop()/ G+ M' X8 a( Z
{
! S5 J! D4 `% Y) ^ if (_PKTItemTick > 0)- c8 Y( H8 |1 \) Y; y1 R
_PKTItemTick--;: O! z! @. f3 i- f# u7 k5 _
else if (_PKTItemTick == 0)
+ ]5 N5 L: U0 z' i, L PKTItemRelease();
* S. q# ]( G w/ m% n; c( ~ }1 v1 X. e; ~% [' G( N& E' Q
# l8 E. r* a5 A/ t( U6 A static BOOL PKTItemCando()
$ p8 Q3 @1 J% O" w: I2 m6 Z {
/ n; I8 f6 g7 t A3 `, L/ e if (_PKTItemTick == 0)return TRUE;
" V0 u* o& }0 Z" b; g return FALSE;0 }7 ~: |3 v( e9 }6 H* t. O# k* W! c6 |
}
/ t: V/ ^5 d; m/ W; o' B
$ D6 }/ ?+ c- _9 l static BOOL BuyItem(DWORD ItemID, DWORD npcid)
& Z0 Q* ]/ S, V8 `! {. X- \ {
8 K7 _1 e! e. r- o" `8 N PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
( a; B' j7 G! g9 l BYTE aPacket[17] = { 0 };
2 C1 T5 w R9 T g+ l0 ? aPacket[0] = 0x32;; B( K9 Q& F6 Z) l0 a$ U
::memcpy(&aPacket[1], &npcid, 4);
# x( f' _' R ^- ] ::memcpy(&aPacket[5], &ItemID, 4);$ \1 l# R+ k1 A5 Q% _) I& G! h F
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
7 c1 H( k' r+ b1 _" x/ r, a D2Net::D2SendToServer(17, 0, aPacket);8 c. ^% ]& M% w) S3 Q
return TRUE;
], H+ H6 X! }9 E+ f }. c: M- ?/ A! @
0 n- c0 c" d$ i0 I9 V
static BOOL SellItem(DWORD ItemID, DWORD npcid); X9 u6 {& x5 V& F2 z6 L" h
{
: D) e {" T- ? r PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
0 x" ?3 s3 h. H BYTE aPacket[17] = { 0 };/ J8 X4 A- R. [/ D3 I
aPacket[0] = 0x33;4 \8 D. |& y+ b2 P; J s
::memcpy(&aPacket[1], &npcid, 4);
' u# j. l3 F1 z! J7 e I( Z ::memcpy(&aPacket[5], &ItemID, 4);
6 U3 {$ e3 S3 F6 N //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
/ [5 `0 u8 I$ n, m+ h9 @ D2Net::D2SendToServer(17, 0, aPacket);8 n2 N$ W3 ?/ Q; B$ V7 z, G! y5 ?
return TRUE;
/ U& ^0 u. T! q6 D; G& r }
& r( m! i; _ ~' \- [* D
# P; {+ b5 Z+ p% E2 A static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
5 k) t6 A; z& l! G, K) b! c; p7 L0 d. d+ h6 ^" n3 A8 c* N
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);2 S& `1 m; {: _* Z9 S/ |0 r
; W% `9 p U, Z% }) ?: t) {* Q3 U- e
static BOOL OpenCube()* K1 e5 ` M4 M2 A c7 k2 H
{4 m! s2 V1 r3 ^# p2 ~! t' u5 q1 S
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;& b* V n( s% E
6 h+ K# a" l/ Y: t- N6 B, ^' t
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
/ G3 V) `& U1 u if (!pCube)
( F- o$ N* y+ o$ d# B {
3 [: n: b+ [& e, \7 U pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
: g) ^' }! b; T if (!pCube)+ M% C4 ]! s, A
return FALSE;. J0 @5 q% p- Q' w/ {! l2 D
}
; Z& Z3 L; r9 w0 \" h2 m7 i PKTItemTellW8(PacketItemMaxTick);+ i& [9 r4 e4 g0 @' h* f
_& t5 i6 q* \) f0 t9 J! u c/ k- p D2CoordStrc mypst = { NULL };
" j7 i. G5 P& Y% d D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
" M- W+ k3 c) P s; }' X
% [1 L+ z5 x& I3 Z" ]! X4 L BYTE aPacket[13] = { 0x20,0 };4 V3 z H7 x- \, g3 M0 r3 n" O
::memcpy(aPacket + 1, &pCube->nItemNum, 4);6 A" t/ F1 ^2 d- c" ^/ l$ @5 G
::memcpy(aPacket + 5, &(mypst.nX), 4);% l6 ^4 P- R5 a0 \6 x* B/ P
::memcpy(aPacket + 9, &(mypst.nY), 4);
7 {3 P; T/ B6 N& E D2Net::D2SendToServer(13, 0, aPacket);
1 O2 N3 v$ W8 n return TRUE;& T/ A" v2 x+ ^) X2 f8 G7 a
}- Q4 L/ I& ?, s K5 Z
/ k4 [: T& A5 b+ F( [ m
static BOOL ToInvxy(DWORD x, DWORD y)! [6 h" h8 C0 k. j
{4 l- N! ^/ i H' A( y/ S% i
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
% R% D! M. p& f. }8 T( c4 j
& j: S# o( j( \* s if (phand == NULL)
1 L4 C0 y+ L) g, A) Y( q return FALSE;
9 H b7 `, ~, z# A5 ^1 j5 s5 q$ ~( {: C# c' w# `6 p; c" c2 R
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
3 v( ?& V- H) Y
4 f. J. J4 |! j$ U O* j BYTE aPacket[17] = { 0x18,0 };5 S) e1 E8 Q( R
::memcpy(aPacket + 1, &phand->nItemNum, 4);
: ]1 n- y \! o g5 D/ d9 y/ c ::memcpy(aPacket + 5, &x, 4);
9 L- V9 t% D2 x& ] ::memcpy(aPacket + 9, &y, 4);& R% q6 T0 y) H; t
D2Net::D2SendToServer(17, 0, aPacket);3 a7 @2 `4 l& r; f
return TRUE;
+ m/ E+ C" y* I( X/ O) V. U2 O } ^( y ]! D3 L3 v: Q1 w9 k% E- p
' Q2 U8 s9 B9 A5 S8 v1 c static BOOL ToInvRandom(BOOL bBagFix = FALSE) 5 l$ t) X3 U2 q
{
5 s& R+ [' F, ]% L! M UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
6 T. a+ Z) }. O4 b- ~ a+ e if (!phand)
: c7 T' _0 j) K9 G- @) `/ W- f, z return FALSE; u8 Y2 `% v0 T( x7 }
int desx = 0;
0 v4 d9 x7 S. ?- }1 y6 W7 Y int desy = 0;# _( P+ c* Q+ d$ G5 l$ L' ^4 W
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix)), m7 c; i1 e3 M; e, b3 T
{: \' {, v1 V( V/ y
ToInvxy(desx, desy);8 h" r1 T4 g7 q
return TRUE;, H+ a- b, F# Y. z
}( C' ~* e* \0 c8 {
return FALSE;8 e3 F( q* J) f1 s0 d
}: E7 \& {3 z0 C: @# q
" H/ Q! x/ N( t- |/ ~* {( p static BOOL ToCube()9 t6 Z0 Q8 z& C. U2 U6 U) N
{
% @; E" c4 [0 m+ Y- Q if (!(*D2Client::ptPlayerClient))return FALSE;
' ^0 _/ c; i4 z# o) j' r; \
; D* q1 A2 b' N$ `9 V H UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);6 O4 g- G1 P( F
if (!phand)return FALSE;: l1 F& {6 i) `+ Z3 q+ S- ]
! e/ y) K4 X* k+ I/ u. D0 g
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
9 i% ^% B5 A% F if (!pCube)
9 h$ t! _- o3 g! |! h& ]+ E7 g4 O {9 _% J. D: P4 g2 a$ b( l
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
( i; \2 W' K3 Q0 ]. m0 k if (!pCube || !pCube->nItemNum)
" A# Q4 R. X6 q$ T' ?1 @ return FALSE;! C* i5 V. o2 R0 C: @. ^
}: f# f2 B: z ?
# _5 B1 \/ Y) u+ P# I
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
/ {7 v3 M# ` v+ V, l return FALSE;
! M0 b$ ~1 j- X5 `$ M
p# }! b! X; o1 h! m& f8 j PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
3 f% N% @, N) e% }8 K3 R. J M$ c: p) G; E$ k7 V
BYTE aPacket[9] = { 0x2A,0 };- q# P% z: @( ?% x& ^6 M
::memcpy(aPacket + 1, &phand->nItemNum, 4);
5 D: l* Z/ L% v2 Y U ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
9 t5 h7 v. H+ g5 i5 I5 \! C, Y D2Net::D2SendToServer(9, 0, aPacket);+ K, @; w; f; c; t: _
return TRUE;
: \2 ~; v# K8 ?9 G; d- g( _1 Z, C* d9 ] E, @) L. z
}# q* j+ W4 X5 p3 s% l7 G
# ~# X+ [0 B3 T0 q( d) W" v+ L static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);% `3 [2 e: d. i/ }" |/ J9 b
( s( V1 l t% D# e1 _# m
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存- S% P& Y+ V+ S7 _
{
6 n% t% X) c+ K! }1 @ D2CoordStrc mypst = { NULL };+ I. v; `2 F, q/ U0 P! h
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
! F) y0 q* K, [* S( ^( O
2 `4 C" n/ k {3 y if (!mypst.nX)return FALSE;
+ g" X" ^7 M( X& i 5 [# K/ p6 x6 C# w% ~' A7 }
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);/ _" }/ C6 u6 {6 Y- u
" K1 m- b6 z* u BYTE aPacket[13] = { 0x20,0 };
; g' J$ s1 G7 f) ~ ::memcpy(aPacket + 1, &dwItemID, 4);* k! t' V8 @( t8 ]( s& g
::memcpy(aPacket + 5, &mypst.nX, 4);
8 X0 C, L. O% A! _2 x ::memcpy(aPacket + 9, &mypst.nY, 4);
# w. p* _; [( ~9 F4 j j //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);5 _; X# j/ J8 a
D2Net::D2SendToServer(13, 0, aPacket);; X; q4 n1 c: w8 g7 \; O9 I
return TRUE;7 [; i% a- T c. T
}
# e8 ]9 p- e) V2 k6 J0 T9 I$ A, u8 _) e9 L8 w1 h
static BOOL DropCursorItemToGround()
% D/ U0 ]1 f! J" } {
2 X# S" h) D3 o! O8 g7 Q4 P2 S6 L UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);1 i. l. V$ A+ z6 d' V# J2 o4 G& J
if (!phand)
r, t: J3 _! X( k5 ~ return FALSE;6 O6 h p7 _9 S2 z& U0 b
$ o8 K) J9 ~/ O
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
* W H R+ X+ b4 |9 T" ^
9 q2 ~/ w/ r" y# m. L BYTE aPacket[5] = { 0x17 };) _! I' ~7 e, O; L
::memcpy(aPacket + 1, &phand->nItemNum, 4);
5 r, E' H4 d/ Z- Q6 Q; Y* F D2Net::D2SendToServer(5, 0, aPacket);2 y3 ^ T, q/ k! u
return TRUE;1 N. ^8 h* p8 @6 e
$ ] E- n: I1 z }
' V4 X) q* V' J. @* F
3 F( ^0 f" j4 U! J5 S/ e static BOOL PickStorageItemToCursor(DWORD dwItemID)) X* f: j. R9 E* |
{
) m5 ~* P$ p" A* v0 s- W% c PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);. u& h' H8 s- U- |; U9 C# q" c3 m
5 t( b9 @, m5 Z
BYTE aPacket[5] = { 0 };' F3 S4 T. w. o6 s& D/ z. S4 a1 p
aPacket[0] = 0x19;
. Y- p, _+ e8 O ::memcpy(aPacket + 1, &dwItemID, 4);) g0 _8 s9 t- g' z9 q
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
9 t+ d; C( l. a7 m& t) L D2Net::D2SendToServer(5, 0, aPacket);7 x2 q7 i$ Q; [0 |4 |) {/ K
return TRUE;
1 N. Z! f" a; X: t/ ? }. V- Z W% X! S
' o' n( Z5 J, k; h static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)% s( \6 B N4 w
{
7 Q5 E; q7 J1 x/ r4 k/ b7 U PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
$ b: O$ _$ H" P' E3 o, i! B BYTE aPacket[17] = { 0x1f,0 };
2 a' ]- t3 [% T+ c* t. [9 o ::memcpy(aPacket + 1, &ItemID1, 4);
9 H4 l4 V+ H1 D, p6 M) h4 a; y ::memcpy(aPacket + 5, &ItemID2, 4);
2 Y3 B6 c4 r2 h4 C# U //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
. G6 G: G _1 {& l: k/ s D2Net::D2SendToServer(17, 0, aPacket);$ t8 t: X$ I8 p9 X
return TRUE;
) c% X, W5 d3 c6 s7 ? }0 f; V% v" t* A
: q2 H+ V& N* D: l7 w static BOOL Transmute()9 E2 |4 J& `9 t2 @2 |( U& z
{
5 u9 W* B1 w. K. R2 T if (!(*D2Client::ptPlayerClient))return FALSE;* o/ ?7 O( h% N0 H& s3 B5 A
: f+ `7 ~8 D/ K" {- T, f if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
- @# q1 ~4 s$ g$ I h7 b return FALSE;/ K" C, x. U- b5 y/ |8 c
! @/ @1 }2 X" r: j9 E( s. ~4 T0 o PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);6 Y# P" e0 \+ F/ U. w) k
BYTE aPacket[7] = { 0 };
# I% L3 n* w% L9 _; f' k aPacket[0] = 0x4f;8 s" F) `7 {* l# L' t2 N7 o
aPacket[1] = 0x18;
! ?' d0 u9 v* y) W$ [( g7 c( \ D2Net::D2SendToServer(7, 0, aPacket);! g- `! ?+ c; \- `* K' d4 g8 g
return TRUE;. w; E6 R+ x& `, B
}
z: q5 B, d1 f1 M};2 X' m0 b, H6 S4 @6 Q% W* f
/ ^3 h+ r( d7 H8 A$ Y$ b% Q |
|