|
|
转载5 Q+ o' F# Z8 Y" ?& \
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
8 R( V; q' O* V, \6 e, L# I$ ^D2Client:* |$ Q, c6 n1 g0 N* |2 r+ w
6FB20AE1为拦截输入框(用于获得命令)
' I' B- Y0 A+ P# A$ J6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
/ Y* h% M# u, O9 _6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
% M. O0 _# K: P* U; @' T5 l6FAF4230为hackmap的loop点 我用的hackmap导出位置# y' y3 \# l* J6 ^+ K
# f8 q8 v1 d5 q8 e! X% f
5 J& }) T9 f$ x8 T3 Z% C发包函数:
/ E3 w+ f. G2 y5 X a' n* ~class D2PKT_ITEM
3 X* [3 ]0 [1 l) W{
W+ h3 ]9 R0 ~9 P+ G#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
9 ]; V- ~+ n' P4 V/ h8 \+ Z$ c#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
9 Y6 z: |6 H5 A+ }$ ?' P#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
2 z$ [, `7 O5 c! h1 k3 L% V#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
( G: C1 e g& ]1 v+ V#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
1 @ Q& r3 B. I, p) Z& ]#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上: {; G- `+ o0 M& y) m( J$ Q D
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏$ G- }7 Y: V, ^( C* A7 u
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上7 X8 |. U+ V5 F( S. Z
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -" D* r2 q5 k' X
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
$ G6 z/ P% f/ a2 b- Z#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV' i1 ^9 k1 }4 J5 q! C- z- P. c6 `* o- i
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 3 y2 I' y$ A# m9 L3 J0 X" g
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带9 z; {9 G5 @- J. x* Q" F+ w" @
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上# S6 l# M [! f' f
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
% j9 G" [% ]) Z0 M* X, D#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上3 F5 A" N/ V5 O4 U/ {
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
- Q8 I6 Z& c! c7 P ?* S+ R' k- N! R" h/ m% w
#define PacketItemMaxTick 150
# r. c) M1 o3 O' c5 L3 `+ D#define PacketItemPickUpTick 20
; }* n( l# L, Z$ N: K1 r
9 Q- W' e- f/ Hprivate:% [/ K2 v; ]. J5 V( r
static DWORD _PKTItemTick;
' X N9 U9 r, M+ F6 a7 f1 k static DWORD _PKTItemAction;+ [; C. Q1 d1 u4 h! G
static DWORD _PKTItemID;
" ? W( J5 R4 p5 V# k$ h static BYTE _PKTPKTType;7 `* A7 _5 {" R r6 E# `: {: m
public:
6 t& z3 U2 x# O* R0 J; I* t static DWORD PKTItemGetTick() { return _PKTItemTick; }/ j& d7 O2 N$ e1 k; V4 ]
1 v) i# o3 ?& Y static void PKTItemRelease() ' }1 {$ M4 T$ Y- v+ S+ Y }
{; G; Q( ]. F, ?
_PKTItemTick = 0;! l" w* [# s6 X
_PKTItemAction = 0;
" u& }5 o- w6 y1 I J+ P% T _PKTItemID = 0;
4 c1 O6 I. h- u& a _PKTPKTType = 0;
* G& {/ i# G5 m6 X/ E8 o. m! m9 A k }9 O- C8 w+ g" T3 [
7 B7 ~2 ~+ W4 g5 ^5 L. X4 t
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
+ e2 o" x8 b8 d2 \" K/ w$ f {
. _& q9 h: ^5 I! ?0 A2 O _PKTPKTType = aPacket0;
" p0 N( m% F5 \7 q, m) ^) k _PKTItemTick = tick;8 L* W" l& E; U/ t! ]9 U8 b& o
_PKTItemAction = ItemAction;) S1 l6 x+ `: R1 q
_PKTItemID = dwItemID;& P7 L7 ~" d8 b8 m: D2 k. m
}
% }# ~1 [# c* k& a" s$ i6 e" R+ N3 y) H1 Y1 Y. A
static void PKTItemTellW8(DWORD tick)
2 D' d1 k6 E) g3 c {
( w: R5 L8 k: p7 Z _PKTItemTick = tick;3 a I/ N$ z/ C) X. f
}3 ~4 [9 I+ s4 {9 Z5 J6 `. h
, g/ V; M* b4 z' r/ \3 w
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
% h4 I1 g0 Q7 k" z' R8 g {
, J r0 F) n3 W: h if (aLength >= 8); Q0 I4 o. ?1 s' E. t7 R8 x4 o
{. v: L6 p5 j. B/ q. e+ ~- h# q. E
DWORD dwItemId = 0;
7 o4 q0 S6 s* a3 p# i- f) s9 k- } memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
( ^' h4 y) ^) V, T5 T5 U. ?" p( o, x if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
" I2 [* c- j3 \. h! s. x$ p5 z( M && _PKTItemAction == ITEM_ACTION_TO_STORAGE
6 d# E) p1 b/ N && _PKTPKTType == PACKET_NEWITEM
: c% Q8 L/ j8 g+ R1 u y )
- {7 M! v6 i8 @* \. L% \ {
r) C- V! }( j0 o ? if (_PKTItemID == 0 && _PKTItemTick)
/ [; j9 K% q, W' z( f- G) N. _ {1 y" `7 a# b# x, s" u4 J8 O
PKTItemRelease();* J8 L3 y9 D6 M; l5 b2 C* N
}
4 A% X3 b. l/ S, h else if(_PKTItemID== dwItemId&& _PKTItemTick)
! }" n) V4 q2 b3 n {
1 a6 O, J7 P7 r. i' F PKTItemRelease();
7 V$ g' D3 j* W4 | }
, f6 F4 d$ B1 [0 Y f3 G }
/ M7 m% a- e' J0 {3 t8 w' a 6 k% T1 P) Q: y/ P8 v O
}
2 t Q: Z: [1 R9 ?( C' c }
) @$ @% N3 l# b- N
& l' @/ i, G0 w8 r t# @ static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
" I9 @6 r3 ~8 J7 a5 L( A- i {
( E, s) K- U1 d) m if (aLength >= 8)
; u+ R$ k3 b/ I( m# G {# M9 t* h, g# b6 L0 X6 f9 B
DWORD dwItemId = 0;. U1 X6 ^2 Z, L u4 h" _/ i5 t3 Y+ ?
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
0 A9 j' \' V3 o/ H6 E if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
* X! \+ z& A1 {# g% v$ i8 @ && _PKTItemAction == ITEM_ACTION_FROM_STORAGE, r: j* S" ~: A
&& _PKTPKTType == PACKET_ITEMACTION
0 n; k+ A) p9 T( w; P" l )
0 L. H4 L. h, `# s! V' F* \ {) \' X- Z6 b! x" w
if (dwItemId == 0 && _PKTItemTick)
, S# \1 ?4 P6 t {1 z N% @3 O) V2 v% X! l
PKTItemRelease();% j2 X9 v- m+ B- n/ f
}
$ ?$ m, S0 w$ m/ v; u+ G else if (dwItemId == _PKTItemID && _PKTItemTick)+ T) i, i+ c R9 f7 P8 R
{
0 W8 n4 |. F9 b4 b7 E( y PKTItemRelease();; a' ^0 b, N6 r
}. h2 s& r m4 e# A% h N: R5 ^0 G
}9 ] `. ]: ^& @
! N5 ~$ h7 B7 D$ C( i% j' z$ O5 j
}
: y! d$ \! A/ `& Y9 l }5 u2 L ?1 m( q, n% \4 Q& U
- G0 c+ ^# H4 | static void PKTItemGameLoop()' K6 i$ @. Q1 p' {: R; x
{
, U( m$ L8 G! }- {5 \5 d if (_PKTItemTick > 0)
+ I' j+ y$ x. t& Z _PKTItemTick--;
) @8 q7 e, N: f) Q3 e) g else if (_PKTItemTick == 0)
$ [4 p$ O+ n$ l2 Q PKTItemRelease();
0 K6 W7 D4 m" q- P }
1 D8 B- Q6 `. f1 j9 D
* u+ B! b& G* T3 d$ x; i static BOOL PKTItemCando() 8 E1 c7 O# y) f0 L! z* H
{
* @. f+ h2 Q; g& f5 W if (_PKTItemTick == 0)return TRUE;) j; [3 ?. l2 w$ ?
return FALSE;
1 Y0 y$ @) b% F# A# E }
9 H# r# g0 u8 e$ e8 V( ^; t2 o8 ~- N: R) S1 F
static BOOL BuyItem(DWORD ItemID, DWORD npcid)7 l& j: H; q: n4 A0 z
{, s8 |! z0 `/ f4 ]/ Y! _
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
1 t* B1 R; K7 Z6 e3 }( O6 J7 @ BYTE aPacket[17] = { 0 };! B5 g% Z- O O- U( F& r: T
aPacket[0] = 0x32;% k6 N* z; e" t
::memcpy(&aPacket[1], &npcid, 4);; D# d0 c2 ~ D# a+ u
::memcpy(&aPacket[5], &ItemID, 4);
# W( y) @! M8 R* R! O( R //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);4 L8 e2 `1 I3 [6 q( n7 M: r4 A
D2Net::D2SendToServer(17, 0, aPacket); a' ^: R& Y9 N8 E
return TRUE;
6 n) {# J# h$ v! N }
0 X5 i! Y2 p5 H P5 r
: H) ^& L5 u9 V* I static BOOL SellItem(DWORD ItemID, DWORD npcid), d Z! O( y+ b; ~( I
{
: | `, y) _: Z PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
! ?5 I; h1 @( q BYTE aPacket[17] = { 0 };6 h. w/ n7 l( N# z, R6 d
aPacket[0] = 0x33;" ], m+ s8 N% x9 @3 K8 C1 X
::memcpy(&aPacket[1], &npcid, 4);" B8 ^' Z3 Q C0 f& i- F; Y
::memcpy(&aPacket[5], &ItemID, 4);
5 |' h% P) C5 Q$ C' b //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
: w3 z6 Y5 Q* N/ [0 _2 F2 e D2Net::D2SendToServer(17, 0, aPacket);
+ V% {; ~8 D& j6 e) Z/ M: R. x return TRUE;; V/ ]. R8 b3 c4 r
}5 v* h$ p. Z" V; Y# k
3 C7 b/ R% r( z6 c) A: q static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
3 c& c- e3 W7 u, n! `8 m& r( Z9 B
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);8 C9 p" Y8 S4 i8 K
, v$ r/ g$ v% g, N/ v& h) q d
static BOOL OpenCube()3 ~6 t3 y0 z' g4 R9 T7 a- w/ d
{, \. U9 Y7 q: g. {
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
3 b+ m- U% o4 s" u' ^9 X5 U8 v
/ n- O/ M% d, ?/ h. v) M8 [ UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
# V. O; r# O9 U" u% p, }& C5 r if (!pCube)
( O9 f, S0 L* a* j2 F6 m {
" M" t! m0 J5 c7 _2 I$ C pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);2 F" k C" p; |, H; z2 \
if (!pCube)
F* B J) t, |, U2 V1 g1 z2 I return FALSE;% z/ Q" ^' |' b, \' Z4 E- s1 e* e& _
}
3 M' e* [8 ~) i PKTItemTellW8(PacketItemMaxTick);6 ^8 B6 Q4 f7 K7 D
6 z$ t) p' z/ g0 k) [" Y/ A ]
D2CoordStrc mypst = { NULL };
6 S! Z/ o$ s/ @* c( K3 K D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);5 l( s3 h+ m- \5 B
% s6 S, p3 Z+ C, {# q- Y
BYTE aPacket[13] = { 0x20,0 }; O; `! o$ K9 L$ b# W$ }) l
::memcpy(aPacket + 1, &pCube->nItemNum, 4);) n- Z( m$ C! J1 W4 c9 A, n) X
::memcpy(aPacket + 5, &(mypst.nX), 4);$ Y) k) w T0 y2 V
::memcpy(aPacket + 9, &(mypst.nY), 4);' T! [* w6 } U4 H: T9 Q
D2Net::D2SendToServer(13, 0, aPacket);) p7 ]$ L p( _$ J1 B* V
return TRUE;' y/ R% ~) } l v# e
}
7 t6 q4 T; c5 ^4 p$ f4 u7 u! z+ Y% O/ n& v% H x6 a; `
static BOOL ToInvxy(DWORD x, DWORD y)& C' X& |# f* q% S8 N$ G
{ E, F/ \3 `4 i1 C' L6 e
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
! C( E! d* H) r# N5 E9 G
- Z& @* U# H9 [$ W9 F' H if (phand == NULL)4 d5 R/ U5 x; ^: K" _/ D6 t
return FALSE;; G6 D" U+ Z$ z; i5 Z2 w4 t
2 O! @6 @. a& M0 [( N PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);+ H% D0 g# F* B, c ~
& t$ l7 n& ]1 s" G" v1 m
BYTE aPacket[17] = { 0x18,0 };
9 z3 S% c: U1 [! {4 h1 S ::memcpy(aPacket + 1, &phand->nItemNum, 4);$ O4 M6 M0 W1 J7 R
::memcpy(aPacket + 5, &x, 4);) G2 r0 s" `8 i7 B
::memcpy(aPacket + 9, &y, 4);6 H/ w5 b" j( v, T( k- X" j
D2Net::D2SendToServer(17, 0, aPacket);
7 ^) ~& Y7 Z+ f5 ` return TRUE;4 t' [# [: b2 N( o' L' |! K- U* J
} |1 U/ Y9 C. ]3 Y, g4 z3 v
: y9 u ^, @9 [: N7 A0 S" m
static BOOL ToInvRandom(BOOL bBagFix = FALSE) * T) J8 S- L- k( V
{
' b8 C0 Y2 {' h UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);- v/ l _, c( a$ s0 }& B2 a8 N6 o9 M# a8 \
if (!phand)( W+ j R% \# ]1 Y# S, P- s
return FALSE;" }2 s: l' d8 V$ C) G& f) E0 c9 s
int desx = 0;
# [: |( d' _! s0 n! K int desy = 0;
* U4 g: I+ O- s5 Y2 { if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
+ F2 {# ^% P6 C" U {
5 c* c3 ~8 n# w5 a3 G ToInvxy(desx, desy);
( ]# m: |6 u9 S u' p: e return TRUE;. j9 H+ k) \2 t' [. |5 H
}2 n; J8 N" b& @9 L. B
return FALSE;0 o5 S6 r4 y" m7 b8 Y6 I d7 E; r
}; ^5 q9 H, r* ~$ n1 s! x
! C3 Z. P1 b- R k0 t, N/ B static BOOL ToCube()$ l& w$ h% j6 b( `% @
{
* n7 k% S. t% s/ V# f" I5 M if (!(*D2Client::ptPlayerClient))return FALSE;
" J6 F2 K5 ~' D7 L2 }" z0 w5 q5 F* r/ \+ p8 @ B3 s, Q& s4 ~- a
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
4 {2 s- [+ J( e- K3 ?5 a if (!phand)return FALSE;
8 Q6 Z- T7 M* V! l/ T0 O# [4 [/ a
( @' f- \) q3 V! j9 ]+ d: z UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块6 T3 w" e1 d3 v3 y r
if (!pCube)
/ O, `: ?2 s; A7 X& ~+ l6 m$ e {
5 S9 i! B3 L/ H+ I: _* e1 G$ @ pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块( S& I2 E& ^4 i9 {
if (!pCube || !pCube->nItemNum)& M& ]$ A5 _6 S, c! V
return FALSE;
; l) B7 e! }3 y$ Z5 m4 n1 q! Q5 O }3 g( ~) C' k: F2 m9 S
- F( Y: H4 _$ d P8 \ if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
9 g3 f% p& i) @) C. D, l return FALSE;& L3 [! B" z2 [) U1 ~; ]/ e
! k, x+ S6 ^1 t- ^. I; h# X PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
, c6 j7 p1 U: o4 ?# v4 M9 p& X! \9 \0 h6 W1 A g$ b' U
BYTE aPacket[9] = { 0x2A,0 };9 C! h. o3 J4 v- n i. C
::memcpy(aPacket + 1, &phand->nItemNum, 4);
* Y H3 O/ j. O0 F ::memcpy(aPacket + 5, &pCube->nItemNum, 4);: G4 K4 r: T2 b: B9 @
D2Net::D2SendToServer(9, 0, aPacket);
% [; t" o6 B! i: M( M3 w, Q- m return TRUE;. H' P1 W) ]6 x/ B- o R
$ P5 t: {* v- U# [ }! K/ b1 n* r) Q# _/ h
l3 [( ?# \, T7 B9 A
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);# }/ a6 R$ C C; l7 W6 @
5 q! k6 h, w6 ?$ ^8 y( A static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存 V( t1 k/ p. u1 G7 u; w
{
: V- b% y! t" E. f D2CoordStrc mypst = { NULL };9 o0 W1 u0 y# B# K- A# m9 O
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);/ a2 l! C) a& L* e2 E( c
: E9 d; y2 z6 x! z1 }( J
if (!mypst.nX)return FALSE;- d3 | x8 T- o& e% P
( V g1 P S6 Y0 `4 L$ M% \" h Z6 H PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);: t& A( P4 y& d- ?# d% i$ Y
" C& c" M7 i: z3 p0 v* O
BYTE aPacket[13] = { 0x20,0 };& A6 V! [. n1 p2 U0 R) {, D
::memcpy(aPacket + 1, &dwItemID, 4);- _2 v" _& L; g0 N8 l
::memcpy(aPacket + 5, &mypst.nX, 4);
" e1 w U: O" J7 C. D6 X ::memcpy(aPacket + 9, &mypst.nY, 4);
& A9 B3 ^( B) D" |& J. t& ^ //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
6 _: H/ u1 v7 j- N0 z6 u$ q D2Net::D2SendToServer(13, 0, aPacket);: t) l% S! U" n q: E7 G5 ^
return TRUE;
% v: Y7 ?. `5 d- s2 g }2 f& h9 t+ M E* U7 O
4 t: Z* _. C5 S* L2 }: z' k
static BOOL DropCursorItemToGround()# Y' x( B. _) }. p1 T& m1 B8 g+ ]: Z
{
2 Q1 ]! F. C, J UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);# }& e4 V" C. ~0 c% k; }! U
if (!phand)
- \0 G4 t& ~9 D7 z4 M$ S return FALSE;5 E( c6 {# c# j3 _# T0 t
" j1 |6 o/ F) n5 D) m! y
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
5 Q3 B0 z; b6 y2 _# v- g9 K: G/ R
BYTE aPacket[5] = { 0x17 };. ^0 Q6 _ |- `9 x$ y" @+ s( i7 d
::memcpy(aPacket + 1, &phand->nItemNum, 4); H( p( B- }4 I
D2Net::D2SendToServer(5, 0, aPacket);0 R* c# o! k9 N- n8 k/ m S X9 V
return TRUE;. c2 T" f# a1 T; V2 w
; H+ y% ]0 t! V8 v7 V
}7 L8 T3 R$ A/ Z! E
4 u! n$ F2 f- a static BOOL PickStorageItemToCursor(DWORD dwItemID)- }, j" a' x* H1 v0 J
{
5 k- P9 O0 Y0 G7 O6 P PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
# y6 e, u$ R/ Y* y: h
/ L0 s# l# ^ C4 q BYTE aPacket[5] = { 0 };
3 i6 T& i: b/ k& h! C9 N* Q aPacket[0] = 0x19;. q5 ` Q- ~8 d5 ?) V/ O: t x) |
::memcpy(aPacket + 1, &dwItemID, 4);
* o9 B8 `$ Z( u, c1 R2 k2 L //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);2 A- M6 y& x* c+ x6 p# c3 ]( ]
D2Net::D2SendToServer(5, 0, aPacket);, F u, H: a4 d
return TRUE;
* _+ J- m- @2 v2 }. V3 Y }1 C( \, a5 i/ X" u H/ A
2 @. E3 v+ J9 Y* V5 [7 W# U static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)/ G8 {" k [5 b: K [& r
{/ g2 a, U- b8 Y4 [
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);& I: [% F- H1 B! |
BYTE aPacket[17] = { 0x1f,0 };
R: P3 {$ N% o. z8 q ::memcpy(aPacket + 1, &ItemID1, 4);& o7 b4 Z: s! t* \7 Y- s) o x
::memcpy(aPacket + 5, &ItemID2, 4);
9 N7 k+ ^8 G) Q+ }/ T- Z //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);! Z6 L2 d9 _4 x# s6 ]/ M
D2Net::D2SendToServer(17, 0, aPacket);
* V& e5 c- T! a/ i8 O* h' q* G& q return TRUE;* Z) [8 L, p2 }& r
}& l2 v0 w6 f& p- z
, E# W E( C. N, N static BOOL Transmute()
9 Y# u6 j8 L9 w4 R& N2 z4 q' Q {* x. h: o( \# n* d) S
if (!(*D2Client::ptPlayerClient))return FALSE;( [$ o/ r8 ^$ S% J" I" ~
, L4 h/ G" e* S! n. R6 S if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
7 z3 t8 X+ d9 D) ~3 o9 r! ] return FALSE;2 ~# {+ t& J! f& [; W( W7 o! S- N
* D0 y; d, F4 |# @; c( `
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick); q0 V3 ~" Y# N' k0 {
BYTE aPacket[7] = { 0 };- d3 L% s7 W+ C# i, p7 x& p
aPacket[0] = 0x4f;. x) t3 E/ B6 s0 U
aPacket[1] = 0x18;
; C% K. {+ g( D0 Q9 g" ~ D2Net::D2SendToServer(7, 0, aPacket);
. A5 E- }+ {# ]* A) m% i/ C return TRUE;; k9 u$ }* E. R4 z: c1 {
}. W( p, g: D: A* J% r
};
6 q w8 B/ w- D( f
! j* G |: ]7 u0 s2 W# K7 [ |
|