|
|
转载
6 Y: l6 I) z& M# B自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:# Y7 Z% }) U7 v5 G
D2Client:0 |2 r* @7 z. ?. Z
6FB20AE1为拦截输入框(用于获得命令), T" S' g8 V3 [. [) R6 D
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
n4 c0 g& H2 B% h6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发+ o- q6 U3 O1 Q$ H
6FAF4230为hackmap的loop点 我用的hackmap导出位置! q9 p; t0 M' Y6 ?& v
! F; p/ I. M! B1 s; T3 W
* ~" i) P* Z7 x/ Y2 C发包函数:
s% n' w1 v* @. }' q+ f" s; J0 [class D2PKT_ITEM
# t" o5 Z b, J( A9 [" ^# I{
- [, ~* L( E; H9 z+ t#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上- [% P- F" u( M, C% e
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多$ {1 s. d0 _- t5 d' @
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
( G4 p. i3 m( w7 b#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上; B9 S6 W2 ^# C* _* [7 {' x( @
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
- Z3 B% J, ~7 P/ `' U9 U1 `( K#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上; a9 Q* R. a1 V/ K4 [, t
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
% k! q# b* i/ m4 ?2 n& u, T% L#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
+ }# @* ^% `5 n8 i% I3 J( n* Q#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
! x' Q4 B# b( D( i#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
4 e; t2 X% k. `7 j3 T9 X8 F#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV' { t& c" i3 U) [) G
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 & T+ G5 a9 M. d: O, w& f1 P
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
9 H, ?' h4 g! \2 r1 j, O#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
7 W# ~3 r" j0 a& M( @#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
4 }: q: D; i/ w0 E2 r6 Y9 k2 x#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上& d1 B& A& K8 ]
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -$ n: K9 A' p3 ^0 _* _
- G$ |$ w& d% q#define PacketItemMaxTick 150
2 U) f+ |) M- r: e#define PacketItemPickUpTick 20
9 l/ q" z- t" J4 C: v# G& @- B! |; D. [+ |
private:3 O& n9 n, I& ~7 H* i
static DWORD _PKTItemTick;2 w; W/ i* s2 G$ d! R
static DWORD _PKTItemAction;
* x" y2 j5 y3 I2 b6 S" s# R$ Y static DWORD _PKTItemID;" v! H# H0 U+ ]: _
static BYTE _PKTPKTType;
, M) f0 Z5 ^8 {) Zpublic:' _& `* H- R1 n$ V
static DWORD PKTItemGetTick() { return _PKTItemTick; }
6 o) ~8 R- I: E! S& F
0 E2 |! E6 L0 C } static void PKTItemRelease()
; a0 z; a6 d1 h1 m0 _) W/ P {
8 Q: Z" D& R% V2 P$ n- H _PKTItemTick = 0;* d7 e( H6 t& {$ ?# y
_PKTItemAction = 0;
/ q2 H+ |" T6 e0 O$ m8 Z _PKTItemID = 0;
* y2 \2 g x( W5 ~( Z; N/ J _PKTPKTType = 0;
) J( p: b% a4 W* T; } V) M3 ~ }- q" w5 F; L* u' t* v4 _
r' t7 b5 j0 ^$ S* \1 E static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
$ u: p W6 j! x {
* {; P$ u' Z6 B5 q _PKTPKTType = aPacket0;
, m% M9 v% b9 B& H# ?: Y V _PKTItemTick = tick;$ P8 p" b$ R9 ?- _# z
_PKTItemAction = ItemAction;
/ D7 b2 N3 R/ a& \9 E$ F( N _PKTItemID = dwItemID;( z6 n- ?$ }( d( L2 P6 m1 B
}# Q5 h, q+ p- v t( g
, ~% k! O9 n/ l static void PKTItemTellW8(DWORD tick)
! V' ?8 P) m- h( v( ? {/ ~( i: b6 q) n' E, {2 _4 K. s; P m
_PKTItemTick = tick;
3 { `* l/ ]5 Y% Q }% Z L' S1 W9 T1 Q! x1 ^+ s
1 M% U4 o* i/ m1 Q- p8 p static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor5 O0 y1 g( D% ?) x
{2 H( I6 F: \" Z
if (aLength >= 8)
* F$ \0 H" Y$ N" \9 [ {- m6 q" L8 K! r- F
DWORD dwItemId = 0;
* F. G% x5 F& t memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
0 K1 ], p' X* G5 K( c+ j if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE. @9 }) }9 t' U& z/ m2 c; M
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE) b. i6 E/ O4 l9 P+ {! p
&& _PKTPKTType == PACKET_NEWITEM
/ O3 q7 T. M+ P0 l7 | )8 {+ h v/ h, i! i9 o2 |% ]
{
/ i1 ]* ]8 ~* \6 @: z4 k: F if (_PKTItemID == 0 && _PKTItemTick)
% U0 `; X' `; u& i1 n {6 G/ E- Q! g4 P6 A2 M
PKTItemRelease();! ]4 }) Z! A: H2 y7 V
}
$ Q4 I0 e- T' ` else if(_PKTItemID== dwItemId&& _PKTItemTick)
- }; L ~: }# Z: i2 p( U( \1 h- d {6 B3 p( ^! c: D
PKTItemRelease();0 G5 K' s/ m& |* Z2 I: E8 F
}
9 E ?7 f/ U7 H# N) _6 ` }
0 Z8 t2 K' R: M' K; G& J$ W ( X' `) h2 S1 a8 W
}
9 L" |8 z) ?' v! F B }/ J* i w. S! L
& [* w, o! L9 d
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
1 j" m) p8 C" p; T {0 x7 n) C9 A5 U( U4 M- e
if (aLength >= 8)
$ r! A# B2 C C2 d8 F {
7 ~+ p1 L+ w w DWORD dwItemId = 0;! K7 F/ I/ N; `8 P- p* ]
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));7 g% g( _- l% A% G+ l! f0 Q
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE* s/ B' j: a) r% N* V. w
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE8 C! Y0 U; y! R8 i/ h- C
&& _PKTPKTType == PACKET_ITEMACTION
7 U( k$ t3 `) R& f) }5 L( @4 M2 ~ )
# A7 w1 Y A5 X# S" ^1 f0 O6 b, X- R {
6 L1 T" N5 K; ]/ m$ @ if (dwItemId == 0 && _PKTItemTick) k8 y; o8 [$ ]/ G4 @1 U$ ~
{" Y9 A( F# r# o& W8 R
PKTItemRelease();. E) {; } {) X
}% g% K$ f, e1 x: M2 M; v6 P- z+ x
else if (dwItemId == _PKTItemID && _PKTItemTick)
% s, o! Y* Q- ~2 G. M0 e7 X {
* u+ T6 p( g$ o0 |- [, r PKTItemRelease();
0 F. ]8 A5 c, e& ~8 y+ W }
' H+ H& |1 J' P- H$ _ }
% O3 } Y8 i& E/ {- b ( D( |8 b9 O+ i" l* s$ k9 k
}
- w" I' {& }, O) e3 Y }5 \. |8 d1 k7 Q& v" q3 |7 z
$ w6 v/ b2 F' g% ]% |* |8 X( E static void PKTItemGameLoop()
, R* I% v/ z, W S% o {7 Y% \3 ]$ z7 F5 p) z' r) H" N
if (_PKTItemTick > 0)- l5 W) Q+ t6 E+ Q f+ _
_PKTItemTick--;( U e* m/ o1 a
else if (_PKTItemTick == 0)
0 @6 ~0 ~4 j) Q/ p0 y8 b; x" V! i PKTItemRelease();
u( `" `/ J( M8 B) K }
; m- c+ n% G4 u- o0 p5 {: j
' M: C- n) u0 Y; U2 A) \ static BOOL PKTItemCando() ' g1 a& m* Q4 m
{
: }% Q& H. }) j if (_PKTItemTick == 0)return TRUE;
+ m! D8 p2 @: v return FALSE;$ r6 R1 [# b& }( A' F3 I7 B
}% }! W8 P1 Z" Y. W" {. X
; p1 L+ Z$ e- _ static BOOL BuyItem(DWORD ItemID, DWORD npcid)& c* `! ]$ l- t! S/ { Q
{# O$ X+ O: q: O
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
: U+ u- ]0 J) R( p' x3 y BYTE aPacket[17] = { 0 };* M1 f2 ?0 a+ J3 Y# [; e" i$ D
aPacket[0] = 0x32;
" {7 q, j2 o _! L+ l ::memcpy(&aPacket[1], &npcid, 4);
2 m# T% ^6 x& }0 m# P ::memcpy(&aPacket[5], &ItemID, 4);
6 J W0 c3 ^, W# a( F0 @. C" E1 ?- t //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
6 E7 ] {! m% J! a/ v/ q D2Net::D2SendToServer(17, 0, aPacket);0 Q! H" V9 c+ O+ }% j. H
return TRUE;
' ]8 R6 G/ T5 R. _2 A }
% u( r; w8 ^( W3 @
$ K' p3 {- j/ u% C) e static BOOL SellItem(DWORD ItemID, DWORD npcid)( t7 P- K; R" h9 k* `) U* o `0 q
{ [3 p8 ^! Z9 _' O+ S& y( @
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
. l" U+ h. @0 b7 g, Q& w BYTE aPacket[17] = { 0 };
# M% M% H x9 { aPacket[0] = 0x33;
~* }; S3 T% \+ n' s: N ::memcpy(&aPacket[1], &npcid, 4);" f* {# }- }2 n7 J2 r. J6 U
::memcpy(&aPacket[5], &ItemID, 4);
' _# K4 @. b" R //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
4 |4 d0 K- Y# ?$ |0 n$ H5 K) B D2Net::D2SendToServer(17, 0, aPacket);
( ?& y( p$ y2 F- w$ ?( Y: N return TRUE;3 \9 Q) L" Z( N! ?; Z. i/ a+ f
}
. {( T* y, l) a X5 u5 N% {' b; P( ?. {- d, M" ?
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);/ C2 N1 c& j. F5 u( t; [3 @
" b! F% [: Y" C0 P+ q% u+ I0 }- l static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
" K5 G3 q5 k3 |
7 |- S+ v& L5 @' q static BOOL OpenCube()
5 R3 \4 E* |, Z* Q4 T {1 V E8 B: {5 `) c& T+ D7 v
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;5 k4 d( p0 D. l: k0 K! ] {
; J5 u) I7 i. |" o4 Z3 n
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);" i1 B+ ]% q' p; d3 A& R/ F
if (!pCube)& O6 \& C q$ s6 K
{
9 {% V2 ?5 x/ c" ?/ y pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
: d) o0 s: \5 A# o* n0 E. B) c if (!pCube)
2 g8 o4 x* L& e# R' h5 T7 @ return FALSE;) Z6 H! @. f N1 N9 P' s
}
5 r0 T( K( q- Q/ P5 v: N+ \- r PKTItemTellW8(PacketItemMaxTick);
: `( R! ]' v% o+ a/ |+ {( h3 t8 z' x; t* U6 a
D2CoordStrc mypst = { NULL };
B' `% K( g) _8 H* o0 j# d D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
' D' ]2 L% Q1 z* R0 ?6 m% f) Y# y' n$ ~
BYTE aPacket[13] = { 0x20,0 };4 a0 x# q8 j# ^0 s% O. u5 m" j, S; V
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
P. o" u h, M- v2 Y- f A0 L ::memcpy(aPacket + 5, &(mypst.nX), 4);$ m$ J; D/ p1 M0 \5 H
::memcpy(aPacket + 9, &(mypst.nY), 4);$ O# y8 {/ X% W* r" X# p% V3 m+ ?
D2Net::D2SendToServer(13, 0, aPacket);$ K- {5 N* B; S% s- I0 O6 K
return TRUE;
9 e# I# |7 m8 X1 U- z2 q! z }
" l+ D1 ]/ Y! n. v- S' ?0 J$ [
( _5 b+ V5 {, ]) O4 o1 Y0 ^ static BOOL ToInvxy(DWORD x, DWORD y)
1 T" n( y' D; s4 \1 P" V {( s; o' n" O+ ^
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
8 D- C& s$ x( G4 _9 y: ^3 N$ q- g; Q4 h1 R- R8 j7 F. O
if (phand == NULL)
- h% a4 X* s5 J8 s1 A- A return FALSE;
9 P, @% n7 V( [# H9 V
; ?8 _9 R; I6 I: `8 C3 `! V PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
0 f! L/ y0 ~3 Q. P) D. X! s) k/ r1 ]) `: B2 {
BYTE aPacket[17] = { 0x18,0 };
7 Y$ B( B- m+ ] ::memcpy(aPacket + 1, &phand->nItemNum, 4);
$ g3 c, J/ F5 m k ::memcpy(aPacket + 5, &x, 4);% z' h# j5 k% j( R% v
::memcpy(aPacket + 9, &y, 4);
+ p! ` X7 l% t* r) Q, Z D2Net::D2SendToServer(17, 0, aPacket);; _& F( q+ T& ?2 \8 V+ O* G/ n
return TRUE;, h/ m8 [- k2 {9 g6 S; W4 ^" Z5 H3 w
}9 U1 W. F2 I& f! L7 e" {, P
: a7 u( X+ L2 x; d7 t I' o- U ]1 e
static BOOL ToInvRandom(BOOL bBagFix = FALSE) + v7 F% U. X4 @5 H$ |4 p8 e: P; w% X
{ N. W0 {3 _4 E! T1 k, `* i
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
/ ]- s0 v& ]; D if (!phand)
2 ]3 B; f; |0 a. e return FALSE;
& D, T, G4 S8 H0 O# V int desx = 0;
+ O0 i$ W8 N* L* U# ] int desy = 0;
, |) t& G. e6 Q# s* f! M5 J) l if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
$ `/ O: E* Z2 R9 j {
* _9 j; k3 \$ ~7 \/ ? ToInvxy(desx, desy);
9 K' n) \2 N7 q H T! c return TRUE;
5 ?' {; {9 H `9 J }
7 S8 [7 O# W/ X0 P6 @6 Q. ] return FALSE;
g0 \% @1 Q8 m! B! g8 V }! t! p/ ]% H' G
4 O" {% R9 ?% [3 ]4 d& T2 w* t static BOOL ToCube()& S' f+ ~' Y( i! t+ \
{: }% p; I, I$ D6 v' A6 X
if (!(*D2Client::ptPlayerClient))return FALSE;4 }+ g! G# J# W) G! b9 d7 ]% I
3 ~; _# O# f; z! o( c4 y/ M) ~9 V7 E UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
- n. b3 t* C! M# b, o( q if (!phand)return FALSE;
8 J7 a5 a" p/ h A0 P, A% ?: n8 }- o) O, L d# y$ B* s$ h1 z
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块0 B! h) P8 R& N7 s# A6 H$ a4 M
if (!pCube)
- d8 n7 }( }1 ~ ~+ R {( i2 _7 y" U4 c+ y( Y
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块% M( G' E$ F( S& x; ]' y1 K; }
if (!pCube || !pCube->nItemNum)
5 M/ `. C9 @) v/ r% G+ B! P! Y; q return FALSE;1 Y% n/ |! ?. q$ A
}) M$ l4 n7 N0 a- }" B' N9 A/ P
1 ~* F! ` r2 b if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
1 @( w2 x% g1 k3 V) x3 E6 v* m return FALSE;4 V7 F& U. N0 N5 t# x/ Y( I
S. d% S5 Z5 V; Y2 j- j3 F/ j PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
1 P T* }$ t1 {- _* a, n3 p' D e
BYTE aPacket[9] = { 0x2A,0 };0 e+ M3 u& d2 _+ h) g
::memcpy(aPacket + 1, &phand->nItemNum, 4);! J: |0 n G, l {- b
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
P+ e6 D0 g! e5 |* V3 v3 C D2Net::D2SendToServer(9, 0, aPacket);
' Y C$ x5 P4 X5 a, s return TRUE;( V; w" X3 b; ]6 g8 \
# N0 P& @1 P* s8 T# O! X7 n }
2 w, ]% v/ B; ^( m$ }! [9 U3 y+ M3 T5 D2 L f @
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);0 I, k: E* _& u; H
: h0 _6 ]& T- i X- j. y7 y4 Y static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存/ C9 N0 T( F9 E7 [
{1 |; l: j0 R* d3 f5 D/ G/ [
D2CoordStrc mypst = { NULL };2 i1 l* n' x; w2 }9 \: [
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
) a) I; c* c" W; D% D
* U, N0 j' K' }/ b, V4 f if (!mypst.nX)return FALSE;
# w( g1 @; N9 F" M3 G7 P- g ' k, C* m) f+ C5 |8 Y% z' T
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
& {" q4 D( D" e7 {' d/ e
# E) _9 x4 d9 v# I, s* h7 ?4 V BYTE aPacket[13] = { 0x20,0 };
0 o2 g$ w8 ? F: S; Z ::memcpy(aPacket + 1, &dwItemID, 4);5 Q& U. @! o1 {6 I0 a
::memcpy(aPacket + 5, &mypst.nX, 4);5 M; m5 B6 M) i+ d% O9 c4 `
::memcpy(aPacket + 9, &mypst.nY, 4);& R( w; u. z1 S
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
) q4 b7 d* ?/ g8 g0 `5 K D2Net::D2SendToServer(13, 0, aPacket);
# K5 u( x) U5 q% B) [1 x# h' t return TRUE;# q. F8 ~1 R8 R' v; j" D
}
, n! E8 H* {1 R( \2 s, r1 j) Q3 U" K. h! [3 Y! ]! J- N; ~
static BOOL DropCursorItemToGround()
* V! h# L0 f Y+ ~ {
% B7 T/ Z' Q5 S8 i- L2 r F UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);1 d( U/ y( Y- ]. {: d2 x
if (!phand)
) k- c' \0 f- }. X# \# @; Q$ ?, | return FALSE;
$ R; z Z0 G, M, e3 _, p9 w- o% U( C4 Q2 d
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick); v3 |; g' M6 |1 N( |
# Z/ ~) C$ s' @9 ]& ` BYTE aPacket[5] = { 0x17 };
* \9 u2 c2 w4 r$ C$ O ::memcpy(aPacket + 1, &phand->nItemNum, 4);: o, D! {. C6 Q, V
D2Net::D2SendToServer(5, 0, aPacket);3 C! S& C4 r; g8 O% r
return TRUE;. E7 m9 X7 | ~0 u( K/ B
/ M U# f, _& A- I }# d* f' z. n, B5 T& R; B
: u( B: I7 ^. ]# Z8 i; l: j- G static BOOL PickStorageItemToCursor(DWORD dwItemID)
; I1 O" a ~# L2 e" x+ c {, ~/ [. y' ~/ x$ Y
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);& {# f; B4 d6 T# ?
" g" X6 B, h9 c& Z/ r* o4 ~2 l @3 h
BYTE aPacket[5] = { 0 };6 H/ k1 {& f8 V4 ?1 ^
aPacket[0] = 0x19;
5 j; O% Y& A9 p0 Z$ n: F# [ ::memcpy(aPacket + 1, &dwItemID, 4);: }) n$ o* M" k! b9 Y* C
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);8 i4 `5 }" g, J( t7 G3 `& F
D2Net::D2SendToServer(5, 0, aPacket);
- y5 p2 K+ u; R% a4 k( Z! G, f( [: L return TRUE;
3 ]6 X. u0 w7 Q/ Z) e, n3 T" j }5 H- x. c& s0 G; w
9 G. Z5 A: b5 r9 g* h; r
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
/ y, U$ ]7 n o$ a* N6 w' X/ c( d {
# K+ j! M' e* {1 K PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
6 J# @) Y" R7 e9 ^3 S! y BYTE aPacket[17] = { 0x1f,0 };9 @8 C9 q9 e' E0 c. |
::memcpy(aPacket + 1, &ItemID1, 4);
. l i, Y) o6 _" l/ k/ l ::memcpy(aPacket + 5, &ItemID2, 4); r0 _. T5 S! N' Y3 q
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
7 @1 z0 j3 H; f: l( h. k) p D2Net::D2SendToServer(17, 0, aPacket);
& H. w, V' ^1 `( D# c return TRUE;
" ^$ g$ a, J$ o' n; E }( K" ^5 ~2 N8 @: P1 r: r6 G/ t9 F% ?
/ K) p% I' l) V0 J- U. A static BOOL Transmute()
+ o# \. I5 X$ m9 `4 P. E5 J' Q, F% U {
5 q) _4 X6 \+ H y if (!(*D2Client::ptPlayerClient))return FALSE;( r- C" P. ]8 q3 o& P2 B' U$ N
) }5 ^* j. Y- Z+ ~" w if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))1 J7 d* X' H ^+ q P! ?5 E) \
return FALSE;
. L9 }; S9 ~/ O0 f9 z* {
q: @4 ~' Z/ y- T: o PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
) z" k0 c: g* ~/ M/ b" @# h BYTE aPacket[7] = { 0 };
5 l; ~: L& E: w8 @* } aPacket[0] = 0x4f;
- V% C8 q H5 a' p( K: y aPacket[1] = 0x18;
7 y6 t8 W7 b s; E' Y& y D2Net::D2SendToServer(7, 0, aPacket);
! r. K+ z5 u& g0 y return TRUE;- ]' c9 U6 a" d- s( a6 K- O
}
2 L) U+ u3 o$ A: W9 r. H9 v};2 ]- @& [8 u5 I( Q" I
, P4 C4 a% h4 |( N: I% i, e
|
|