|
|
转载 T- Y( p% Q, I+ E* A
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:3 I4 m$ j2 c5 n/ K( B
D2Client:
2 K% ^. F1 O" m' g- Z! M6FB20AE1为拦截输入框(用于获得命令): O' q- D8 V/ [' H
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发6 M# d4 R5 X4 p6 J
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发! a+ y5 n$ A) w6 \, U q/ z" |0 y
6FAF4230为hackmap的loop点 我用的hackmap导出位置/ S, u& | |5 }: I
# l2 }5 M w, T5 F7 a1 }% v8 V
: a- n3 f9 \! w; |
发包函数:
& v) C* y3 L: A n9 iclass D2PKT_ITEM6 a$ w* q* |, J
{
; h' V' ^# s& u; f3 c- s#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
7 ^7 F, F( W7 [; I#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多 Q' Q& R J# ?3 q' T
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
3 A' y( S; M8 B C W#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
8 |$ p; z* K+ C: w#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
, P# b9 p- ^. K$ `( x1 ?9 x0 K#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上0 x+ p3 ?$ X; B7 G) g6 w
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏# z- S9 r" @# i5 ]
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上! E9 |, T& W6 Q4 T" @
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -) Q9 K" J( o' x! Y. e" I+ n3 E5 K
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
1 V8 r! X9 ?& d% |+ p+ }#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
! j, Y, D+ Y0 G#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
4 s2 G y/ B; I: `# m#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
5 D1 f- D. i5 N0 ~- _ z#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上8 G( _1 S5 g% n/ U. B" g
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
; H9 N6 i3 \9 j6 j X E#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
0 |& o9 e( R9 ], S#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -8 w) D! x# z' a: c& O7 F( r
9 H0 E& ^3 L* P#define PacketItemMaxTick 150. D p& `* l! L/ [9 L
#define PacketItemPickUpTick 20$ H. z# X; ?; Y9 {; v" @ \# C
1 L5 F; `2 \8 f8 o/ A: M1 y6 O& j
private:
. y. K6 ]! d: Q5 g! A0 x* Q5 Y static DWORD _PKTItemTick;
_( {; M5 N& [! d1 h6 X* J( \+ L static DWORD _PKTItemAction;5 M. {/ g0 n; P3 [
static DWORD _PKTItemID;
' D: L* L' F3 K& C$ Q/ I5 x+ i static BYTE _PKTPKTType;+ w5 K) {* C! k. w4 _
public:9 F& h0 D5 I) F$ l% \ m2 J
static DWORD PKTItemGetTick() { return _PKTItemTick; }2 C- h( s- L5 G
9 E5 P- U2 J$ C; f2 H& {- c8 z static void PKTItemRelease()
7 {# m2 b/ x7 D, u8 l/ |1 G2 a {1 B7 {1 V# Z2 Y1 T4 r$ |
_PKTItemTick = 0;' C! I# b4 f5 r1 O9 T! m
_PKTItemAction = 0;
5 j1 w$ @: q, h _PKTItemID = 0;, [% w4 W7 A3 I; I9 d& k
_PKTPKTType = 0;0 h) G+ c6 `7 `' s" w, C' w ?- l4 G
}' @! A9 O" c D8 I; n
1 n% P( j* G$ n, w- y3 M! ^ static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
/ n6 v( Z1 ?! {4 J: d {
7 I1 \6 R$ P: G& q3 r# K _PKTPKTType = aPacket0;
- D4 M/ ]9 J# o0 k' A" K& p _PKTItemTick = tick;) c; g# @+ l1 M. R* ?0 A. A
_PKTItemAction = ItemAction;% P2 @, b8 K6 S( e
_PKTItemID = dwItemID;
9 k) ]& n3 {2 A4 y }& V8 K% V9 @1 G) O: T V. _
9 \( H- A9 h% {0 c. V2 [& G8 ^ static void PKTItemTellW8(DWORD tick)
( J8 k3 ~( S/ ~ {$ u1 I# ^" X3 B* m
_PKTItemTick = tick;
) S ~* F$ u+ c$ a- L* t) \ }/ [- }9 B. y i. i/ t1 J/ o
( k& o4 O5 F" b static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor$ |' D2 ~. l# d
{% ]* A* f, a* G* w; X* c
if (aLength >= 8)# u7 P9 y& `7 e5 I0 d, T& i4 E
{& T& {7 b& J& d# p
DWORD dwItemId = 0;( K3 u7 i2 W ?) D5 U$ V
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
0 b& ^: ]# D; s6 J if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
9 T% ~/ y; d' V; s && _PKTItemAction == ITEM_ACTION_TO_STORAGE
; M0 H* Y/ [! P B! w && _PKTPKTType == PACKET_NEWITEM
, D# I* U* i* _ )
5 }/ E6 Q# @7 O/ s) ~+ G* I& e _ {
. y, l6 e7 ^3 e if (_PKTItemID == 0 && _PKTItemTick)
N- p% ~4 R" x2 r+ @& [- e {
' E, D0 v* `. \% Z: M PKTItemRelease();
3 n, Q0 s4 c" [5 g1 w n5 T }# ]7 u" R: Y U- Z
else if(_PKTItemID== dwItemId&& _PKTItemTick)
6 R0 {* b" a$ V9 i6 B' f, Z {- b% |) h* |! w& h! U" Q
PKTItemRelease();1 F2 Z1 t* O* H2 O0 i% [
}* x0 R) p- c! S4 C3 f m
} s( o3 G3 ~' d6 L: T
& C' f3 T: F* ?
}
; J2 O( }8 [4 w; C }( a; p0 x( I- Q Z: b# {# c7 J
% {2 D0 C! ?* g& B' p8 ~/ x2 j q
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored1 R2 [# A& L& [
{! Z) ?3 H( `. P, ?8 N& u3 J! C
if (aLength >= 8)
8 ?! c/ d/ L5 m' ~ {7 d8 t4 N6 c' O+ p6 D# m O! A- w9 y
DWORD dwItemId = 0;* \! N+ v$ x/ n; w `
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));" r0 j; X4 ~2 f$ @, s0 n
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE* c+ k* p) \4 a. U" B3 k% B5 h5 |1 [
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE0 i+ N! g. N0 c! g" ^1 q: \
&& _PKTPKTType == PACKET_ITEMACTION
7 Q1 q$ i2 i3 ]$ m6 Z )) }' \6 N3 J$ o; a$ w5 U c
{
; a6 g4 |) e* J" L% J. e if (dwItemId == 0 && _PKTItemTick)7 m/ X( D7 v. h& \3 A
{! Q+ v! z# I1 `9 {5 e: V( t* f( L
PKTItemRelease(); }$ `6 X1 ?7 ]& B: M' m4 a4 Q
}
8 l# R% ]4 n/ m/ C2 Z else if (dwItemId == _PKTItemID && _PKTItemTick)
, D7 O) K" y3 J ~ {
9 Y6 p$ m* S! K PKTItemRelease();) i) z5 L& b, {! U" U* }
}
. K- |' `- l) X8 P }
3 k; T% [4 v9 l& a% A - \* Y! Q6 }: |7 H8 X8 H5 G
}" h+ A8 T# N4 w+ T' E7 N
}- `6 _+ U( C( @1 Y: T/ A+ g! P W
7 h# w& u3 Y% R' h
static void PKTItemGameLoop()6 o( x0 K: p* Y" K4 R
{
7 o* E) C6 c3 k _4 @ if (_PKTItemTick > 0)) \; |- P# e$ o. M; i3 a" _" z' X
_PKTItemTick--;8 Y: V# \7 C1 n9 A3 ]5 [
else if (_PKTItemTick == 0)
- m5 g4 a. m- l* E4 p2 P+ F PKTItemRelease();+ Y) {# t; F9 A0 |! n. f
}
$ R/ n; r* U; c a+ s' l5 v" t6 |4 b, l! Q% m
static BOOL PKTItemCando() # b) R$ u" |# F7 {/ S" x) v
{
- y9 ^7 g: f. a2 y: p8 I1 W" c if (_PKTItemTick == 0)return TRUE;* E2 q& \, |9 _+ R$ _* u
return FALSE;, G9 I2 X3 Q7 m' U
}* E* g2 M$ \& r. E G# ~$ R/ V
1 a. j; t9 E6 Y; m1 T
static BOOL BuyItem(DWORD ItemID, DWORD npcid)6 w( t7 r7 B! x0 o+ O- C. t
{% {, W: q( r' M* m$ Q; j
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);! }" {" {) Z- K# I/ M$ A ~
BYTE aPacket[17] = { 0 };
' c& u* ?! L1 s( M aPacket[0] = 0x32; d$ F! I$ | g1 Z! E# h
::memcpy(&aPacket[1], &npcid, 4);5 M" U& o* N/ u$ z7 m: d: X
::memcpy(&aPacket[5], &ItemID, 4);6 q& I8 S. ~! r# m- g4 J* u
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
S* @: n5 ~! ]% ^ D2Net::D2SendToServer(17, 0, aPacket);! w; c, {1 i3 f& o0 V
return TRUE; m" s4 e- c5 A) C& K5 ~
}
% y( K8 e' m: p2 l+ {6 c
' [; m! x E" @) P5 ?; W/ m static BOOL SellItem(DWORD ItemID, DWORD npcid), l( x/ e; P+ T, g/ d3 j
{
! F+ L7 g" _; }7 O0 Y0 U9 W* e PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
3 ~& O, h' g$ h' J" O BYTE aPacket[17] = { 0 };$ I6 j+ d: D8 c% t v( ~
aPacket[0] = 0x33;2 o/ A( o% |, l+ n6 a3 F* h0 K+ ~! q
::memcpy(&aPacket[1], &npcid, 4);
4 T0 E# n/ d% g+ o* n; p V+ p" D+ y ::memcpy(&aPacket[5], &ItemID, 4);
`: s+ k1 n4 L5 |& Y* M1 @( { //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);$ e0 `! U1 d9 n- s: \2 t
D2Net::D2SendToServer(17, 0, aPacket);
- `/ P0 @$ q: r- r. t6 t' ] return TRUE;3 W7 V/ L9 r6 R7 y9 Q& `+ p5 h
}
5 I, W) H. @0 K0 o! A0 M0 A
; l$ [: u& D+ z$ u static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
2 p) a5 w4 @0 v1 N
- z& y% {) O9 @ static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);. W& |3 b+ E1 x8 A6 v
2 ^- P% O* [: o: x6 G' [
static BOOL OpenCube()+ V7 m7 H& z5 Y) ]: [
{. E, Y' V) J) Z. Y
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;- g$ W4 j" e! P; t5 H2 T4 m% x
) C {7 R9 e, q7 m+ t' ]3 p* t UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);& p4 m$ K1 R5 ?$ |* c& g
if (!pCube)& }# y) ^- @* i' m' C, f
{" v5 N& t; r* l7 i6 B1 i$ Y
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);) s6 Q* \7 T* K* D) `
if (!pCube)
, v) C: l; {5 R1 T" ^# a) Z$ j return FALSE;$ r6 }7 O* |3 f8 q2 `; p' }
}
. L {- i# e1 w: r8 K0 N2 S* I; B PKTItemTellW8(PacketItemMaxTick);
' M. T6 j7 k" F4 g4 p, z/ E/ g; f6 g$ M: y) v3 {! W [) X9 q
D2CoordStrc mypst = { NULL };5 }" m( {/ g3 X R/ o1 j
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
! S# |& Y5 d+ D A) a, n& z
" c$ ~+ z7 w' u2 u2 M BYTE aPacket[13] = { 0x20,0 };# ^. k9 |4 ]) O! j, K! m
::memcpy(aPacket + 1, &pCube->nItemNum, 4);5 ?. c" \$ w7 s8 Y! E/ b
::memcpy(aPacket + 5, &(mypst.nX), 4);# z8 z% \; O1 t# A9 S9 h4 o
::memcpy(aPacket + 9, &(mypst.nY), 4);- m" i% B& j6 v9 O- m3 y" s( Z$ g [6 y
D2Net::D2SendToServer(13, 0, aPacket);' P4 V: \2 @4 t
return TRUE;( Y3 q$ K6 {, Q' Y ^& ?
}
5 y: o0 U! e& N0 g# L% E
! `6 v" V4 [: O( `- | static BOOL ToInvxy(DWORD x, DWORD y). _) ^4 e. U/ \ S3 e5 o
{9 N! @0 p8 i9 ]- R. W( f/ S
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
3 v: D3 U* w1 e
$ y" r& O6 T1 p d8 c if (phand == NULL)
8 ~; o5 @0 i" o# r" A# ~: ]0 R return FALSE;5 N8 \2 h/ K2 P% _+ R9 _& D7 B' g
" y% [" g" v, m( `, H P6 w& }0 ` PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);, a. ?9 _7 }4 j$ R x1 ?. D+ G
5 c( G' H: O' w& { BYTE aPacket[17] = { 0x18,0 };
$ r! R e$ X* S8 l ::memcpy(aPacket + 1, &phand->nItemNum, 4);7 r. X: h; |2 L2 c* S
::memcpy(aPacket + 5, &x, 4);
1 F/ J# ^% J/ n) ?/ F" G$ U ::memcpy(aPacket + 9, &y, 4);! ]6 h6 I' J% }, e
D2Net::D2SendToServer(17, 0, aPacket);* S; E7 ?1 ^8 T/ {
return TRUE;
% S/ y' C8 m9 ^* j1 w& r }
8 M6 Y: l' p, O$ P' G L' ~% y
7 r8 Y* h3 C( j static BOOL ToInvRandom(BOOL bBagFix = FALSE) . x( D8 D+ R# N+ e# g
{; f. _) d+ w8 k# t% c
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
1 y: M- o- U$ I: d if (!phand)# w; C R" Z# S9 b, b# O, w
return FALSE;
! @, ?* B5 w Q int desx = 0;' e! ~# K0 T4 y; ?; K
int desy = 0;
( D6 z' ~, }$ r% W if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))0 _5 h5 C& P" n
{
, O) i: e. O. A# L ToInvxy(desx, desy);; d' q W, |' ^+ D, _5 _- I
return TRUE;
8 h; M- J" D' B' e1 a% a1 c }4 c) W: w1 F4 m j( N
return FALSE;
/ L* \6 [+ S- ^5 t3 Z }, V4 t1 J. P* m, Y' n
/ C5 A$ T. l! p/ T5 `& y static BOOL ToCube()
0 q* ?8 U3 Z; T {
! N) b! _! w) r7 M; k5 }0 F3 M: k if (!(*D2Client::ptPlayerClient))return FALSE;" X3 Y" h* f/ Q3 ^* z/ V+ u
0 v$ z& Z" P n- B3 j4 l/ m: ^
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);/ V5 B6 v9 N! o: g8 o" x
if (!phand)return FALSE;
- A* `5 T) T5 Q( x" f% A& z) a" z
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块/ e4 v% B5 a8 t V) A
if (!pCube)
. w1 q! m1 ^" _8 n) R {2 O. G, v# |0 n X5 x. I m
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
8 }& s B' B5 ? if (!pCube || !pCube->nItemNum)
# A# x' I$ y, @4 I return FALSE;
& w$ I( T( `" }: k }
- a: Y/ w$ ?- ~0 @8 L
! T) o3 f8 q- k T# V if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE)). E) v3 V3 d4 D, z9 h6 u
return FALSE;
+ h o3 m# z# e: u3 ]
$ G v M+ J7 B6 ^% {* k0 n! ^ PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);6 h ?3 G6 `3 J; ~$ U
9 f% f' [3 C( L* N! `7 z
BYTE aPacket[9] = { 0x2A,0 };
6 l: q V8 \9 w ::memcpy(aPacket + 1, &phand->nItemNum, 4);4 d# M) h1 X' _' D
::memcpy(aPacket + 5, &pCube->nItemNum, 4);0 c) J" T" H1 T2 @- i! M
D2Net::D2SendToServer(9, 0, aPacket);6 e! R, V/ j0 ^2 F7 F$ _
return TRUE;8 N/ d* x K3 l8 e- H8 z
& q" V5 X% s) }$ b1 L0 r
}
- [0 f; U! m2 S! a9 G. O/ i; O, o$ d7 c1 f/ v& a& {7 b& {
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
& P8 w6 }) _+ R' f+ V ]3 b9 T2 `4 x: B6 H2 E* N$ F% S
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存. k+ b* G- M! D0 v5 S# H% D7 Y. U0 |
{
% V7 V" g+ Z- s, v9 x D2CoordStrc mypst = { NULL };* f6 j( k7 i# g! i; b- `
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
9 d% F9 F7 M9 \, U# E. p: n& I; l% R$ P8 k9 f
if (!mypst.nX)return FALSE;
' v1 Y4 w4 }! C 3 m6 u" {( V- h5 [( U
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);; v% p% A& ?$ G, B
) G: ^7 X) X# A BYTE aPacket[13] = { 0x20,0 };( N0 n; P1 R" P! d/ W' Y
::memcpy(aPacket + 1, &dwItemID, 4);- y) U! o' a9 W2 q
::memcpy(aPacket + 5, &mypst.nX, 4);
7 { X% a$ g: Y; t" ]1 u# K ::memcpy(aPacket + 9, &mypst.nY, 4);) t5 L: n) ~0 P! y( l1 I4 @; N1 G
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
4 n- \& v5 {9 L3 {7 g- | D2Net::D2SendToServer(13, 0, aPacket);
# @; L+ w. ]& [ return TRUE;
( j* A0 i, ^ v% m; A }
) Q) E- o' _( j/ K# K' n$ U
/ ?# L' O; [9 V7 R3 ]7 b static BOOL DropCursorItemToGround()
% l) w% j) y) z$ b3 ?; V {8 W. v' ?; [1 [# w+ H
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);0 h& B" N, g) f; }+ v" N, U
if (!phand)7 M6 M4 G* U/ p+ ]) @& D
return FALSE;+ p9 a7 F" ]4 W$ Q( j+ b
+ q) t6 V. a, V" o& Z PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);5 E2 V8 ]; B" s2 M* V p, r
- m$ F+ V# `- \! T+ q/ w$ I2 f BYTE aPacket[5] = { 0x17 }; k' r# y" |! T( \' G N: L+ I
::memcpy(aPacket + 1, &phand->nItemNum, 4);
6 M; ?% \, w: u D2Net::D2SendToServer(5, 0, aPacket);
: H3 c; R1 N) c f4 w( D- x0 U4 V return TRUE;8 {! ] K; O7 S- i% o: I
% ^ C/ B/ k. S7 `
}# L1 \5 T! g, v& R9 E. ^+ L
- j! S4 c3 ] o static BOOL PickStorageItemToCursor(DWORD dwItemID)
" n5 q; n& } Q& y! ] {( @# m# N& T1 m& T
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);) g' ~8 f& k" P6 ]+ C1 d7 h& `2 R
! u) Z* b" }3 p$ U. \( { BYTE aPacket[5] = { 0 };" H2 ?) x& j2 M4 P
aPacket[0] = 0x19;
4 _4 a) X; i: z# B ::memcpy(aPacket + 1, &dwItemID, 4);
) j# v! N: w; q; u6 b% r% z //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);" ^! v% {8 g' Q0 _4 T/ J1 ]
D2Net::D2SendToServer(5, 0, aPacket);
v7 T; `' @0 ~; [3 U return TRUE;
- \/ }; t- h4 p" @* ~, e }+ }5 Z3 z* a7 R6 n- Y6 a
, @( f8 Q% C9 W" w: {- T. ~
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
3 {+ J2 f* c& {6 N8 ?* c {
$ Z! f% h$ a+ b) Q+ D PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
/ g2 G. b( V1 ]' ] BYTE aPacket[17] = { 0x1f,0 };* J8 Z% E- \. s4 m5 u% u3 g+ Z6 i
::memcpy(aPacket + 1, &ItemID1, 4);
3 {9 g8 f/ \8 V& t5 M5 j0 t ::memcpy(aPacket + 5, &ItemID2, 4);6 V0 _0 o. z6 w% ~# n% _
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
# l8 }3 ?) W, G- r' F D2Net::D2SendToServer(17, 0, aPacket);
$ q8 g! c" B' Y3 N" O0 x4 s9 V return TRUE;
6 ?' T- ]' c. `* u4 A8 a2 ?, |1 ? }
5 x. W$ R, a& Q
8 M$ j3 a3 c' y! i: c/ b static BOOL Transmute()
0 D0 M! E$ r7 [' ?7 A; b {
. {( D, c% @5 A' w8 Y j) _+ r7 ~ if (!(*D2Client::ptPlayerClient))return FALSE;
2 z' h3 f |0 y9 ?/ a" ~" [
$ S* k/ ?4 S( Q0 C R2 q9 N/ [; N+ G if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
0 a! t- z7 V. f7 g# ` return FALSE;
. ~6 [& s9 ^, Y) O% U9 \; _5 l! r4 w% B8 E* W! y
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick); J5 w: @ E8 S1 X/ ~7 e
BYTE aPacket[7] = { 0 };
# |2 \" |, s, c6 { aPacket[0] = 0x4f;4 c) g. r$ D; s0 A; {
aPacket[1] = 0x18;
8 ~3 s E) P; T$ a+ q D2Net::D2SendToServer(7, 0, aPacket);
% Q% M# `1 m( d% ~. P return TRUE;: _) r, V4 ?, s/ p
}5 G) D9 V+ I/ S$ r
};& L7 q) s1 {# F% r( o3 U/ N
# k5 ?( z3 b" P# b9 k |
|