|
|
转载
$ v; \9 s: \' C6 E. m自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:0 m) |8 Q) w" W9 f# K: Z! g
D2Client:
! k. M6 P0 V$ j- k2 T. v6FB20AE1为拦截输入框(用于获得命令)
$ G* L1 n# ?6 |7 G; P6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
9 Y6 I v- y4 V0 w3 y6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
& v ]. i0 a! R, r4 e6FAF4230为hackmap的loop点 我用的hackmap导出位置! j* I5 n; b( C4 X
7 ^6 n* ^- l5 C* w& y5 K Z1 A+ k( n0 c* F% N2 ~
发包函数:
! _% O6 f# y- [- |; [5 Eclass D2PKT_ITEM. F( R+ V+ P2 l9 I# V% c0 R5 y- j
{5 @: k+ p4 Y- F |4 Q( q+ @
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上. \3 H+ W' s/ h
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
+ e4 Q3 E- }% B1 F* [' l#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
8 F5 h7 y2 I" m {#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上& V1 u: y- S. {3 E- W$ Q! ?1 z
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH! ?9 V& d- X) L% O/ c1 f; L
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上3 \) ^4 w( ~, Q7 o/ K
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
6 t+ _* R8 I; S4 B% B#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
+ c; v7 D) m* U8 E#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
/ r4 Q$ ?! o7 m: \) }: F#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
6 R p) b( _& h#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV8 V( p4 V% G5 u/ z
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 0 l% f) v% G+ }9 ^5 A) Z0 _
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
) ^% ]: n; s4 [% v. ?#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
5 ?1 b Z4 o4 A0 V2 |/ W5 h#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -+ f b# u4 N1 P% [$ r
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上. y0 O) }# u; R2 W5 C8 V& d! }* f
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
3 h: t+ P [1 E) G. K* Z- B! A. {6 e/ p4 K8 f% B
#define PacketItemMaxTick 150# s/ F. Z* s# d7 R9 `
#define PacketItemPickUpTick 208 O1 a8 y; R" J9 x% M
# O5 L* g5 n6 {2 C
private:
) N& ~+ Z# b) b% x static DWORD _PKTItemTick;
6 {# [# [0 ~ C+ T' ] static DWORD _PKTItemAction;
, ~# ?6 g. V( T$ W% ^ static DWORD _PKTItemID;5 R7 |$ @( ~; w" ]
static BYTE _PKTPKTType;9 _; [: O8 [9 h: I2 _- I* \
public:9 N% J4 o4 f( S* h4 y; z
static DWORD PKTItemGetTick() { return _PKTItemTick; }* s3 e& P- z) @4 d7 s' [) Q
9 c9 T0 C1 g1 V3 B4 G2 q p
static void PKTItemRelease()
, T: Q0 t3 w& d: w7 o' v {
, P; f9 v! S6 c6 R O _PKTItemTick = 0;/ F9 Y2 ~% [" z. t! c
_PKTItemAction = 0;$ {: l% J' X/ K6 u6 w
_PKTItemID = 0;
; a- c- H5 _0 f, g( v; M _PKTPKTType = 0;% D# s6 U. y+ r8 ], ~: e3 E
}
/ m9 C: t! j9 M: t# {
% |) A( A+ |5 _" [* Q8 ^ static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) 2 z3 |% P/ A" D* t; c$ i
{7 |4 U) \( Z1 ^3 F
_PKTPKTType = aPacket0;; H7 T4 Z* e' X3 E" } }
_PKTItemTick = tick;: S7 `: f7 a3 u% ^ G, x
_PKTItemAction = ItemAction;3 e7 \. N6 L: T$ Z( _
_PKTItemID = dwItemID;, u2 p6 Q% {7 k; p4 y4 E7 e
}6 y, B! L) e- Z! V
# r; |3 E+ _/ \9 V
static void PKTItemTellW8(DWORD tick)6 L. z' N$ p' _: J( |4 x) Z
{2 L* \9 E% w5 }* `8 f( V
_PKTItemTick = tick;! G/ l! h9 m, U8 X) |
}* \$ o3 e- i9 o9 p e
/ U' z+ \3 S4 ~% I) Y$ }/ ?( x% F
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
+ B) u) k9 }$ g {! R, ?* }( C$ [; x" v& Q0 e4 ?+ Q
if (aLength >= 8)* h- G! _( \* g Z, w
{% q' j1 P) E7 U7 [
DWORD dwItemId = 0;& m, t" i |3 f/ v9 ^1 {- C& g
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
, Z3 H6 N7 e- G, F. y2 w/ s if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
3 O7 O, o2 n x q8 j- B) r && _PKTItemAction == ITEM_ACTION_TO_STORAGE3 I0 ]7 |! ~3 ~9 z+ ^
&& _PKTPKTType == PACKET_NEWITEM
' n T0 U) Q+ Q5 D )
( P7 ]. q8 v3 a; e I {: y2 N( ~# C5 R3 s! d! R
if (_PKTItemID == 0 && _PKTItemTick)
( q$ O( R' X7 Z% b/ X! V. U% l7 D. T {
1 ?8 [. _% K7 g3 n% w% `0 M PKTItemRelease();
7 e9 c* A z; h& V8 g' y( ?, s3 C }
. A T9 r6 W; H' j+ ^ else if(_PKTItemID== dwItemId&& _PKTItemTick)
4 e3 s0 T6 q; Z {
; s. X& N7 k4 g4 M T PKTItemRelease();
4 E( _* Q+ o3 i7 P$ N% F }
/ @, a' `! a0 _ }
4 V1 E; x; n* W! I) U
/ O# ^; Q* z& u$ Q) [. } }
( n& V! B# `1 F: w' |/ K }
0 Q$ e' h2 l }& q7 |$ A1 c; S! L) g/ q: R
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
7 P4 F; p; k' M {
& b* f- W2 @! E. I& B# S O1 W if (aLength >= 8)
8 J3 q% x X8 c$ r' r {
7 v# r/ y& {% L/ t; k, o DWORD dwItemId = 0;
# h' z4 q; I$ a g3 V/ M memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
5 i8 e2 Z) W6 g: t if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE, N- q2 O8 [% P
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE' Y. j7 h9 S( N0 C- X% g
&& _PKTPKTType == PACKET_ITEMACTION3 o' w/ q1 E( F4 o
)# Y0 [# ]2 d1 k: v
{7 a* R( c2 B* P7 g/ F
if (dwItemId == 0 && _PKTItemTick)6 _% p2 z8 P, j: i0 G( N0 W
{% e. e2 l- a4 k& \4 ]
PKTItemRelease();$ S. a% ^- f4 M* D1 R6 g; a/ M
}
+ U4 K1 ^3 T8 l, t& r else if (dwItemId == _PKTItemID && _PKTItemTick), b/ s3 \% }; i3 x
{
. B8 K C9 ~" p PKTItemRelease();, M$ K; {% Y2 @, b) p7 B' e7 W
}
5 [+ z& F$ f) ?( N& ] }
( a9 h, W8 f. G2 w% Y" D+ _
! @/ q2 ^- b/ e. m4 d }0 f2 r5 h5 j$ t
} }) k' \, I" ~1 d4 s
5 K+ K$ f& F% J1 r5 D
static void PKTItemGameLoop()/ W# r, t4 ?& [; d2 t6 ?
{
" f' z3 }6 L/ i' I$ p* x if (_PKTItemTick > 0)' R0 C A1 ]' N$ h0 @
_PKTItemTick--;7 G3 z$ F0 D! R& _' {
else if (_PKTItemTick == 0)
5 B6 b! S( v) `* X% ] PKTItemRelease();
8 y5 f0 p0 @ Z- Y) ` }; f9 H9 |% A! R2 H4 `8 N+ [
9 Q3 l' f6 {% |+ k& `- ^. {/ A static BOOL PKTItemCando() : j5 d# [3 g# ~
{
+ |6 I$ k; Q. ^" q; D if (_PKTItemTick == 0)return TRUE;8 n0 D: K" v1 {3 x, O, V
return FALSE;
" h( a+ V2 a* p# ?* U5 v. V }
3 P; ^0 q" |6 \! ~( k9 i2 J8 |" m& s( d# x9 {. }- H4 D
static BOOL BuyItem(DWORD ItemID, DWORD npcid). T {; x1 r4 w1 \! `/ g" l
{
; Q& o0 V; Q8 b. f) D, f7 u PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);1 b: O9 q. X, n6 }% _
BYTE aPacket[17] = { 0 };
9 y! F% @$ B3 \* G* w aPacket[0] = 0x32;$ |0 q9 P% L! R/ d1 f
::memcpy(&aPacket[1], &npcid, 4);
4 q. K2 _6 X% ^: q- E ::memcpy(&aPacket[5], &ItemID, 4);
1 l6 h2 i2 e. f% m9 u2 {% u- r //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
+ ~8 K3 p; a& s2 {7 _( B( @ D2Net::D2SendToServer(17, 0, aPacket);4 {' _6 S* { k$ x1 V; ^9 {6 q9 N
return TRUE;2 @) F6 O0 O+ n, Z' [$ g# {5 Y$ A
}. L# m( b i0 p7 a
5 e# N+ C9 D, Q$ s4 \* G
static BOOL SellItem(DWORD ItemID, DWORD npcid)
1 C1 ~8 d! u! x/ s) t3 { {
2 r4 y5 m: B: H2 z+ @& R PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);- S1 o* j4 ?' z+ J7 T; g6 |9 e& d
BYTE aPacket[17] = { 0 };
4 c8 P, }9 h2 U9 C$ N aPacket[0] = 0x33;" g$ ?) h& v5 E9 b. H/ R" A* m2 n
::memcpy(&aPacket[1], &npcid, 4);
, ~, l9 A: H6 j3 E* d' \& F" r/ ?' \ ::memcpy(&aPacket[5], &ItemID, 4);1 }& s4 V- r7 Q+ A$ D7 E! U
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);% h$ M! |5 U9 z; G! n. `
D2Net::D2SendToServer(17, 0, aPacket);
l# G _ K7 W* t# `# C4 B- A, V return TRUE;
. C: ?. I1 f. \ }+ d7 t) u& i) ~ ~ |5 j; A
- W6 b# r* I$ f# ~- q static BOOL Interact(DWORD nUnitId, DWORD nUnitType);" I7 ~0 `$ p% |7 V
0 J' S8 l0 ?) f1 E) E
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);" n4 [5 b' E5 V# S. F0 G& j
( a+ |8 \- Z6 K static BOOL OpenCube()
9 C3 F6 ]) E5 z6 G5 X3 J1 M- u; w2 _* a {) h# `' e' e3 \1 n
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
: Y5 @; R& q4 t9 Z1 s) V Z9 J5 u4 G4 b- @% K% i1 {
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
3 R7 O3 C0 ?, I* Q if (!pCube)% k% w$ S# ?8 F8 L: J( ]% R
{
$ s9 t- u4 E+ {8 [ E' @$ y pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
! o# a. C3 p% C; ]; p5 I- A if (!pCube)
% I" J+ E3 G2 l; W( G( m0 z' U3 o return FALSE;- y" Y( b- P! H6 I7 a
}
' Y4 _4 P7 o3 Z5 k$ x PKTItemTellW8(PacketItemMaxTick);- A+ v' j" R" K' i
/ E! `* o$ Y* x; _9 g D2CoordStrc mypst = { NULL };3 v# z& {: V# Q
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
+ d; z) } J0 v6 h6 P( s% c3 ]6 a! Q# V Y; r# [5 ^% o5 |+ R) M; }
BYTE aPacket[13] = { 0x20,0 };% ?1 Q, U2 m% u" W- B }6 _
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
. Z" B* w. ?5 K8 H, R0 b3 f ::memcpy(aPacket + 5, &(mypst.nX), 4);' @1 L+ k* B) ^ x
::memcpy(aPacket + 9, &(mypst.nY), 4);3 b* E) s d# Q0 Z# C1 M- g
D2Net::D2SendToServer(13, 0, aPacket);& ~4 H/ n% A! B, } F$ n# E* A
return TRUE;9 D( @" j" V" g5 s5 z
}- [0 z, v4 ?9 }, q* q
8 y; N8 Z, e! C4 F static BOOL ToInvxy(DWORD x, DWORD y)
2 l. I: B j3 v( H( d6 p: c {
$ }( x0 V4 a8 {4 J G* A UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);9 E5 s, |8 F9 t; ?$ g
2 w: S2 k6 y$ ?( b* w: a8 y if (phand == NULL)
; n3 r% x7 p8 b; f3 ~9 l( U return FALSE;
' r* c. g5 o9 M, f, ~8 B
8 F2 R1 Y- i0 K* e( F PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
, U# N' D" d; w/ R) p0 O1 Y( ~
4 ]: G% g i0 R. F. B4 a& ] BYTE aPacket[17] = { 0x18,0 };! Y7 M) F" A* u, d, H
::memcpy(aPacket + 1, &phand->nItemNum, 4);" O$ K0 _8 q% N! K: a
::memcpy(aPacket + 5, &x, 4); I$ U( _- _ u
::memcpy(aPacket + 9, &y, 4);1 e3 O9 Y, r% F! i& k' v0 C) D: B
D2Net::D2SendToServer(17, 0, aPacket);
+ e2 `3 |, H0 T" h4 w: T! n return TRUE;. s( r! N1 B$ B# K
}
& `6 z& g+ m$ I* M
* v; z. l2 d( j static BOOL ToInvRandom(BOOL bBagFix = FALSE) ' \, B9 }. {4 O9 s
{% R; h; k3 _) J
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
+ Z; j( ~. d7 c0 A _! O if (!phand)+ Q" @5 G9 Z) c! C1 b+ Q5 l6 @
return FALSE;* R; A4 c$ J4 h$ g! Z
int desx = 0;
: ^$ c# g% y3 ~& R% E int desy = 0;1 q2 O, @5 n5 b1 u1 T
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix)) X& v, l( j5 g
{
: E$ B) i9 Y* q. i ToInvxy(desx, desy);
( ~' l: k5 y4 F$ p( R return TRUE;
[5 u0 P8 R+ L y2 O }4 `, ^1 }8 q9 D3 R2 Z8 V1 y
return FALSE;
. e! D- P5 q0 o1 w. J }8 z/ u* F6 s5 R
- ]' k9 C( w$ g& q. B4 h8 G' N* A static BOOL ToCube()1 x7 S9 Z4 H( s/ i/ l, Q$ e9 ]
{
! c8 ? c* e3 Q) P- @ if (!(*D2Client::ptPlayerClient))return FALSE;8 M9 b* U0 B: b8 y$ N; P; u8 D
H2 c% B' G: W- y UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);- a0 E5 a& y' p# i- y
if (!phand)return FALSE;
1 r: d1 u# V F! f% A/ l
1 k5 K' {0 C8 A. @/ _ r UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块7 j: @5 w- V& c$ ]- r- \9 G, P
if (!pCube)3 y, ?( A/ y4 ~" M3 {: Y ~
{
. Y" g. b7 S( F) o0 K9 h6 c7 { pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
6 b; v; Z# G) X if (!pCube || !pCube->nItemNum)! w8 z9 }: j; @
return FALSE;1 V5 N; A/ K3 |* p
}
2 x- A: [# G7 O1 o- T3 z; g/ C
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
% ~- g- f+ |# X8 ?% ^ return FALSE;. Q0 [: v. C! D
# G* M6 e3 u: T% y2 P+ V: s
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
9 O5 b/ q. z5 U* U8 Y( z" y
% z/ B( k0 u! H7 Z6 ^! ] BYTE aPacket[9] = { 0x2A,0 };
2 T! a' T% ^; H+ ^6 X X1 v ::memcpy(aPacket + 1, &phand->nItemNum, 4); K! I' \, l3 B8 w* v
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
6 E# O- }, n4 R' c a$ u D2Net::D2SendToServer(9, 0, aPacket);
- ~1 k2 z( Y. e1 P4 H4 u return TRUE;
( R {) _) B+ n# b+ W# A7 r- ] B( G8 O- K* P
}
, r5 D: n$ x/ b9 W; q+ x: ]+ T, @ f, l, V- Z& t5 X* L9 \
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
3 Q* ]5 [; r4 ^6 T9 w) l& T3 z* [' K/ `$ \+ G8 P U$ z! X
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
_$ O& q \* R9 D9 h* F1 v( Q {+ ^* k# l* H5 G1 a
D2CoordStrc mypst = { NULL };6 K# O* a; l& D
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);( b5 }/ C6 N' \ t% b0 G& r
" E& f H. A0 R ~4 U: M& A if (!mypst.nX)return FALSE;
7 `, U7 ?% N; Y( h; D( u/ Z - R6 B& T; Z0 M6 T! c4 ~/ I4 o8 E
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);1 @' Z0 R' m7 N3 h5 x8 H0 Y
6 I" ]% E; [& u5 G BYTE aPacket[13] = { 0x20,0 };
2 J) W# }- ?4 o% o { ::memcpy(aPacket + 1, &dwItemID, 4);
$ D1 A' f/ _* M2 Y ::memcpy(aPacket + 5, &mypst.nX, 4);
2 j/ R! W' v \1 O% h) Q ::memcpy(aPacket + 9, &mypst.nY, 4);. x4 {7 ~' k% J5 u
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
3 U" y. K9 }+ t+ Y: R D2Net::D2SendToServer(13, 0, aPacket);& e5 O3 X; I5 v* @+ ]) L: S4 B
return TRUE;
- z& M8 s. {$ z! I; d- Z }& d) p c p4 a+ D8 s% N
7 L! s! x9 v" H5 e+ R6 L% L n1 P
static BOOL DropCursorItemToGround(): I0 S2 s- K. I9 w9 ~5 J4 n4 K
{1 Q- q. L3 ]2 l4 l1 V# ]: K
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);/ A+ Q, R Z4 R5 P% `4 z
if (!phand) u; N: p; M$ J
return FALSE;; b2 M. [% M- K1 Z+ R, `6 ?8 @
' a4 h3 y$ V9 I: r% H" O PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
6 Y. M2 Z' y9 b8 ]) {; G. c1 |: ?. L0 {1 u/ K _, u7 G! f$ c4 y
BYTE aPacket[5] = { 0x17 };
5 _# r6 O+ @1 A( ^/ | ::memcpy(aPacket + 1, &phand->nItemNum, 4);
: G# U0 U' c, O D2Net::D2SendToServer(5, 0, aPacket);8 f, R2 X4 M) h3 F
return TRUE;/ U' }( W6 H- T; a" |7 z
, S, i f7 G! I O. K }
[3 H* B( f; p- z$ N0 ?$ w' |1 y0 M9 o/ S" ~8 q
static BOOL PickStorageItemToCursor(DWORD dwItemID)
1 T6 F* p8 I) k6 \7 |" q {
0 p4 N( h6 ?6 P S, ?4 v$ ~ PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);' O. Z! b5 _6 m/ T2 N: p; x
) d/ h5 r; Y0 n BYTE aPacket[5] = { 0 };# a' D2 z, `, L8 a. V* ]( Z4 y) h
aPacket[0] = 0x19;% f6 b- F) v/ \1 ]: S& u
::memcpy(aPacket + 1, &dwItemID, 4);
: ~3 z$ v; L, M) j4 \ //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);6 x4 M' U. C- A: z9 Z
D2Net::D2SendToServer(5, 0, aPacket);
, Z6 ?0 _+ g6 F: m return TRUE;
' q+ `' Y( x4 S' a: U! G7 w N }; U/ ?: n1 ~1 Y9 j" _: D
2 V1 G' r. Y- D2 { `
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
w" G& J: B3 L/ G* A1 j; f {
& z/ l) r Y5 O& L {" h( m, L( L PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);1 ^! d- M" F9 Q9 C8 t" f
BYTE aPacket[17] = { 0x1f,0 };
# |# g- o0 [% }; z! g4 F ::memcpy(aPacket + 1, &ItemID1, 4);0 J& h6 y' f& ?3 l2 x
::memcpy(aPacket + 5, &ItemID2, 4);
5 z( `# q2 o) Q //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
' h7 P- N5 {" Y8 o7 `+ `7 Q D2Net::D2SendToServer(17, 0, aPacket);
* Y1 t: u1 T+ u, j1 L5 V g return TRUE;
* Y+ o* P' ~* m/ ^' c }7 q; Q, Q" E( `, i5 J/ }) v
& `9 j) Y2 u' v1 U static BOOL Transmute()% `6 k( u- p1 p3 \
{
) {6 x7 d- U) W5 d if (!(*D2Client::ptPlayerClient))return FALSE;& |% B, N7 Z4 V( U3 B$ h* Y( A
7 \" h: v$ O0 I4 v# `- d9 S2 D if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))% }1 {" j; B. }
return FALSE;) \& A" F M4 {0 e* N' q( _; G) j
" {4 d$ h) N9 z PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
! R2 I5 B H- h! S6 K BYTE aPacket[7] = { 0 };
3 F" b, |# f' V, z$ n aPacket[0] = 0x4f;" o" s, }& L. v
aPacket[1] = 0x18;
/ Q4 k8 _( ~* r, f9 q# U D2Net::D2SendToServer(7, 0, aPacket);+ \0 y, C4 D2 C
return TRUE;# h9 h# f# J) p) s8 [
}
$ E, } }9 n7 _' z8 Y};
T& r" t5 G9 @) U: I. f4 j6 j( P) \, m: b. x: s" p
|
|