|
|
转载
# C% B$ W& ?8 j8 z自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
9 I4 O) a! m$ ~, W3 t* ^: rD2Client:
' \& Z, H, v/ g+ \, C6FB20AE1为拦截输入框(用于获得命令)5 ^$ s+ ^# V' W& M% K
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发1 c8 N, |, f7 Q9 i8 o I1 [
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
' J' K7 V5 k, |* ?6FAF4230为hackmap的loop点 我用的hackmap导出位置
& n0 Z# J2 @ M$ E0 e* q8 T7 J! ?5 ~* r
, V) M* J/ o9 ?8 I
发包函数:, b2 ?. Q. N5 e, X v& d/ G ^6 i
class D2PKT_ITEM' x: I0 t4 i2 H. ?' j7 y" m6 Y4 o
{
. ^+ K6 [: L, x1 {- e& V#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上( Q' \ F2 p, N2 {3 {9 f% \2 c
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
& R- I( C9 ]: H7 g g1 r#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上) u- A% p$ h6 G( L6 q) F3 E) V
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
/ }; u- x2 ?3 |& j* L#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH9 ~# D: W3 @% b
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上! W' r1 r7 m/ u3 l( W! G) [7 H7 ]+ ?
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
: v4 A; a2 t5 z#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上: }8 r6 l- |2 Y' b2 W, b; q" g4 T
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
3 M+ C+ q/ Q. T: |1 K$ w+ F9 G2 {#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
8 y8 \$ C( ?) n |8 I0 h6 E#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV. O5 ^# y( B, @
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 # w9 a1 o, v d
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
, X& ?" X/ l& P$ L: O+ K#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上1 @$ ^/ j X, G$ ]1 M
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
2 ?# J& U0 E. T6 _5 Z% `5 M4 v; u) l( u#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上" [1 I0 C. p8 C' z2 }- Y% d
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -3 J' d- y( [1 ~9 k* B5 ~
) W: v' Q! @' U+ j#define PacketItemMaxTick 150; x# I7 K# \" l2 ?% |
#define PacketItemPickUpTick 20
5 y5 L6 E: Z* v2 A& c
: b9 z2 ]' ?) o3 x( @, tprivate:
4 e- d' L4 C- @- R6 _6 r# d5 x static DWORD _PKTItemTick; A, U9 q9 _9 p5 O( L4 J2 _# Y
static DWORD _PKTItemAction;
. _& l: ?- I4 m static DWORD _PKTItemID;
0 i$ O5 P. K3 b, B) Y3 | static BYTE _PKTPKTType;( e' u9 H) |/ m) N' [3 y8 i
public:( G# ~2 w, F# _! k8 _
static DWORD PKTItemGetTick() { return _PKTItemTick; }: h z5 ?7 f: y7 K G
' s+ Y0 j; V6 V) c; P$ h static void PKTItemRelease()
* p$ ?5 @% ?# }/ S {
- b# [; q Z" r3 q8 E _PKTItemTick = 0;7 e2 X9 O5 P2 o( S
_PKTItemAction = 0;" k: {8 F0 k# m/ f
_PKTItemID = 0;: G% |" H' f9 F3 s
_PKTPKTType = 0;0 n6 X6 Y) I7 s8 f* V$ ~
}
- o" h- H4 }4 B) b4 A. [
0 N+ E: F1 V2 I+ M7 A9 Z$ l static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) ) r7 S4 B7 o% }# v- |
{
3 p, Z8 _0 ~6 C6 J. u, X# r _PKTPKTType = aPacket0;( i" O* C# ^. n. r! c( x
_PKTItemTick = tick;1 [6 h) X$ i" r+ C' b
_PKTItemAction = ItemAction;6 S6 d9 \7 _$ h5 G/ ? @
_PKTItemID = dwItemID;
: B* g v/ s" Q6 H+ a }
! q& g9 }- ]0 I0 ?8 N' m1 G" X) e& Q ~* t
static void PKTItemTellW8(DWORD tick)2 T) b& g$ Z) Q5 x: q- N% X7 ~- c
{
$ J8 x+ F5 M1 q9 r* ?' K7 r _PKTItemTick = tick;
8 ~' F# M9 m4 F! b+ G2 @% E. I }7 D0 j g8 z/ L/ o! ~; u
2 y$ b1 ]1 q' `9 c# ^5 H* n$ G static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor _) P U. q2 k+ D0 V" @8 m/ K
{
# A# |- E; k; K/ N; T if (aLength >= 8)3 `" F( U. N; b+ W( R" y b
{3 U R" q$ K& `* P7 G8 [/ W! Y# A% j3 u
DWORD dwItemId = 0;8 @% Y+ l3 X5 l& r
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));: K4 V/ ?! J. I) d8 |
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
& f) F1 U" i7 h0 B4 j, l && _PKTItemAction == ITEM_ACTION_TO_STORAGE
7 k- y& I, {2 b3 H && _PKTPKTType == PACKET_NEWITEM
0 {, x( C8 i0 R# ^ )
9 T; q3 F! a" S s0 [' H {
! _& d4 h6 Y) R/ v' E' {2 x if (_PKTItemID == 0 && _PKTItemTick)
4 I; W" H; V" {; _ {; Y ]! I5 ?2 H0 n2 J# l* j
PKTItemRelease();
6 ]9 n! |7 \2 ^) `6 c- [ `8 G }
* ]. p3 e2 P9 e( l- L' M# Z else if(_PKTItemID== dwItemId&& _PKTItemTick)
2 }4 C. `1 F- g& B! s& w y) X. ~ {
3 M! W' @) H* b5 Z PKTItemRelease();, `" x& d. q+ @7 N
}
- ]) j* N+ v& M0 O' L0 |6 l8 K# r }- u( X+ \: `8 J5 n% F% S
& y" C# d5 p. e# P5 Z% z V! n+ i
}
9 M% d1 y$ {( J9 x4 ` }2 d) J) H9 q& d, p
% P) W6 M! o" x9 E. p A. X static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
0 E5 o6 L3 j0 V; L. K# w1 l; o {
. q5 c5 r$ X1 ]% y$ d9 ~ if (aLength >= 8)
/ H( F+ D* I" v z3 Q* `. ?/ v {
. n$ b$ ?# ~0 b, P3 k$ J DWORD dwItemId = 0;
' |4 L0 v0 b" R, G( B memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));, O' B9 v6 }$ L( K! {
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
, M9 ^5 K; o2 e, q && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
# Y& i/ N. s- b4 O. Z8 z2 M && _PKTPKTType == PACKET_ITEMACTION
) V2 D. [$ \, b. y: ? )6 T5 q H0 a7 c; Q9 N R2 w/ j1 ~
{9 M" O, K4 P6 h1 c' R- A
if (dwItemId == 0 && _PKTItemTick)1 t m+ [3 C1 L9 j' ]
{0 _8 R+ m( d0 \! q+ Y3 X E
PKTItemRelease();
: H/ y$ n# N6 [: ? }
) o t- g. e* M6 ^6 B% B j3 F else if (dwItemId == _PKTItemID && _PKTItemTick)
/ J# B! k0 ~% [5 X" N4 A. |8 {' U {
* n3 r# x! I( [6 ` PKTItemRelease();" n- V+ F" J9 `+ N
}
7 _5 [, f3 d8 a) k* ^ }
6 V r1 W0 [8 J+ U $ |" t: v8 W# n4 ~2 E4 ?
}7 A3 ^( S3 A/ c4 f9 ~
}
6 n# m" l; r" d" ^$ j6 y, n/ k9 X' J- o+ [) o; S. ~; r
static void PKTItemGameLoop()
: r# C7 x( `$ E m2 r& Q {
$ ^: u S1 w- ] i# b, b; V if (_PKTItemTick > 0)
/ r4 V: W$ R' B' ` _PKTItemTick--;/ J& b( P+ h9 @7 O: d( N
else if (_PKTItemTick == 0)$ G# F' {. w- _) @# V4 k
PKTItemRelease();* J8 R: l; {5 R3 ]
}& ^, S" N$ n3 f! p. P$ W2 B
( u& `& T+ q" N* z3 y
static BOOL PKTItemCando()
# L- ?# V2 p" e$ a0 \$ _+ p4 n: g. ] {6 n$ u# s9 ^# G
if (_PKTItemTick == 0)return TRUE;
" i2 o7 d6 {% ^0 p return FALSE;) y* N1 o& |3 a, F/ h4 W6 y
}
1 j* x2 M0 [* _' `" F4 `* X/ o# ]5 ^: {2 P- {
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
7 L: a6 T% R2 C {
/ o Q: @ E3 K B PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
# P6 q- C9 ?+ @# @8 A6 |8 |' u% W BYTE aPacket[17] = { 0 };
+ y, @3 U+ R6 Z+ [ aPacket[0] = 0x32;
# x2 t' W9 b' \5 V ::memcpy(&aPacket[1], &npcid, 4);
- I5 r. T, [: x+ u- ~ ::memcpy(&aPacket[5], &ItemID, 4);
5 E ]3 |' p" F7 s% B; F% G: V" V" u //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);* {# D. ]/ s- E7 N/ ]- ^
D2Net::D2SendToServer(17, 0, aPacket);
% k8 o1 r6 k! V( ? return TRUE;
- r' K1 |: m- L }8 z' V4 J' A, F1 V3 q) h
0 y7 r/ m3 R5 q4 b
static BOOL SellItem(DWORD ItemID, DWORD npcid)5 i, t+ q1 H9 y7 B1 U
{9 N) V; }* }4 Z4 p; t ]
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
5 E7 r1 v+ \1 H5 r BYTE aPacket[17] = { 0 };
3 p6 b. E) g9 O4 ` aPacket[0] = 0x33;
5 \' w5 i6 x" w. e8 Q7 R% Z' C! i' Y ::memcpy(&aPacket[1], &npcid, 4);" x C) t, X$ P* @
::memcpy(&aPacket[5], &ItemID, 4);: O* a# N9 ? N$ ^# K |
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
4 [. B' _, @( o; s5 Y: T; J D2Net::D2SendToServer(17, 0, aPacket);
0 |$ h+ ^% s& I1 |4 M: j9 } return TRUE;
! j4 w z& V% A0 i }
$ D& P0 ~/ p h$ Q: @: G. f' ]3 |
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
* x% l6 e5 O7 [/ M6 p3 c1 U2 s" F* l V
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);( N$ E' E2 n3 ]! g0 C7 I! I: ]% Z
+ K% r- |7 {* ?( ~" C7 E9 X( ~* F1 ^5 L static BOOL OpenCube()
& h1 t: c1 Y( F! u/ a4 G {
5 ~& a6 C* H( L4 { if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
. X, y Y( [- O1 J: F+ K8 `0 C* u! h9 i0 C$ {% |8 Q+ X
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);! h2 [: b: a5 C- ~: [! }/ F
if (!pCube)9 p* N) z5 J P8 C
{
3 H) s4 N" b H! Z9 I2 p$ }- a pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
/ X4 A5 {2 R% |- N if (!pCube)
9 A0 [ m! O; C9 p5 k* K& E return FALSE;, o1 S E1 Z1 z
}% \& A4 n; @" T0 E0 Y
PKTItemTellW8(PacketItemMaxTick);' g0 V# A: x7 L
* ~( `7 b7 q4 @- b( O$ t
D2CoordStrc mypst = { NULL };
9 R1 J# I' V* d+ p& F& S2 D4 |- V D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);0 ]$ C0 ?& Z7 ~ K/ S: x9 l# z
+ s5 I7 r5 Y- u. M% s& v9 ? BYTE aPacket[13] = { 0x20,0 };
( [7 W! t1 o4 e0 ?% g! I; @7 Q ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
- l3 A! I# o$ w! r$ B3 ] ::memcpy(aPacket + 5, &(mypst.nX), 4);
- b2 V/ E4 W9 a/ \4 s1 k/ H ::memcpy(aPacket + 9, &(mypst.nY), 4);3 v7 w7 T( a( _' C* |7 B
D2Net::D2SendToServer(13, 0, aPacket);
1 K3 g5 Y: P: G! d) P7 N- p3 P return TRUE;( T5 N( R4 E4 C
}% ` {3 \. }, e1 }5 } `2 p
% d$ v# D1 D7 f, ]+ Z/ l static BOOL ToInvxy(DWORD x, DWORD y), J% f* @' n3 d5 o' V8 r
{
% I/ l* f4 z* I2 U UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
2 D. o# H/ V, l9 B6 I( R4 n% J5 u
6 w O. a; @! j0 s _) o if (phand == NULL)! c4 n( P7 a3 Q4 G' q
return FALSE;/ t& H- g6 Y2 H
/ e# r2 N- ?( A) v: |
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);: ], B4 ^3 C3 k9 U* D# `
* ~& P. w( p, E' T4 Q BYTE aPacket[17] = { 0x18,0 };
2 [' A3 G/ @ J! s3 U o& ^/ M6 x ::memcpy(aPacket + 1, &phand->nItemNum, 4);; K$ i3 A: D- D6 Y1 Z; H2 `& S7 u% j2 q! K
::memcpy(aPacket + 5, &x, 4);
9 D: j0 P6 T# _# W( w: F& m7 Q+ [ ::memcpy(aPacket + 9, &y, 4);
5 K: K% i T5 s, e; V5 r D2Net::D2SendToServer(17, 0, aPacket);
& o7 a1 h* H9 l' j* [ return TRUE;
2 P5 Y' m1 l1 Q. K& | }/ I" \- N2 l P) e7 ?! h+ @
8 ]5 A4 L: d2 K2 S1 \0 U3 I static BOOL ToInvRandom(BOOL bBagFix = FALSE)
% b0 A2 n! y0 p k$ J( r {' M* ~3 _% r& U( E, _; G5 Q A! c. c
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
4 q g$ M( z! Y( x if (!phand)
5 z# i' q, z+ d3 U7 x return FALSE;8 u/ C% `0 x+ @9 x5 ^$ S
int desx = 0;5 _% j: k* i5 [7 T' ]. w
int desy = 0;" {$ ~$ {) c& N) x W5 ~3 G
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))4 {. B' b. T- \5 A2 g
{9 V0 S4 \& P# i1 ^# _, I. f, u/ h
ToInvxy(desx, desy);
9 @. q" P& Z1 s7 @ return TRUE;# [( \: B& y- G6 ~. P. P% e- r: u- `
}
' _$ t9 q- `3 S" X- X return FALSE;
1 `" l1 C: M6 y) r# ~2 N& ]1 J }- M9 ]. [" p& X2 p* T
2 t# W4 x. G3 v static BOOL ToCube()
* ?* d, g( n( o+ m- s0 ^7 B {
0 t' G+ k/ ^8 Z* W) _ c: f if (!(*D2Client::ptPlayerClient))return FALSE;2 k+ p4 @2 _% X- J) N" Q' j
+ e$ L q$ g' U# g UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);5 o" x5 f( [: \" a/ T
if (!phand)return FALSE;
# }, b0 f4 {8 R
: X1 f3 t- B. j+ w UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
4 t' l4 e0 j Z1 E) h if (!pCube)
* E9 s- J% e% K3 F G {9 I9 |7 L' S2 m M
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
& y: U" R& G; y/ R3 `0 S if (!pCube || !pCube->nItemNum)
1 U& C, {+ R$ v3 Z* ^! k; T return FALSE;
0 d" s2 e$ f$ m0 J$ O }
- F# \$ q) T& M/ D2 Q& J, r7 A, Q8 Y `. L1 w2 b
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
/ V4 s* a& o, l$ k. Y, ]/ J return FALSE;
( O) B7 X) G' p2 f1 e% N0 N1 [
% I, }6 k, @ E3 o PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
- k- O3 E5 X8 W" R6 }$ A K6 o- E9 {0 X$ W( q( T
BYTE aPacket[9] = { 0x2A,0 };* p( C8 W, e* X+ a# \
::memcpy(aPacket + 1, &phand->nItemNum, 4);, j4 ?. u2 E# E# Z3 K
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
0 P) a- B0 T \4 x' X2 _. { D2Net::D2SendToServer(9, 0, aPacket);) ^: _' P K; `7 U8 v
return TRUE;6 F4 g% `0 V: W6 k% f
$ C1 G$ O, j+ v- W; | }
( K" [6 B5 m7 {( \+ A3 M/ U! n2 ]/ I9 g( B( ?4 I
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);% m7 W8 _, d G+ }8 R
# H! A9 g7 r8 @3 [; R. c static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
{# e; o& l# M" w+ ^; b {8 J+ `* `8 R; Y) B8 a, ^$ @
D2CoordStrc mypst = { NULL };4 n3 h( [8 ^+ T- z% b$ N' E8 ^0 r
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);/ ]! P1 I1 Z. w% a, b" t7 ]
( y; ~1 y2 T' U if (!mypst.nX)return FALSE;$ \/ h/ ~$ _' L$ Y3 e7 u0 P
7 m) g. N. P6 B- X. j! O2 ~* F, O PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);- ]8 |9 z9 B& X
3 }5 @6 n0 B( c, t+ j6 G; e1 k BYTE aPacket[13] = { 0x20,0 };% Q/ J4 _ c( g" D3 m: R
::memcpy(aPacket + 1, &dwItemID, 4);
4 O# j8 R; }5 X% s& [ ::memcpy(aPacket + 5, &mypst.nX, 4);% Y: M j8 {% Y% o" Z
::memcpy(aPacket + 9, &mypst.nY, 4);
7 P: s/ ]/ n3 C | //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);* t; b+ [3 T0 ~6 D
D2Net::D2SendToServer(13, 0, aPacket);
; f1 J6 k/ K- [% u return TRUE;
# ?* W5 b0 ]: y W1 E }
( r( S. i T: w9 p" _( {9 N9 b/ ]2 a- o
static BOOL DropCursorItemToGround()
4 j, ? ` M$ W1 y {7 S: B, ~0 W" p) Y: N- n6 I
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);) t Q+ @6 f1 Q" i y
if (!phand)
: m9 `; R7 X) O+ s+ k return FALSE;
/ a# I6 ]: v# d% ]( E% E" `8 w
/ S; j7 o$ r4 t( A. Y) ? PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
, m, ]" e+ B& Z+ l' E- Z2 v3 s& C8 ^; r
BYTE aPacket[5] = { 0x17 };
B2 s; w9 O/ {& z7 X ::memcpy(aPacket + 1, &phand->nItemNum, 4);
9 j6 O& e% t. c! S, B D2Net::D2SendToServer(5, 0, aPacket);7 x1 \. @' ]1 z. P4 y8 c* e9 `6 K
return TRUE;
7 m+ ?) u5 k( X( H1 N
! \# B! H0 J! d }
. \* _# _5 R: \7 _; y. \! `; Z1 I$ }+ Y1 P
static BOOL PickStorageItemToCursor(DWORD dwItemID); m b* y& n3 ?: b# A- N
{8 n( `! A1 c& t" {
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
" V! c6 Z9 M6 z* v# e* w% P, Q, ?- R7 q: X
BYTE aPacket[5] = { 0 };4 x; i' ]9 ]% N3 C; O
aPacket[0] = 0x19;
' Q5 }8 d% j# }, ` o$ y3 J0 D ::memcpy(aPacket + 1, &dwItemID, 4);1 Z; k% ?' A9 u9 J0 G! X
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);# U9 A0 s8 c8 n. ?5 g% X
D2Net::D2SendToServer(5, 0, aPacket);2 Q: S7 L. \* E: ]5 v$ O2 e9 u
return TRUE;* t9 v) m, E' Y. \8 q+ a
}9 ~6 d0 V2 e( l$ H% x
& D9 G8 V& u: X7 `9 d static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)" O7 u8 S" E! V* f" u
{8 a- d: i @( N5 L3 Z4 o0 i1 L
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);* F; d5 G: H9 E$ ?* b' }# B* z& K
BYTE aPacket[17] = { 0x1f,0 };
( q4 |% L: ` r n ::memcpy(aPacket + 1, &ItemID1, 4);
7 r* B; C* k, d7 L! O ::memcpy(aPacket + 5, &ItemID2, 4);
& G, O( s# E8 { //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
2 o$ y# k/ M, t; ? D2Net::D2SendToServer(17, 0, aPacket);
1 Z2 U: T, h- P% w return TRUE;
/ C; x7 _! a, U p0 C& y }
0 _3 [' g! I6 @- U# A9 l5 J4 |$ `2 l6 [+ L! a7 Q. B
static BOOL Transmute()8 x* C( \) U4 Q. p8 u' f) I; a/ n
{( f* w9 W& D( y9 W+ A; r q
if (!(*D2Client::ptPlayerClient))return FALSE;& d6 N$ y7 g+ D K4 F! U" `
2 S; f+ p0 p9 o3 D0 j1 U
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
! F3 R; u: u& n+ s$ v, J return FALSE;' d" z! c9 u: H1 J- k& F$ j
" A4 V, X" s. T" C/ v PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);8 w1 ?, `# O5 ^: p! J- G$ W& E5 c' R
BYTE aPacket[7] = { 0 };
4 N2 d, @4 I7 F aPacket[0] = 0x4f;
) w1 t( g( ^/ c" R% r aPacket[1] = 0x18;8 f/ c; a( y) u; c/ v0 K4 r
D2Net::D2SendToServer(7, 0, aPacket);
; _ ]8 l; n' B) w* w. [ i) H+ Q return TRUE;. E: q6 G' j3 }, L9 f
}
. o( y+ w# F2 g" o+ d- f6 j1 x4 u- Q" |};5 k( O$ z! o1 x9 ^2 z3 U
0 k7 d: j/ t3 C |
|