|
|
转载7 ?" \. ^( R% |, H! v4 `
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:; V; G: V$ U; C$ ]; S
D2Client:) g, e/ b' q' B9 ^% ?3 U# E
6FB20AE1为拦截输入框(用于获得命令)
$ N \6 d2 T/ b+ a, _# B9 o6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
+ J- ^' b( P" O; L, {6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发) h& ?8 D) `0 D( R+ y6 x
6FAF4230为hackmap的loop点 我用的hackmap导出位置
5 b" Z$ L* i9 O) b9 [: E3 V5 ^
7 r% E0 a9 l) }/ a I3 a发包函数:
+ r2 ^1 J) E& p" a3 G- d( J0 kclass D2PKT_ITEM- c! L/ E6 i/ T
{3 w0 H7 O. b8 f' w' J5 E
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上( m* Z+ J* y- h6 e- `9 d& h& e
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多% C5 n5 W6 R' p8 |
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
7 T4 D+ Y. S2 R8 K: g! E% ~#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
; v! L+ v5 d! Z. O/ z$ H& i#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH) W' m5 p7 a5 [9 t. g$ a
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
, n$ Y) j& U. a* E4 b$ {4 p#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
8 k4 Q4 L7 L+ ~2 n) t#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上% h) ^7 _' b5 D# u3 j* b/ n+ U
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -% t$ {. B/ _3 {' X$ t7 [. K; _
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
% U2 \; y+ E2 t+ y7 ]% r9 T#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV/ H4 ~7 d B1 {' g) b
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 ' W4 w9 q- a. y3 H
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
. c0 K, P7 R& O f+ k#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上( y0 K' C: C) [" Y( W# o
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -8 k* |% R1 K N# \0 v/ G; b
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上8 E5 F% ?9 `' ?9 o) X& b
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -! ^; C8 e7 D" c% L! o
7 h) k& t1 m- v! X5 n& k#define PacketItemMaxTick 150# G9 [, E0 r$ ~6 j# @3 M
#define PacketItemPickUpTick 20
2 A8 H+ | c y0 A
- Q5 |* [1 o; Pprivate:2 B; L/ ]5 B" s# t* X# N: X8 O
static DWORD _PKTItemTick;& n% T7 \5 T* P! i; d& e) T
static DWORD _PKTItemAction;- B2 y0 `- h, ^; n
static DWORD _PKTItemID;
5 E+ w( O4 i& G! d) ^ static BYTE _PKTPKTType;) O9 J. `5 R, ?1 K
public:2 ^4 ?8 {1 `( `8 J. G9 K( V/ {
static DWORD PKTItemGetTick() { return _PKTItemTick; }6 k; @) F2 K9 k3 D- D
( a& k7 `6 |7 P
static void PKTItemRelease() $ c) E- G* O2 M& |/ w/ I
{
+ B8 S* J6 p0 e0 g& \ _PKTItemTick = 0;8 o" E+ \% _4 i/ O% q' O
_PKTItemAction = 0;/ |3 |8 \. x# [& q: @2 k% ]
_PKTItemID = 0;; m; h4 M2 L b( ~2 p6 b9 ?' i" b
_PKTPKTType = 0;
+ B3 t' T! }6 x. B; @ }$ v, D& p: i. Q# F2 G& c6 T9 M
% _& _$ O) E! P w3 m+ z% x7 F
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
; I' q! \ g$ G% J. g {3 i/ @ |) F: T- G
_PKTPKTType = aPacket0;$ ?. g5 H8 v% l7 w! R5 e
_PKTItemTick = tick;
( i v' z; ]$ p' s! M5 E# C _PKTItemAction = ItemAction;
" A3 {/ O$ w! y! d3 |( a P. o% p2 Q _PKTItemID = dwItemID;
5 |- ?) q# {. G7 f# Q }; M; D- z! x* {6 E6 v Q: [8 v
: [9 k' J1 x W0 H" [' I4 I static void PKTItemTellW8(DWORD tick)- q; }) o" I0 Q" W3 |0 }5 R% w
{# }+ n; g- v- ?% M
_PKTItemTick = tick;4 p7 O5 n& F5 P" P4 B. \" W
}9 ^: ]' R5 d! `' {
0 F- w1 w3 `* [ static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor8 l' Y- d% k- t9 K$ S. Y
{
0 y9 G. x2 L& A1 W7 e if (aLength >= 8)
* N. C( f b; u0 w4 c {
6 i" E! c' C" C& M DWORD dwItemId = 0;: n: z( S5 f. n) O1 a
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));, {( P& s' u n4 J1 O; @5 _/ K- G
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE6 Z- C6 s& _3 D5 m% \9 }# f8 f6 B( Q
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE: `+ H7 f" _, L% `/ I
&& _PKTPKTType == PACKET_NEWITEM
3 Y6 f% x: w9 v4 n G9 x2 y2 D )
6 J' q0 Z4 N4 [ {0 A8 V2 r9 b( P. {+ H6 ?+ g# w+ `7 G
if (_PKTItemID == 0 && _PKTItemTick)3 a: p* h) _. ], h H
{
/ j$ [+ W' Y# {2 r5 {0 P PKTItemRelease();; b9 W1 }, C1 D+ [0 N7 b
}
7 T3 |5 S) B4 J- H5 {; G k. J h else if(_PKTItemID== dwItemId&& _PKTItemTick)9 k5 w9 D2 d8 P" T
{" K* }2 \) y3 I# Q9 j$ m
PKTItemRelease();; z' L5 f9 B$ |7 U" g/ z; z8 x9 M$ W
}
$ M8 `& N) ]5 u- |# z }+ q6 E. W; v. f! J2 z1 L9 A
! I6 x# e0 s$ V& ?+ D7 C) S7 Z. W
}/ f1 R% s7 K Y( L) e/ r: P+ D8 e) N
}. P" J; a# E# _7 ]! F2 e
- ?) g. }. G" ]0 {* G- T$ O7 e8 H static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
+ q- W* F- h5 H: ^. H: m {
2 c3 z$ J4 y6 v" Z* M, G if (aLength >= 8)
( ]( Q& I$ @9 H2 Z( u6 L$ C {
6 Q2 x+ |! ~7 B9 `# T) C0 [9 w DWORD dwItemId = 0;" q( V% y! F0 \; X
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));. X3 O& ~6 j1 J( O: ~$ M B
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
% q7 X6 Q' W% X, Q/ l1 r && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
( p( v2 ]8 g% c && _PKTPKTType == PACKET_ITEMACTION# H8 b- ^6 R, v
), z8 N# l& R) k) V. j2 q: |4 ?
{
& \, |$ O4 t1 Q0 U1 X( q2 a if (dwItemId == 0 && _PKTItemTick)" T' C/ I' R5 E
{+ S! ^. b( I4 x f# O* b! v* }! B' @
PKTItemRelease();
2 V! H) [0 B6 `2 F( @3 G$ { }
( s e6 G/ b- C" X' M6 s* f else if (dwItemId == _PKTItemID && _PKTItemTick)
3 P9 B7 n+ g" O$ z/ y- \ {
% a6 G8 j; g8 `3 r PKTItemRelease();9 `; A' x) E; I! s' r
}5 O% B$ Z l0 T; u/ I, Y# C# @5 ]) f' l3 q
}) |- w! c& x) z" O8 E
/ I! k4 R6 | S
}0 f/ ?1 G6 s4 |+ w N6 l; y
}
2 ~+ j& @, g2 [ y6 x3 {+ i/ a) l
2 C0 d% U" t+ [- I4 g9 }6 D static void PKTItemGameLoop()
0 f& `' L% @" y0 U4 P {
* |5 L& I7 D- d+ D2 t if (_PKTItemTick > 0)
* z, l; p' m* G _PKTItemTick--;, n' I# v; H$ q' b1 ]# e0 ~! Q; c
else if (_PKTItemTick == 0)) |# ?: k/ Y9 ]- w6 f
PKTItemRelease();+ q2 e; q* S) o" o! j
}
* B" [: o3 u2 k
* I. _4 a0 R3 v# O static BOOL PKTItemCando()
* H% u) u6 L+ l! H/ P. Q2 S2 Z9 U' P {7 X; i6 K8 u4 E; k5 [ X
if (_PKTItemTick == 0)return TRUE;
$ Y# p% d; w$ Q. ?0 N return FALSE;1 M# F# ~# F/ o, ^% |( ^: o
}8 C9 u$ e4 c4 ?2 k5 [
1 m+ l+ r! e' \# ~- T, b static BOOL BuyItem(DWORD ItemID, DWORD npcid)
" i0 s" u( j0 `5 i {- e- N% b5 c3 {, D* m( V5 b6 }) b
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
$ d& R7 c" E- B) `9 x) c BYTE aPacket[17] = { 0 };
: x% f, j/ M, V3 @9 ? aPacket[0] = 0x32;/ V9 z$ s3 g! ]6 s
::memcpy(&aPacket[1], &npcid, 4);, j/ i, U% T, x& R
::memcpy(&aPacket[5], &ItemID, 4);, C" s1 V2 _& m4 @( U* X0 x
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
. {% l$ Y, G% z D2Net::D2SendToServer(17, 0, aPacket);; v+ s! Q- k: Z
return TRUE;
" m: C8 F; [) b7 W6 ]; q }' f u8 _. r# i+ B* U
+ X, {' M0 E+ d# e1 D! M5 S' \ static BOOL SellItem(DWORD ItemID, DWORD npcid)) q5 j" m x& O
{3 {, b; c" d+ ]
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);& h4 N4 K3 @) v- ~4 a3 J# }
BYTE aPacket[17] = { 0 };
# t9 r; x: W% g& m/ u# @( x aPacket[0] = 0x33;$ W5 Q. r0 u& k8 E# Y# n' H% a
::memcpy(&aPacket[1], &npcid, 4);2 v; K& b: F1 S6 G) k3 u$ ?! a
::memcpy(&aPacket[5], &ItemID, 4);
/ K; |( K' p i) x. f8 q //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
: ?5 t4 J' |3 ^6 [ D2Net::D2SendToServer(17, 0, aPacket);
8 N |# i: b' ~7 Z. M `5 I return TRUE;
- H( t* p, f9 ]. G1 I }
}( r8 l' J* B2 f/ W$ z
9 _7 r& T M5 ^6 w1 h* k static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
& X& ~) x/ a# @4 `
D, _3 x: w4 {! `" y static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
+ G% c1 s# \( E# C
6 q% a6 @1 ~" m2 ]6 r) t( } static BOOL OpenCube()
6 j+ L1 O% n/ c1 y* ~% X% Y" A9 _: c; J7 q {
% a0 T: U( U _4 `# x; H- h+ { if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;( m3 c, k: P% X# a# i+ z
8 \) _5 [: c# H* z- q* H+ t. T- h
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);! V5 V5 k( l% @" [4 T5 c
if (!pCube)! Y$ V/ c/ N4 `
{4 U# o+ r- B1 d, |' A
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);2 g6 c$ m6 |- P% G6 @. {6 m
if (!pCube)
; t3 s7 |5 q4 l8 J9 c( U return FALSE;8 Z5 {9 S2 N8 r5 _) `8 Z4 n7 `' W% _
}
$ Z% y+ F6 ^$ {' ^% Z PKTItemTellW8(PacketItemMaxTick);6 N* @ _" |* J2 P
2 @& u; q0 O6 f& _# B. T D2CoordStrc mypst = { NULL };
9 T0 h" ~- U# ^# L D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);+ U0 X' |+ r! U
6 d- @, a9 c) A4 O6 N$ f$ }' N- ~ BYTE aPacket[13] = { 0x20,0 };
/ ~0 h# `, X: V/ Z& R ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
5 N: C! n1 t. O3 n" V) ^ ::memcpy(aPacket + 5, &(mypst.nX), 4);
6 u) I) }* W' `8 E ::memcpy(aPacket + 9, &(mypst.nY), 4);
, K2 I4 |0 S4 D$ d. q D2Net::D2SendToServer(13, 0, aPacket);
* F/ k: u% K8 A+ y5 B return TRUE;
$ q* A4 t3 W+ O! l( m }
: p- Z5 |3 j. W2 J- w6 L: f( C6 L b% `( q ~
static BOOL ToInvxy(DWORD x, DWORD y)
3 d! m. {% a9 X {; _) t- H) w5 V. E0 Z0 {
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);2 b+ `8 p: h# s/ i/ y: T6 z
. a" C# t0 J8 q/ H& C if (phand == NULL)( b0 `. [1 U3 l# h* }, O2 `
return FALSE;( h: h, h$ D/ `' N! \: _
( [3 k! w, w' F* X0 X+ M. d/ c
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);- p& E/ T. p/ [! x
4 q% G, U( S# N. j0 _ BYTE aPacket[17] = { 0x18,0 };
; O) N2 [1 q$ j ::memcpy(aPacket + 1, &phand->nItemNum, 4);4 A7 l" W8 Y" E3 C2 C' W: b
::memcpy(aPacket + 5, &x, 4);3 T3 ]" j7 G+ X, A% v
::memcpy(aPacket + 9, &y, 4);! k6 k, f/ a+ ^+ @# x# U
D2Net::D2SendToServer(17, 0, aPacket);2 t+ ]" j! v) C1 \
return TRUE;5 R" B* s2 o1 r# U; R8 N9 D6 h% V8 K
}+ D3 p8 c; N' C
% y# R1 T7 J9 b; C7 G; E) y( O }0 s static BOOL ToInvRandom(BOOL bBagFix = FALSE) 8 a' |6 L" r& T: a) A
{# ?) \5 }- _: q( S
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
6 w) m# n& b7 N/ ~ if (!phand) O6 }8 q7 [* W
return FALSE;
' Z* m$ z% P+ u' p int desx = 0;
p9 [' c! [9 j, T' e int desy = 0;
3 F9 E5 Z/ W1 n3 N* N7 I/ O3 T) u if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix)): m4 E0 \% R# i K& C
{$ [* `7 f9 n( L
ToInvxy(desx, desy);
3 A) r- E+ b$ e { return TRUE;
+ `& v- L- v+ Q1 I/ H K% @ }
5 P/ o3 E' }5 j return FALSE;
" q! W0 N- Q1 o; m } x6 ~6 }) m# L6 _4 {
4 x) o& D0 h n B
static BOOL ToCube()
( o- O8 B) n: R3 m3 J' W' x {5 T X: c! m" P! B5 i; b
if (!(*D2Client::ptPlayerClient))return FALSE;# ?3 C. h; g4 c3 `
& Q( R& X$ h A& X( O3 H
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);: ^ n" u8 y$ R f! |% a) ]$ }( M
if (!phand)return FALSE;
i. F, F; H. T; i2 p& E
t5 m% I$ V, P% h. F+ @( ` L UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块- T0 X6 b2 ^7 X
if (!pCube)
0 V# r/ T/ A- z6 L' ^6 G {
0 e! |) y8 t* B' g pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
$ k4 ~; D9 Q/ L7 y9 U# V if (!pCube || !pCube->nItemNum)
1 M- r0 x% I& _9 P( W) R return FALSE;
0 V- \- n/ ?# m1 y# l- g }
# ~3 l, P4 Z- ~* e2 R! f4 M- |' n0 \; v9 D' k! t1 W; K, q% p
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
, I, V& {! i: ^/ j: Z+ Y5 } return FALSE;& d x2 v6 `* N7 I# T
7 H, L7 J) r: D4 }$ _
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
) @8 U5 l* \ d6 J5 d3 j( |
* O8 D* p5 Y1 \3 U$ b8 p BYTE aPacket[9] = { 0x2A,0 };& @* b/ d2 E/ t$ d+ ~" c
::memcpy(aPacket + 1, &phand->nItemNum, 4);
& M; J. J5 o! t5 [* C9 n ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
! ~3 d" z4 t; X$ m/ w6 @ D2Net::D2SendToServer(9, 0, aPacket);
4 O3 f( l7 {, d4 `& y return TRUE;
" z" R7 L( d3 T- @- Y' t% w2 U d4 D* Y3 s7 l5 G
}# ?8 f5 c5 _4 k! \* c6 ] c
! `% b& ~3 j2 \ static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);, A1 C; T+ T# }, o
4 J$ b$ a8 e' \5 `! B3 U9 V static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存. Y( J1 |; R* q
{9 A% z# W7 T) J: z7 e# S
D2CoordStrc mypst = { NULL };. u! y4 O0 o" K6 s" g# O s3 @
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
) p! x0 s( b) }3 ~2 h' i5 b
6 q9 _) M; C/ p4 Z$ j; f% F if (!mypst.nX)return FALSE;
# c1 V" l2 h1 l; i + W. l2 _7 y: w! K% }" }4 p
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
5 l# p2 I3 R! ~4 S
2 b+ v2 N9 G# R% P BYTE aPacket[13] = { 0x20,0 };! A1 ~# y& g% l, V: T0 k( w
::memcpy(aPacket + 1, &dwItemID, 4);5 {* V" |/ n: c! y0 x9 D
::memcpy(aPacket + 5, &mypst.nX, 4);# z, q6 c* r/ b9 S3 Y' f! }
::memcpy(aPacket + 9, &mypst.nY, 4);
- {, |8 D. K* t //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);5 v6 ?+ T$ r. R
D2Net::D2SendToServer(13, 0, aPacket);* |+ c$ f; `: `3 D# V8 ^
return TRUE;
3 @8 i* ^6 T( x. A+ \! c }
" l/ D7 Y \1 l) s( ~6 C5 R a; J, w9 c+ v5 t7 D% V
static BOOL DropCursorItemToGround()
" p# s( P- @' J- f) B9 X8 L: m: o {1 j0 C' T% H+ z2 L; J S' y
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);3 c2 z/ |$ ^: _* j c4 s
if (!phand)
# E% `* H B( k. |9 C4 z return FALSE;; H7 K% s* d/ Q: u e; I
, S6 Q2 [$ z/ c# v' R$ c5 X PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
2 n: B. ?" R5 t: W# R7 O! i( i7 I+ b7 v. z
BYTE aPacket[5] = { 0x17 };
& `- w) Z/ J8 P7 [+ H$ H e ::memcpy(aPacket + 1, &phand->nItemNum, 4);
- U0 _7 c. U! v1 B- V. S4 } D2Net::D2SendToServer(5, 0, aPacket);& N" { L0 J( ?; Q8 B h
return TRUE;
, K$ G' J1 ], [4 U% W- E
# r) U5 x7 Z# h- g }8 v7 L3 h9 o4 C
4 j8 z) k" x# e( G# A7 V static BOOL PickStorageItemToCursor(DWORD dwItemID) d; x% V8 i5 ^
{
! N, B8 I+ L! N0 ~$ p' m+ f PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
5 W- L/ _2 [* |
" z- t" J$ n1 A' h: F BYTE aPacket[5] = { 0 };
1 Z# C8 H1 h" x" q( v aPacket[0] = 0x19;1 f7 c0 R0 N) v2 w
::memcpy(aPacket + 1, &dwItemID, 4);
% `7 P( J/ r' B) m( e, p+ z //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
5 [. ~( O. m m5 W% q J( ` D2Net::D2SendToServer(5, 0, aPacket);( J! R+ W% I& O
return TRUE;
; A/ R* q$ N( N1 P8 y# l }" i. \. y; w; ~. m* M8 J9 i
* g0 ~9 H7 o4 o) ^, D1 ` static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2), V1 H9 t2 H& \# C* r+ f: ?) @: a
{ ~. q, K) V( R& \9 a: M
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);+ L2 R( c C. _1 L) g* W; P( a
BYTE aPacket[17] = { 0x1f,0 };
8 X* `% ?4 c3 L* V; O5 K& ~3 z6 p ::memcpy(aPacket + 1, &ItemID1, 4);
, t8 ? C0 q/ y! i! n+ \, T R# E, H+ @: D ::memcpy(aPacket + 5, &ItemID2, 4);! |# k( p2 j+ F' I
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);5 X3 @ Y$ w: k5 D
D2Net::D2SendToServer(17, 0, aPacket);( _+ X. y. x: G& o
return TRUE;! y% V% w1 T3 o. ~; k! R& ]3 O
}
8 ?$ b; h( l6 N6 i8 s; n# v2 ~# m
static BOOL Transmute()
, u* L, x* X6 z. g% L" [5 @ {
z& j' G/ p7 U4 E8 H1 W/ I if (!(*D2Client::ptPlayerClient))return FALSE;
, Y; F2 }" X# m. T
. T4 |* r; [; ^+ D# M W if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))$ t4 n) F( X4 Q/ u5 m
return FALSE;
, k( b: ~' x) M6 h" J
& w2 x+ S, ?/ \3 ]2 W PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);7 e- m: H5 X% n x
BYTE aPacket[7] = { 0 };
8 I9 H2 D& b5 G$ [ aPacket[0] = 0x4f;
) y7 M7 @1 n- p0 X7 Q- @ aPacket[1] = 0x18;
( _$ y$ I' L5 M& ]- B! K# k# p. X D2Net::D2SendToServer(7, 0, aPacket);+ U0 N( y8 u6 M7 T. x
return TRUE;: A7 Y9 P% J+ I# z' y$ Z9 `" T
}
, m" v; `4 g9 l# g9 f4 c- C! L};
6 r$ L$ V& x, N, I0 `; f0 _5 r5 _# |
|
|