|
|
转载. U: D& R# s' d6 z
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
( ^: O4 U7 G C0 TD2Client:
+ f- e, \1 _8 z6 ~1 U% y! V6FB20AE1为拦截输入框(用于获得命令)
. ?3 r8 y; D$ X3 ]. B! T7 h2 x6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发. J! p! y9 f* V
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
/ {. Q1 Z; Z3 [, i% w6FAF4230为hackmap的loop点 我用的hackmap导出位置
8 G& m- ?# i; C* l0 P6 d/ H4 T; i \5 |
' y' a0 ]2 b! j! h
发包函数:! e) q; _# x7 m N5 u! B
class D2PKT_ITEM" D. |7 {3 F. ^
{& p, f7 q% i. o1 }
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
+ O* E$ U% t2 K- |4 ^#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
/ f; H3 q/ e; [#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上2 N0 w ]8 ]& n
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
8 v& w. K8 R1 Y#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH9 }6 g! _/ k' @+ |
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上2 N7 {! g7 W$ f- t6 `4 D; p
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
( e% V* P) r8 i# _#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
3 j/ a4 V% A% y( g9 F; a3 X#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
% h" v0 I! P! `' P" k! E#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店! D, ^. p$ W4 E B% r
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV6 X8 a7 w2 E/ M6 N! J8 N1 n
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
0 r1 Z* h9 ~, q8 I% N#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
3 M, g: u7 H( m9 M" P#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
# Z& R8 f5 O( e7 r% S7 P#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
# ^2 j |! o3 x' h5 y* x. n1 o* c#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上3 H) ~' \. }/ R+ d! Z# V; g; n R% @
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
6 Q1 ~" C: u$ L
h3 A- Y% U% y; a9 T1 m#define PacketItemMaxTick 150
, [4 w1 I, M* D4 H G#define PacketItemPickUpTick 201 B: T, `' C5 b9 z
0 k$ k: D" e7 }private:/ x& ?/ m- \' A% Q; I
static DWORD _PKTItemTick;
% P7 r$ ]! j# c$ K static DWORD _PKTItemAction;
- M; t0 G0 @8 O6 x6 `; \ static DWORD _PKTItemID;$ F3 X/ F" T) g: ?/ B* ~. i0 U
static BYTE _PKTPKTType;
4 F7 e: ]# a- n# B3 Mpublic:. l1 b0 E' X' ?0 r1 `; y; T) b
static DWORD PKTItemGetTick() { return _PKTItemTick; }
3 B; b# I& n U! f2 _' t' H7 V6 q& l2 x: I! [ M# `- Y
static void PKTItemRelease()
1 b7 L' C% v; F" e {
2 z" ]! O- G0 i7 m+ J _PKTItemTick = 0;
: s, d7 \1 ?/ M7 [ _PKTItemAction = 0;1 m* F# e. L3 {. m2 h% Q1 y1 D
_PKTItemID = 0;3 {5 c8 i, R/ D e' G/ T* h4 r
_PKTPKTType = 0;1 h( e) \) |9 Z0 j/ n3 ^
}6 V) s$ v! y( S% N: v9 E; W4 q, R* T
( L6 n, p. X! Z, D
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) : @; k5 I" ~- ^/ E0 F
{: U- j" Q g$ s" F/ F6 p5 q. Q
_PKTPKTType = aPacket0;" ?8 ~7 K5 H8 o8 ~+ V8 ]
_PKTItemTick = tick;5 \* ]% J/ U# Z$ f; @2 d8 N$ Q
_PKTItemAction = ItemAction;8 k V& F! r% D% l4 D0 j% E
_PKTItemID = dwItemID;/ u" W% Q X# g2 Z7 K8 Q
}' S5 ?( E! |3 _7 D; t
; w- T6 E2 r3 ` ? J6 G' E
static void PKTItemTellW8(DWORD tick): j8 g1 @: d2 X: F+ o
{
! W6 y( u3 O" O% Q _PKTItemTick = tick;
+ ~: a% T' G: p }. Y( y7 t) R+ Y- l: e
: Y- ]) N, B& U/ G3 z4 s! m" I! n static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
l/ ~( E% A- t1 e0 k; K1 x( q {* L; @) A* q6 P
if (aLength >= 8): g' \ d# Z; i; [ U
{
& z" g: m; i( k F! ^ DWORD dwItemId = 0;4 M. ~; P# q9 A( x7 Z( c
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
" d& V; ]: _4 A) j if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE, O: r3 j( f5 N' u' I9 P
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
- u5 N0 B/ |; Q9 m7 }0 G* v && _PKTPKTType == PACKET_NEWITEM
) Y. a) A8 Q) u3 ] ): l$ W3 p; _( s. c
{2 S7 a8 K' q4 C+ P6 x
if (_PKTItemID == 0 && _PKTItemTick)
7 `6 J) C3 s( B) J, w, E {3 s; f! N' O2 i( B: m
PKTItemRelease();; ?2 \' e8 Z* k3 i9 @
}
, t) G: s0 _5 T7 o: h else if(_PKTItemID== dwItemId&& _PKTItemTick)# M. t4 |6 r* O0 s, u* y2 p5 F) l
{! L8 t: Y0 ?( D( C+ |0 V
PKTItemRelease();/ I/ f+ A$ Q: g
}
3 z8 X8 D& q7 E* e6 f% W' { }
& A% L- {: ]/ R
0 _" i+ A$ _( x z" T }
5 b# G, k7 J7 r }$ x# a- F) X' S- b4 n; ]! R
5 a$ X& l. t. _+ } static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
! ]3 N) L: e- c: Z% |0 b {' B5 z* Q0 h$ }! b
if (aLength >= 8)5 e5 I: N# | H/ ~8 L- b& S
{$ j; P% V& r$ {0 D
DWORD dwItemId = 0;
+ i# n. ?- g: x4 [* g& A memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
" }% e& ]$ @9 @ if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
( @2 a$ t2 o" d s7 w && _PKTItemAction == ITEM_ACTION_FROM_STORAGE1 R$ C- t9 y# b: m
&& _PKTPKTType == PACKET_ITEMACTION
h" o0 K" X/ X- u) @$ u5 Q6 z9 _ )! e7 a& T+ Q: ?2 @! j
{
* P# ], g* u: G if (dwItemId == 0 && _PKTItemTick)
8 |) O7 o3 S- n( m t {
9 M9 w8 T- Q& z' [: v4 S# V8 C4 j PKTItemRelease();; ], |( F" K, y3 Y$ i. j3 r
}
, I2 s+ @' a5 K f else if (dwItemId == _PKTItemID && _PKTItemTick)
0 S7 c2 G$ e4 t9 b- v- J/ {$ c {
5 P! ?& c3 a9 I5 ] PKTItemRelease();7 c A) n3 A: q: g+ Z% w# p; |
}
' f- R9 V2 q( G; M. r6 Y }
4 p( J$ K! p+ g1 s) R 2 S" j! f$ f) x7 C. d
}9 `- I5 E- R; d1 k) y+ v5 p
}
9 N' ?7 g) g4 @ }. ^, L. K" ?
2 S$ G1 d' ] _, r static void PKTItemGameLoop()) ]- [/ _ ?' m t6 `
{! T2 c* V2 _, Z* p. i$ b8 E
if (_PKTItemTick > 0)& n/ v0 L& V, I+ f
_PKTItemTick--;
0 T6 K$ v. n: s. l* ` else if (_PKTItemTick == 0)
2 S) x' n( h5 J0 e; i* @ PKTItemRelease();; W! e2 B$ G ?
}5 y0 |9 R& J5 J! G1 Y" N
! L$ A- t7 v' J: ]* E! v- U- b static BOOL PKTItemCando()
8 d2 j+ q" y$ h {
. U$ I# x8 t6 I$ S# @ if (_PKTItemTick == 0)return TRUE;
! U# C8 A! ^' M1 i return FALSE;
`7 i) q: M& d7 I4 U/ E }- Y6 i+ M+ z6 F6 v2 M {
p3 d, Z8 M1 w' |- ~( U4 x static BOOL BuyItem(DWORD ItemID, DWORD npcid)% P: V' h% V- M6 c; N. S
{' c2 B. H' ^7 @7 x! v) L
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);: S9 n C; @; n7 Q2 B2 ]: U6 H$ K
BYTE aPacket[17] = { 0 };( k7 L6 r- u, K$ Z7 Q
aPacket[0] = 0x32;
& T* c' J; J8 S# S- i) P; k' ? ::memcpy(&aPacket[1], &npcid, 4);/ P+ M8 I! r2 @. U8 b# _
::memcpy(&aPacket[5], &ItemID, 4);
0 e# ^4 k! [# b' t- } //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);6 m2 {; Y5 [/ {$ O& E( n
D2Net::D2SendToServer(17, 0, aPacket);. k2 p: r0 C7 t% p X B% e
return TRUE;
% B% V0 D" P) z& e7 q }
# s. m7 Z& P0 d( k
4 ]' }0 l/ y. r. {, g static BOOL SellItem(DWORD ItemID, DWORD npcid)
6 z @1 J9 a' ?& O. A0 a2 r [ {/ l' i. m9 `% K4 u3 E6 Z' q S
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);2 i, _ o; C3 J) \# f- R1 y) `
BYTE aPacket[17] = { 0 };
; I9 K3 H) j% d aPacket[0] = 0x33;$ P! K9 }$ p; D; T. S9 E4 M; D1 L
::memcpy(&aPacket[1], &npcid, 4);: b& a1 Q* T+ v$ C
::memcpy(&aPacket[5], &ItemID, 4);
2 A$ k: `2 A! T+ i. T1 u //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
, W. L, \6 x2 L0 R9 r n% L$ b1 s6 Y D2Net::D2SendToServer(17, 0, aPacket);* w3 V" Q8 {' ]4 e" K& q C
return TRUE;2 g1 L* \& g$ a: P3 o
}
4 a' } u h3 ^* Z! y
D1 d S2 C1 A; k+ F0 [" s% F3 o static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
$ J: o" |. U V" O9 m9 A( m/ D) d3 E2 L, u3 A: D [
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
$ O7 i, G7 g) S; |7 U1 D# F0 B* J
static BOOL OpenCube()
/ q! |9 ~& x# Y* U( P" q9 g {+ y2 {, a4 Y D% {( ]( o& @
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;& L. y0 j+ s$ ~4 V2 m
" a) v& w5 G5 p& z+ @, L, ]
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);. f1 T3 p- {: Q0 e( |. ]0 w. z
if (!pCube)7 S, W, E6 O. o
{4 ^6 ^7 }& ~! o
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);1 L, ~" N8 a. C+ w& z& q F: M# n
if (!pCube)
6 z/ R! Z3 E4 `8 f9 R return FALSE;4 ^; A: i3 ~& q1 W/ l) {' |
}5 m! l- f% |) d7 |8 s
PKTItemTellW8(PacketItemMaxTick);
+ ~, G' ~+ ^1 S( b! r/ E" q8 u7 R$ a& q% i
D2CoordStrc mypst = { NULL };" m' P# t2 p& ?: P3 q# \& k; j2 ]: Z, r
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
1 u. W) e% Q# u. e' d- N" Z1 m& N" `7 x
7 a6 Z5 |+ \3 }1 w, ] BYTE aPacket[13] = { 0x20,0 };2 g$ }* Z) \$ V2 z
::memcpy(aPacket + 1, &pCube->nItemNum, 4);2 @8 a+ p! @- x) k" Y
::memcpy(aPacket + 5, &(mypst.nX), 4);
4 J# T9 x7 o) l7 p$ A ::memcpy(aPacket + 9, &(mypst.nY), 4);+ J& \7 t9 G; u& N* B
D2Net::D2SendToServer(13, 0, aPacket);2 J% p" ~6 B1 [, W( n/ [* }
return TRUE;
5 G2 C6 j' o9 _* t }7 S9 ~4 ?# R B) H! }; v: P
' q$ m# [5 ^! q# h/ y3 ~! [8 O static BOOL ToInvxy(DWORD x, DWORD y)0 D; z m4 A8 B* d" z
{9 e U7 z {9 J4 O. p3 U6 ?
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);$ k2 M3 B9 Q$ Z( U3 I8 J
# G& M X2 b# h* E' V' P3 O5 _; t if (phand == NULL)
2 t* q2 @4 f' @$ G& p return FALSE;
0 A. m! Y, {3 ~0 g2 m6 n* h
( s6 i; e) V9 a# | PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
, R. _, Z4 a& u. T8 Y" j: \3 [2 K+ h* D8 x) b
BYTE aPacket[17] = { 0x18,0 };" ? z! A, z& H
::memcpy(aPacket + 1, &phand->nItemNum, 4);+ L( \- g: G: {- G/ z1 t
::memcpy(aPacket + 5, &x, 4);
. m! b8 N4 P5 G1 d1 s/ ? ::memcpy(aPacket + 9, &y, 4);
3 |5 g! ?% B; H D2Net::D2SendToServer(17, 0, aPacket);, g! ~ s0 {% ^* e9 t) p
return TRUE;( U Q: d1 d1 D6 [, f2 T1 {
}
( {# `/ h& r& U
; J& ~( F- K7 C" r8 z static BOOL ToInvRandom(BOOL bBagFix = FALSE) 1 e V% }# M& m. ]6 u
{; U& T2 m# F% i" J
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
1 J) P1 @% s9 O; C: n if (!phand)
. x) @8 O$ v M5 h3 J4 w4 N return FALSE;
% O$ Q3 l. k J int desx = 0;
C; R1 P% U) B8 E0 o9 b* D int desy = 0;- F; y! F* u, X3 t- e1 t3 U, z
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))1 h$ u6 a- Y: G- Q3 g
{
. a' \& J- I, z; j' W# w ToInvxy(desx, desy);( U+ h) ~7 ]2 g1 f3 J' B6 V$ g/ K1 L
return TRUE;; k5 [8 N& ?3 |
}
5 `2 F u# U' ~9 |. @% K return FALSE;, g3 ?8 o3 A5 K' v0 J- g: Q
}+ R5 ~0 O: P/ }" Z; a3 ~5 j
1 X( f1 a# m" W/ t1 G3 N* T static BOOL ToCube() E. d2 ?$ m6 y; o- w
{; }) y! [7 c0 s! B4 C
if (!(*D2Client::ptPlayerClient))return FALSE;
6 U1 B5 {. Q, G: [6 n, I5 K' r. q
0 o, \! ]( s. O. C+ X UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);3 \6 `/ w: k/ d g6 a
if (!phand)return FALSE;$ V+ N8 {: m* ]6 b8 {( O
" ]5 c. J) Q$ v9 Z' M UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块* i7 F, `% m. P! j
if (!pCube)( U& g4 r) }) U/ `7 N1 |5 C
{) ^( I B+ L1 g) ]9 I. z# |$ O" Z7 a) V
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
9 }' g" A# }! {% ~- T2 `) w& G if (!pCube || !pCube->nItemNum)
" Y2 R( t D) l8 S1 ?3 y1 ~ return FALSE;' i( K8 M- ?- M1 H. R
}6 t* n9 g, M# X: Q v6 K5 p! A& G% F
5 M" s# O7 H0 a# i7 K% `
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
/ e. r( S" n; m9 J% `" b ^, L return FALSE;7 A8 @9 D% S' S; d7 l
& e2 ?- ~% Q; j8 Z6 u7 J PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
4 a, K$ X+ J( I$ F$ \. d& d
; N* Q6 L% ^: r& |* R; u, S" R BYTE aPacket[9] = { 0x2A,0 };& S/ R8 b1 @' u# Q3 q7 B# c/ }1 g; o
::memcpy(aPacket + 1, &phand->nItemNum, 4);( f* u, X9 x- n5 [2 p% G) a9 q, q% M
::memcpy(aPacket + 5, &pCube->nItemNum, 4);0 d' j" w, i" w7 I& t" w
D2Net::D2SendToServer(9, 0, aPacket);
( Z* S/ P1 ]: y. w: s' i return TRUE;
: w' C! a$ g t6 X
: ]+ k4 P0 K* B' X }
$ |; J$ j) o* B$ C8 y: Z" G
$ {. X& B% p7 p" ?( e5 @) q" ? static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
- Z1 o) W2 a+ Z
8 {+ B( k0 N) a" R/ y. W static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存( ^) a7 w- u0 {1 d9 |8 c1 }: j
{6 X& L |, z7 _" x9 E3 Y
D2CoordStrc mypst = { NULL };% N/ h: o& n L+ n4 |. U
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst); |% ]& l" }/ U6 ]: Y
3 Z, B& w0 K1 f8 n if (!mypst.nX)return FALSE;: R1 d7 E% f9 x4 e6 u
m6 z% n7 A- Z! t
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);, k4 d* S1 D! ]* p7 p
- A' _; a5 t6 Y& o6 F# }& f
BYTE aPacket[13] = { 0x20,0 };0 U% v* K- @$ z+ S
::memcpy(aPacket + 1, &dwItemID, 4);
8 L$ f5 r+ O3 L. j" C* N5 @) h, \ ::memcpy(aPacket + 5, &mypst.nX, 4);
! ]. G' }! a& R ::memcpy(aPacket + 9, &mypst.nY, 4);
& k; q" Q9 m! @1 R# m [$ \ //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);" Q. q2 X8 W* ?0 p
D2Net::D2SendToServer(13, 0, aPacket);
" u3 b$ Q# F1 i( M: ]7 J return TRUE;
8 O4 c; m9 v) H& G }1 e( y( P6 M' |
8 b/ Z$ {" o! n3 H5 F* W! l8 \+ a
static BOOL DropCursorItemToGround()
# l5 g3 L% ?5 w$ m8 _/ h, p {
7 M: [9 s0 Q) L H( _$ O UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
& k* N* o7 K& g$ {: ~* d if (!phand)9 M) q' {: @' V1 I: _4 n# z
return FALSE;4 m0 X, @, L! p) u0 _) x. h3 g8 R
+ j( B, y j% ]! Z+ R+ n' i
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
5 P6 {, O0 U; u9 K5 @6 w1 A# M2 o. F
BYTE aPacket[5] = { 0x17 };
. n$ K" m# B( Q0 P B6 r, i ::memcpy(aPacket + 1, &phand->nItemNum, 4);5 r7 I/ A. O1 j9 k0 \
D2Net::D2SendToServer(5, 0, aPacket);" {# B. j% a2 U6 `1 A3 [% `7 Q
return TRUE;
2 `3 X; h% M$ V. ]! P5 U+ ?/ A# i
}
# `- t7 w$ T+ Y+ \/ @- |, G6 K- |8 V1 D- C7 O, Z1 x
static BOOL PickStorageItemToCursor(DWORD dwItemID)5 I. M' n2 b) o/ V' e8 R
{, F0 r" W" u. @ N8 N9 G
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
6 J v% \$ _7 \ ?. e7 k; R4 k- @$ W# J' M
BYTE aPacket[5] = { 0 }; o# r% ^! I! T6 {( j, `8 l: {' d
aPacket[0] = 0x19;
; X6 t9 ^- l p3 S4 V5 P ::memcpy(aPacket + 1, &dwItemID, 4);
& v9 l, X' {& W/ a+ D //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);7 `" u, I8 s8 P$ _$ U3 \
D2Net::D2SendToServer(5, 0, aPacket);$ w* |- i" [3 T/ i* U
return TRUE;9 d) [, h7 o- L z) M" a
}
0 n8 `& Y7 _" Z3 ?1 G1 z
0 \$ s+ y0 f6 |6 Y static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)8 {2 `& ]/ i! X; b2 f
{
0 T9 y$ N/ Z7 i PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);( t8 }6 ^6 M7 v0 M' i4 A2 _
BYTE aPacket[17] = { 0x1f,0 };. M+ C/ Y0 F- q5 j/ J* |$ r; ~
::memcpy(aPacket + 1, &ItemID1, 4);1 u: M1 d( b0 z' Y: n
::memcpy(aPacket + 5, &ItemID2, 4);" w% a6 D, v& a/ x5 \
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17); O) o5 A4 P7 {- n
D2Net::D2SendToServer(17, 0, aPacket);' e) M5 I. D& W/ e$ @, H4 M
return TRUE;' B5 q- |9 S' ?3 R/ p
}
9 v5 A0 X6 n- z. @" K- [4 k5 g2 K7 _$ z7 ?
static BOOL Transmute()6 _+ |5 Y6 z- P1 Y' v
{
3 K5 Z5 E# @3 K4 p1 i# w$ K if (!(*D2Client::ptPlayerClient))return FALSE;, k! q- d8 `& S$ z
* I7 l1 |! P, W6 x! P
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))0 ~$ c/ ]- x0 C' R' g
return FALSE;8 P7 t- d/ @* k3 L6 M% `8 W
3 x3 y4 [; }/ u& k" N7 E' Y PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);3 B" i( {- u! i3 ?, u3 u* k
BYTE aPacket[7] = { 0 };! ?; s1 E* K3 @6 r9 F8 x& Q; m) O
aPacket[0] = 0x4f;2 ^# X6 E! h) T! o
aPacket[1] = 0x18;
0 V2 |5 t# o4 F) V& d D2Net::D2SendToServer(7, 0, aPacket);
/ w8 M' E, Y$ T return TRUE;. q7 z8 q8 k/ t! D& ?# [
}, H6 t. f8 W) B: X! ^
};
) S5 Q6 D5 Z l" Q- l8 g. x3 o5 s% i2 q- X+ c+ U! {$ i
|
|