|
|
转载
. S: v9 `: O# ~0 l' }自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
- W! P+ Q- e9 @! e: H2 q+ HD2Client:
' |& ?& `: z, ?0 l) I7 w6FB20AE1为拦截输入框(用于获得命令)
# Q" V3 F# i9 N6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
3 R* h: P6 {9 J3 s6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
" s( V5 p( A) C" N5 b6FAF4230为hackmap的loop点 我用的hackmap导出位置2 q1 C8 |$ _+ a+ o
( Y( x5 L4 D* }; D l$ c: N/ e" |; A3 x& U
发包函数:
5 Y4 C8 A+ Q, pclass D2PKT_ITEM4 n2 }" c8 c9 i1 n: b# f/ ^
{
* P. Y# G2 \0 A" }- P9 b#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
/ \% q. f+ F2 q N% _2 C#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多- N- X1 _5 n! A- w- K; s
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
0 s7 `2 @) R0 g+ }#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
# W* s h# U( j" r5 |8 \#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH$ S* X* M- v% D' \9 S
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
% }) _- J5 e5 t' r8 W, Z* \3 E. B#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
0 p/ A& G- |, J#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
# ?4 M7 o1 h/ U, u2 J#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
& ~# K# d' X9 J2 S v# A#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
+ f3 P5 N( E2 k0 X! u6 u#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
4 T7 G8 b3 m$ L3 a L) P7 d#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 5 X7 |# U6 n- Y4 y
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
, Q! n9 L1 |- w2 ~) G) n8 A#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
H c$ q2 Q& C1 F) R#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -; t( n! @% n" N0 V: k* { R0 o
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
" Y- Z& z' I8 \8 Y3 l/ z! E#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
7 i+ u+ s, X3 v7 I9 b
! J& V0 L- M) l$ o9 e#define PacketItemMaxTick 150
& I, A! ]' v1 w) ?#define PacketItemPickUpTick 20
) d9 ?- g% Y0 i* s- B: U
. M0 u, }) m6 ?# |4 L: Bprivate:* T7 q+ h/ A! J; ?7 O
static DWORD _PKTItemTick;
5 O8 h/ t5 E" ^0 P- a3 F8 D( n3 i: l static DWORD _PKTItemAction;/ f% c* F. P( g# L n
static DWORD _PKTItemID;# R9 H1 Q+ |' Z% W& h2 R( V/ J
static BYTE _PKTPKTType;
5 E) l0 g; B# U) W8 u# lpublic:+ i& g$ m5 X ~2 S" i
static DWORD PKTItemGetTick() { return _PKTItemTick; }$ o- A3 K1 J @
! i$ H( k* H$ U& a
static void PKTItemRelease() - C0 _" ?2 K; M% {% d+ }; v" I, ]
{
: w: N+ \% T5 @/ B2 q _PKTItemTick = 0;" k3 |1 T0 R, J0 J5 C' S+ O% ~
_PKTItemAction = 0;7 {5 w* a! R. G3 I
_PKTItemID = 0;7 V8 ~, S- Y4 ^5 T- O' Q" y# P/ W
_PKTPKTType = 0;
. j3 C1 j+ X- v4 I }8 F( N) X5 j7 u( @
9 [- |5 v$ K: N/ i
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) k" X M$ w% t h, [. U& E; L# }
{
6 @; G9 X" z, l' z. f5 f _PKTPKTType = aPacket0;
8 _" r3 b2 E4 K1 R- \! p _PKTItemTick = tick;, }% h. M, Z$ I
_PKTItemAction = ItemAction;: Q; |! N$ ?4 ]. _
_PKTItemID = dwItemID;: b: v& z& ^" c0 K% H$ c
}
/ P& G8 M- c; m# O; V$ y
% E6 P9 B: @# \ static void PKTItemTellW8(DWORD tick)
" | @0 ]4 X8 Q" s0 h2 b {
3 Q4 d0 l- {0 Z' o- P8 \ _PKTItemTick = tick;
0 |: n8 b+ m; y% `, s+ |+ G }) t3 N4 X: y, ]' ]% G! o
, b9 ~+ E3 d0 s9 A4 _/ P static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
" g) u ?2 d' I0 N, s {: O1 L( o/ k" @# M6 s2 m# f* _
if (aLength >= 8)
% g9 ]" x; \6 E1 B6 g+ b* g, H( K {% S+ F9 |1 Q6 j; i2 V0 ?
DWORD dwItemId = 0;
2 ?/ l- _- G9 M" p7 { Q memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
: V; t# V* V) @5 c, M if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE2 F" E1 O8 k8 `3 Y8 I! n: p
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
4 O' e) e5 h' ^* f, n' g && _PKTPKTType == PACKET_NEWITEM0 ~# g! z9 w9 g4 w& G
)
. s1 X/ A+ I, @; |; o3 a. b4 Z {
+ k, v/ _% b5 w: O, F' W7 m if (_PKTItemID == 0 && _PKTItemTick), a' b: h/ O6 ?" B' c
{( w/ v; W- i8 b1 _0 A3 {; s3 _
PKTItemRelease();1 w; V7 ^1 I$ m+ R6 d( y4 o
}
- R/ D) c7 v; d9 g2 H# r9 i else if(_PKTItemID== dwItemId&& _PKTItemTick); {; }! r5 \& n6 n! K7 T
{
* X/ X! ^1 W0 z! \% @ PKTItemRelease();
4 r, L2 s. v, }) p } r' S& t+ {7 z3 \" y
}: s3 j9 D' C5 e! y x
4 L" F/ ], {4 b9 g
}
5 ~: N' t) v. e7 Q1 [. x }$ I1 a$ a7 G4 |% l
' I0 `2 p, |" u: I/ S, M. A+ Z
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
# @0 G @: x- B' A: e {
+ z8 [# i1 v) Z$ q0 U5 h& E if (aLength >= 8)
$ E- Q6 Z; ?* B {
- o8 k2 M/ \8 O DWORD dwItemId = 0;3 K& x. k4 C4 s& N
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));4 B5 C' \' R9 I3 n Y
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE' C; q; b$ N- Y
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE7 F. T6 G, N! z3 A) s$ A
&& _PKTPKTType == PACKET_ITEMACTION
6 o& E2 j, L K( C% y% ^ )
( ]( }, O% [7 q, C; P/ V2 E {! ~9 _, L5 m t. L3 K- ~ a
if (dwItemId == 0 && _PKTItemTick)1 u; m: _; T) S6 b
{! S/ j0 A& G5 n$ s5 r
PKTItemRelease();
# E# X7 ~ C6 J, G7 n+ n- U }
- P" a* [ ^% K( k/ q6 U8 u# L else if (dwItemId == _PKTItemID && _PKTItemTick)( b6 {+ b" i% D4 k$ O" V
{
! [ N7 k9 `" l! b+ Z+ ^3 k) m PKTItemRelease();
- y6 t4 H( I+ V% Q3 u! E }2 {+ o3 j$ T* s' B6 q3 K. B
}: r5 u% ?: V) b6 c4 J* @5 k" ?
6 e2 B6 r- u% O! x2 c4 `. T
}
3 z+ _5 w0 ^% G& v }
1 i' m- Q n* M- r2 c0 x- V5 v( d* T
static void PKTItemGameLoop(): \4 f5 o# U# v. i( G+ K
{* A* C$ z' [3 \0 w: }7 q) r' U2 w
if (_PKTItemTick > 0)
% X4 f3 A: C- z) b+ W _PKTItemTick--;& @/ `8 w1 E O7 H& F2 [
else if (_PKTItemTick == 0): R/ a+ E5 {. b7 j3 ^4 Z
PKTItemRelease();
" b6 s! U' J, V# N4 @5 p8 r9 y: d6 S }0 D J: |' \8 Q& z
7 L7 `# |3 y( V. N$ S
static BOOL PKTItemCando() ' U; W9 X( j6 c4 [
{
4 ?; M$ a0 w' x: K if (_PKTItemTick == 0)return TRUE;* `6 m" O g% P
return FALSE;
+ m5 r1 R6 q5 e7 U }
. ~, r8 e7 f. J/ y) k# o9 L7 F+ N* _& h! ^8 G% u& g3 t
static BOOL BuyItem(DWORD ItemID, DWORD npcid)8 U. Z$ S6 v) ~! o$ i- {3 o: O
{; S' P" |- H6 |
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
A4 n& s- X9 f, U Z BYTE aPacket[17] = { 0 };6 ` T0 v( y- F- r
aPacket[0] = 0x32;; F! W3 C& c9 t9 U
::memcpy(&aPacket[1], &npcid, 4);/ _1 e2 F, Q: p) s
::memcpy(&aPacket[5], &ItemID, 4);
* ^- `6 b9 n' t- V$ f //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);. a+ C5 z }, r9 A
D2Net::D2SendToServer(17, 0, aPacket);. q9 Y0 i+ D9 v g" F
return TRUE; _0 E2 ^, L# N" o
}) B. a0 a0 ^% }9 R
5 k+ f+ b7 G; J/ \; w5 _% ]
static BOOL SellItem(DWORD ItemID, DWORD npcid)
0 ]/ \4 p1 g6 C) f' L {
0 k5 N9 Z) v1 [6 G PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);4 Q6 x; C! N3 O- I: W- F' F7 t
BYTE aPacket[17] = { 0 };
. J9 a" N, \% \6 ^0 r; [8 I0 \ aPacket[0] = 0x33;
9 `2 ~+ @0 ^8 U. J" E ::memcpy(&aPacket[1], &npcid, 4);
1 ]; I2 `( B. D ::memcpy(&aPacket[5], &ItemID, 4);
4 W" n M; h$ H# o //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);; c/ z) t0 \; e; t/ w
D2Net::D2SendToServer(17, 0, aPacket);
' a4 h: q, b! V" l' K' C return TRUE;# J6 R. }4 k: O/ \
}$ K5 y2 f3 I7 p7 f4 l* \
6 t" R% P6 [9 j* W, j& a& e
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);$ f, b% y5 C7 l l" S# b% X0 x2 \
% r# Z8 x+ C- I% w
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);' Q: l" E# o) i: L
) o, i/ c7 ?+ @. Q4 M) ^8 h static BOOL OpenCube()
2 [6 K/ R* `" _$ y: \. l$ f( | {
* w: O: q2 K% ~8 q if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
8 z- o2 `2 _3 }/ _! k* g% }) J4 W! g2 e
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
6 b! Q2 I) O# N* D6 d0 L if (!pCube)6 J, r) L6 O8 p3 O1 e
{7 T$ q1 Y% @0 i$ E3 O3 _/ Y# c
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
1 ?1 J7 _; {, w2 o @ if (!pCube)
: q6 X; K$ L; M" F. C; \& k9 ^, \2 d/ E return FALSE;
* J4 p' l7 i7 _& g' Y }
% A+ C6 v0 R: `5 X" ^9 D PKTItemTellW8(PacketItemMaxTick);
o1 Q' J' T5 a. G6 d/ d: k5 I+ n8 r4 `7 q0 R6 a% ]# |6 l
D2CoordStrc mypst = { NULL };# P/ W& L2 }9 S
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);9 N% \* i$ N$ k0 s
1 l9 g5 O) g2 {& h7 B- D
BYTE aPacket[13] = { 0x20,0 };. Z6 H5 W& t: d( H/ |8 n
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
' D- K: I. r0 }5 M ::memcpy(aPacket + 5, &(mypst.nX), 4);
* _ y! z2 H' s ::memcpy(aPacket + 9, &(mypst.nY), 4);! r, J7 O- t1 P1 j
D2Net::D2SendToServer(13, 0, aPacket);
9 e, v5 A; K9 @6 y+ h return TRUE;8 y5 t7 m* ^0 ]! q# Y) @. p
}
$ x0 ~3 m: I5 y$ h# ^
7 I. L% k9 ~* v$ i! e7 F; d static BOOL ToInvxy(DWORD x, DWORD y)6 j1 f! A8 d# Z0 V
{
/ B+ R/ w$ b7 C: V' n. x. D UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
! T& i5 J0 Q: `, r' D
~2 Y5 W& m/ ^2 \7 G) P5 o if (phand == NULL)
- G2 g7 C* H0 h3 |: f return FALSE;
( ^7 {, l/ I: Q/ D- ]" T# V, ]+ u3 D8 N+ O- ?
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
' {4 l* L& `4 q: V8 |2 G5 x
$ H# P6 [, i" B) T) Q& w% f BYTE aPacket[17] = { 0x18,0 };
6 n4 u* | @; z2 o( H% [& _4 X ::memcpy(aPacket + 1, &phand->nItemNum, 4);
) b. o- j- C+ z ::memcpy(aPacket + 5, &x, 4);+ F# i' @0 k3 F9 a/ v! q+ J7 U8 q8 ]6 v
::memcpy(aPacket + 9, &y, 4);7 }5 Z1 b8 k. s7 g( H
D2Net::D2SendToServer(17, 0, aPacket);
2 c+ X; E- b2 H+ u return TRUE;
8 M0 J7 A" V. a" g7 S7 \ }
: b9 A1 i t; r8 y- u4 ]. _, k' C1 m+ k. {: L
static BOOL ToInvRandom(BOOL bBagFix = FALSE)
- F6 f, q; y: W: N7 c {
/ G1 T1 P: ?& W9 [' O! e5 ] UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
6 T$ M/ f2 W& R3 V) ^! w" F& K if (!phand)( m [' P) w* T2 k& N/ ~6 A
return FALSE;
& R3 A' a. y. Q int desx = 0;, y! H& ^2 a9 n* K: B% Y, x
int desy = 0;
7 j1 Z9 U9 h/ ` if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))! p* P, ?3 k2 A) k
{$ i8 i6 ~9 [% j6 m1 x9 |0 x8 A
ToInvxy(desx, desy);
7 W; O1 I* _$ T& j) L- R: z8 u return TRUE;3 D; I' ?) s) c( R2 `/ c$ q
}- S8 c6 |% B5 O; g9 U& M
return FALSE;
; v$ v% p7 \9 Z9 q }
6 @9 T2 }0 A' y4 ?0 ` g5 C! [5 Z( ]% A/ {- @
static BOOL ToCube()
) ^5 a& _* s# s* ~3 K {
7 Z* s6 C" ^$ n- k/ q' ^: O if (!(*D2Client::ptPlayerClient))return FALSE;
4 {8 V9 V8 E' G/ l! n, P* A! V7 n
9 k. y; J: T8 H- X4 Z1 @ UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
* W0 f# q3 p7 Z! S( @: h if (!phand)return FALSE;! Q9 x) D( V; n: X& d
9 M2 m8 k. r+ ~" r" s0 R! U& ]1 h
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
* ^' M; Q) u! g& E if (!pCube)7 b0 Q: S* D" T n( o# t; m% j# A, m+ r
{
2 o- N7 P+ V$ ]. ]! y* s pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
! _! I- O$ W5 I if (!pCube || !pCube->nItemNum)7 P2 R+ F" ?1 E' w) i
return FALSE;
( b6 q9 l0 a" F9 `) N0 w0 } }
, I% {. p6 k( E( K9 w3 S" O
& c$ a+ i& m/ j if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
! ^! _) h& K& ?4 n [7 a U return FALSE;" ^2 N5 h k2 ?; `. c
& D9 S* P7 E; z* Y5 ~+ t PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
$ g, Y' P8 x" t, B2 z6 H( j/ O# y# }; b6 d
BYTE aPacket[9] = { 0x2A,0 };& l7 r5 P8 \( h" T& T% d
::memcpy(aPacket + 1, &phand->nItemNum, 4);
' G2 ^! b! O! T. Z ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
; {& H4 w& m+ H0 m" |4 z. H D2Net::D2SendToServer(9, 0, aPacket);
' e; U3 f) R! r7 D return TRUE;% Z; F) |+ Q$ ?2 j, A/ r+ `
( V# a. N- W4 h) A% k }
# ]9 F" H/ O8 u! Y0 ?
9 m2 G1 M5 @" l- |, c static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);$ ?0 f6 u, ^/ S3 Q
+ D+ S' C- ? @! C1 t; Y0 v static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
2 J% R, h4 N. w8 ?; }. Z {% k6 T( F- L1 z( \5 l2 E. c
D2CoordStrc mypst = { NULL };: X1 i, r" V0 g+ H" Z
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
& S H7 {2 `4 E; q5 T/ F
@3 p- e% T) } ~: C: o0 i. L if (!mypst.nX)return FALSE;
5 e8 b. f! M% |' ` % A4 E( F/ n6 h: @ G. E
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);$ P$ ]+ s) e2 J. a" R
& y3 I* Z6 l8 v0 {, Q BYTE aPacket[13] = { 0x20,0 };
. S) O5 J7 I: o2 ~1 c7 c/ e4 m ::memcpy(aPacket + 1, &dwItemID, 4);
6 _; Q% E* ~ K! e e ::memcpy(aPacket + 5, &mypst.nX, 4);& E; `6 f8 ~9 ]% i* j3 ^
::memcpy(aPacket + 9, &mypst.nY, 4);
. h+ }" z% T" B; D //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
8 d8 t# {4 C9 H' L7 s4 _/ c' P9 G D2Net::D2SendToServer(13, 0, aPacket);
$ X- Y! U8 y ~ return TRUE;7 _* a0 D8 ]1 o+ D
} Y1 c" V3 ?7 C1 i5 m4 y
# O9 m7 P" z; x8 z7 U4 {% n static BOOL DropCursorItemToGround(). c# O; S- ]" U& t) t7 E4 t
{
; [+ y) K5 \8 S( P$ e3 Y+ `, n UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
, k/ M6 B3 W7 W8 C; V2 g: B% a if (!phand)! W9 d: H( D( I
return FALSE; @. p# K: Q. U8 J7 l, Y
. b) n1 Z- n" ~# z$ |9 D PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);' W3 U0 k; M0 S2 k
$ O# o" v/ t9 y- B/ Q" @* |" n BYTE aPacket[5] = { 0x17 };
7 N. x- h5 O/ L( P ::memcpy(aPacket + 1, &phand->nItemNum, 4);1 T& s S7 C0 @& O9 [- `
D2Net::D2SendToServer(5, 0, aPacket);# Z: v9 h$ e; b! V# g& X
return TRUE;4 i2 X9 |: \1 E3 q
" M5 x, B; j1 t4 ^/ O: C+ A }
1 X1 ` I: A/ g( @4 f$ N5 R* A+ }# e0 l6 T3 r4 q5 d
static BOOL PickStorageItemToCursor(DWORD dwItemID)
8 G( z$ ?' |. U {3 z3 Q: |/ [% ?! Q s4 Z) f+ u+ S
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);7 R& T! d0 H3 e1 ]# N, w& b X# { Z
8 m+ d1 I5 u2 ?/ D" i* J" D; V
BYTE aPacket[5] = { 0 };
- m4 l# P1 U" U2 q& [% A& F aPacket[0] = 0x19;
* V+ d; T% V9 y0 G# u1 i ::memcpy(aPacket + 1, &dwItemID, 4);4 {. \, q2 U- Z+ n
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
: K; `& e- b$ u* C O9 t D2Net::D2SendToServer(5, 0, aPacket);5 H$ n1 T0 j- o" c1 y1 Y4 K
return TRUE;* Z6 T' G- F1 M" N+ {" o6 W
}' a+ R- l- H q: I5 s' L4 D
, ?1 m* p: Y* q T0 U( L static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)( W. J. w4 g. Q) P+ D% O/ U, ~
{# P3 N6 X3 v% `4 O9 B1 C& m6 W
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);( N. {. f& ]- Z; H
BYTE aPacket[17] = { 0x1f,0 };8 A$ o4 E3 l" O. k7 j: o
::memcpy(aPacket + 1, &ItemID1, 4);
2 ^& i0 m5 _5 [! a9 y8 z* K3 `- v: R ::memcpy(aPacket + 5, &ItemID2, 4);
4 U4 Q. ^% N$ K; t' j5 Y& \ //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);6 M# I8 {0 J4 x" S( P
D2Net::D2SendToServer(17, 0, aPacket);
/ u7 H: X1 a7 o0 z C0 O& J return TRUE;3 \! G8 h) }$ N
}1 R9 m* S2 y% G t
; n' C J; m) e @; `% F; y9 s
static BOOL Transmute(): g3 y6 T* r. `# K3 W
{- @. y- X# O5 e/ j
if (!(*D2Client::ptPlayerClient))return FALSE;, \4 t& M! _! l% N3 Y# C
* R- Y! L( V, I+ K, {
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))5 D+ Y# |! q- n" a3 P! m7 Q) G
return FALSE;
, Y6 Z* i6 w1 ]* t
U$ s. }; K; ]" P0 }; ? PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
- X' l$ J" [. p* [1 C$ h! M! j& A BYTE aPacket[7] = { 0 };2 T: N0 U* w. b9 ?+ B1 X
aPacket[0] = 0x4f;
6 C" {2 K' m" a1 u7 B" ` aPacket[1] = 0x18;" @4 }2 C2 m `" G3 ?
D2Net::D2SendToServer(7, 0, aPacket);. v& j' n% M, e6 P' P
return TRUE;
, a; I& n& G+ A% k( c }
% g3 J2 a+ W! @* D: w( N! C: O, c};5 U2 c2 `1 S' R' @3 V
1 H+ P& T# ~' p: U |
|