|
|
转载0 D- ^8 t3 f4 n1 ^- K
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
0 U& w( ?% U, @! r. d4 _2 ?D2Client:# o+ @ O9 k. I, C. c9 l
6FB20AE1为拦截输入框(用于获得命令)! K. z( L1 A$ T" d$ Z) ?; O2 {+ [1 q
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发- k4 X2 {3 Q, K' I: _2 [- g
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发3 S) [5 ~) Z, B) v% D: X% m
6FAF4230为hackmap的loop点 我用的hackmap导出位置# N5 G8 B+ P' Z8 E! T( Q- `
b( {& J8 @5 V+ t& @( q3 \% o
0 {0 v+ p# ]% a& N* F
发包函数:: o' ?% {5 u8 O& y
class D2PKT_ITEM
4 w. J( G8 |# p w! K j, c8 L{6 r. w3 X0 o) J. V" S. }
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上& y3 a! ]" i+ `, s5 X/ [/ j
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
' `6 p8 l' U. ~$ y9 W6 ?#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
. T q8 t1 l1 g: T#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上2 Z! R, q" ?2 n: |
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH* o; F% D* ^/ ~8 u2 A. G4 O& c
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上6 c. B+ Z1 L" n$ R( A3 `
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏2 n- m: B6 g3 H j2 Y1 k6 B }
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上1 Y( }" ~. r6 N6 Z. f2 m# [
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -6 ^* ^% \" K7 W( ]- w& P
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
1 Y9 K4 b' n8 c, A#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV- G0 M$ {7 J/ r( ^$ H( S
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 7 U8 d7 e2 ]' \8 f+ M
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
3 G: m) M1 L: D7 L7 j3 ?! C& F7 S#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
: t6 j; T Y: V' i#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -. ~2 p& W$ g! _, M+ ~7 @6 f2 |
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上" X$ ]4 Q) B8 A% S, g1 |
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -* m7 l3 ~, ~' s6 j# j |
2 M8 z' n4 C- g5 l9 L
#define PacketItemMaxTick 150: N4 ]' p' b$ w/ k. }
#define PacketItemPickUpTick 20
1 s$ z. R. a8 ~, @6 b# |: v. o# c( L7 Z! K9 `1 k
private:- O- P& {4 {" d5 {, y1 H( t
static DWORD _PKTItemTick;4 ~( r1 l' G D- W( ?; M+ C
static DWORD _PKTItemAction;
f; U5 |+ r) J' W( c: F) t static DWORD _PKTItemID;
$ h& _* U5 i, O9 E5 A% L$ G% s static BYTE _PKTPKTType;0 s' p! I, u, {( N: k: e6 u5 `
public:
2 _; R- k. V( e8 Z7 C2 n/ n. T; l static DWORD PKTItemGetTick() { return _PKTItemTick; }3 y! E8 R$ f6 ?7 k! n. j+ L
% {! d4 C* i' {* j static void PKTItemRelease() 1 F2 _- F5 ~$ j2 \) }; }* x7 C( P
{
' M' e+ U5 n3 T1 |+ k _PKTItemTick = 0;
9 K) z3 |9 Y) V( N8 t _PKTItemAction = 0;
/ D! z; Y9 x- K _PKTItemID = 0;3 G$ c3 K& ^* L8 K* C0 D" j5 k
_PKTPKTType = 0;/ } h: v K- l# T
}
1 E4 T" H/ A/ m4 b ?8 \) n
: Y8 P2 u& n" a9 U7 X static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
$ W( e+ r3 u9 o7 h {
+ B/ ^. ?/ Q$ x: T$ a4 B2 I7 p# x% z0 p _PKTPKTType = aPacket0;
7 a% ?9 S* U' t7 Z w3 J+ z; N _PKTItemTick = tick;
5 R: L+ f3 d, B8 c; \ _PKTItemAction = ItemAction;$ \% A5 ^. R+ u9 p$ U' i
_PKTItemID = dwItemID;3 R ^6 X9 X/ v& K7 N+ _
}: R2 t, ?) s- N1 B6 C! E: t
" C& S1 X& L, R& j; W
static void PKTItemTellW8(DWORD tick), Y* E4 R9 Z; Z4 m4 L
{
( M$ k" r! J7 O& n4 @: D" p4 Z _PKTItemTick = tick;2 A9 N) \4 Y$ J' k, X) A4 e
}9 M3 m& D4 o1 F6 N
5 H+ o; j* b" {: l, B3 v static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
% W( l( t: ^1 Y: J4 @6 }( u {) u* ^2 I9 O" j
if (aLength >= 8), ^+ w: z4 Z$ U- W( `" i" j. p- r
{( D$ a. z2 X. e+ Y' e
DWORD dwItemId = 0;" q* z4 @! s9 \/ Y9 s+ y
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
2 f/ w+ ^: @6 e6 A( o5 q" V5 d if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE) _3 R5 C' |7 P+ O5 ]
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE* t$ M. z# Y' ?5 h" F. x' @! @
&& _PKTPKTType == PACKET_NEWITEM
, u( o0 y" K, |5 t' u' y )
9 c% r9 x) Y! ` {
( {, n, l$ G" m2 [' o' s7 Z" P' y2 ` if (_PKTItemID == 0 && _PKTItemTick)! m+ l5 a3 M; c/ o1 B
{) l. s6 w* w! A* J5 G V9 P
PKTItemRelease();
9 b) I: e: G# ]( f9 L7 x }( m$ y% y* b$ s2 q$ ~- S# i2 }3 W. G
else if(_PKTItemID== dwItemId&& _PKTItemTick)
4 b0 s3 n8 g& m( D% F {5 i, t4 @7 g/ _; h! L
PKTItemRelease();$ D( x" \) y) f% X5 P; w8 M3 W
}
& l- g) H# v3 i6 t o }- C. @" o) Q* c4 \+ q! O
+ D9 B7 _+ k3 y0 P$ I6 N, z }6 z9 z! x0 U4 N, V, T' z" Y% X
}
& F1 I* S( c7 i* k
" O: S2 X1 \1 |0 E# G0 [ static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored' X7 l# ^# s* _2 f) ~. J
{
& B# [( g! x( ?( u. s6 |# K/ O if (aLength >= 8)' @* S3 `" {% [9 ]* B7 o1 u
{
1 M3 V2 C% v/ m, T9 } DWORD dwItemId = 0;
9 S+ R" |: t* D$ G6 a memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));& s& c- E# ?9 u! f/ f0 ]
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
% |: p/ T2 X- F && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
5 n$ C" L# g, L/ N! @0 x" \ && _PKTPKTType == PACKET_ITEMACTION
% t$ O! w( B' r3 @: M9 o )
' L! |7 b* s6 R7 Y. L {* M2 _" x. G5 q1 r3 U
if (dwItemId == 0 && _PKTItemTick)
5 \, L' k) h: z2 `7 y {# g- A+ | B# I8 l
PKTItemRelease();, y: s5 V8 q7 Q% ^# w' [
}
+ Z# V2 [5 j( g, k `) j else if (dwItemId == _PKTItemID && _PKTItemTick)
" M2 x$ v# k7 V' @5 N {% ~, {/ G# m, d I5 E: b4 N
PKTItemRelease();
- K" G" g' ?! i; ] }: g; \4 @8 e6 {" [8 l) _9 _' J& ?8 q
}
# I" p2 `. @, w c
& N; L, S# B* a2 u# H; |% m } P y' W" E6 z- I W6 |: Y
}
1 J9 i0 ?" Y! i% [4 n
5 D3 o9 ~* t- ?0 o static void PKTItemGameLoop()
* H' N( ?$ i# o8 q {# T" Z3 H) t$ w) K# ?0 Q
if (_PKTItemTick > 0)
# y4 c2 }( i4 Q/ U& I6 C% E. } _PKTItemTick--;7 s; K: S+ x. D* g
else if (_PKTItemTick == 0)
, a5 R7 v( g, y PKTItemRelease();
- I- d; G1 [! l& H0 ?' ^5 `0 ~ }( l) S/ g; I: s/ @* V
3 }" E8 }/ ^( F static BOOL PKTItemCando() " u9 a+ U" y ?$ v4 r) e4 A9 F$ n
{
- B( j+ |8 D6 s& c1 X5 D if (_PKTItemTick == 0)return TRUE;5 V7 B! S0 A2 p
return FALSE;; X5 x0 L* k3 c1 y4 H
}
C2 r( G) x( |3 X M" E7 Y8 z9 ]7 q2 U7 R$ j
static BOOL BuyItem(DWORD ItemID, DWORD npcid)4 G* D& p p1 `+ N# m$ C |/ b$ _
{
, b) E- s9 {2 {5 P, k PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);8 N6 n: s/ h4 u7 s( T1 t% j
BYTE aPacket[17] = { 0 };
+ S+ Y. d" g0 h& M aPacket[0] = 0x32;
5 D6 \. @) j; c8 D* D- N6 k( h ::memcpy(&aPacket[1], &npcid, 4);
: Q1 S2 m' L9 o6 F0 o$ F# l ::memcpy(&aPacket[5], &ItemID, 4);
5 ]) b q, ~9 o9 `% X6 ]5 u //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
8 N# R' a4 [$ l+ J4 |. M8 k3 u% o D2Net::D2SendToServer(17, 0, aPacket);
5 F( s6 e! V& B+ s/ D5 B0 O return TRUE;: P+ M h+ ~" g5 g0 a
}
) j# X8 w, `) ^
* L. |( s+ W: b( }# @6 M% f" c static BOOL SellItem(DWORD ItemID, DWORD npcid)
; d- B7 n1 t+ |# I( n, ]/ i* b% c4 e {7 I& w# G8 u# z7 w; Q7 z
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
& C7 J0 K9 b8 v9 S, x; [: G6 n BYTE aPacket[17] = { 0 };
" |! q4 y' l2 A aPacket[0] = 0x33;% g! F- D4 h1 }0 h8 } u J7 p2 L
::memcpy(&aPacket[1], &npcid, 4);
j* n& _& c* S/ I ::memcpy(&aPacket[5], &ItemID, 4);
! j2 l0 z( A i# q5 | //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
/ F0 m# b. {) O; z* i D2Net::D2SendToServer(17, 0, aPacket);
; r# d! K& q+ \1 {( e i return TRUE;
% K4 v) {8 E, n }
: z- w( `- J% G4 P2 J4 r- M$ M) ?- c8 N3 E5 N
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
]. |. G1 a; ^
/ ~$ c# n7 M1 h3 _ static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);5 H1 K: f( G; K( G6 V1 T
) v$ a( b1 `9 K o% @9 v4 o8 |
static BOOL OpenCube()
7 N: T5 `) L7 o- S4 \ \ {
: j; r2 y/ D& p; o g! C# D- a6 {5 | if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;; c* g% |1 K; V- ?2 ~% A* W0 h" g
) b ]; k9 v; H UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);: q: W* M; `' l$ n
if (!pCube)) ~6 q. x7 Q* j& Y$ S
{- C) J- l5 |& s1 r1 p: k
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);' Y- V& A p7 J# S
if (!pCube)
x* `* o' S- J# k) A" M+ T$ }8 C return FALSE;3 F% q" E0 b/ o% s" R s
}
0 S$ P, H$ j) I* `' m PKTItemTellW8(PacketItemMaxTick);. p. q$ C9 a- a
8 y/ s9 o( X# G9 x D2CoordStrc mypst = { NULL };
; p2 w: r& M7 z, [' ]! ` D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);& {3 a, W; l/ l& g# l
$ h G' @ V9 Q& m% X
BYTE aPacket[13] = { 0x20,0 };
1 V F, m% ~9 N) y$ }3 ^/ C* ?, @ ::memcpy(aPacket + 1, &pCube->nItemNum, 4);7 R+ o0 ^6 f) ?7 l8 d7 O; g$ N
::memcpy(aPacket + 5, &(mypst.nX), 4);1 g0 Q! j* B/ V1 R( c v
::memcpy(aPacket + 9, &(mypst.nY), 4);. K3 `' C- i# F+ R. P* O
D2Net::D2SendToServer(13, 0, aPacket);
1 K; ~" b! L+ L( j0 u/ d return TRUE;
- o9 y4 B. j: ?( [( r }
( @$ W [( W/ U8 ^' Q
- D; v3 N: E \7 m2 |& s1 U" R5 q static BOOL ToInvxy(DWORD x, DWORD y)& R7 }0 c0 J. e' Z' t7 M
{
# S( B6 L; x9 f+ D- d5 f4 j UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);4 f6 x: |6 U: E1 n1 q- {- \; g
* f: _6 a3 j' [# \# X- u; ]( ^ if (phand == NULL)( v) c9 Q: I& O/ A
return FALSE;
, f; S p. d1 P* v* p
; G! h) Q& a, J. `& | PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);6 F- m( g1 ~$ U6 q/ M6 V! d) ~ i) O
4 x9 s6 N) x, _ f- q2 }" |8 x. [/ E
BYTE aPacket[17] = { 0x18,0 };
$ F0 s/ I) l) J" P$ L ::memcpy(aPacket + 1, &phand->nItemNum, 4);# Q1 K$ \& V3 P1 y4 `% U4 A
::memcpy(aPacket + 5, &x, 4);# A! L$ y3 r( S
::memcpy(aPacket + 9, &y, 4);5 u( X1 n' N, N; p! P" U
D2Net::D2SendToServer(17, 0, aPacket);
: s( b, _( z& R, S8 ]; | ] return TRUE;
. F7 X9 O- f+ U) m7 U5 r( ^" r }8 Q+ T W! g% E8 s
1 [; o" B" J4 A8 P
static BOOL ToInvRandom(BOOL bBagFix = FALSE) ) B- M& P/ c( E
{
+ b5 c0 A7 } D$ `0 A8 {6 [" x, ]( z UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
- e& V7 C5 U) \" q3 A4 g if (!phand)
3 M1 e, Z$ X1 O+ W! S return FALSE;, Q1 V5 m7 o9 X6 }
int desx = 0;4 O3 I4 M: p) M6 A
int desy = 0;
# ?+ Y3 H- }) o9 v" I if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))6 R- t" }5 e( [/ G3 {- a
{
( G& \7 o7 Q& o4 j9 q ToInvxy(desx, desy); Y: Y4 X. Q+ ]9 ~
return TRUE;8 R( S, C8 Y; _7 U: q4 e
}( R- p3 ?3 a: [
return FALSE;1 x0 E2 v; A# d: c+ y
}$ L8 V5 _8 Y9 q6 S* d
L7 i) [) j+ Y% N' w
static BOOL ToCube()1 |7 m9 C# M1 s2 x7 e1 t# S, R
{4 k& e! q/ p2 u/ D2 O
if (!(*D2Client::ptPlayerClient))return FALSE;
0 Y4 S0 i$ q# E" S5 b) `7 z! M v% N$ X5 U3 H5 Z: K, T
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
' u7 K' o9 s% ^( y if (!phand)return FALSE;
& P1 D6 h1 Z% [5 f4 k6 D9 e6 \0 H3 |' f+ H7 v
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
! {; o0 w& b# s if (!pCube)
) C+ N9 {3 w$ ?/ A) ? {
3 D+ F8 N- Q0 C& Z! c( J) o' Y pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块 O, V) J8 H' ^
if (!pCube || !pCube->nItemNum)
& v ~+ }& o: z! } return FALSE;
) n0 a7 t2 h9 t' c- b; w2 V }
0 K& [/ W% r9 W+ H9 ]2 V$ w2 O1 k* p' x( S* B2 U9 B
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))4 e: I& W* L4 X. l7 h* A" q
return FALSE;
# L$ X \* D6 S; B- L/ e* \' w+ B- i" y
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);4 B# J* e$ ^: J! E
: K r! [ R0 b BYTE aPacket[9] = { 0x2A,0 };/ L5 S" v' n1 b- I8 d: n+ Z
::memcpy(aPacket + 1, &phand->nItemNum, 4);8 m' _. S6 X" P2 p5 t. [7 V
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
9 `' |: b8 j$ R5 d D2Net::D2SendToServer(9, 0, aPacket);
{: G7 K) E+ p9 A- w Y% N return TRUE;, o- ?5 {( t, p' F# {
& I0 k8 i+ p( D$ J( l
}1 d, y, S5 a( G7 P, L) c
9 J7 A/ {- ^8 H" K+ R3 {) H static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);7 l( {" d7 O7 f6 E$ i
$ E/ ^4 X9 K8 F static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存. D" m, t7 ~9 s
{/ [3 g) J! L1 S. _
D2CoordStrc mypst = { NULL };0 B5 t% `5 E8 E
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
6 N& V8 y$ w7 n+ r! M- e( {7 r5 F7 ]2 K9 r% b
if (!mypst.nX)return FALSE;1 u% D4 R- D) E( u
/ h3 A( @" ?% b# v# b6 H9 W: w PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);+ A: k6 R5 k1 x/ b$ {
8 f$ h9 ~) {! Z' Y
BYTE aPacket[13] = { 0x20,0 };
3 c, |. Z- L. E7 G: T ::memcpy(aPacket + 1, &dwItemID, 4);
3 \& h5 X" O D, B [; c4 D ::memcpy(aPacket + 5, &mypst.nX, 4);, z2 _: y% W3 n7 S9 d" q+ x
::memcpy(aPacket + 9, &mypst.nY, 4);6 q/ F2 j8 V7 V$ r4 ~6 \
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13); f: X2 O Z Q: [; P8 }
D2Net::D2SendToServer(13, 0, aPacket);* X0 D5 f7 L$ [; s: |+ C
return TRUE;- y8 i/ K+ @7 F
}) T8 z# Q( H1 D3 d& P( j- I
\- K4 T2 E& u" T% {2 S
static BOOL DropCursorItemToGround()
, P# j) J7 m6 g. Y* J& K8 j {
+ r2 A2 I1 H* P0 \! U/ a7 y. l UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
- o% g$ Q. L* N5 b if (!phand)
* J0 ~7 w8 j2 U. F/ V* ~# B( B return FALSE;
, C: k7 m9 X7 [$ N6 e) V5 q
( q$ v" o" Y; N PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
3 p! h% R/ ]3 k( J A. ~9 v% t
8 l' k$ w: E% D) z3 ]; h BYTE aPacket[5] = { 0x17 };
+ i2 e! h" T# K ::memcpy(aPacket + 1, &phand->nItemNum, 4);2 O$ l" Z0 p$ T& v6 ~
D2Net::D2SendToServer(5, 0, aPacket);* H) W2 Q* `' t: H# O3 L
return TRUE;
! }; c! l+ m3 o3 h2 g' c$ u* a4 s2 w$ Q, [9 h" l2 H: A
}
! Y" _% T5 c8 u F" j. l, R5 n( l' T" h: x. M8 X T. A" I) i
static BOOL PickStorageItemToCursor(DWORD dwItemID)0 x* _( H8 R1 {3 C8 F9 }! w
{) X' P5 x5 f8 W- h6 W( {! ^
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);4 m) U7 u. {: ^/ Y* ?7 e5 y5 p/ k s
3 @% Y0 f7 A; }* z
BYTE aPacket[5] = { 0 };& W6 `6 y& _9 A/ s8 \# |- a
aPacket[0] = 0x19;
" L/ @/ o3 X" Y: m9 p6 w$ G ::memcpy(aPacket + 1, &dwItemID, 4);- {, n& h9 o+ f, n( a
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);/ i/ O: A: F0 `
D2Net::D2SendToServer(5, 0, aPacket);
. F; r4 |" F- @) [) b return TRUE;
p5 G9 _! U S5 K }
, R; N' o- A" x4 S& r! Y& i
4 t! C) M, e/ T; q4 y2 _" v) V/ { static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)6 _" c) l% R3 d+ C e
{# N9 e: `* J( c2 G) j
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);* G1 D5 w; G/ |) H6 T! k9 G
BYTE aPacket[17] = { 0x1f,0 };* {# {6 U3 E2 J4 n- i
::memcpy(aPacket + 1, &ItemID1, 4);2 f4 d; ^& H% q$ d
::memcpy(aPacket + 5, &ItemID2, 4);
* l U. a6 E7 ~4 r //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);" M: `& @4 H! ~9 G, h0 w7 [
D2Net::D2SendToServer(17, 0, aPacket);
# d! F- H1 @3 K! H7 M" C1 o/ |( y return TRUE;6 `$ I3 o! Y2 g+ t( k% y
}
; X0 V# s0 g" D
8 u+ P1 r* l" w2 I4 v6 B8 ^- P4 Z2 Q( n static BOOL Transmute(), {, p$ e- ?# U# T& f
{ ^ j; ?$ X5 ]) H9 U
if (!(*D2Client::ptPlayerClient))return FALSE;6 a, H0 _: Z3 N6 c9 d
* l+ }; e4 f O0 w3 C
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
: C; ]( v( h( q return FALSE;8 n. o4 C( ]$ W! J9 x. j& V
6 r" G4 I$ J9 g# J
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
7 h! d+ c9 q1 A! T BYTE aPacket[7] = { 0 };
3 x! d9 z# X3 M" i8 `3 u, k. R aPacket[0] = 0x4f;9 i0 P9 v' Y( U/ i0 [
aPacket[1] = 0x18;
/ c& m" j$ {/ s) Q; m8 a D2Net::D2SendToServer(7, 0, aPacket);8 v: v! }1 h: P6 @
return TRUE;1 w% a! E8 o& M+ \' _1 }4 E
}
0 L: d2 Q! l) D* ^5 g( p};
: o/ K: _8 \. w1 t
( v1 x# S# s+ z/ A |
|