|
|
转载
: v& K+ Q+ B6 ]- H: p3 [- c% B自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
0 O4 Q" E* @! w4 xD2Client:7 Z9 S; e! m! B: l% T9 Q5 g- N
6FB20AE1为拦截输入框(用于获得命令)% c- M% U* g* w
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
% _: g. k! k2 t& h: t; I6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
+ T4 w4 Z7 l0 t# F$ w' ^6FAF4230为hackmap的loop点 我用的hackmap导出位置
5 _- Y/ c: {, H) {6 m3 A
/ M3 L& P$ M/ R% y$ v5 f3 {; O6 P% Z: D$ t
发包函数:
1 M- ^# c& Q; }6 c+ P' Zclass D2PKT_ITEM- n) M7 J* T; ?* F0 F) d2 E/ g1 p
{7 G& E' E. @! ^# F7 K
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
6 U9 S& w; r* f- N#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多1 ]% Q( O/ e: ?- k& n9 z
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
' ]( r% R1 V9 m- y# K& g* N( F, I; I#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
( A7 ^) _- o( f3 L' ^9 l ?#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
+ h4 |' c: c% S1 _* v/ X) H H#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上7 L* ^- D+ b8 T* M1 J2 y/ P+ I# y
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏; R# q2 ^- Q, S3 G
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上7 r, n+ x% r5 e+ Y
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
. B# R5 {+ a; U0 p7 h+ t. \#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
$ s9 x% j4 H3 w8 o' N$ a% b( M/ I, J#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV" v7 H! |& w5 X0 ?& J
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 * l9 a) k5 E# R. B; g7 K. V
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带; W% l; k0 |. z3 H
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上8 ~( j' o% e0 r8 g9 c. N( E
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -; {3 Z2 a* N d. A4 _- l
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上0 k$ s+ g/ a {) Y" n/ t5 I
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -" ^# [' [6 f @+ ~6 d- V
3 ?: f* Y3 l% U3 i$ M$ |#define PacketItemMaxTick 150
+ L% l& i2 ^- X+ u#define PacketItemPickUpTick 20! K' h+ q- f! e& l5 t/ M% G4 [
0 `+ K5 t& c# P9 V+ I
private: q- o- P0 G/ b' E
static DWORD _PKTItemTick;
# T! E/ c$ d, m+ W. P$ F, t: b static DWORD _PKTItemAction;9 I' e, O @& P" b. e, k3 ?
static DWORD _PKTItemID;8 v) L" g, P4 H, f4 w( w3 f
static BYTE _PKTPKTType;
+ _3 c+ n/ ^) o9 ?: b/ [public:
1 }+ U* K+ Z5 V static DWORD PKTItemGetTick() { return _PKTItemTick; }
9 f- e9 p7 M9 p0 R& W4 N: [1 F& \
static void PKTItemRelease()
) N7 m: v9 D- X6 V' ~! ~ I {& `* C* ^/ S3 Q& i: ^
_PKTItemTick = 0;# D0 q4 H& Q+ O: j( H
_PKTItemAction = 0;
7 t9 |( f! q/ e1 k! \' l) w3 Y _PKTItemID = 0;
y4 B5 p; f+ S, ~+ P# b- ` _PKTPKTType = 0;2 w& }) e' l' W" E& x% s: p, b6 j
}
& @8 K j) v4 M7 ^+ s- e: h: C. D7 ?( F Q5 n: j$ M
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
3 ~* F+ E1 t4 |2 m! q: F5 l3 Q {
# Q8 @# F* M0 y+ s! | _PKTPKTType = aPacket0;
0 z" ]% x* y( l' ^ _PKTItemTick = tick;
2 d4 c; n! a( @0 h _PKTItemAction = ItemAction;( g! `+ B. M4 H9 l1 x( ]3 A
_PKTItemID = dwItemID;
5 t" k8 f+ H9 e x& V3 Z }; m3 z: a& Z8 \" v9 S4 y$ e
+ \% A# o$ D! h7 W" z$ Q! d static void PKTItemTellW8(DWORD tick)* k" Q; a8 }, W$ F, d3 t7 u& U: ?- m! h
{: C7 C% N, x: a4 o
_PKTItemTick = tick;. K8 _2 i+ A6 d/ L8 Q) T9 O- `
}
$ M! P: [! M1 B" R0 f4 l- O% C# o- M" c/ P
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
' R* w; s0 d4 k3 t7 _ {& V( a) Z, b A u; H/ u! ?0 G
if (aLength >= 8)8 L" @$ r$ c/ n$ h; C; v
{: F% H# x: y1 t' F5 C
DWORD dwItemId = 0;7 s3 Y; a3 l) g& s" z# c7 y
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));) J6 j4 B/ _! @3 _
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
6 }7 c0 T7 Q- N* Z && _PKTItemAction == ITEM_ACTION_TO_STORAGE: h* I( ^' Q. D. s$ G
&& _PKTPKTType == PACKET_NEWITEM& r1 w9 V$ }3 S% t1 L7 }4 D
)/ Y& d4 C7 U9 t/ v p9 a
{
, u8 x0 }6 `- P4 w+ ^" K0 ? if (_PKTItemID == 0 && _PKTItemTick)* O& T3 E" ^) K5 E d5 e: E
{
0 Z) z2 i' C1 k7 P2 @% e4 D PKTItemRelease();. Z/ E2 `6 y) U W: H/ y+ P
}7 {$ }; E; O5 I! ?1 y/ |
else if(_PKTItemID== dwItemId&& _PKTItemTick)
5 L) G' _3 @ K8 Y {
0 ?4 T7 o0 Y; y5 Y$ L) X PKTItemRelease();* l+ @3 h& n: b: B R+ n" Y% p7 ]
}
5 k w0 ^6 A Z$ L; P. M }) o/ M$ c2 A0 S* D
: ~- P- A" J9 l1 \& V" } c8 v
} U! G5 {* N( ?5 E# S; c9 b4 _- n
}* k3 c3 z3 _, n& k ?# g5 D
1 b- H& t& d3 V; V, c' F3 M
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored d3 F& r% m2 K+ ^% s4 t* E$ ^+ p, }
{% Y- R+ U2 e: l3 \
if (aLength >= 8)
0 _( v9 j& p$ k5 U; Y- I {& P5 A! n* I. Z0 l- ^4 D
DWORD dwItemId = 0;
: k: G3 z# O0 R0 z$ N0 ]$ S8 R+ e memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));( m9 E) x j$ F ~1 h$ @8 `
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
% K( w* Y) j" W S && _PKTItemAction == ITEM_ACTION_FROM_STORAGE7 R# @& b- y/ N3 B
&& _PKTPKTType == PACKET_ITEMACTION$ p5 Z4 V1 N! y* @+ E
). x8 w6 D5 V8 |, g* b
{ w' y0 S% i% o' ^" F9 ]
if (dwItemId == 0 && _PKTItemTick)
7 K- l) x( F0 S R {: A, M; i/ {2 Y* ^
PKTItemRelease();
8 c" n" S! X2 t- \$ O; x- o) t* D }2 v6 a: J! f( V) }- t- e+ R; p
else if (dwItemId == _PKTItemID && _PKTItemTick)8 }0 u& S) P$ U, n$ f6 A
{+ x/ s: z, |' C( h; j
PKTItemRelease();" R0 ]% m( Z1 E
}' w( x* E) a" ^5 Z! E) L- L! I$ Z
}) E# x/ J) F! U+ f& T
/ N( x/ u3 Y! m# L, }- i; o
}
: Q# r; O2 r7 M } l! b5 d7 \) j5 y
3 K8 f( o, H5 f$ Q; |
static void PKTItemGameLoop()+ C) P% A, @' x
{
8 Q( S3 s; n0 C% c R if (_PKTItemTick > 0)
/ G, _/ D4 ?% n6 {) q+ E: t/ X _PKTItemTick--;' c1 w I' ], L% Q: ^ }
else if (_PKTItemTick == 0)( D4 B) j5 j \
PKTItemRelease();' t# C5 e/ ^, e! D2 ~7 Y% Q
}
0 F) O- h2 R! e$ N* T) C) T( M! K9 [" K
static BOOL PKTItemCando()
" u8 o8 ]7 I) A2 ^2 ~+ T {. R+ O9 k) B% x1 y& V( u
if (_PKTItemTick == 0)return TRUE;$ U, O- e" C/ {
return FALSE;$ o! Y8 ^& M0 g, {
}4 k7 X5 G2 N- U/ Y; G- ^
) t' a8 p1 u0 c. l# t! A9 f1 S" n static BOOL BuyItem(DWORD ItemID, DWORD npcid)
3 e- l7 g: v6 b6 o/ C; O {; q3 `5 |1 o1 \% |% Q# r4 [
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
6 p& Q7 w, Y; v( ? BYTE aPacket[17] = { 0 };
+ `- `6 B& t9 r6 X+ y( n0 V aPacket[0] = 0x32;' ~8 |& ~( v% ~
::memcpy(&aPacket[1], &npcid, 4);
: I2 y J6 \0 K( _7 e! }. n7 C- c ::memcpy(&aPacket[5], &ItemID, 4);
$ a' P; i3 n6 p9 |- O, e+ v1 X+ t //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
* u$ J2 F1 b7 ^5 f5 H+ m D2Net::D2SendToServer(17, 0, aPacket);% p6 |( L4 _5 ~
return TRUE;
3 J; p( e, q2 V6 l" h1 S* A }( i7 O" n& D6 d, L
$ Q( n- ]% G+ p4 t# |0 Q k static BOOL SellItem(DWORD ItemID, DWORD npcid)7 U2 D9 i9 A8 f G# g6 j
{
/ K7 k+ m8 d n# V7 O PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
+ S8 m" b) W* J$ j/ B BYTE aPacket[17] = { 0 };' |- b& M( n) y. a; e
aPacket[0] = 0x33;
* E9 r$ b9 g4 B ::memcpy(&aPacket[1], &npcid, 4);
7 U1 j4 b) T) N: \ A2 }) r3 B ::memcpy(&aPacket[5], &ItemID, 4);
! {+ i; B: P. J5 s: \- Z8 o9 [ //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
9 h* d" _( z2 H) m8 ~ D2Net::D2SendToServer(17, 0, aPacket);/ \7 O2 F' c$ l H2 v5 T, f) c, ]
return TRUE;
$ Y5 I( H- H/ H }# O% `+ q4 C! Y2 F4 i% Y0 `/ q/ _
' g6 d5 c1 A' v" u
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
- q2 c- k l7 N8 h+ y
5 J8 [; I+ Z! C6 l5 X static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);6 d l4 v* c+ T/ Y" x& R3 b: P
1 P9 y& b) H( \) T2 \8 l static BOOL OpenCube()( a; ^. G4 f% [: ]) m5 S% A1 j
{
* R6 U3 U$ z" L: X- y if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;/ Q) C5 L: r, [
) \: w' ]9 _: G UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
6 _1 G2 U0 w& \0 G3 X if (!pCube)
7 R) }) T! |& l2 x/ \" n, f' D {
; L& @- o5 u) }% r0 G7 d pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);/ E) R5 W% f% R
if (!pCube). \* m c7 T0 c! [
return FALSE;4 ^8 ^ L5 D$ X# h4 O
}4 L4 K8 K1 t, H+ [5 C! L( x
PKTItemTellW8(PacketItemMaxTick);
& v; |$ V( e% n; V( d
, c w( O& ^" C9 b) e5 t+ Z D2CoordStrc mypst = { NULL };
: W* A+ I/ v8 m: O1 X1 h D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
3 [, Z, D) y ?9 I' Q' O& J! A3 Q Z) v5 O, s! T$ `" {: x
BYTE aPacket[13] = { 0x20,0 };$ f8 u# o4 c4 h1 |5 H# q
::memcpy(aPacket + 1, &pCube->nItemNum, 4);6 y$ ]) V- k3 Q- q6 H H
::memcpy(aPacket + 5, &(mypst.nX), 4);
3 Z1 P* |, w/ ? ::memcpy(aPacket + 9, &(mypst.nY), 4);
; `4 b7 p3 A1 J3 r# K$ D5 P1 i D2Net::D2SendToServer(13, 0, aPacket);
. v8 z- W" Q# j8 {" C- M5 E, P" v return TRUE;
7 z- l- b8 q& H' ` }
6 @% x) w- C4 m" Q2 c$ H
) z: C: c" O7 A U static BOOL ToInvxy(DWORD x, DWORD y) w" z) j* K* p, W5 ~" w+ }: A
{
1 E( z( x: n( b" Z7 D3 Z UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
3 v& S+ @+ V2 ?( a, |/ d: Q/ [" [/ F8 { P: _; M$ W& p
if (phand == NULL). @/ q1 V0 P( P c2 K1 d
return FALSE;! k, ?8 Z3 Q: i4 E- u2 S6 r
: W: l/ n' }* y: z5 l
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
1 _9 N8 j3 M( _0 V
- Q" h- q. Z& ^9 M1 }5 D BYTE aPacket[17] = { 0x18,0 };
# T; b! }! a- s9 j5 S& Y ::memcpy(aPacket + 1, &phand->nItemNum, 4);0 v Y& j: n4 y
::memcpy(aPacket + 5, &x, 4);
: f3 j+ X5 E" Z ::memcpy(aPacket + 9, &y, 4);
- U4 s) |2 T2 O u" Y& `9 ?. B' P D2Net::D2SendToServer(17, 0, aPacket);
, d2 e- i2 C; Z' h return TRUE;
# f; h v L# U }2 r+ k: ?; X k+ [, r/ P
' G# G& ]; b+ J; Z
static BOOL ToInvRandom(BOOL bBagFix = FALSE) ) @4 h1 d# n1 |- _0 b
{3 K8 N' E- y1 l* p+ F
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
3 ]1 D7 z. V5 F |* r) l: h if (!phand)9 Z/ h3 Q# I" S; o
return FALSE;8 \/ X" N: m8 q4 M, g
int desx = 0;
& d! O' e$ U" z- u$ F' f) B int desy = 0;
, B' U3 j0 c0 n- G4 z4 e if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
6 R: o! j) l2 O6 z" \( G. F& N {0 x/ f( _( \- t( e/ M3 J* m
ToInvxy(desx, desy);
2 }( Z; A9 p, n: |5 z C. _ return TRUE;5 W, m5 e+ n8 ]% ?% a5 @- a( E
}
1 K7 U7 ^4 S* r& h- x" D return FALSE;
3 z0 z6 H. {! k: _) [% M }5 D- B# j6 f ~) ] K& J2 M/ Z
3 c: e* f5 D7 N k6 y9 c
static BOOL ToCube()4 `" b. q1 l$ u, {) q
{
' Z7 a6 ?3 C9 _8 V E; h- m if (!(*D2Client::ptPlayerClient))return FALSE;
( @$ o" y W) b9 N1 A6 U2 y# O" F
3 j9 T3 H6 Y$ L4 f9 {6 o4 t UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);& U) F- I7 P- Z9 p
if (!phand)return FALSE;% G2 [8 B6 s! @/ C/ E
1 ?* ^1 H- `# F8 D1 D
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
8 q% o, A$ x0 ~; T8 |2 E- C if (!pCube)7 z8 T9 d7 i9 E! W9 }
{
; s# x5 y: k; ]& W) h7 A7 v pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块7 g& U+ T3 W. x: ?. h0 L; o: ^, V- V
if (!pCube || !pCube->nItemNum)% F3 h- M: ?7 A' [
return FALSE;. v. Z2 b8 ?8 r4 Q; [; w
}
, {# F8 m4 F" F( @$ R R7 r& F8 }! `' n1 t4 d) T
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
: I' y( `! ^1 Y" W3 s6 C5 @9 Q return FALSE;: M: k4 `' L1 r% Q; B. R
$ ]. Z% k9 N) S
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);; F7 v5 {7 L" B/ J8 M, a$ W, m; m, v! C
' K- W( A) A7 h5 R4 Q2 e3 Y- ~
BYTE aPacket[9] = { 0x2A,0 };
& X8 H/ M& q& ^& ]! Y ::memcpy(aPacket + 1, &phand->nItemNum, 4);' g( \/ }/ K: a3 D1 }) k7 e# V
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
1 z/ F8 S/ ]$ C D2Net::D2SendToServer(9, 0, aPacket);
, p; Z" t: m+ C return TRUE;
7 q Q+ E; m) z4 R& t+ W7 N7 f% P+ W" a5 C* Z
}" p: [0 D/ | n9 L
' N& f% K% C: t' _4 v ]
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);5 F: [7 Y- R6 m3 L9 k7 z
# f6 f' V" P& q# k2 ?' Z
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
2 B3 \: B6 {. _* Q {/ c O9 ]# F% _- B
D2CoordStrc mypst = { NULL };2 t1 y! W6 \1 H0 A
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);) y; r, d) E+ m+ f; V: V
- C! D x% D$ V if (!mypst.nX)return FALSE; P/ z0 z1 Z0 w, E
8 P: B9 k7 {: {3 i
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);8 U+ D6 Z$ v& T( U( |
5 w, F# j( \# P! W4 b1 z
BYTE aPacket[13] = { 0x20,0 };
2 m8 x9 d1 j/ B ::memcpy(aPacket + 1, &dwItemID, 4);
3 l* y( J4 i8 I1 w# N ::memcpy(aPacket + 5, &mypst.nX, 4);
0 K% G7 C' g0 s ::memcpy(aPacket + 9, &mypst.nY, 4);0 O G0 T6 b& g+ E1 I
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);" Y) x) k/ s- s- g0 V+ E2 a
D2Net::D2SendToServer(13, 0, aPacket);
% p: t, v( m) M# j$ P4 T return TRUE;
F7 c% a' r; T4 ?+ K: I- u( T }
! F1 Q0 e9 j* g* f: `
( Q9 H6 E# q* W$ f8 @- K1 O static BOOL DropCursorItemToGround()6 h) A* }+ M) T+ K2 e
{
$ e" y$ D! Q, _# V$ l' b UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
; L' m3 Q$ t3 V# g if (!phand)! r# u( c) A: B5 L- w
return FALSE;
. ?/ J. J8 l; D- B7 B8 d
( W0 j, i, V7 M g' K! }* M PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
8 \; [/ F4 i3 l* j4 Q1 a
: Z3 W* |$ o" } BYTE aPacket[5] = { 0x17 };' T3 b% O1 K! J# }6 b( [" j
::memcpy(aPacket + 1, &phand->nItemNum, 4);
3 B/ F7 A8 X8 `. Y7 c& X6 X, E% R D2Net::D2SendToServer(5, 0, aPacket);! m+ e7 k# H4 I5 w% r3 F$ f
return TRUE;$ _& a( ^; h' @/ r# K$ W
' V! v }" g9 F }7 R" S8 u; t( B1 ]# f; d
1 F) S4 Z' |4 c9 _ static BOOL PickStorageItemToCursor(DWORD dwItemID) H# }3 }, V2 N. u! z
{( w: a! b0 i/ q& h/ `& o4 s
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
5 v+ a* ^- O" G. a P& Y; E
; Q8 I# |! T2 C9 [' @5 P: `. l BYTE aPacket[5] = { 0 };" x% }' i, {, O
aPacket[0] = 0x19;# r! H# G. F; q+ r2 t
::memcpy(aPacket + 1, &dwItemID, 4);
9 ?. c- b. |* o, U6 h //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);* d+ Q- ~* [ E
D2Net::D2SendToServer(5, 0, aPacket);
! q# f5 `, p7 `/ p: M+ J. u5 C return TRUE;2 i, F" a3 t0 w) |- z/ O+ t e8 {$ m
}
( ^6 \, o+ e: D) L/ }( n: y
- X! }9 {/ [. `5 f static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)* w, M. J5 p" S$ @- e8 N
{
& _( W; Y H6 s) V3 D/ `7 T PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);! s5 o# M2 f. Y P+ t$ \
BYTE aPacket[17] = { 0x1f,0 };: Y- M+ E: j2 G% Y7 o5 N# {
::memcpy(aPacket + 1, &ItemID1, 4);' a9 ^+ X/ N! R/ g- U# p( P
::memcpy(aPacket + 5, &ItemID2, 4);
' ?$ R: ^ T- y //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);6 r8 d' ~. D( `& D6 ~
D2Net::D2SendToServer(17, 0, aPacket);
2 n9 W/ K: F0 m% b4 | @ return TRUE;
- {: d1 d( I L# g. N. h& F }
, ^) `+ T9 Q( j* x. r0 b$ d) S! y* F: O
static BOOL Transmute()) n* r j v: a8 t6 i: { f
{. b8 @0 b: z* Z8 F
if (!(*D2Client::ptPlayerClient))return FALSE;
1 i9 Z) y" ?) l# f5 K3 ?9 t$ M7 a. h% C% M6 m1 v+ n
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
/ v d7 h& F: O return FALSE; o) K2 [; v7 }, i; R1 |1 |
/ w9 |& R4 m7 ^0 U+ J; b! D PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);: l2 A) J0 `' A' e
BYTE aPacket[7] = { 0 };
8 p, y( g9 ?9 _0 n aPacket[0] = 0x4f;2 [1 w) u5 j1 Z) L
aPacket[1] = 0x18;0 C# b* k0 C" @# V1 m
D2Net::D2SendToServer(7, 0, aPacket);
4 w' O2 F9 R5 R, L1 j- x4 D/ Z return TRUE;
8 }/ k) A: \+ C }8 H' a$ d) Q6 d) E: Y
};" v7 U+ S6 j' J0 O
8 B3 X8 ^5 `% N2 \. f% w7 N |
|