|
|
转载; f5 R! K% C7 j% y4 @) N+ _
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
3 H3 {; G% k( |/ H) VD2Client:
1 l- N* H8 m( Z! A; e) t: K$ F# A" [6FB20AE1为拦截输入框(用于获得命令)8 L# S) M1 G3 k* ] Y6 i
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发. _1 R- H, ~$ `
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发- h, l7 W6 Q j _! C6 M: I
6FAF4230为hackmap的loop点 我用的hackmap导出位置
! U- q! ~ ^( q- Q) q% ?7 p% I/ \8 ~3 t$ B$ t. r
. M- K3 [- j; q7 Q- k" L6 `/ r
发包函数:
. i1 F5 i! B6 n) u5 Oclass D2PKT_ITEM
% m7 Y* y( H, e% r: O( h! c{
2 o7 p9 l. H' A#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
6 F/ t0 n& v# _4 Q! r1 R7 h#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多3 y0 ~6 }8 h8 }! m2 p w' j) X3 m
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上1 W+ q, p1 r! H+ _+ v; X' Q
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上: G2 S6 F9 n q, {+ D ]
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
2 l: ]6 N7 V# r3 E+ Q#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
# i N" u* [8 D3 J6 x" U: V2 W#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏8 Y; I# ^2 u: z' ]* T2 w% ?+ j
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
6 r P, u8 L# a3 A0 Q# d, l+ k4 T( p#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 - E4 J8 g# I: _2 v8 X8 Q4 V
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
) X) r& a( i. E#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
4 C; O! B2 p$ g: G1 ]6 p#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 $ T$ }' @ M# t* k( v
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
x+ ?4 b# g" m# \4 [# _#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上- N& m- B6 c4 m( N* Y+ s
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
' T8 [) o, k. T9 z#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
" u3 G0 Y3 X% V8 s$ Q+ y2 O; y( h#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -+ t2 w; i( w/ H( H; x
$ V8 s4 @) g; Y: o3 ?& D1 q
#define PacketItemMaxTick 150
5 _1 g+ o9 X4 q+ N* m#define PacketItemPickUpTick 20, [( z' y- n, ]- y& d# a8 K
! W: B4 O0 L7 x3 fprivate:
2 |- Q t; K: P6 i1 M$ k static DWORD _PKTItemTick;
1 H# |7 e0 P7 A' _/ x' {; [ static DWORD _PKTItemAction;
1 R8 ?8 ~( v' |" F static DWORD _PKTItemID;
- d# K$ @2 L1 E* v% l) Y static BYTE _PKTPKTType;
% B7 Q1 c; c0 V! h2 J6 J1 e6 J. epublic:- a- m6 K/ q, g g R( I' Y
static DWORD PKTItemGetTick() { return _PKTItemTick; }1 @) h$ Q% r) B3 k d- \ K3 ~ v
: Z' n& ~/ w6 r7 ]6 y* D6 \2 h static void PKTItemRelease() 8 _9 Q% _3 k) w8 h
{
9 D6 W5 a) i l1 `" [' p( R _PKTItemTick = 0;$ v. n4 n5 l4 j; P+ Z+ R. N
_PKTItemAction = 0;3 n; E; W5 M( D# R* i
_PKTItemID = 0;* g5 P* N% ?# B/ O* ~
_PKTPKTType = 0;# J8 X; `! _, m. s2 @' F
}' ~2 X- o3 B2 y0 w7 g
$ O* Y+ B9 y" l8 A static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
7 G$ X! H% X% k$ ] {
U$ k% H. ~( x1 S1 Q U _PKTPKTType = aPacket0;
1 P+ B3 s: B6 b1 }, A _PKTItemTick = tick;2 y. |, h; y9 _! t6 g
_PKTItemAction = ItemAction;
4 G7 w2 p! a0 u' p+ ]/ H _PKTItemID = dwItemID;
5 I7 \5 F* x( u3 r# [6 J" { }# v5 b- X% i* a: _* @
1 W) `$ @0 |! v/ l$ S# a, P/ { static void PKTItemTellW8(DWORD tick)
2 I& a. X5 Q' l6 Z. ?6 o! A {
- B. I) _/ I6 a _PKTItemTick = tick;
; z- Q/ S6 ?; O; y6 b }/ P0 @# L a3 o5 O9 t
7 |9 q9 G4 ~9 t" L3 h2 \6 ` static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor: Z/ [ W6 x% M9 X# W
{
! g2 u2 K8 u+ o. G- e6 b if (aLength >= 8): A6 R" r, |/ }; P
{
: p3 { Z$ y6 d8 ~ DWORD dwItemId = 0;3 R4 F8 p3 w3 o7 m& p
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
3 g. n3 V5 h. |# o; L( } if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE* G, c- a5 t+ t) S$ s
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE9 d: ^$ S# C: K7 m1 c
&& _PKTPKTType == PACKET_NEWITEM5 U- Y. k- Z1 s: U3 r% a
)& j) G/ P- O2 S; p& j8 u8 y4 E
{
$ L6 Q3 j/ @$ C3 y/ h( e7 g, n if (_PKTItemID == 0 && _PKTItemTick)3 `) n; ^: Q8 G$ {, i1 u" K
{
% C2 p4 R% _6 H) x& t) f PKTItemRelease();2 I! a7 \/ C6 ], |2 Q" G
}9 _/ l! Z3 {- Y0 u6 f4 ~' s
else if(_PKTItemID== dwItemId&& _PKTItemTick)) s. F) ~' N# I: P- v. D
{5 |' C3 F+ J8 \# `) J" _
PKTItemRelease();: x; Y i( q% l9 a0 h. n
}: {9 z; N0 P6 p6 X
}
# m3 C5 F2 u" E
' |: N/ Q9 I5 b N( c. { }
3 v8 D' c! \- q6 D$ l }
5 V5 Y' a; I( l) [; k( R8 D1 O) J% a d- P
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
* Z) U+ T7 x- b M {
u/ T* e& e& K3 U& b& {, z if (aLength >= 8)
( p! P; C2 e. ? q1 W' b {
1 _# r+ b% u% I! ~: e0 d# c DWORD dwItemId = 0;* c6 \- @ a7 p9 D8 l# F0 u9 p
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));" ?7 r4 i, m6 v
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE* M' a/ H# Y, e% \0 ?6 `
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
% L8 P+ I0 @" K. V, i && _PKTPKTType == PACKET_ITEMACTION5 Y# w; Y7 x9 D8 Y2 X
)9 B; u f' X- A) h( a4 t
{
# M6 k4 \0 o0 g if (dwItemId == 0 && _PKTItemTick)
% W% g1 h. L2 {$ w9 C) `9 ? {
8 B! C5 V9 q9 e5 Z: { PKTItemRelease();
1 ]& [/ @* M7 R# B. q }
9 J6 ^8 e; N [- \ else if (dwItemId == _PKTItemID && _PKTItemTick)
4 x& b7 z) r& C' \7 E( D# Y9 p {
5 t/ g3 O5 }* ` PKTItemRelease();
( N5 \/ D( ? b9 k2 F% P) v+ T }+ p1 K4 V/ f5 a0 Y* W8 p/ l
}4 Z1 t3 P( |9 Z; c
; r- c8 b$ `( J* ^- r }- T: O$ D4 N* v+ e$ |
}& `5 ~: H; X2 L" [/ r
9 Y) `4 @1 t' L% I- X
static void PKTItemGameLoop()2 \% O4 \) Z4 g: [3 @. l
{) O# {) ?- ?# G( q/ |8 q1 \
if (_PKTItemTick > 0)
0 c: U" s% j/ k9 e _PKTItemTick--;
: m) t# H. v* K' E/ z7 f0 _2 i8 N, [ else if (_PKTItemTick == 0)" p0 x' [3 { E1 a: F7 V' v! [
PKTItemRelease();
; D s& Y$ q% A L: |) G }! M# \8 e; g) D$ B
! V% O: e* [5 Z* q$ T" v* ^( o
static BOOL PKTItemCando() # X- \3 d- t1 x& l
{
. d- {# M/ q7 ~. t if (_PKTItemTick == 0)return TRUE;
& ?" M4 v4 t: Q4 c# e1 e8 O6 o0 K return FALSE;
C7 V- m# Q' y Z4 q+ L+ @ }
4 `% v4 Q6 L( c' p5 }6 d9 r0 J) [" s- P( w" _! h; C
static BOOL BuyItem(DWORD ItemID, DWORD npcid)! M( |. j7 T c
{8 {, n& V5 r) k
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);% ?0 O0 B$ A& Q7 B
BYTE aPacket[17] = { 0 };
* b, K# A. ^7 o# [ W; W! Y aPacket[0] = 0x32;
# J: f$ F0 P0 G& m5 z ::memcpy(&aPacket[1], &npcid, 4); E- f2 Q5 {+ \8 X) _
::memcpy(&aPacket[5], &ItemID, 4);) S2 `5 I) k# F9 X" O4 G
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
. o0 [$ F, C7 |6 v8 u) T. ]( [ D2Net::D2SendToServer(17, 0, aPacket); x' m! N' @8 n4 s
return TRUE; ^; N- t2 Q q; p/ _5 b
}
6 I/ _: P6 O+ Q; r! n7 P, ~4 e+ j- w; Q/ p
static BOOL SellItem(DWORD ItemID, DWORD npcid)
P6 m0 D# O7 \, F {
3 r9 C# r- b P! F PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);, }4 ~0 C4 |6 c
BYTE aPacket[17] = { 0 };. ]% ^, ?& \: v- J0 n) K8 R q
aPacket[0] = 0x33;
3 q9 V6 h4 G; ?4 y6 l% K* z ::memcpy(&aPacket[1], &npcid, 4);/ L% w- K3 Q7 S+ z
::memcpy(&aPacket[5], &ItemID, 4);
; _7 b2 M% N& s P$ t# n) r, w0 D //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);" ~- W4 G' h: {8 p# n
D2Net::D2SendToServer(17, 0, aPacket);
# z" r$ K- l: Q$ _+ h- L return TRUE;
4 Q+ W5 M! y. ~% ` }
9 F( ^3 g5 H/ M1 y' Z
1 o m* y& X2 u) L) f3 _8 C static BOOL Interact(DWORD nUnitId, DWORD nUnitType);6 U) k% k0 f8 o; p: ?4 Q
& U, q' E" T9 Z0 x) E static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
, @1 ] S6 u9 ^+ O9 X+ L5 N$ y x5 \; l/ p
static BOOL OpenCube()% l' L# E0 C5 K1 q1 w+ ^
{, h& D0 h; o$ L8 U
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
. y6 b: B% ~+ `& U7 z. a# I. J6 @5 ^4 D, r
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);" V5 A D3 m* j: V1 W0 A
if (!pCube)3 D+ i! Q" w+ g
{4 `9 B' F4 r6 R, w1 Z3 c/ g
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);: t) u' O: G y9 O* ?
if (!pCube)( Y1 o" M2 b2 H1 u% j
return FALSE;
0 V- q* u2 Y1 i5 g4 I }
( O! T0 S# ~. {' r5 f) A3 n1 `) w PKTItemTellW8(PacketItemMaxTick);
* i' s2 _' w/ U; T( e& ~' J0 K
: n- }5 R! Z8 k D2CoordStrc mypst = { NULL };
& g5 u' H" Z9 k `1 P, O4 v D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
" V& Y% c0 Z( n5 j( F. g; f) @4 J
BYTE aPacket[13] = { 0x20,0 };
* H# i) a2 A) u+ Y6 d6 Z ::memcpy(aPacket + 1, &pCube->nItemNum, 4);9 j1 E4 J) Z7 c
::memcpy(aPacket + 5, &(mypst.nX), 4);
/ [% \+ x8 d9 t* D6 s ::memcpy(aPacket + 9, &(mypst.nY), 4);) i+ \# r; A& P: b
D2Net::D2SendToServer(13, 0, aPacket);
- N! z$ Q; C/ [, E7 R9 w( W& K return TRUE;* t) T9 P8 k' M& n5 i
}
+ F6 E5 L4 p5 I: f: H; g: U- j: u& I. W$ A% E
static BOOL ToInvxy(DWORD x, DWORD y)
+ V* V4 E3 x( s h; y' f {. M, D* e; U& ^7 y
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);/ t4 ^* l- s' ^' v# ?0 ?$ @
8 w0 ^0 J( r& o& v- j
if (phand == NULL)
6 g2 I0 k' W' c; T; x return FALSE;3 w0 k8 |+ v _6 g4 D$ Z. Y
& O8 h4 Q' h7 Q
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);5 ?+ W L# l& x9 Y* N0 z
7 A0 a6 i( s# { BYTE aPacket[17] = { 0x18,0 };. M% M4 }- t* b, N
::memcpy(aPacket + 1, &phand->nItemNum, 4);
5 H3 {+ B/ @# l: H8 G; `$ ^ ::memcpy(aPacket + 5, &x, 4);6 N. ~9 |0 H$ w. R
::memcpy(aPacket + 9, &y, 4);
$ m n* x- v8 j D2Net::D2SendToServer(17, 0, aPacket);& V8 ]- z: V: b) v$ g4 m
return TRUE;
# h" v) ]# P# w/ U, V }
1 N" p! @) z- n0 t9 a
0 a! K: [0 H; H2 D# A+ M# v5 @ static BOOL ToInvRandom(BOOL bBagFix = FALSE)
7 Z6 |2 d1 ^/ s' ? {. P3 s0 ~8 F& w7 W
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);$ E' b/ p8 |# `! e/ h7 g+ C& ^
if (!phand)
E- E( i( Z ?/ m: c return FALSE;
, M3 o. ^* d: ` int desx = 0;
7 e* P3 V5 }- G( w9 p: [ @3 b int desy = 0;
& T* [" P8 e9 h4 f5 u if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))5 ^! ]. V' k' j j
{& k, Q3 ]/ g; V
ToInvxy(desx, desy);7 a; ?" V( s* G$ G1 z g8 Q
return TRUE;, U& I9 R! A( [- H4 U; Q
}+ \3 [- R* @# G3 o4 H8 g
return FALSE;
: m, H. I4 |- D& _; C2 G: h/ { }
- b( d1 V7 O) `5 v- B) E+ n( K L9 Q, f; c, M( g
static BOOL ToCube()5 y/ e! v- m# Z: o1 e* y$ ?
{8 G. I) P- L; ~$ ?8 e
if (!(*D2Client::ptPlayerClient))return FALSE;% c8 n0 m3 X2 U* r4 n. u j5 x- T
" {& N# ]" X) o Q' S* c/ L UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
@3 Z( f9 a, m$ ^) M if (!phand)return FALSE;$ k# ]* v; O A7 K2 T0 f, Y7 t
6 b( u. U$ N1 q0 R8 l* ~ UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
9 A: ~5 h8 ?8 W; M" Y2 N+ I2 z if (!pCube)/ C, E# O5 d- e% A$ S ^
{1 t1 c! u0 O* O H
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块7 {3 X/ v; N/ @6 n/ j- O$ S
if (!pCube || !pCube->nItemNum)5 }2 q \( Y! e @) D* z# g) Y
return FALSE;
! R; e; b- ]8 ]! h: ^ }# A# L! G8 Z: R5 Y; q
$ O4 N. F5 [; i7 |5 f if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
9 e: C: V3 D- I$ c& L, v8 b& p+ J D; C return FALSE;
# H7 \$ F* n1 C+ ]& o2 p2 D
" y9 O; c q, L* U* b6 D4 e$ k' m PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);* u/ S6 U) X$ v- b8 q
8 H+ a- i# L7 x5 [: ?# K BYTE aPacket[9] = { 0x2A,0 };
. I9 {0 Z4 K, S- @/ x ::memcpy(aPacket + 1, &phand->nItemNum, 4);
5 d, ~) \# }9 E ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
9 X; |& s5 A$ f" _4 a) p D2Net::D2SendToServer(9, 0, aPacket);* q" ~9 a6 m8 q# A1 O0 T4 B! l
return TRUE;
% ]! \: u9 F) c( \9 B1 E. P% }# c2 S p; I D+ o
}2 N# ]! H/ \. w/ A. N
& A5 n; } D( C; j
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);1 W, ]+ {( n0 |/ C" j
1 H' v: ]$ q2 q d/ j& x static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
% y6 @ j( W1 w' k/ M9 B% `1 C {
$ f$ ~ _3 }, @* k) N8 V- W D2CoordStrc mypst = { NULL };1 B7 ]* L- H5 H5 [
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);/ X; V/ b9 m2 V' m5 I
6 r) K5 c4 } @) e8 } if (!mypst.nX)return FALSE;
& w$ g4 W: c- A* Y+ {! v- ^ P9 { ' j% q4 d) B+ Y* r+ x- s5 z7 l
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);$ |. O. \$ \9 j; y( Q
$ C! q3 ]/ X1 E8 G j8 M/ Q$ M BYTE aPacket[13] = { 0x20,0 };! Q, i, W* I0 @# v( s: N, x
::memcpy(aPacket + 1, &dwItemID, 4);
3 u0 L. w/ }* W- X ::memcpy(aPacket + 5, &mypst.nX, 4);1 m0 [3 P t$ }! i( p4 Z2 H: w
::memcpy(aPacket + 9, &mypst.nY, 4);
* [# s: ^4 m' h2 |4 n& d //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
0 g+ U% H' t9 N) @ D2Net::D2SendToServer(13, 0, aPacket);2 f7 D3 U. X2 r% B- P
return TRUE;3 e, |* ? \) c- R, n. w0 H
}% m" r. P! b# `& N/ D: [1 Z8 M
( N$ E- h$ w. x+ G; r8 i o& b# F- Z static BOOL DropCursorItemToGround()
& [- e+ g7 g' J {/ ~# r8 c0 n( e2 v) h, l6 j
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);* g! c2 S T% e' P8 w4 X
if (!phand)
$ O }( ~3 e6 f' C# w) r return FALSE;+ w& t# E* C/ [: f7 t4 w
# Q5 U+ a% I$ d ?5 B! q PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);% L6 O. |0 Y5 w3 ]
1 G% V2 C+ x2 K7 U BYTE aPacket[5] = { 0x17 };- G* [5 ~% i9 C' s' ^
::memcpy(aPacket + 1, &phand->nItemNum, 4);6 R! |; B& H0 l* l
D2Net::D2SendToServer(5, 0, aPacket);
- B% I* i6 u: ]" h& y& f/ }5 {; n return TRUE;
0 Z4 D9 x. O' c# |& G( ]" B1 X# `# t" P' ?+ K
}- b$ O1 b# H2 D6 a& \+ v/ z5 V
2 z/ L5 X; y# n0 u6 P
static BOOL PickStorageItemToCursor(DWORD dwItemID)$ A8 F- A- \ q! C2 v6 y
{
" e8 j5 c" [5 E PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);' @0 `. s6 {, g8 U' {/ W
& _" E; [: A& U D BYTE aPacket[5] = { 0 };
' b( u$ s# l# N3 Z aPacket[0] = 0x19;0 {! ^5 p7 b' R# T
::memcpy(aPacket + 1, &dwItemID, 4);" Z+ v0 o! S/ x
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);6 i" x- m& Q0 T: t' a
D2Net::D2SendToServer(5, 0, aPacket);
P4 m5 {, D. ^! F8 m return TRUE;4 K" P$ |0 G: K6 f- P5 D8 V( `
}
% h4 n: n, n0 t( T1 g
2 E. g& ~# o d% R* y: u! e static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2). u Z/ p {6 v1 A6 [
{- _# P4 u6 j0 Y" q
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
8 z& o# D1 S9 t BYTE aPacket[17] = { 0x1f,0 };. P* e- w+ ?. ~3 L k Z( q0 g
::memcpy(aPacket + 1, &ItemID1, 4);
3 u1 C1 p( n5 B5 A. f ::memcpy(aPacket + 5, &ItemID2, 4);- A& b: @( o( h6 |8 \9 Y o: S
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);4 k Q+ t* d0 c
D2Net::D2SendToServer(17, 0, aPacket);3 v+ S8 i/ Y7 p6 u7 _3 T' m' N
return TRUE;1 W5 F( d% l+ A1 J' r9 h2 ^
}' @; r9 s& k' y r: k- h4 V
1 H( R& U& F3 G' g# j9 p static BOOL Transmute()$ h. ~: D, I, W: ^
{
1 Z% k" a. f) a if (!(*D2Client::ptPlayerClient))return FALSE;5 P* F/ \$ g5 u$ r/ W
\% B) I. I0 j$ ^/ ~& K if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))' ]; ?2 X+ z- W, H
return FALSE;
1 G% S. Q# | X8 v: w* N3 Z0 ~( a7 K6 j
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
2 `$ s$ g m' i. e; u, C2 r8 _ BYTE aPacket[7] = { 0 };! T1 r1 N6 c6 I( a% T1 u" G0 Q
aPacket[0] = 0x4f;
1 V& Q9 ~/ i3 R4 S# j" W aPacket[1] = 0x18;
" d( m9 r# J# f2 b# Q D2Net::D2SendToServer(7, 0, aPacket);
1 b1 J' p1 T5 j& Z) \ return TRUE;; l" T7 `! ^. Z! E( w& d3 Z* T
}
8 ~% L( X1 W* r6 M7 C7 V3 `7 }9 b};
3 u9 B7 M5 O% |/ B# t+ X- O; z( |/ K, h: q H7 I8 H/ y$ k0 }
|
|