|
|
转载
: e: K5 U1 o4 _2 O, [4 e) d自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:. y8 H" Q1 i7 x8 K: w
D2Client:
! O( ?; `3 y4 [: c' H6 T8 i! a6FB20AE1为拦截输入框(用于获得命令)
. p, n! N/ y1 o% L6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发' j) y& Q- S- c; o+ t! E7 K! |
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
H' l2 \% D: V6FAF4230为hackmap的loop点 我用的hackmap导出位置
' }3 S0 T! z- V. F8 o+ p8 Y- _2 T/ p4 R9 y2 u0 @
4 J- j; {# ~' ?1 _发包函数:( U& _1 g/ y+ p& a! t
class D2PKT_ITEM
% Z V$ V# f' W0 p) n$ }6 V2 B{6 D# P5 C% Q3 `# C G# ]
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
3 N; |2 g. x# q5 Z7 s#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
0 S9 b9 z8 f* j+ Y$ u+ M; i$ ~#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
: ]) d+ r% s; E+ X& g#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
8 _4 @ s- ~+ O2 r3 b, e- m#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
3 e- C6 W" ]/ P* J- l#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上$ j5 Y2 F! ]0 v5 F8 a& d- _1 O
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
( @+ x( @9 T( a% ^4 _* P( u#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上# `8 l( t2 u: Z8 j0 E) J9 f
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
& g, M! a' e" w8 t#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店8 s* B$ {* N% w" b
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV7 c6 y' l. z9 d# N& e
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 8 J. V+ Z5 e/ |8 i
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带) R r# l3 H9 e8 X
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
`" `; [9 {- G( ^( V- h1 W {#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
; c. w) x/ j, N+ P& Q3 [3 _#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上0 v7 [2 @" y/ I# a
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
* g' c. K. \$ `: ~+ T: X% w* x% C/ Y
#define PacketItemMaxTick 150
( k6 |. B7 j! O1 S* ?#define PacketItemPickUpTick 20
) i8 \, C1 d1 c0 v5 A& N) ]# E& B* P+ c/ K5 Q$ L# W" }
private:
+ k: v v4 T0 Z% W# o9 C static DWORD _PKTItemTick;1 ], _) U O; f$ D; p, R
static DWORD _PKTItemAction;- X9 U5 i$ S+ f6 R. |1 s7 z) Y
static DWORD _PKTItemID;
7 `' R! @, D5 }8 ~- m0 y1 N static BYTE _PKTPKTType;3 x5 j" |, Q: T) n/ m
public:& G% }6 J- S/ m- B8 W
static DWORD PKTItemGetTick() { return _PKTItemTick; }/ X3 ~, T) E+ w+ W; `
9 N2 t6 r5 m4 X# _8 ~ static void PKTItemRelease() $ N- O1 O4 i7 s2 m$ G0 C* ?
{
# q1 R. Z- n; U _PKTItemTick = 0;
0 N4 o; I( D3 u7 e) e- n4 ? V _PKTItemAction = 0;8 d) t! F; G" |2 e I6 P0 r% M' x
_PKTItemID = 0;
" O' k, u( o: ?) o _PKTPKTType = 0;
: K. k! W5 \# w }
, U. r7 y/ j, {5 C, O8 e4 Z7 \# C, K
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) 5 Z; {* `& p+ q ?7 D5 v/ w% P
{
# z7 @1 o3 B8 J" r9 [/ e _PKTPKTType = aPacket0;
. l% D4 m( L9 d! ~: y7 N6 ~$ I: r _PKTItemTick = tick;
: y: {1 t6 c: o$ }- A _PKTItemAction = ItemAction;' x" v9 J3 w/ X! k
_PKTItemID = dwItemID;' P+ V' P0 |( @" G% }
}
4 y+ o; o; [$ }, ?1 s
, r8 ~9 T. S k: n9 E static void PKTItemTellW8(DWORD tick), |) |" B( X# c
{
1 I6 @4 b3 v. ]8 o" A' T _PKTItemTick = tick;2 L5 p. f# o" h, n9 T) Z
}" c- w0 O% E: m( M) l O
( L3 f1 c, _$ J6 p8 }
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
& c( l1 A V7 ]% C& a {
! F9 F) A1 z$ z5 W9 F4 N2 d if (aLength >= 8)
3 R/ `% i& H! c, l* F {
/ L" M) G: f0 y2 s3 } DWORD dwItemId = 0;& l$ p S8 c" ^. f7 s% m5 |
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
: f3 M" ?7 K$ a7 e if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
% p6 L% s/ r* H/ l1 a && _PKTItemAction == ITEM_ACTION_TO_STORAGE1 |) B, F% L' y8 I0 Y5 W0 Y
&& _PKTPKTType == PACKET_NEWITEM* \2 t/ P: I7 q7 w2 l$ N W
): E$ S- p- z& k. i
{" y/ w% p- H) w
if (_PKTItemID == 0 && _PKTItemTick)
% n' F4 {. Z% E0 m' t% S, U; D {
; Q5 ]7 K! Z$ i- z. i% I& ~ PKTItemRelease();5 P: A4 y, \% {8 u a9 N
}
F1 d6 V2 U9 K1 O) \/ Z/ X else if(_PKTItemID== dwItemId&& _PKTItemTick)* }. B3 f. i1 X ~
{
9 _! ?: Z. Y& C5 V6 [6 x, t8 h PKTItemRelease();
9 }* v. }+ q* t$ T4 y8 m5 }; x }
4 c" w" Z) t/ G& o }
9 u( ~ m) D( {% \- i4 z # O8 ^4 S7 B4 q- o6 R4 B9 x- |
}) E' T) ^# m- b& v' Y& b+ w
}
4 j, x: t/ w9 Q6 M1 Z+ G% {5 @; O$ R% c7 o/ l- I
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
% b2 O/ l' e( H/ [$ d$ T9 o {7 C# b- f8 n3 d; O+ A+ j
if (aLength >= 8)" {6 `$ @+ g' h0 ^( k9 j+ B& O
{
- n1 P6 v3 Q; t3 J DWORD dwItemId = 0;
5 p, }% X# b! z+ d3 l9 k" B2 ` memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
1 K4 }0 `( M/ E if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE7 j- L4 p. F% F4 j
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE) l2 g# U R2 H! q& Y
&& _PKTPKTType == PACKET_ITEMACTION
! z8 P% _2 G5 R/ @9 B; a9 t )
/ F& a, e% z* m6 i# K- C {! f7 q0 Z5 s2 G9 m9 ?/ d0 l
if (dwItemId == 0 && _PKTItemTick)% T! S, Y! G' W$ X! D; I
{. \3 j i9 d$ R( _2 s! |
PKTItemRelease();
; U& A6 \$ I" B4 e( S; d5 x }: F, A6 A) j+ E
else if (dwItemId == _PKTItemID && _PKTItemTick)
% |4 r# y* ^2 y _) _; L- K {
' s; A+ V2 ]3 D& B1 ~; W PKTItemRelease();
' k( k j, |$ L. z7 C }; X. p- S) ?; v& o- F
}9 Y# S1 }7 Z/ {; S6 j: K, U
* \9 m% n0 Y7 z+ {( h% T2 q }, L: a+ D( K2 d! H' K" p! G
}0 o3 \. c) Z4 S& I( A
) r" z1 d. c& R* Y3 X+ a% P* v static void PKTItemGameLoop()( u; L e0 |" i4 `9 V
{
% ^" N$ b6 H' Y$ |8 b8 o _' X if (_PKTItemTick > 0)
( H' }/ V9 h9 b- e4 ^ _PKTItemTick--;5 [. q9 ^* e6 o- G6 _
else if (_PKTItemTick == 0)
, w7 Q) _, u3 ?- f PKTItemRelease();/ `2 c0 ^, f/ N- {2 R4 a/ v
}
0 `% V L6 z4 ^7 v0 m+ w- v# e( C/ U, }. Y5 b9 x, H
static BOOL PKTItemCando() . K* R! \" d+ F h# h# T2 j, Z0 E2 j
{3 {: ~& m! y5 D) N4 o5 A% J
if (_PKTItemTick == 0)return TRUE;
8 f2 a3 A" K! W1 \! X, S return FALSE;
8 `8 s. D' P+ W# I( N$ | }
3 O% u1 ~4 g; I3 @
. |2 t! O" x% g5 ^/ Q2 M9 g( T static BOOL BuyItem(DWORD ItemID, DWORD npcid)+ h& C$ I( D9 ~6 D/ P; Z1 o; ~ F
{8 Z. u/ b2 h$ M9 `
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
$ A7 v3 O* _) g, R BYTE aPacket[17] = { 0 };" W( ?. G5 O; T- x
aPacket[0] = 0x32;' ?0 u) Z2 p ~. t9 o1 n1 ]
::memcpy(&aPacket[1], &npcid, 4);9 \* N% P9 F y
::memcpy(&aPacket[5], &ItemID, 4);
) Q: V) @: X/ |( G //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);/ h( M5 N- X6 q: A* h
D2Net::D2SendToServer(17, 0, aPacket);+ ]% g, r7 W0 y
return TRUE;2 I9 }) D' I6 T6 ^" A C
}
8 B7 ^6 ]* }9 `( a/ S5 X& U2 i2 X$ A1 v$ s! x( E4 q
static BOOL SellItem(DWORD ItemID, DWORD npcid) s8 _2 g9 o3 J1 o0 [
{3 q$ a6 z5 \4 j$ X' y, ^
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);" `% K# p! S9 y/ z% F- V! {/ Q8 q
BYTE aPacket[17] = { 0 };. v" A1 ~) ~, g# T
aPacket[0] = 0x33;
0 ], ?1 a; @$ M! k) U- q ::memcpy(&aPacket[1], &npcid, 4);" i( i, m: h2 y, G9 L0 Y+ J
::memcpy(&aPacket[5], &ItemID, 4);
8 B2 M& k& c/ p" L //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
# o v, Z" K- @ D2Net::D2SendToServer(17, 0, aPacket);$ z) M ~4 ~2 M# u! \/ f+ S
return TRUE;% P, ^5 L# Q \9 \
}
% Y+ ?. t! f& v/ u% R) O3 X! p% M
1 w5 v- Z* a+ O5 @" J8 e static BOOL Interact(DWORD nUnitId, DWORD nUnitType);/ s( s& D3 O. _, e5 Z
0 F" G0 S) Q, s s, ?; J: z static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
+ e- f' R' i. S
3 S7 r% \8 |. | static BOOL OpenCube()
4 x* e$ [6 _) j+ Y7 ^, @' X {5 h+ P5 C' o. @, u
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
/ U! ~+ C! u5 Z! n, Y# Z) C* y
4 f. i. r) J. I3 R/ ] UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
1 A* @" G7 M7 } if (!pCube)+ {) N! x# f4 E% s
{9 o& P0 ^1 x5 ?
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
* ^+ J" W) g" o4 Q [9 K8 L2 i if (!pCube)
+ n, I: ]. [6 j$ u3 j8 F return FALSE;
9 Z7 V% F- n# f" J* N }
2 M: x" \' o7 [% y4 | PKTItemTellW8(PacketItemMaxTick);
& ~: [6 m: M* q+ j. b+ i q k$ H; K4 [/ x. u- X) o e
D2CoordStrc mypst = { NULL };9 d" S6 @- P: u% t5 T+ F6 w( Z
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
! M1 R/ ^& e4 V4 M3 C" l# g" j- L8 \5 L% |
BYTE aPacket[13] = { 0x20,0 };
7 [4 n7 s$ ^ p' D1 J, D" G6 }+ E ::memcpy(aPacket + 1, &pCube->nItemNum, 4);9 x2 K# P$ A! m$ e
::memcpy(aPacket + 5, &(mypst.nX), 4);
5 ^* I' u( G* K4 ^, ^4 m ::memcpy(aPacket + 9, &(mypst.nY), 4);7 K k4 B4 |6 R9 L. q& Y
D2Net::D2SendToServer(13, 0, aPacket);
1 l, G: E, y. o m6 F return TRUE;1 U3 a6 h2 a2 h4 i* O
}4 w7 [- N: ?$ p; k' n/ Q/ j
2 P* X% u$ e6 ], b, I, ~5 C
static BOOL ToInvxy(DWORD x, DWORD y)% N. D9 `- z* q0 ^$ E9 ~3 p
{
* K ?* `+ g) ~1 @) D. [' v% L4 n UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);8 O. Q2 C0 Z, T) j7 M
" l/ P% }8 p7 w2 M( ]7 K/ F9 v
if (phand == NULL)9 B3 ?2 n# S1 m5 J; Z
return FALSE;& t2 A# [ [ _* ]4 q' o
# T3 g: @* [( S; s+ a1 G& D
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);. l* ^$ @# i' Y& ^9 g( l9 S7 B
2 O) V0 ~& ~% y* s, ^
BYTE aPacket[17] = { 0x18,0 };1 j: Q7 \0 q5 Z
::memcpy(aPacket + 1, &phand->nItemNum, 4);
% `: V6 Y$ ~7 z7 ~, S0 q- s ::memcpy(aPacket + 5, &x, 4);
" Y% g& [# Y8 o% J! K ::memcpy(aPacket + 9, &y, 4);
7 w- I- x: l8 \& h: [ D2Net::D2SendToServer(17, 0, aPacket);5 B( D- B% T1 e2 i2 t! p
return TRUE;' d) s9 }3 R" O+ t3 _
}
4 i4 d* ^: \! O @6 \3 x7 H7 ?. u" B: C* E
static BOOL ToInvRandom(BOOL bBagFix = FALSE) ' f. Q8 o- X2 U" G( H- V! S+ N
{
1 l( N0 W) Z7 \/ t UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);( u! |6 f* l B# {6 c+ m' Q2 ~
if (!phand). ?+ t9 i( l6 a
return FALSE;) S1 @/ @; U7 n1 s. [6 H, E
int desx = 0;# z* l% u* w! v1 i* N# C+ K" |& t
int desy = 0;5 x$ \) r5 ]0 m4 H6 S( h" j5 P
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))6 Y$ k0 G1 s% j( l, ?
{: J( X- n* I0 [
ToInvxy(desx, desy);$ Z) y9 }9 s4 [7 j
return TRUE;, P; R3 t4 p- M& `9 K$ D
}$ w2 I: S; w% L! b: H5 i9 u3 o2 v
return FALSE;" B5 D( Q, m" ^# j* d/ @! {
}
. b4 E( p0 A% D$ F8 T8 z& ]
% R2 ~' F, V' x% s7 | static BOOL ToCube()
( T& J" o2 }- ^- B {7 W' r ?8 z; C7 c7 S- r1 |5 H
if (!(*D2Client::ptPlayerClient))return FALSE;
8 @0 ^" J. h' V( {. m0 S1 k$ d( b' X
+ x# r, f9 K% e: G6 W1 M* E UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
1 `. |8 J9 V' g* {5 a7 f3 ^ if (!phand)return FALSE;: ]' T% T. p( K1 [) |! }1 f
; b2 b, ^0 i! {
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块6 h, a0 H, I8 J( f3 y
if (!pCube)( s" E8 |8 D4 a; ]' {
{
3 t% y) S. m( Y2 T- M pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块0 `9 J8 y7 R2 O( c
if (!pCube || !pCube->nItemNum)
, p' ?. j( z( c# Y' `( C return FALSE;- V0 F. u. ]; T; @3 _. G: J; c
}+ q4 R$ N0 l) o2 g0 }2 O2 f" L: U
5 G: v6 N; b) n if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
$ b0 k! Z' }( {/ b; K return FALSE;
$ o) ^+ D h9 m, M2 \" k; W: a7 G0 H, v+ P2 z; ~* a* [6 D. k
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
: o: r5 G9 y1 \, d, f8 L3 [5 J' G5 z, X) R# [
BYTE aPacket[9] = { 0x2A,0 };
: U% o$ h& S7 N" G* R ::memcpy(aPacket + 1, &phand->nItemNum, 4);+ ^. A- N2 z+ p
::memcpy(aPacket + 5, &pCube->nItemNum, 4);5 k# \( U: L: W" n$ a8 ~
D2Net::D2SendToServer(9, 0, aPacket);
, x* O; j7 l8 E+ O4 R return TRUE;! P' {6 v1 N, h, ?4 H; }! _, w
9 N9 p( b. T0 h" w4 C
}* r9 b, l q, F! E' [* l& ]
# C& ~# U& o) d* T+ D9 P
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
0 m8 Z+ Q/ B- M5 \5 h$ S0 X# C/ m7 l( }% R4 {& V5 u7 j
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
4 S, ^& M% A+ Q7 c8 P {/ x6 P/ K" k; N
D2CoordStrc mypst = { NULL };! [5 s( q' ~( V
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);8 _! ^" b9 I$ e, G! }
* f* ^) Z- ?. Z: q2 j- _: M. ?
if (!mypst.nX)return FALSE;( k; F% T" g! m$ m- D. G8 B" ?8 r
; l" Z5 ]6 P c9 `
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);! D# n n' B) |! R7 x: V0 n
. m+ Z$ f) w) G6 L# h! n BYTE aPacket[13] = { 0x20,0 };
+ z$ j* _- l( O! _8 P ::memcpy(aPacket + 1, &dwItemID, 4);
5 s" s9 b' z/ P$ B+ Z' @ ::memcpy(aPacket + 5, &mypst.nX, 4);' a; e7 b9 o% _0 n t* B9 {% U0 i
::memcpy(aPacket + 9, &mypst.nY, 4);
* _- O# u; @- k3 ~8 h //return D2Net::D2NetSendPacketToServer(0, aPacket, 13); m$ F) W' F( v6 W! b' S6 |, z
D2Net::D2SendToServer(13, 0, aPacket);
l; y& j% u, `9 {0 p% ?% s- }/ D return TRUE;
9 q! R7 ^! s. z$ d# I }
$ d+ H- w) q5 ]5 b+ T
& p6 W; G% G* A, ?3 c) q. F static BOOL DropCursorItemToGround()- p4 _& w% F+ n0 A- d8 I
{9 n a/ S: B9 n
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
: z9 e. p6 {2 E0 c) Y6 w& h7 \ ~ if (!phand)7 K5 |9 K. V& o+ R2 D/ b; e
return FALSE;; P. y& L5 i2 O6 ~: C! U
% j. Z0 V' P& W8 V* R1 q, d PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);3 ]4 D% Y9 G* C# p# V
5 }" F0 f3 v$ H0 \
BYTE aPacket[5] = { 0x17 };* L2 x. P: \& ]6 }
::memcpy(aPacket + 1, &phand->nItemNum, 4);7 r. L% c! O3 h7 L
D2Net::D2SendToServer(5, 0, aPacket);+ Y$ S3 f$ ~& M# B9 V
return TRUE;+ J* K' P+ ~* F5 J
6 a4 o) T, L$ u7 O% u' X' n& p
}
1 f) `8 F7 h% J2 A
+ b: ?% ^. J4 d. p1 [* f static BOOL PickStorageItemToCursor(DWORD dwItemID): t* C9 p) G4 P) K2 U7 r5 S
{
- ^+ t0 n0 G3 \$ X0 V PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
1 d- r l" m/ Z
9 f- g/ ~) C! t* w BYTE aPacket[5] = { 0 };
k; f6 N% Y' \( ^ aPacket[0] = 0x19;3 F5 t" a7 K) v. y2 d
::memcpy(aPacket + 1, &dwItemID, 4);( T$ ~+ P: C3 Z
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
0 \0 Q$ U9 F! L: [2 B! P2 d D2Net::D2SendToServer(5, 0, aPacket);
4 l/ }/ X2 s2 h& x; A3 S9 _4 v return TRUE;
a; e/ ^( F8 } }" X/ V# N, v) u* u4 v6 ~
& u# m# K: P N5 H# } static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
l7 U/ s" }# B3 K) h9 s, u {
+ ?$ I% U6 p5 `5 C4 F PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);( ^& i; n: i+ s7 B. n! G! c
BYTE aPacket[17] = { 0x1f,0 };
" L! x0 I' a9 ^' ^& n# ~3 p ::memcpy(aPacket + 1, &ItemID1, 4);
# S8 C6 ?" W; q/ T4 n ::memcpy(aPacket + 5, &ItemID2, 4);( c ~: k9 h. n- e0 x/ r$ b) Y
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);5 a7 c* i5 w& M& D
D2Net::D2SendToServer(17, 0, aPacket);% r: ]" P+ `" ]* }9 F: i7 N
return TRUE;: O' V1 J" d9 J6 [
}
+ A; g( A. i" K; |. y4 j4 r
: ^+ b& P5 L; K( N* H8 B9 q, v1 g static BOOL Transmute()" x6 S2 Z( s" k# j! M0 t
{
- ]; R: k+ \5 m7 E if (!(*D2Client::ptPlayerClient))return FALSE; Z2 L# ?3 p" @2 E& q2 D
/ |+ E- {3 |2 _, X+ s! g if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
0 u; r/ G) G7 a; w' t: ` return FALSE;8 |; x# _4 o/ o+ e2 e
9 d5 v: N( S! i$ | PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);) ?! `2 n* ?9 D Q k9 |
BYTE aPacket[7] = { 0 };
3 w) @% j5 _6 H2 Z1 \; o8 B- }8 e aPacket[0] = 0x4f;
4 D' u* `2 F! l. ?2 o ~ aPacket[1] = 0x18;
" R+ ~- h) M8 s$ f( ?; N- W! i# O, j D2Net::D2SendToServer(7, 0, aPacket);
, e" y# |- ]7 H# |; D; @! K: |6 y return TRUE;4 V$ ^& X+ [1 M7 @ a% k1 B9 v" t
}
6 y( f$ r1 \7 k% w7 V+ I& v}; k+ o2 |4 E2 S
; V) f! G: M: f |
|