|
|
转载
+ m$ ~4 q+ o y* P3 s自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:$ |! {$ l6 @6 Z6 V9 G
D2Client:
8 W. b7 B/ p A6FB20AE1为拦截输入框(用于获得命令)
8 j8 q0 V$ X5 y! [0 q" a6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发- K4 p) J1 u" }3 L; N
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
/ C. s1 j5 O1 H( T( `3 l+ T6FAF4230为hackmap的loop点 我用的hackmap导出位置# D) Y/ x+ Z- s7 A4 |8 t# @
2 e R. H/ _" a* o) `+ G
% x5 Q' H$ h( d+ K' G% X; n发包函数:) b6 _4 q O: x+ K1 e7 q0 j
class D2PKT_ITEM
: T' d: Q- W' ?- o' g- O$ |{
# m( o0 p" d/ b' v: K) b" B7 i#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
# k0 n( o9 f* ^2 q7 s; ~8 `#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
* r* H5 W, G3 W& x#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上; r! F6 C" k+ W7 z6 e5 e1 W5 `, M
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上4 Q6 F' }# ]0 ^" L* s- n/ F k
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
( b, G, o5 q3 g& S! ^' o4 P#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上' ~1 ~; f' k+ K) H
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
* ~& O# H2 C6 ^9 M t( M2 B" X#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上+ |$ L" T4 f0 |
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -8 n" `( _2 `) f6 D
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店( n3 M) b! S3 K1 Z- c. u' h
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
$ v2 E6 ^2 ^+ v$ z G% v3 F- @#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
( }9 @$ y5 p5 `. ^, q#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
" U" q1 Z, @, ]5 U#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上2 H0 W+ m* D- L) q3 |7 X7 R7 g7 q& P; L
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -0 t) g& O# V# Q0 u
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上$ b( m$ u) J5 {3 Z% s
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
9 Y5 w0 ?+ b5 D; o
5 t& Z9 B" B! J. V9 o, ~1 s#define PacketItemMaxTick 1502 s: m% M: r% W
#define PacketItemPickUpTick 20( W& _: h6 V* M* B; h, `
5 |8 w4 K I# F1 A* B6 O$ K1 Eprivate:
# t: C+ j% g- ` static DWORD _PKTItemTick;
! D; Y2 ]) r0 I, \ static DWORD _PKTItemAction;9 u5 g @; W% G' G1 o
static DWORD _PKTItemID;6 y1 V' e* Y' B9 d: O5 P
static BYTE _PKTPKTType;' M" I5 \* b" Y
public:7 T% G/ A: V8 d) Z. ?% W+ \
static DWORD PKTItemGetTick() { return _PKTItemTick; }4 U* }2 ^) F; P$ D) N
- O/ J% y! j* ~( U w: s! z$ O
static void PKTItemRelease()
% {5 X/ h4 ^- E5 K( \9 s' _! T {
* E9 Z7 m U& E- @ _PKTItemTick = 0;! b# O4 B5 r% C, I9 v# s2 J% A& ~
_PKTItemAction = 0;
$ [- f! [: c" }+ t8 q1 `; u; J _PKTItemID = 0;
8 U2 }! H6 V- H2 f" U _PKTPKTType = 0;2 a) p+ d5 W$ x
}1 |$ P9 h* c* Z7 h
" ]$ u) D& e' [( x0 b' Q9 e static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
/ ~. G% Q" t9 j7 V T3 T) _2 D {
/ y+ `/ ]5 X' W7 C) c _PKTPKTType = aPacket0;
5 X! V ^/ Q7 c% I1 c _PKTItemTick = tick;
% s! A1 ~0 d7 W# `+ w. d2 E. r, o _PKTItemAction = ItemAction;6 M1 P0 {0 Q# U- a2 p! l# F8 _+ s
_PKTItemID = dwItemID;
# @" q, S0 y, [ }
D2 C% @* `3 O2 t
s6 J$ }2 z. ^, ]# }9 `4 _ static void PKTItemTellW8(DWORD tick)
/ L9 f, c9 }' n, F1 g6 }% m O {
/ v1 ^; d) v: C Y1 [ _PKTItemTick = tick;
1 D! {2 {, j* X+ y5 E }
! p9 r$ c2 U- }$ t3 f1 V# e% @! ?) |) [$ x6 w, g* z
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor+ q8 _% M7 a" @% k
{
- L; r R! |2 @ if (aLength >= 8)
/ v/ ?- `. J2 f! g5 o7 @ {
+ }* F8 O4 g$ y1 K2 \ DWORD dwItemId = 0;* n9 u0 |5 D# X6 w- e/ y" Q% P/ j' V
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
$ s" G" }* g! Q6 F if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE% K" v D$ O$ u% x( a# C
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
' ~8 o* I3 Z* S8 |- }" l2 H && _PKTPKTType == PACKET_NEWITEM6 T0 @9 T& [3 G. B# I2 p# H
)
8 z s% n& n* [$ I9 T {
/ A! [) F6 x. S5 b if (_PKTItemID == 0 && _PKTItemTick); Q1 D% ?! A! `6 K
{% g6 _& T/ v z0 V( Z v6 c
PKTItemRelease();
5 y5 l& e; O( R8 U }( T! f ?/ |: N
else if(_PKTItemID== dwItemId&& _PKTItemTick)
# ]: W! L5 q, h7 T( z0 r! m {
0 H) c7 c3 w0 i" H7 P' Y; d PKTItemRelease();
/ @$ X, p4 X$ s ]! [ }7 d5 P: I* @( {. f, d7 L
}
* b7 J3 c }0 \. B0 f" O7 A; L& J - w) {: K; ^' N- J. e
}
1 B5 H- N1 g' c& H }" A$ b1 q a- E7 P. b
6 f/ M' i! ~! L static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
2 r' r, h, c8 O {2 F$ l; h# u4 z
if (aLength >= 8)
8 }" F9 [, l6 d! o8 F: C {
5 v4 l" h1 I' g" H1 { DWORD dwItemId = 0;
/ T5 ~ o; }/ Y7 C9 t memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));' _& q- Y% }8 Z! }
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
7 G! t" X- A; ~/ g8 \ && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
5 _" Y, k# J- i2 o && _PKTPKTType == PACKET_ITEMACTION( J! E& N$ s9 K# k7 h* e
)
5 p0 ?$ r# V- y/ t1 \5 C2 f {
: F! l0 f4 ^- J8 T2 `- ?" o if (dwItemId == 0 && _PKTItemTick)7 w# b& o& p5 ]2 V+ W
{
2 O5 p; t, W. a; @, E! h2 K PKTItemRelease();" @& P1 R. I( H) c: {- d! G" y
}$ n, E& x* E0 C3 A' F
else if (dwItemId == _PKTItemID && _PKTItemTick) K3 r4 B$ c) h; ~0 l/ O
{0 U5 v% `5 I: m" C+ i# [
PKTItemRelease();5 B+ _9 c* h* L' u* ]$ U
}$ H7 d" |, h% j8 i
}9 v8 l& p7 o1 `, i
- M% c. M9 a1 {9 M5 e }
7 R- E9 k2 N, K9 M$ V6 { } c K: f. ^6 J0 N i
! G; p: C: C* ]# K9 H static void PKTItemGameLoop() U2 e, C( H- c' U, R' v
{, a! v K( H+ ?& L
if (_PKTItemTick > 0)
: k6 l0 N1 u' J, B1 U _PKTItemTick--;
z2 q S! f3 L/ o, h+ _% K else if (_PKTItemTick == 0)- h1 r. G! N) H, y# O% W
PKTItemRelease();. `8 ?' @. {# g3 q" S# d8 t1 v( z
}
- w5 ]. n' G; E0 X9 _5 `: N
* r# ]+ Z! x' F static BOOL PKTItemCando() ) t# L; u4 F7 v
{2 E! a8 ^! N3 B# z6 _
if (_PKTItemTick == 0)return TRUE;: \2 a" }5 i+ D: G& Y
return FALSE;2 p* r0 w5 [7 S, F4 F9 S
}
& p2 m6 J `2 ?; C* u* Q3 G0 n" a
4 m" n, u. K ~ static BOOL BuyItem(DWORD ItemID, DWORD npcid)! w5 v+ `: R" E
{
% z$ r7 E8 k- l8 }- c PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
8 ^, Y" M+ D$ N7 ^) U BYTE aPacket[17] = { 0 };
( B5 s+ [+ c! N aPacket[0] = 0x32;
Z8 t% y k+ P. R0 M# { ::memcpy(&aPacket[1], &npcid, 4);; q" b4 N2 L9 Y; C% q
::memcpy(&aPacket[5], &ItemID, 4);
# m2 H# s; U) Q. |) B2 s( w1 ]% o //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);9 O! u% n3 ~0 @. F* |& _( f( m
D2Net::D2SendToServer(17, 0, aPacket);
$ N! ]3 @' I: t1 Z* u; A; G3 j return TRUE;
& [% _8 H" ~" `/ n l( k1 H$ u$ ~ }' _9 q4 b$ L6 B
" N& z4 E% b- f* Q( W2 }
static BOOL SellItem(DWORD ItemID, DWORD npcid)
2 V( v, V f+ [/ q! f; O! O {; @% x5 P" R! g) C7 `9 @
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
8 D8 ?) ^( U- G BYTE aPacket[17] = { 0 };
, G# D1 a# h+ x0 y8 A1 p7 e aPacket[0] = 0x33;
" S9 R% @. o9 E7 {0 C' @ ::memcpy(&aPacket[1], &npcid, 4);
7 b' I; Q: P+ w4 N ::memcpy(&aPacket[5], &ItemID, 4);
! B6 o8 U4 h' l+ }$ k t6 T' z //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
# U; T* z$ f& G/ L D2Net::D2SendToServer(17, 0, aPacket);% o J/ V# X6 }5 O$ a' o
return TRUE;& }- |- F4 B4 I0 T
}( A3 G2 n. a$ y3 K* S* o# _
3 ^5 j+ l' a- \3 p7 @$ n m static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
( o; b/ n. j+ b4 ^# L8 r. s0 U# A4 ]; ?, W' b/ h' Z5 _
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);7 ]/ g1 p6 j4 z$ C# z
& |" ^4 t) Z8 {8 q( c4 x5 f static BOOL OpenCube()' n* [3 L7 X0 T9 J; Q
{1 X! v) @! a* k( x5 j
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
6 I$ A2 m9 J; H- x6 J
# {( v- @' n% Z9 }. y1 Z UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);! E/ A; ^( |+ q# L( R& m
if (!pCube)( \4 }$ L; U/ h. b! t
{
% L" I% D: g* R/ c; h) r! S5 p pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
h, C- o( V9 z7 C6 U9 c if (!pCube)$ t3 a6 j6 _8 D3 G/ @
return FALSE;. ~0 n5 {" p' D8 _' X' K! n$ f
}
) X* u5 r0 J s+ {9 A& D/ k7 U k PKTItemTellW8(PacketItemMaxTick);
. k& r0 h7 S- X, T9 U" I; y0 `' s u3 i8 w
D2CoordStrc mypst = { NULL };& l& W5 w* \$ M2 o- y
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
' V3 d% m2 H* R: Y: m1 q1 D6 C
2 F, @. C s: Y; u6 w BYTE aPacket[13] = { 0x20,0 };7 t" b* A* z! S
::memcpy(aPacket + 1, &pCube->nItemNum, 4);( f. q7 Z$ T# E
::memcpy(aPacket + 5, &(mypst.nX), 4);
7 x- R! N( l8 U: ]4 ^ ::memcpy(aPacket + 9, &(mypst.nY), 4);9 F- X8 @4 Y! i$ R7 k, G6 M
D2Net::D2SendToServer(13, 0, aPacket);
4 V' `$ X# b6 }4 N. ^1 @ return TRUE; _& t9 `9 Y( l( l: a" ? Q6 q p6 K
}
" a2 l% |( G! u$ Y& o3 D4 o3 f: P8 I; l% U1 \5 V
static BOOL ToInvxy(DWORD x, DWORD y)* f% F- E) Y3 w) \4 C) N' I
{
+ W3 j; a7 B _$ x UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);, n* Q5 i4 _, K' V5 J& @
# O& V M1 h* H7 X7 I8 T2 c
if (phand == NULL)( q' F* ?: w' ?1 N- k2 J: @6 d0 ?! q
return FALSE;
5 o: b* m5 Y* W" z, }- k. e' ^3 G+ S b6 ]& d6 O2 S: E
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
* F" o v0 A( U' O w
- M$ n- Q$ k; k6 v3 U8 y BYTE aPacket[17] = { 0x18,0 };# h6 \2 t5 j7 U3 z- C/ N2 v
::memcpy(aPacket + 1, &phand->nItemNum, 4);
+ l& g0 k7 J$ ?3 N! O ::memcpy(aPacket + 5, &x, 4);
9 [; P, Y5 T2 _6 R6 x4 i# r ::memcpy(aPacket + 9, &y, 4);
- H6 ^0 y" L$ }/ i, X' C D2Net::D2SendToServer(17, 0, aPacket);
* C; q/ R& ` k1 s return TRUE;( Y2 f% y0 R4 i" ^* w8 U m
}* p/ ?) p) I) E& g& |
1 y1 K0 t) s2 T% G% }! W* Y- V static BOOL ToInvRandom(BOOL bBagFix = FALSE) ! g- L, Q: `, m# V B; C! u
{" c4 P2 S8 r( d5 M- d3 J# [: H3 }
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);9 `0 q3 _4 U6 a' \$ v1 Y! d* t
if (!phand)3 ]* c7 P X3 H2 U
return FALSE;- U9 v+ O4 }( |1 e' Q
int desx = 0;4 W2 R0 [* }- J4 y2 s! _' r9 C
int desy = 0;
7 j& k- E9 G' D9 b2 U if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
" K. j, ^* @6 {$ @% x$ @ {4 N6 ? U; k( h5 d
ToInvxy(desx, desy);
0 ]4 l2 J5 h6 m1 m! q) o; k6 o return TRUE;
8 {1 k! S- q: g" d' i5 u }
/ U( X- ^+ [' n4 ?, x7 K: } return FALSE;$ W2 \6 p5 x0 z8 W5 u
}4 A1 J$ ^5 k; L8 Y: A+ V1 B
" B9 P. l. ~. h0 S& [1 D
static BOOL ToCube()
! j. j) {0 t! Q# r- B- B {* w" S2 r# ~9 R; o D
if (!(*D2Client::ptPlayerClient))return FALSE;9 N; i' b: O! |% B
. m. Q) M8 I R1 G5 [; ?% d
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);8 P" @, b l& d- E) k
if (!phand)return FALSE;: }3 D' T% j2 `- X n0 l
2 {) c, Z3 n; T& W2 E$ H6 p
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块8 i' q) b5 t3 R8 ? ~8 d
if (!pCube)2 q& s, d Y. ?! B- e% B' }8 j
{' h7 k% E) w$ F) Q$ n+ @! p
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
5 w! u) {, W: x: P9 N/ t1 D if (!pCube || !pCube->nItemNum)
! p' H3 G+ @! X$ d# D return FALSE;
2 \& U! R0 W U% a$ `5 P; G% ?' f }7 D8 @4 x) _, L
, ]9 d* l$ V; a7 M$ f; ` if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))! Q5 g4 a1 E; r! Q2 H
return FALSE;; d% P1 a9 b w( ^' V5 x) o
2 f, d: H9 j4 e' E5 u5 i7 _" B
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);0 ?5 e' z: ?1 w9 U$ j8 n. A; h
. [* X+ k/ r$ w) {4 s
BYTE aPacket[9] = { 0x2A,0 };
8 c. |" B8 K( N2 }5 g ::memcpy(aPacket + 1, &phand->nItemNum, 4);0 ^) W, F/ L% J( g7 t
::memcpy(aPacket + 5, &pCube->nItemNum, 4);9 R a# Z3 `$ i# u+ F7 Q* j
D2Net::D2SendToServer(9, 0, aPacket);% H% k# u# }3 O/ b3 Y5 {
return TRUE;
]. Q: q4 Y& W+ e: R
; M& h: {7 o! U9 T: G }$ I- a0 V, z% l4 X/ c0 u/ [% Y6 }
8 I8 q% [# X) }5 D static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);6 p# U5 z1 b8 B- y v7 f
5 J5 @! w5 B* y/ j, R
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
* a" \" i9 ?6 I; Y {2 Q; @1 Y- j8 I
D2CoordStrc mypst = { NULL };
" @7 \- @( N' b5 j, J' t) x& w D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
7 Q0 k4 m8 b* H
: i I. @4 s- _& g. \. ~ if (!mypst.nX)return FALSE;* Q$ P: T+ j+ m, J6 B! y4 X) J0 ]
1 C9 Q/ r1 | w2 q: H
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
1 Q: U$ _. C/ v9 {9 }2 j" i$ A G& R& [, n
BYTE aPacket[13] = { 0x20,0 };
" w9 N! p' r4 J$ B6 W ::memcpy(aPacket + 1, &dwItemID, 4);
5 \' {; G- S0 }2 ~3 b7 r, D ::memcpy(aPacket + 5, &mypst.nX, 4);5 ^( ?$ E9 N7 `
::memcpy(aPacket + 9, &mypst.nY, 4);
) O" }+ m8 j+ G2 }4 B1 a% I3 O4 r //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);# d9 V* @2 U0 {: |
D2Net::D2SendToServer(13, 0, aPacket);; C1 U7 g+ O! l% C& u
return TRUE;
" K6 Q; o& h3 C$ Q }
$ s1 J3 z" J8 o0 C( ^3 `& g0 Q1 |% O9 ]" @8 }* h
static BOOL DropCursorItemToGround()
/ |- K2 g. T/ `+ V0 W$ x8 c7 } {! Q3 q7 M- A, y( z1 X
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);1 f6 |2 V# C% V {$ w' U
if (!phand)
6 t/ F& z" u _( |" g* k* e return FALSE;; W, X. j+ p. J# H! Y" N
# W4 @6 e0 R0 }/ S% C+ Z PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);' ?$ W4 n7 M: B/ G7 E7 `- y0 k
, V! V! C* J$ X z BYTE aPacket[5] = { 0x17 };
" U t: p7 {5 X9 [( }; b4 @ ::memcpy(aPacket + 1, &phand->nItemNum, 4);
% @, O) {- @ ? D2Net::D2SendToServer(5, 0, aPacket);
& R% c7 s+ h/ z4 i& o' _ return TRUE;
$ A; M1 n+ C7 a$ L8 f' t0 N9 o% u- q: i1 ` X- l/ L# v0 Z/ t8 a& j' U! s
}
f6 X/ `+ Y+ j! T* d5 p2 b* P, Y- a! m- C$ ]& x/ b
static BOOL PickStorageItemToCursor(DWORD dwItemID); M1 ~/ l% v- P# h" n- D+ r4 k+ u
{( M9 ^# x! W+ K4 D$ N; X- F
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
$ \% n# \8 k; N! m" J$ g
! g, l( N0 j) _' s7 L- n! J3 s BYTE aPacket[5] = { 0 };; R: h% {- a, ~8 h9 G* g" E# F. m
aPacket[0] = 0x19;" ?- Q- ?; }( u
::memcpy(aPacket + 1, &dwItemID, 4);
7 f3 [) E5 ~- t7 u) ?& ` //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
- E0 E2 b& R, s- s# s3 I D2Net::D2SendToServer(5, 0, aPacket);
1 R- p* H$ z2 ~, q' |2 V0 T return TRUE;
( k U! ^+ H' A! \' \& v }& F3 n, ?( ^) @* t9 Y M# z
- c0 l# t( Y) H5 @" O
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2) J8 _# P# s0 W; {% l
{. K' R$ [2 P4 f% v
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
+ X5 ~9 o) j+ M BYTE aPacket[17] = { 0x1f,0 };
& m/ x0 {% n9 `3 x0 | ::memcpy(aPacket + 1, &ItemID1, 4);& ~* r; e( ]( y9 p) B2 H
::memcpy(aPacket + 5, &ItemID2, 4);
2 H" G5 ~) c; s7 M% Z //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);3 ^' b& L7 J1 \2 p0 F
D2Net::D2SendToServer(17, 0, aPacket);# V# i. r4 ~5 z+ L$ d
return TRUE;* s0 y5 ^' b; s" M
}* Q. B6 v" K, ~0 ?$ v# l* a5 j
/ E9 h7 P2 `/ \9 z4 S9 k static BOOL Transmute()
" p1 j- y' \# }# G5 ^) a9 l {
; j A& {1 f/ ~$ h if (!(*D2Client::ptPlayerClient))return FALSE;
3 B6 k4 u# H5 q1 C, x' V2 \8 n. B9 F( I9 b! ~/ @; X
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
3 d! p& T2 O- e9 t return FALSE;- t$ q+ ]: Y$ L& {+ |: Q; ]8 g9 B3 j6 L
9 k& o% d% Q; y a- m; [8 m PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);, r9 p9 s& r' e
BYTE aPacket[7] = { 0 };$ v q+ U& d& w9 h. I; u
aPacket[0] = 0x4f;
( _7 q# b/ n) ]( b( a- S \& L aPacket[1] = 0x18;
6 s6 k, S' z, u$ h" |) a1 h3 X D2Net::D2SendToServer(7, 0, aPacket);
4 F/ X; G; i8 z1 O* r return TRUE;
; E4 g. K' B/ V/ O# g! m+ \, F }
; f, ~' o, t, Q1 T- G};
) o$ j: h k) Z* i
. z% d4 J) H- K" N) j+ P: E |
|