|
|
转载+ o V9 d* V' F
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
7 S! B) a- |% {; Y6 ?D2Client:- _ {9 m$ k0 w( s
6FB20AE1为拦截输入框(用于获得命令), k D" i, L5 i. K0 @# e+ Y
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发7 z2 E, w+ A( `6 }
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发7 T4 U; m2 B9 s1 r, l" i& K1 d. Z
6FAF4230为hackmap的loop点 我用的hackmap导出位置! ]' X1 W0 y: H8 ^
1 M- @. g; C: k2 N: B. i1 S2 V
0 g% o( w- Q! Q1 R发包函数:
2 U* o# i" J& G- A" @/ Uclass D2PKT_ITEM
: L2 v8 ?5 d4 R' Z, y0 r1 P{
3 E% k8 F& c' K( K8 [6 B9 y#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上" \& z/ G( |9 f( {1 P3 |
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多; J/ I5 g" O L, U
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上3 ^, B* R; Q' r+ q: `
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
% [7 Y/ T* `8 R- Z& _#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH v# I: p- H: l; O
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上/ ]- ]% I4 z' G/ V: L* m6 X
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏# A. r2 k# a0 k& ^
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
; W2 U+ Y# D# m5 S+ h#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -3 ?# C6 x4 y6 V# B) E9 p
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
- `, W3 h& v; O7 ~1 a% N, G3 ^#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV: y) p4 {1 b4 _
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
W/ p; Z+ m1 X) H P#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
7 [: d k$ S9 C#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
+ M9 U9 M$ _8 g; r. D#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -- S( A" k, w3 w$ }- V2 ?
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上- c9 l4 R" i! Z' p! Y
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
! r: F0 }. f* g- k, p3 |
- n6 W5 z8 X9 ~" ?1 b) \* U! n, r& o#define PacketItemMaxTick 150" c# F, j+ U# d' R6 ]
#define PacketItemPickUpTick 20
3 p5 S& `7 V4 `* h2 y! f3 A x7 k' g$ Y0 P
private:
# m0 H0 d9 `- [ I7 x* X {6 A static DWORD _PKTItemTick;
) c4 ]5 k# x7 p$ a% L& x static DWORD _PKTItemAction;5 |8 P/ C' l& i: c4 w; a' p4 e3 r
static DWORD _PKTItemID;
5 G% e1 x3 X3 L$ ~+ I static BYTE _PKTPKTType;+ G, J3 g( T0 T, i% b
public:
) q' R" y# c1 o& K+ S static DWORD PKTItemGetTick() { return _PKTItemTick; }
9 Q6 x, Z- {- v) j/ }7 l, {/ {' d8 q0 g! M
static void PKTItemRelease() I- l. s) Z u7 ^8 w7 m
{" U# V p' z) s8 E X @
_PKTItemTick = 0;
: U$ W+ R) r" S' N. v9 R# \ _PKTItemAction = 0;
+ o, \6 V, U5 f5 d+ b9 D _PKTItemID = 0;
2 Z* s! j3 a+ ]5 d _PKTPKTType = 0;
5 `3 q9 N1 _7 n. k+ h' P0 o6 R }
$ c& \7 \1 u" a4 R- S8 Z1 j5 j
" E5 g# L8 `% { static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) . B" w9 {# H/ M' H" d
{6 g8 C+ j, S9 S' F0 n
_PKTPKTType = aPacket0;2 Q+ J d. _6 h, k: o* A
_PKTItemTick = tick;
; A9 @# h8 A/ i+ Z, F. S- ` _PKTItemAction = ItemAction;
* R |3 n# v/ q% ~- h# k( I5 m _PKTItemID = dwItemID;% {; q$ x6 M; `! g$ B
}: y' s. X) H- T$ z3 ?
+ f3 a" a0 R( u) _ static void PKTItemTellW8(DWORD tick)
' e6 {- Y c8 T5 b9 P {
& W" F) ?7 c! l( {" k _PKTItemTick = tick;
; y! k8 }, P: q }
7 ~1 u- g7 X+ [2 \/ U5 ]9 C3 Z: J6 V' O" z) M& T1 A
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor4 b* E" j; E g0 J
{ q/ J X Z4 R* H; l
if (aLength >= 8)
5 I. Z! g- B2 W {" [1 c z& P- B2 e O ?
DWORD dwItemId = 0;
* v: G: Z7 J8 k) t2 H X memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));8 @* v4 d/ U( N4 o
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
# [; E* j. _" o8 ?0 l* h && _PKTItemAction == ITEM_ACTION_TO_STORAGE
$ ~/ I. Y f1 d- I; B& o && _PKTPKTType == PACKET_NEWITEM6 N0 O7 w$ W& o+ U! l( r& l
)
- ]+ ?7 x9 S5 `) h {
: B s0 |' U: I2 u if (_PKTItemID == 0 && _PKTItemTick)
$ x, l2 b \% d2 n v9 x {; R% r" E/ N" @7 B
PKTItemRelease();! w- w$ S8 K. ^) e2 z# B
}( J1 G5 |6 s0 G
else if(_PKTItemID== dwItemId&& _PKTItemTick)
+ U, @4 l7 t2 C% |$ s* O {
- E. \& y' e Y/ R, e3 v, I: _. I1 _ PKTItemRelease();
, x3 U/ w( I' H/ E5 r. |* T' ] }
, L' z4 q" S; q4 w: L+ F& H }" I ~) ?9 k( q) l' ]/ b8 {
! d# f$ n5 `# G* } } t) W7 ?7 p2 O% U7 ~
}" c5 |0 G" _9 Y# N4 Q" P
) Z0 f" [" D" s8 a k6 W( m static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
) @9 r; }: _7 f- J2 D% k: I+ P {7 D) e( Z, n5 k
if (aLength >= 8)3 F" R8 X; [0 T! f
{: f7 L+ ~" ~% o# [! x
DWORD dwItemId = 0;+ x l0 D5 V& g$ _4 z- b
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
$ S$ I R. f) s$ ?4 j1 W" Z if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE6 G6 E0 ~5 J9 l" y* B) C# B
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE) m( H d: d. Q' h: F! R5 z
&& _PKTPKTType == PACKET_ITEMACTION
2 U% w, Z3 g8 V: \6 P1 R )+ ~0 N3 G, H/ F7 g
{( Z& I1 B3 t& T4 q& M$ n
if (dwItemId == 0 && _PKTItemTick)
; Y; d+ @3 n0 M: [) m1 G, g {
& l" Y; }; M% T9 h4 C PKTItemRelease();& f3 a9 I8 ^9 c6 m9 O
}
! e: s( |, T* ^; D8 U else if (dwItemId == _PKTItemID && _PKTItemTick)
7 L* M5 O! j" @+ U5 H$ u: d+ y* v {& Z, H) V' ^/ W% L, Q9 c
PKTItemRelease();) L( \9 f1 l+ O/ e
}
$ V! F! d N& C5 D) o }
3 d6 ?! W9 B, z + ^( W) k! {+ N9 V0 T
}
- y7 e$ _% _3 ~' W }
# x* x3 y" l* p! Y# m
; M5 `3 {) L: v/ Z% w: G* l5 N static void PKTItemGameLoop()
% I- S# R3 `' M( `, s6 }1 f. x {3 H" a8 Q! T3 G6 D3 u4 {, @
if (_PKTItemTick > 0)* ?: M# Z ]: z- ~
_PKTItemTick--;
/ r) @7 P) ^0 K else if (_PKTItemTick == 0)
* x1 w% u. S1 K! l6 l PKTItemRelease();' M3 N! u( h# {) r" ~2 C8 a: J2 D
}1 ^0 d) }9 [8 g9 q# Q# K( h
( y+ u, i2 T# d, |! u; t1 J0 n3 Z
static BOOL PKTItemCando() / Z+ u. G3 n5 Q7 C
{1 @& i5 `7 [0 n' D- g; B
if (_PKTItemTick == 0)return TRUE;
' u) h7 G& c9 D: q" q return FALSE;/ b- \ b/ |! Z/ ~" S
}; u0 C4 a6 ~ x( }% g
% B5 u J# M+ P% z' V
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
/ }+ y- e+ t5 D$ y) T# z; ]# D {% Z' m2 Y0 r' b; K
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
' W3 @3 P7 F2 X6 ` BYTE aPacket[17] = { 0 };
1 I; I' T/ C# D3 S, z5 Y# x aPacket[0] = 0x32;1 h* u( Y! J% A3 ^
::memcpy(&aPacket[1], &npcid, 4);5 A7 [: L/ x5 B0 V
::memcpy(&aPacket[5], &ItemID, 4);
" }0 c8 i* q3 V9 w //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
9 h+ @! @. Q X1 V D2Net::D2SendToServer(17, 0, aPacket);
7 a. {/ d! A# T& y return TRUE;# B. V. |. o9 h. U5 m- x
}
+ T9 s( e+ f& w: g* s0 ^! O# C: }' W" ^( {( r8 H6 g7 R- o
static BOOL SellItem(DWORD ItemID, DWORD npcid). L$ ~) Z, U" P! w) s* X, Y) s
{
$ Q) f1 j" A. f3 @0 Z: I& M6 c9 } PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
/ }0 f# O% E6 G- x0 s BYTE aPacket[17] = { 0 };
7 S& H: u1 ?5 `9 U aPacket[0] = 0x33;
0 \2 j# e6 [( j1 o$ G2 a ::memcpy(&aPacket[1], &npcid, 4);
* E ?' U; k+ @ ::memcpy(&aPacket[5], &ItemID, 4);
+ |" P# l- O; j/ \. k- w //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
* ^) x! N" }0 y/ _7 Z/ M% Q7 a D2Net::D2SendToServer(17, 0, aPacket);8 p' D7 V, `8 X- w, Y* I7 v9 z% ^
return TRUE;$ Y" W; E9 y/ a [# @
}+ A( O$ p \. h% D: t' M* X% p2 y
_) j }! Q7 Y& y( ^ b) t9 L static BOOL Interact(DWORD nUnitId, DWORD nUnitType);9 N, l7 u# q* u5 a
c& B; d# @& k! H# v static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
V$ a& |. X j4 p# G7 M
, V6 E+ E, K0 `% F# W) \ static BOOL OpenCube()
8 e+ M+ a6 w! ~, F8 R {4 ~8 m+ y; _5 h0 w1 E" y. F
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
" {4 N- Z6 F9 ^3 F& K/ E: e2 z8 O
* N f" W/ F& ~ UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);# m1 A0 I' C( [7 O
if (!pCube)
2 x) ^9 ?1 P6 Y3 B! e {
; b" B7 P( D4 y7 F, ]6 d0 L pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
) ^ |, c! D" `4 y if (!pCube); ^* a `1 I9 T, s: I/ S6 G
return FALSE;" Y0 }* C2 h& z% T# f l; R
}
`4 _% _+ J' x: i+ H) ~6 Y6 \5 j PKTItemTellW8(PacketItemMaxTick);3 I8 P7 `' `1 P
7 w) ?+ K8 s& [
D2CoordStrc mypst = { NULL };6 U6 u' l" m+ h- R0 r% x
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
- C9 a* A( D" i- y$ G- G& Q+ F; z7 ]5 m
BYTE aPacket[13] = { 0x20,0 };
8 Z# [& M, I! x9 x' K; i ::memcpy(aPacket + 1, &pCube->nItemNum, 4);; ~ s4 e4 c( G
::memcpy(aPacket + 5, &(mypst.nX), 4);
; q [1 h+ z5 u5 [% u! f ::memcpy(aPacket + 9, &(mypst.nY), 4);# ? ~! a7 K; H. l# Y* g
D2Net::D2SendToServer(13, 0, aPacket);
5 t. [5 w' s3 D ?9 [/ _ return TRUE;# g4 A$ v/ N; a5 A# W8 _- Y0 v; V
}
% A# g' f, I% v" H# J
8 n6 X. w% I" [ static BOOL ToInvxy(DWORD x, DWORD y)
! {9 ]2 p0 N3 Y. x& H# `; ~ {
0 u! A0 a, X7 }& q4 | UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);8 @* \8 Q% `7 N* q! k7 U
. r& D7 y7 N9 y- }6 x$ q) _ if (phand == NULL)
1 D7 X/ ^# B9 Z9 A return FALSE;
4 Y. l/ m$ j$ ?4 Z, A" h/ @- X! k* F: Y6 C8 W! s* E
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
! ?" H' b$ p* c S
# W9 s% v" B+ M6 q+ Z9 `0 R$ i BYTE aPacket[17] = { 0x18,0 };
2 s! ^) G) N) e2 N4 ]8 v ::memcpy(aPacket + 1, &phand->nItemNum, 4);; Q, v9 v7 V8 y, a" ~7 \
::memcpy(aPacket + 5, &x, 4);
# J" N( V4 o" e" [3 L4 `1 n" s ::memcpy(aPacket + 9, &y, 4);+ q: N; d' S4 m
D2Net::D2SendToServer(17, 0, aPacket);' c V2 k% ]9 v
return TRUE;
+ @5 k+ D$ P, K2 t: N+ F }& u, t+ s7 I+ p+ M a
8 }' r' |2 ]. W: \. E
static BOOL ToInvRandom(BOOL bBagFix = FALSE)
- v' a& \( T5 }) X8 \ {
3 l; c7 l% W9 H UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
1 x) w# W* |& k9 z5 Q+ G7 T `9 J if (!phand)
5 b7 g: e7 k9 Y9 B q6 X/ [/ m return FALSE;
/ i* @9 ~6 E: r% N1 t, A int desx = 0;7 S8 A7 s; b4 y6 a
int desy = 0;, G$ R. A$ S6 v3 g; E& R) I
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))" a( _! D( W( O8 K- k5 M, f
{
& h2 Q, v( D: P% h, ]: p3 m* I ToInvxy(desx, desy);3 I& {2 }6 S0 G% [, Q9 p7 {
return TRUE;
7 b% G* b: c+ h1 _) j( H }; f3 b4 a( l1 U
return FALSE;
( M- D& w2 M& L }
/ X( g0 |0 d" ?( f J1 _$ ]
7 i+ x+ J# [2 J) t: _% R" F2 o static BOOL ToCube()4 i4 u3 m6 c! F& B- h, U
{
, e, B8 ^# S/ N9 T if (!(*D2Client::ptPlayerClient))return FALSE;
% b E y8 O" V: s8 m3 ~/ l* i0 s' P% N8 } C% y
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
* U. K! I* e) Y# x3 B, }* Z% d if (!phand)return FALSE;
. I. n2 ^+ N& [: s0 M: t
9 K, A9 g: {, E/ R UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块/ [$ I7 r- Z/ j! P# h+ O" N. z( J
if (!pCube)
( ?" i; a( K4 Z0 T5 p {6 F3 f6 |9 t' f/ I
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块( y( x( V# n" S% h
if (!pCube || !pCube->nItemNum)5 f2 t: u, X8 t5 X0 Y
return FALSE;6 [! n" t0 K. e2 k# B$ F
}
& C3 N% ]% E, }0 w' `
; @) D& ]1 S' T; S9 l# s$ U if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
! b! J6 k6 v( M0 I return FALSE;
3 ?' ]! B7 @# S8 n4 d. E/ `& e
7 E5 z8 t6 I3 @+ W# ]- n PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
! K9 u& d% v2 V- l! I" u, J) q: P, [' b8 T
BYTE aPacket[9] = { 0x2A,0 };
& a& ^; ?5 \# S. T/ H$ A ::memcpy(aPacket + 1, &phand->nItemNum, 4);0 q6 M/ X' M* i
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
3 I0 v) `: H) k! |- K& U D2Net::D2SendToServer(9, 0, aPacket);" L$ b( F$ r( a' V0 f# Q2 l
return TRUE;/ D- f5 `; H. @% f" h! G
! W$ Y, W- s/ v6 @ e1 c9 U! C }
& C0 E+ j7 A3 |+ W7 p C, Z3 w" L" R7 t% F, E5 C
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);0 R- p" W# a' |( ?. S" U8 o/ V3 X
2 d: \" J7 b+ F static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存9 {8 [2 `( w, a+ P: u% o
{9 e/ z( A" Q$ o3 o
D2CoordStrc mypst = { NULL };
8 t$ P* r4 U5 g: W `$ f$ h D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);8 u# x+ F9 D( n
' k; K; ]/ s8 P# j& B
if (!mypst.nX)return FALSE;& A5 n; g9 ?( |& r9 G, s* ~
0 [6 Q/ n R: h5 R1 z- Z PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
, m3 o5 {5 N1 q8 @4 f1 R' E+ i. G$ T! C* v+ E9 z
BYTE aPacket[13] = { 0x20,0 };
4 A2 a& J9 n1 e: k& a ::memcpy(aPacket + 1, &dwItemID, 4);
) p1 v X/ I* n4 u ::memcpy(aPacket + 5, &mypst.nX, 4);
# K- Y. y8 R% I- X4 g' Q ::memcpy(aPacket + 9, &mypst.nY, 4);
: k; v2 P/ p8 n //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
# J3 \) ~8 _- G9 y4 ~6 p0 t1 x D2Net::D2SendToServer(13, 0, aPacket);
/ i" J" V7 c# W3 B. m return TRUE;% p. t3 |8 x& O$ a
}# r# q; h! O' c3 r/ [2 O
$ r' s' z+ ^+ |9 G1 L
static BOOL DropCursorItemToGround(). [9 L# t9 \ j* p/ @) r
{
( l* v' F- @5 l# j, f4 y; p UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory); K9 R0 l2 z1 f$ M
if (!phand)0 c+ B( G n7 Y7 s6 L, x
return FALSE;
& O6 V8 ~; a3 a' K, ?& i2 u+ G) [, `( \
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);' p$ R p* f {. T4 y7 R
. R* l# F, Y* ~# x
BYTE aPacket[5] = { 0x17 };
# r4 e* ~! i7 L- v8 X ::memcpy(aPacket + 1, &phand->nItemNum, 4);
j9 _7 W6 d K4 M D2Net::D2SendToServer(5, 0, aPacket);
9 e% @; s7 L7 W. q return TRUE;
, S: [4 D8 I# H# D% W9 O) o( h9 P& h
}0 F o8 `9 I. _* r
0 i) A, R: Z5 _1 E. f, k static BOOL PickStorageItemToCursor(DWORD dwItemID)
b$ Z0 O* t. M# g6 j; j {
6 g# ]. \; c* M* A PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);- X, `9 p7 }6 {9 x6 {% Z
/ G8 R/ B5 A6 y, _0 h4 x: i, w BYTE aPacket[5] = { 0 };( g5 I: ]# F3 w& v- B. h
aPacket[0] = 0x19;
3 w" E% B2 ~& s ::memcpy(aPacket + 1, &dwItemID, 4);! ~5 J+ x* g& q e! \3 z
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
* D, J+ f H8 q* f D2Net::D2SendToServer(5, 0, aPacket);
6 F* w8 g1 O; j# k2 u# T% T/ U return TRUE;- {* D7 {) b" a! {% b
}
# r! u" A: M- O3 A4 Q3 @4 D( i& Z! k0 E8 |: q& H# V9 o" ~
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)& N3 k- L# j) f- a4 m3 J
{
, }- C: P0 H9 x' I( L6 ~# _9 _ PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
+ W9 R a% j. f BYTE aPacket[17] = { 0x1f,0 };& p0 V4 m) o }) R6 A
::memcpy(aPacket + 1, &ItemID1, 4);
# e( s0 J/ i" @$ v& ` ::memcpy(aPacket + 5, &ItemID2, 4);6 k7 O$ i; T$ q' q1 d8 L
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);9 o, f0 h9 U7 j. [7 Z \# b M
D2Net::D2SendToServer(17, 0, aPacket);, m0 ?4 G. f1 ]. D; Z2 e
return TRUE;1 T& o/ k3 {7 Q8 e; v5 d/ V' ^
}. P1 t) _; c8 b' J- Y+ X
( h3 s; |9 L, r1 l: q8 ^
static BOOL Transmute()
) G2 C0 y, J$ M+ p, w8 l3 j' V O {7 r: T, _, _3 X) I. R
if (!(*D2Client::ptPlayerClient))return FALSE;9 h' w$ d7 r! `1 q; f
6 m K& @" o, W8 b. f- X$ m if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
W# ^! I+ i1 Z t: l+ ]/ k8 ^4 j return FALSE;( x5 t! v; a5 q1 p
r- d7 V' x, Z: ?
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
1 ~0 }% t/ `! J4 i1 J0 C7 G: P) z BYTE aPacket[7] = { 0 };5 m$ j/ L& I- q! R
aPacket[0] = 0x4f;
2 Z1 y# M K3 h* r# }' C6 v aPacket[1] = 0x18;( Y( y4 \: H' W& ^3 c
D2Net::D2SendToServer(7, 0, aPacket);
+ w3 v. M0 D9 l2 l7 k return TRUE;( A1 q5 Z; o# S6 T: ~: J
}, g5 u) S- e* c3 p: y
};
' ]% `& {) {( }8 `9 o7 \+ d# a4 V4 n( f( V3 M
|
|