|
转载" Y( J0 G4 R2 D. W3 C; S, p9 T
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
+ `+ p- ^# `/ J( G. N \D2Client:. u1 W3 J5 C7 b, W( o6 Y* u4 x4 n
6FB20AE1为拦截输入框(用于获得命令)
# j3 b( Y; T2 P( |6 t* M6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发8 p; Z+ r: B0 |; W9 o
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发5 ], t! E$ k+ D' P0 J) _
6FAF4230为hackmap的loop点 我用的hackmap导出位置
2 q) U9 s2 W6 g% e; E# `) y, H. g. H5 K, ^6 w5 \7 Y
2 z. Q7 [& k0 A2 n( v0 z
发包函数:( K6 Z' X9 p& T! ~* Q0 p2 P& l
class D2PKT_ITEM
# ]2 Y4 Z2 F, Z! z' F( t{
- ~7 k3 m* }5 t, j5 H2 E#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上. K' X @/ k) \
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多/ U. ^* Z% p- Z% c8 H, s
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
' E6 Y* V4 p+ g9 O2 \#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上( Z" v/ F; W2 G* A
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH' y: ~3 o& i8 O0 o
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
+ }/ D; w; Q% \# c) W7 c- K#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
[/ \( n9 u' s#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
3 D, Z( c3 N& {! B9 r: @' Z#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
9 B6 A- _- z: V% g4 e1 C#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店- _0 ^1 b9 A- m! S" [' M
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV) F/ x9 [& B0 \
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 ) J9 @2 ]1 I- t: x, H. o
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
6 u" l/ R7 V% y5 s# i( O#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上3 y) Z2 t. l, i. k
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
$ }7 B( _; J# b' u4 b" T+ C7 ]#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上. {. `; J- I! I$ `
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
6 P9 N0 ]. X2 Z+ a
: H! i# Q5 m) `7 h: I#define PacketItemMaxTick 150
- G/ Z4 X' C9 t9 f0 m#define PacketItemPickUpTick 209 m0 h' {5 X# H2 G; W% ?
0 X/ a+ l( @! B: ^$ C& q% |& V
private:
/ ^ s# S; l5 g5 d2 c7 ` static DWORD _PKTItemTick;2 @+ x9 |7 Z, C+ U0 N" p R4 D
static DWORD _PKTItemAction;, U$ i0 V7 |0 U$ I5 V
static DWORD _PKTItemID;7 l b- L8 i' T7 p
static BYTE _PKTPKTType;9 a5 H/ X; X9 z- H( I" c& t/ M* X4 \7 Y
public:
" M- p/ W# _1 M' Y3 K5 e9 a static DWORD PKTItemGetTick() { return _PKTItemTick; }
; N, M" N) _9 K6 y# l* G
/ w$ _: S9 G, \0 N- j; M" c static void PKTItemRelease() m" P. t: g; X
{
2 [* A+ U) q4 Y/ \ _PKTItemTick = 0;
& g2 p2 i4 N. B/ [6 @ _PKTItemAction = 0;
0 o- C5 I! B- q0 h' A _PKTItemID = 0;
; ~0 d D- d% h _PKTPKTType = 0;
, g) b$ _8 a( I, X' p7 R. |0 q# B* o }
8 `/ ? n7 F5 x. u' [0 V. M, P1 ]" D: L3 ?9 v* P! ~2 [: s2 h
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) 3 e3 C9 H6 }; }
{, k& a) x- c9 L% t% m$ r; e
_PKTPKTType = aPacket0;
) Q/ n4 Z% V3 @& `5 ] _PKTItemTick = tick;: k0 ]# r8 W# t* T6 N7 W1 H& q
_PKTItemAction = ItemAction;- \ r& L C2 ?/ A7 V6 }7 X
_PKTItemID = dwItemID;9 ~# K" W* a5 u/ M1 `7 M/ C
}* `" l( {3 {9 i! J
0 X' u4 F2 t% e9 M static void PKTItemTellW8(DWORD tick)
2 H8 M5 n( q5 T8 @3 {5 Z' | {
' r2 p; b- A- X( [. u) ]$ F _PKTItemTick = tick;4 w' z# d8 S1 L0 h. i5 h, ] |
}, }" Y; T4 Q! o7 l. b" d! m
# O8 G3 H+ z0 D' Y" T
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
! p/ N+ b f$ H* a0 Z2 P {
( H0 ?6 u; q; J0 g2 P1 c3 ` if (aLength >= 8)" _4 z; _ B4 v" `7 Y1 C9 x6 }; h. \
{2 X' K# O" t" r; O. l0 s; h
DWORD dwItemId = 0;
% F; N' K( |4 J1 O9 @9 ? memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
5 E2 H/ f3 V: c if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
$ p* n% V/ h4 U4 a && _PKTItemAction == ITEM_ACTION_TO_STORAGE
; z4 O3 U& o+ A* L6 d X$ Q8 K && _PKTPKTType == PACKET_NEWITEM
+ h4 B2 o5 s7 V4 ~. s! ?3 A ); I4 R* W% t J) p1 e* ?
{
6 G1 G! a& Q& M/ U) g8 P if (_PKTItemID == 0 && _PKTItemTick), A: z- g: ]& C9 X2 u& J( M" @* B
{, s9 r) r# ?: e/ t+ ?. R/ b( C1 H
PKTItemRelease();
; @; A: P- V0 I6 \ }/ w, w! Y* ?1 Y' A
else if(_PKTItemID== dwItemId&& _PKTItemTick)
/ F" Y* l( H6 g: t3 a f+ X0 p; K {
8 r- D/ }# q* d: y PKTItemRelease();
$ [; t- o, d5 e- Y0 G. i# V }
% j+ W. ?# n7 o! S9 ~3 @% P% T1 q1 n }- y T8 ]% V) {/ E1 L, `0 c7 F
6 n9 S! }& R% l* B. b1 g. l( e' Z# e4 l }) ^( r8 C' r& Z; W
}
" Y" O4 ^+ H/ J. j8 v3 `
+ A, F2 b2 k3 q static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
4 g! p& ^# F k8 P: e" S" B$ u {
3 y( i2 I4 ?7 L- A6 w if (aLength >= 8)- B5 G6 i) ]# ?3 I( T6 G' M( y
{
( r# c6 V. u" F, w! T% x DWORD dwItemId = 0;
2 \) t( y; l5 S/ X- r0 c memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));, K! b4 z/ G. f+ ^7 S
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
3 L6 z. Z" z W+ [! Z && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
, v, D. a- Q, Q" m3 q$ u && _PKTPKTType == PACKET_ITEMACTION
u! g1 U! k( N) G% a4 i1 w )! L/ K3 P8 ^* T0 B6 b
{
" ]3 m+ i3 P, c2 \ if (dwItemId == 0 && _PKTItemTick)
! O2 [/ r$ T! {1 ?* w. _ {
. T! {1 q0 s6 c+ L: A2 b PKTItemRelease();
F) a& y+ g! g3 Y }
/ d# u) @0 n- B( w, y3 Q( e else if (dwItemId == _PKTItemID && _PKTItemTick)
C0 S1 v* m: c; d0 y* _ {
0 B. q+ C6 g6 `, H: l" ?- V1 u PKTItemRelease();
5 u- y+ R1 T/ ]+ N6 m }$ {* t* Y7 S1 S" N
}
+ s0 [! T/ E% v
. ?+ c7 o3 g. ]* N' K0 f }1 @- }( |! _- F0 |1 [8 U
}5 x2 V: A; C+ v. q. v8 V3 n! E7 b
( r! j2 i& d( I- `& R static void PKTItemGameLoop()- {, q. s2 B# M7 a
{
( w% n3 K* v) m. }( p if (_PKTItemTick > 0)
" ?- [! y. P* D; w' i _PKTItemTick--;" \0 e7 J3 d# m; M- H8 v0 L
else if (_PKTItemTick == 0)
. i' o0 _8 C3 e M* R$ [ ~ PKTItemRelease();/ E- i3 B/ f4 k0 B; h0 \( p
}
1 |/ j$ ]6 a% j* x/ a$ q
% V$ I! v. \7 [ static BOOL PKTItemCando() ' E; _" K# W, C% j6 v7 |
{( b6 \6 J& _( o* Y
if (_PKTItemTick == 0)return TRUE;
0 G6 F( C1 x# ~- E0 V. w9 B% [ return FALSE;" x) A: S& N) {8 T$ ?
}+ |2 E" H( L% s o7 U
, B% J, e9 T+ p# v5 W! v
static BOOL BuyItem(DWORD ItemID, DWORD npcid)% B/ i" O4 [+ Q
{" @2 J& Q1 G: {
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
* Z) l: i2 F$ G+ r BYTE aPacket[17] = { 0 };
% A4 a) X) |! J; I" `0 G, ?2 M aPacket[0] = 0x32;$ y3 R( ], G# _( y+ W1 G7 B& _* z
::memcpy(&aPacket[1], &npcid, 4);8 j' e2 [# M! J. U
::memcpy(&aPacket[5], &ItemID, 4);6 `6 h$ K0 N' U
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);3 A, u1 s1 C P- ]1 K1 T
D2Net::D2SendToServer(17, 0, aPacket);: |( Y9 M9 a2 _! Q. O/ q# C) e
return TRUE;7 _5 t" `3 h# o8 u. |
}& b. M' d6 y( t2 G$ @7 K5 f1 k# \
& x& V- |8 ] j: @; W c. c" v static BOOL SellItem(DWORD ItemID, DWORD npcid)
2 s) M/ f+ Z) S$ G# ^ {
7 c! m3 h# U! i7 V4 E; M7 X4 ? PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
# k# g: \- v' v2 H BYTE aPacket[17] = { 0 };! Z4 K5 }) m6 o, b( F
aPacket[0] = 0x33;+ N5 h2 J! W5 j
::memcpy(&aPacket[1], &npcid, 4);
& I1 i1 ^; f/ l/ c0 @" R8 a) B9 k$ y7 C ::memcpy(&aPacket[5], &ItemID, 4);
- n6 R% a1 }3 f P \* E //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
0 h( L b4 f" }* [+ N2 y, M4 h D2Net::D2SendToServer(17, 0, aPacket);6 Q) V `$ f& |' P$ ~* q
return TRUE;
$ ]0 ?5 _5 d+ c- L; I }
) { P" ]5 V/ O' u1 |
# c( M/ p# x2 l static BOOL Interact(DWORD nUnitId, DWORD nUnitType); Q0 K$ q/ Q' J. A1 v4 k( g% u
1 {( d( M! B+ r, V9 C. k. [" W
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
, v6 I( B% P* e+ A4 }0 `8 ?6 D c9 H4 J
static BOOL OpenCube(), c. n/ p- b* ~- p9 N, j$ X
{
- P' f; [$ Q$ k3 b: H$ Z: O if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
* y& q7 |. p( V! C: ?
6 U8 t" s7 g( g' b UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
( W( x- c) _$ f+ [ if (!pCube)
0 R+ J: b) J, j7 K+ f# y6 m$ r {
4 B @, o' b; R1 ~, G1 I0 g8 K pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
4 a' h: j7 b0 D) a( ~5 I, ~0 J if (!pCube)
$ G5 Z8 @! h' z. E' H' r. P/ w/ l8 ^ return FALSE;
* m% ]) {1 N& p! z0 k3 a! B* z0 | }2 [ C3 @9 V" K: V6 `
PKTItemTellW8(PacketItemMaxTick);
& G+ w; X9 z7 O9 l1 G9 h. n2 d9 V: {0 X1 w5 Y* I( f. `
D2CoordStrc mypst = { NULL };
8 t- |+ d+ `- q$ f D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst); Z" ] L8 R, P" m8 N/ s6 A
$ L" i3 W- C; P+ a8 ]1 T
BYTE aPacket[13] = { 0x20,0 };' ^/ F+ g# B f
::memcpy(aPacket + 1, &pCube->nItemNum, 4);$ N7 O, w( Q% `. y3 Q4 ]. t
::memcpy(aPacket + 5, &(mypst.nX), 4);; w- g% h3 v' ]
::memcpy(aPacket + 9, &(mypst.nY), 4);
0 U r+ z- ~! H2 T Z1 U D2Net::D2SendToServer(13, 0, aPacket);2 v0 W8 Y: j7 W& f: i
return TRUE;
& d! R$ \$ T x9 Q4 D. }' r4 z }# X" s4 `: y: @: k
M9 }/ y% I" |. r( M. d/ n static BOOL ToInvxy(DWORD x, DWORD y)
- f& l h; X& T* N {& o0 n; |; R- C3 ?$ |" B
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
2 W+ J% z: _4 H7 H, V+ T! L4 |+ c# B/ w- R( ]; @
if (phand == NULL)
6 c$ J7 J( m5 R9 P! C return FALSE;
8 D& Y8 |! v# T2 s+ M& m
4 i# d0 m+ ~- N- c PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
0 Z8 q7 [; m0 }- ^2 g3 H. P" K: d& T
BYTE aPacket[17] = { 0x18,0 };
9 E/ x+ _" [2 x& ? d& [" J ::memcpy(aPacket + 1, &phand->nItemNum, 4);
: f4 |4 x8 W" J5 n' e ::memcpy(aPacket + 5, &x, 4);5 h) D$ ^8 n2 P& \4 f
::memcpy(aPacket + 9, &y, 4);
! H4 q, x9 s( X+ N- l D2Net::D2SendToServer(17, 0, aPacket);* b4 j1 E6 Z5 q* R8 N( U
return TRUE;
$ n: P! {* c! }( Q/ A2 P }3 C. B, E& t; U9 D2 C
, m! ]7 u7 j8 T, Y0 t; k& i& S
static BOOL ToInvRandom(BOOL bBagFix = FALSE) q8 b' L, G2 A3 ^ ]
{) D7 X( g7 u& d- a6 P8 p5 }8 C @
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
4 F, p, N* b3 t. j. W( l if (!phand)2 [: m. ^: q1 ?9 W1 K+ `* E7 d' [ a
return FALSE;/ A& x* e. B) m* X
int desx = 0;
- p/ A! Z" B. O$ U# l8 K5 A9 ?' B int desy = 0;8 H z$ N- n$ J3 r
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix)); _8 r: @' f* b" A$ Y
{+ X6 c. I6 p! G0 A4 S; C
ToInvxy(desx, desy);
6 Y# S/ o8 s c5 l9 }4 Q return TRUE;) p2 i% H8 _3 n$ D: g3 h7 o
}) q H8 R! ]: E
return FALSE;8 Y5 A' n! y5 K
}2 f4 M* Y. V9 ?# W
! r) _, y9 c+ i0 E1 a8 l$ L( G static BOOL ToCube()0 c( Z3 |7 c" A9 [
{
) r; F6 u( u# Z& N: V if (!(*D2Client::ptPlayerClient))return FALSE;
- T5 n9 h" Q: y6 r; `7 r8 n! y+ \" N: g( g1 r8 Q9 i
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
+ j, B/ g! Y) k% X3 V if (!phand)return FALSE;# T$ `7 J5 d0 ?7 W( I( H5 L
6 R% C9 B& h' {7 E: k2 r$ e
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块3 [2 n# M( `; c4 {0 L- ~
if (!pCube)9 S* O6 ~0 c4 }: L7 {/ e0 _
{, z. @( t1 c& q7 C; f
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
, w/ w1 k$ c- ` if (!pCube || !pCube->nItemNum)
y) O8 T3 i, X) L* C return FALSE;
1 n2 b( {8 i* {: T }
$ r+ J7 G- W- D) ^) D7 R, y8 ^& F, ]; H3 L' ]' e
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
4 w; q6 N, H! [6 Z! R! C s return FALSE;8 p* l* L2 P9 _, D- Z9 I% s
$ j0 [8 x1 e7 j* b6 i7 x7 |
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
4 L9 N0 n. ~" c
5 a0 @6 P# g7 |, @) a6 P BYTE aPacket[9] = { 0x2A,0 };
* R5 o( W/ ^1 x ~2 G+ O" { ::memcpy(aPacket + 1, &phand->nItemNum, 4);
, c! h# ]! i8 x! A4 e& B% j" I ::memcpy(aPacket + 5, &pCube->nItemNum, 4);- C5 B* w4 e/ k! ~ ]4 `; f- r
D2Net::D2SendToServer(9, 0, aPacket);
) r- E/ B& e7 B" f! K( A) |3 w return TRUE;9 n* @8 R$ f( C
5 T4 q: N8 O# z8 [ Q* G+ S" B1 C }
9 h6 R. U$ T; \4 F( z$ T Y; p1 D0 c
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
4 j/ J% Y& N% H6 w4 C1 E- m5 |6 e, q
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存/ f) T% F8 u8 X# t9 t/ @
{
' _( \. L: c* G1 E) h% C! l+ f D2CoordStrc mypst = { NULL };" X- A: c0 R$ d" Z; s r6 E
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);' M" u! G( X& q+ f. ^; I A: d
) [+ A( a5 F9 d+ U& R; h2 n) A) x9 q; C2 J
if (!mypst.nX)return FALSE;0 f$ i9 w7 r) v+ Z9 R' s) k% v. t, p
/ v& ~( j" V% c1 e1 z$ D8 b
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);8 Z( V1 x! i. [: @
1 |5 N8 U' o; i. D9 f
BYTE aPacket[13] = { 0x20,0 };
: ^9 I4 f3 l0 }; r' D% t- ` ::memcpy(aPacket + 1, &dwItemID, 4);; `2 n! \( L% \! k0 _8 J- R
::memcpy(aPacket + 5, &mypst.nX, 4);9 E% _+ S& K6 N- @" ~' D( L
::memcpy(aPacket + 9, &mypst.nY, 4);
' n, }, ~ G4 B, U d //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);( i/ I3 v" T+ x& O$ X
D2Net::D2SendToServer(13, 0, aPacket);
n) Z1 ^7 L& U+ c. o7 `9 Z. u return TRUE;
$ P8 g5 M- ^. ^& c }4 j& e* [. ?) E% y+ F g
* k0 @' \% t L# t
static BOOL DropCursorItemToGround()! }" M9 y3 p! [, A
{
; E& w6 v) J0 J) l UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);- O% u2 d& n3 I. y, R4 M
if (!phand)9 p; S3 Q3 l" W2 r- `: o4 R
return FALSE;7 C5 u! u2 t( J" W a
7 W2 h1 |& P3 R& @( i( ^, G9 Y PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
# K& t! |8 [7 d' i, W# c0 z6 j5 U, y7 L: W9 g
BYTE aPacket[5] = { 0x17 };
, X+ V% @( q9 }) C ::memcpy(aPacket + 1, &phand->nItemNum, 4);. Q) E7 T% R- ?1 P! n2 r
D2Net::D2SendToServer(5, 0, aPacket);
; ?: L: R, v. i! y4 `; e K) V return TRUE;1 Q) r/ [, o0 M3 d8 I: W0 B" c" ^
' J8 v8 }/ \4 O- F2 Y }. h3 {# ~2 u) p$ Z' G) J
" _: E1 @0 z& `$ K7 U8 X static BOOL PickStorageItemToCursor(DWORD dwItemID)& E! I! B! t/ u7 m
{
% E* W/ m& z7 S4 ?1 F" d0 _6 b PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick); }% \$ w( B: Y3 i) {6 L- v. _
1 w; B2 Z: l+ s' t; d, X+ z8 ~ BYTE aPacket[5] = { 0 };
- {9 ?9 ^. ^/ t+ e# ]$ m/ A aPacket[0] = 0x19;
4 f' {6 O+ o9 D9 z6 F0 P0 Z; ^) R7 Z* ? ::memcpy(aPacket + 1, &dwItemID, 4);
, U7 [2 s0 z$ n9 F //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);& \. H, c. H" z
D2Net::D2SendToServer(5, 0, aPacket); U* g3 W- [% B- ?2 }
return TRUE;
6 r0 H! t B* L6 n9 h8 | }2 e7 e0 j- ]" l5 {$ ]5 o
7 Z( f8 b5 v: w+ s) v
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
' c9 C4 @0 @8 B2 q {+ W( _7 K6 E3 T' P" I5 C; Z0 ?3 @
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
8 E3 C, a6 O W0 [$ l8 t; w BYTE aPacket[17] = { 0x1f,0 };
$ R! `/ n7 Y/ `% d ::memcpy(aPacket + 1, &ItemID1, 4);
: L# i/ [) P6 l' W+ q; i P ::memcpy(aPacket + 5, &ItemID2, 4);
) Q P6 [% c* k0 g2 H //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);% a+ C' S, F$ S5 `5 J
D2Net::D2SendToServer(17, 0, aPacket);
" O1 X& U5 `0 \: [; Q return TRUE;
8 I: h' |" k1 O. A: K }4 |4 z, ~8 F" V& M: ?
) H3 b1 a! S; v( g8 m% b static BOOL Transmute()
6 G# A* {+ ^# S3 z/ q8 e& m {
' {; p4 F h3 _% z* X, Z E6 ^0 j2 u; a$ { if (!(*D2Client::ptPlayerClient))return FALSE;$ ~0 w2 B- B) M0 m+ t
" g6 N0 C4 t0 N, L( d) ^ if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
E n9 v# e8 d- h: B" c return FALSE;* U$ G6 L4 f$ s5 v
7 S- ?6 C% x' X/ D' }& @5 q
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
6 i( x) y) s) x0 ~+ [ BYTE aPacket[7] = { 0 };0 ]3 t* Q4 o5 ?: g, ~5 V \) u
aPacket[0] = 0x4f;
' f* O5 S5 e4 e3 q4 ~! O aPacket[1] = 0x18;
& ]/ D8 ]' V A. a% ? D2Net::D2SendToServer(7, 0, aPacket);
) A v9 w" _0 v6 s2 c return TRUE;
% n8 x! |8 C1 I }
: B2 c: c3 @* B; U7 w};
& R, m' P/ d" X* [0 a! W! X
# @( Z3 {* P' _; C9 u0 G |
|