|
|
转载
6 [1 Y3 u+ X4 {自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:+ C8 C b/ x4 q- T. x) I1 }4 x0 C6 L
D2Client:
; z+ Q$ C# O& ~6FB20AE1为拦截输入框(用于获得命令)
, \* I8 h5 r9 ~9 c% o. y8 P6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发8 u, p8 J$ n# I+ o$ V
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发8 @/ X8 z0 I. p h- z0 n
6FAF4230为hackmap的loop点 我用的hackmap导出位置$ r+ i# d, F& b. G3 @/ ^$ l2 J6 F* n
/ L; h+ e* n7 }' E9 a: Z3 R. G& B/ k
1 [ I/ B6 H( D* c发包函数:
: A7 L/ d) ?( _- h* C8 @) Sclass D2PKT_ITEM
: Z8 J- e$ J4 D/ J{& E. |% T! F: }" V
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上- `0 @2 R# J. Y+ \$ Z( q
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
& l, m1 y) g) c7 C& b$ T4 k8 k#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
0 o2 m6 h# j* c; ?8 M- |7 W z#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
$ M( ?. k' S0 X S" J' o4 M# B#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
, M$ O! Q( G, O( K7 E#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上" M' r6 N7 }8 X% ]8 x+ e
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
. w T# @; F8 ^' P& ]& q' }#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上# S# [0 \1 T9 `+ ~6 C! g
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
- B' I$ Y v3 F c+ B7 G9 A#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店% b" @ d: F- V
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
, G3 [- R2 k3 g: g/ H#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
. g# y$ ?7 Z! L) e3 j#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
( h2 h* A$ f) f) X: u, t2 Z#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
# d b4 b8 Z1 y2 m) N0 `4 L#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -! w) T8 w5 ]. e6 b; H2 J
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上+ Q4 a2 q3 T9 M! [3 ?1 x) E b$ K6 x
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -6 E( [+ f3 ^/ @/ g
+ r1 P! P' Z V$ {# j- c#define PacketItemMaxTick 150( ]$ H5 H) ^; x1 _, T/ `
#define PacketItemPickUpTick 205 c& v$ H7 m! {+ c9 y. Q
) H5 w# W/ U/ z! J6 l8 tprivate:
" `8 E7 u# S- _6 w2 j- @. R static DWORD _PKTItemTick;
' E% u% ?: L& B7 K0 f# F static DWORD _PKTItemAction;0 R& ]: X6 L% r! M; [
static DWORD _PKTItemID;; v ~* P6 |8 [4 n
static BYTE _PKTPKTType;
- S0 F) Z9 z/ G: Z4 u( }" m5 K- Qpublic:+ F9 E j5 o" ?- a+ ~# @
static DWORD PKTItemGetTick() { return _PKTItemTick; }. h6 p, V5 R( u8 x" t/ ^3 h1 H" Z0 R
" ^6 o1 ]2 L/ u" a% Q* |% d9 f p
static void PKTItemRelease()
' e& I$ c: `7 v3 \ {
: S6 O2 E9 m R' z) J, l _PKTItemTick = 0;% }8 T! W) Y# y* d3 U5 A" x" k" Z
_PKTItemAction = 0;
$ C' l0 w5 h$ t# H, }6 E' }2 s* P _PKTItemID = 0;6 d" E* O$ K* O% k) r3 Z/ D
_PKTPKTType = 0;$ C& c+ T7 o( t2 ~9 O4 b( N
}
+ t3 V$ J* O# b) r% z7 {
+ ] g1 } q; g% U8 w: b g static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
) Z. i7 t- l4 G' g _( b0 T J8 O {. ]( z) b) V C! ?$ m) R% Q
_PKTPKTType = aPacket0;
0 A' l/ j9 u0 ^5 s: M# D _PKTItemTick = tick;$ R1 B S* o v3 `
_PKTItemAction = ItemAction;
( |5 w& M# h8 J4 r( F$ \ _PKTItemID = dwItemID;
& I+ L+ B% T0 m }
m' V/ B5 Q5 U' k$ n5 U! H/ h
* Z M: I3 ]$ k" E static void PKTItemTellW8(DWORD tick)( s8 e" W. \. `5 |, Z
{
2 F) t( }$ z3 T5 x; S" B _PKTItemTick = tick;) `) C) x4 ^; D& B Q$ h! C
}
, I) ~7 y* [: x/ E1 r" f6 s
" ~* }$ ~/ N' J }- c4 @ static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor9 M9 @! V6 J* \1 ~; M- F
{4 M2 G$ u: d, ]0 k
if (aLength >= 8)( C1 e8 c8 t' B( { L4 j) q' V
{
: P. R! P2 t6 a% f DWORD dwItemId = 0;, @- j1 ^1 D3 J; p' h: \
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
6 |6 n, R7 ]" D if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE3 H; x; I% k2 q! z
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE/ l$ h; H% F( c+ v' J7 {
&& _PKTPKTType == PACKET_NEWITEM/ e+ _3 k6 U1 g; C7 O7 L4 B
)& G1 W/ m: U' l7 u. g
{. U- _; ?: w! H
if (_PKTItemID == 0 && _PKTItemTick)1 r* T+ U' P- s* A- r
{
; Z0 Y1 m, Z* h. W PKTItemRelease();
+ B$ p' g$ K6 g' ^, ^2 ] }& @) y5 o! v$ m
else if(_PKTItemID== dwItemId&& _PKTItemTick)5 L' J. O& v$ U0 r1 N) J+ J! M# _& K% P
{- L6 U/ n, T4 Q6 x& \( I( x
PKTItemRelease();8 H' ] ^8 E* Y9 l( ~
}& x+ L8 h3 q$ Q/ A! h' m2 z0 l( K
}( x- Q0 u- w4 y, G) R' p& k! e5 S
0 |' E2 F' X* b7 f/ o) B
}
% I4 W7 o# ?- V- b8 K4 J }/ A( t; Q V- v% }. T9 Q
9 I+ O- W) X- I' Q static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
% h7 d% p! S2 H {) k8 r: N6 i( G1 ]0 d
if (aLength >= 8)& K1 b8 J; h( C/ Z% b0 R
{5 S, `- G T+ l6 P
DWORD dwItemId = 0;
, [, \2 T6 v$ X8 ?( J8 L7 f memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));% V5 \) q' S0 X8 ^; Y( b
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
) a& B6 | P) Y* y; n" N' a && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
2 [2 E3 I4 M- \3 x, e && _PKTPKTType == PACKET_ITEMACTION% V$ s, z# k6 g% ]% L5 o
); U, k6 ?6 G" b/ C9 g; ~
{
& w' Y& s( y3 l$ U+ W& O+ {5 ~ if (dwItemId == 0 && _PKTItemTick)
; V1 b: |+ P' C+ M+ B: R" r {; r* e( G: o8 T8 H8 a
PKTItemRelease();
4 L$ T0 o- A9 x3 E2 t& W8 c, |( c; S }7 l, `/ J1 T4 o- ^1 m( d; [
else if (dwItemId == _PKTItemID && _PKTItemTick)4 y3 v3 b& f' m6 f& z) F
{; Z+ `/ g K4 Y2 ^" w' I
PKTItemRelease();! t# R# g9 Z7 `
}
& C# M8 |4 H: {5 ~: `( C1 E }
+ ]( g, @, ^! b8 U$ n' U 9 n2 w& ~" _8 o" N
}
7 N' m+ w% G' h3 w5 R }
, v, D) N1 y" p) I# c$ x% w+ m' d; }- w
static void PKTItemGameLoop()1 U/ G8 g% V; |
{! V) U$ K, |8 l7 |! v+ }
if (_PKTItemTick > 0)- C: z! F9 I4 s
_PKTItemTick--;4 j# a* d3 q# R) H+ T
else if (_PKTItemTick == 0)5 I; @+ B, l' u1 G ~4 G. `
PKTItemRelease();2 s' s" w9 c" e) S I- ?" L
}
. `9 K1 C- g i- P/ g u7 x) w. q, C% K5 p% O! ^6 p: B' W" z/ h
static BOOL PKTItemCando()
- e, ^, m% G0 A6 { {2 C* \: [+ p/ p9 I$ O p- t
if (_PKTItemTick == 0)return TRUE;
. l# B9 K4 d' x- [2 x return FALSE;$ a7 ?, `: X( q8 l
}. S& Y: M& C# k7 C. L8 J3 b
7 k i6 N5 f. L s7 x; [# e6 ^
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
0 ~ l% P5 J6 r, f; f {$ K- r: i \) x+ C! e$ U
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);( r) _* B3 c k4 B; c9 l. K
BYTE aPacket[17] = { 0 };* d; [; h3 a7 A) ^2 y u+ W6 u
aPacket[0] = 0x32;
: t7 d6 g/ ~* K/ {& |5 N( Y ::memcpy(&aPacket[1], &npcid, 4);
1 _) E* N L8 ^2 @ ::memcpy(&aPacket[5], &ItemID, 4);
( A5 B8 W O! d% w3 Q, e) s //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
* v1 ?! V7 h* h9 u$ ?) Z D2Net::D2SendToServer(17, 0, aPacket);
5 a' ]- H7 q" ~1 X& W return TRUE;
5 C' ~, k, Y' e: m. q; ` i }. L) s5 b i Z
9 C1 e, {$ n% ` static BOOL SellItem(DWORD ItemID, DWORD npcid)
4 [1 g7 e) R0 q4 S; \7 |) j z8 d+ ` {' k6 \" c% i- O, `3 ]/ w
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);5 Z6 |* P6 c$ d1 x. |- ]
BYTE aPacket[17] = { 0 };( C- c, U1 \: M1 H
aPacket[0] = 0x33;& i6 M# S/ |3 D7 Z9 F
::memcpy(&aPacket[1], &npcid, 4);6 a8 z) j$ S: P6 G. O( R6 G
::memcpy(&aPacket[5], &ItemID, 4);
! L. V7 i- g3 v% Y' } //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
* o5 j) @% W9 ^- Q* ]; l D2Net::D2SendToServer(17, 0, aPacket);
( R2 o$ y2 ]% J. Y" {. d5 s return TRUE;5 u" p& x3 |2 S8 X
}, |. c. E( t0 J5 ?
& V+ B. u7 |) A; f% f: B9 G' |
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
1 A; S9 i# A/ Y- g
8 G$ H0 n# o7 W3 l9 C9 {3 w static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
: q' x1 ]0 F8 O8 X- o- Z* i9 J$ ^2 g6 M
static BOOL OpenCube()
+ ^4 Y p0 m0 e7 }. [2 r {
- n! ]% O# K4 u9 V& \ if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
, @1 e& B- h! w4 x! D3 y( C1 b* B
9 @, F, q. o x" G# I% q UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
; p; ?) W/ N6 s1 z, W* m0 p* |2 [ if (!pCube)' p% K/ H0 r$ I
{
) i9 s2 ?$ M6 A+ f pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
8 `( v4 h* I0 q if (!pCube)
+ @; \! I7 A, J* m6 A return FALSE;: ^' n& q3 |5 X) A. t
}
0 R J: x; U! r9 ~4 H PKTItemTellW8(PacketItemMaxTick);9 Z2 g" z; i6 L" ^" O* U
) d/ z2 N1 n! `$ b
D2CoordStrc mypst = { NULL };: l$ B# D( i) p2 B5 i5 J! U
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
/ b! K. ~9 @2 L
, T& w$ }$ Y5 C A# T BYTE aPacket[13] = { 0x20,0 };& W4 R$ ] s2 Q* f% k
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
% o! _( V5 f) T: W. c1 ^ ::memcpy(aPacket + 5, &(mypst.nX), 4);5 h8 {! f9 d3 A: Y) O
::memcpy(aPacket + 9, &(mypst.nY), 4); [; r/ ?& c$ Y" i4 X1 a
D2Net::D2SendToServer(13, 0, aPacket);
r$ l3 [* G- |" u4 x! q$ @ v$ z4 U return TRUE;
1 v4 z% F+ A; i }8 W9 V4 Q9 s/ y4 Q1 g6 o7 v
" ~8 J7 u0 j5 i$ @4 J6 } X static BOOL ToInvxy(DWORD x, DWORD y)7 v! W% T! ?$ p' I2 H
{3 D8 b4 ^ P2 p
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
: Z5 v! ?9 \/ A% i4 A
; y. T+ b; ^7 Y- {& x if (phand == NULL)$ k, z" P% y! e$ {
return FALSE;% q- Z2 n8 _3 ^; x: n/ U7 C; V
; q- G+ X/ w- j0 w
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
: Z* Z4 `( R8 E4 t
- u( _" r% A% O5 _, F BYTE aPacket[17] = { 0x18,0 };
0 i) K/ m0 R5 c$ X5 k4 |$ z0 {& p ::memcpy(aPacket + 1, &phand->nItemNum, 4);
* H1 P. P R' O% x8 g ::memcpy(aPacket + 5, &x, 4);
b. H% s0 W6 m6 @* r2 j ::memcpy(aPacket + 9, &y, 4);
' U3 I+ T6 e) \+ \% P) V D2Net::D2SendToServer(17, 0, aPacket);+ x9 p. J; G8 C/ M+ }0 z
return TRUE;; c5 J4 h8 R. C) |( e, z$ d+ Q; i4 }7 m
}
" G' I, E9 @/ Z e" x4 N2 `6 B
5 q' E9 R- j+ p2 i6 c# _' t static BOOL ToInvRandom(BOOL bBagFix = FALSE) ' K1 U( l2 l. m! P+ a
{
: a) b/ R r, | UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
2 O' r: J3 b4 o" n8 g6 [ if (!phand)
4 }1 N( q) c, {% T( P; N' r return FALSE;
8 K2 w9 Q' q: h. D int desx = 0;: S" v: O3 e- j+ h- P
int desy = 0;! U9 h* ~. J: J5 B; j2 |" \
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
7 Q% Y2 D2 l4 @ {
8 U- E5 \; O: |$ s: t) l* @8 Q$ ?# R& {4 h ToInvxy(desx, desy);
# R0 g0 n. `$ ]0 d* l return TRUE;
7 C% v" J3 {& K* \% A }, Z2 J& V/ C* t7 ~4 p$ ?) C# x/ {. H3 W
return FALSE;
0 `5 d L2 u( t+ a }1 u/ e* @5 q0 I6 Q; |
3 W' g4 Z+ O# A& T; d
static BOOL ToCube()+ j1 `/ A8 D8 F5 w7 w/ y" ~; o7 Y$ ?
{
, D3 `, {7 ~1 _ if (!(*D2Client::ptPlayerClient))return FALSE;
+ `* G6 Z# ]& S* {3 ?" ^& S# q% T& \3 w X4 I
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
4 z$ i4 e( W# T3 L$ _' T if (!phand)return FALSE;# Q, f- ]/ E$ N# t1 [; g5 Z3 j1 U
1 j# E6 p5 ^6 |" w UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
) e# E3 m+ m, [+ j d if (!pCube)9 q; B$ _- V; W% p6 X. \
{
7 O9 y' Q0 U# `8 G* Z2 ~ pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块0 D0 E( g+ ]' ?. k3 Q/ ]
if (!pCube || !pCube->nItemNum): l) F0 w0 U4 p; i
return FALSE;' D" [1 g: `8 }/ M4 j4 S2 N. j+ _
}7 x9 _5 N3 v- z
% E) F9 R9 q( W5 I6 d8 P if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))+ I- P9 m- A) I# d5 U' d
return FALSE;
" f$ O0 ?+ \! b, }' o5 _7 Z4 X5 C F! w0 O
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);: D; V$ g a; q: i' u4 M- r: p
\8 ?$ e' f O( H) V. j8 N0 D BYTE aPacket[9] = { 0x2A,0 };8 C1 l, X: ]4 a& P- K \
::memcpy(aPacket + 1, &phand->nItemNum, 4);4 B' h: ~1 S6 C* p3 l
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
# l4 J7 W) {% G) H1 @ D2Net::D2SendToServer(9, 0, aPacket);- c$ D% l4 t) S
return TRUE;
1 R* E( s! U8 Z- L( i& O- K: q* b/ k, T0 V' d$ P, J
}
! P" ^4 u9 h" F* z+ J0 ~. f3 C2 R
& ^. _- r+ `- K6 P9 w static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);8 H& t7 u" s j1 c% @
& U1 o: P) s; c+ V; f' M2 o
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
# F9 e" C% _8 g {( a9 x7 ^+ ^( h4 J
D2CoordStrc mypst = { NULL };2 j. P' L2 Z) k- r
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
4 v8 e F6 E0 I/ M4 q0 U: M. g l+ R6 S9 Y9 x
if (!mypst.nX)return FALSE;" K& b3 S" l5 T5 R8 p" ?
7 T1 N2 N- [. M* b PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);# {9 S; Z; @& C/ i. w& A3 [2 W
! }# g) Z4 w! K/ |# {
BYTE aPacket[13] = { 0x20,0 };
: y6 M: R) H- x% J. x w ::memcpy(aPacket + 1, &dwItemID, 4);3 ^% b; c2 U0 A. M, N
::memcpy(aPacket + 5, &mypst.nX, 4);. Q: F1 p5 m; m
::memcpy(aPacket + 9, &mypst.nY, 4);) ~' A0 v* \$ X+ `
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
* m! M6 [* }, S6 w$ C D2Net::D2SendToServer(13, 0, aPacket);( M9 g+ z' |5 G' ^! g4 x1 O
return TRUE;
: g3 R) X6 e/ `, J! e. Y0 i7 k( ] }! M& s6 W; m" ^. g
0 v" u; A/ P" |7 q' j' P. L4 F1 ` static BOOL DropCursorItemToGround()2 M7 g$ o9 A8 V3 ^* j- e
{
- N! F4 p) _: `. M6 ]+ d. s* U UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);8 ]9 m( B0 D( U% w% u
if (!phand)4 l( v/ C; @/ o6 e7 T& \, J
return FALSE;
$ T i9 p: l* L$ I3 T- ^* E! V
1 {4 T: W5 X8 U/ w9 H; R# T PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
2 r3 w! `, W4 R
7 z% @* m* l8 r& o/ i& d! ^# q9 ? BYTE aPacket[5] = { 0x17 };7 ^# M4 \+ @. T
::memcpy(aPacket + 1, &phand->nItemNum, 4);
( d+ L! F W6 C D2Net::D2SendToServer(5, 0, aPacket);
( D# J7 f" V+ J& N return TRUE;" W/ f5 @, n1 v6 _* o' {3 m+ ?
# ~+ E: ]9 I8 T( e
}7 }3 p+ v/ {" p& U" w X
+ F `& v0 ~1 A; N. t& A
static BOOL PickStorageItemToCursor(DWORD dwItemID)
0 V3 ~5 V- h* r* P {
* o, L, i# e5 O @+ X) ~8 W PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);* F2 Q9 X" m$ N4 z [+ }5 Z
7 d. r1 l. u6 l' @- w BYTE aPacket[5] = { 0 };1 p W) s f0 i3 |! g
aPacket[0] = 0x19;" `. Y8 S- s- q( U, n8 N
::memcpy(aPacket + 1, &dwItemID, 4);
- ^# k8 B! G4 ^( I; ~8 n1 q# _% D //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
`( v4 U' o8 C; d2 a5 v o3 d D2Net::D2SendToServer(5, 0, aPacket);* o& ^2 e5 Y! b+ l" ~' R; b
return TRUE;; Y1 B7 g* {1 X7 K7 l
}7 u% Z A" P6 L0 j. j* P# g
W, d& Z. ~% [
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
- G. j; b' G4 h' |: t! C3 _ {
* P1 `* A. L! [+ a1 w PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
( f# F f8 p# {0 u BYTE aPacket[17] = { 0x1f,0 };
. }5 _: B- E6 a5 V ::memcpy(aPacket + 1, &ItemID1, 4);
1 v+ [- e9 Y9 s6 C# q2 m" k2 } ::memcpy(aPacket + 5, &ItemID2, 4);
* c' ]4 a7 b4 a8 } //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
8 j4 y2 Z+ D' T0 X* v D2Net::D2SendToServer(17, 0, aPacket);
2 T$ W) _. o, [ return TRUE;
* v3 H* m' A' q; R0 G" R }
5 x c4 [( y. V0 J( ^
0 t1 d6 J. W M; R, [7 L1 B; E static BOOL Transmute()
9 s, @( X# L6 | {0 h# m1 C% w) n5 A0 h$ }( j l
if (!(*D2Client::ptPlayerClient))return FALSE;
' E3 b( R \9 ^- {3 X6 s
6 y" o% K" W( K if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))4 n8 k" E3 T& k
return FALSE;
5 H1 u/ Q. M, t: h+ ?4 ^" N t
* N% W, |9 S$ |; m4 y0 v PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);7 y0 N% V( m6 Q$ Q) s8 f
BYTE aPacket[7] = { 0 };5 u) t* w/ F3 S# _
aPacket[0] = 0x4f;& S D6 r: g3 s p% B/ M, \
aPacket[1] = 0x18;; F5 H) s& w0 }3 q/ J
D2Net::D2SendToServer(7, 0, aPacket);
2 J d5 T; |- C" D* d, w$ r ` return TRUE;" x& t- `- N. b) T0 H
}5 [4 g% J$ G) S& q$ I6 @; O1 a
};
" x+ C: d8 o4 |3 W3 e( ?9 U5 f: S1 y6 r' G. g7 |. b
|
|