|
|
转载
2 M' q2 p% Y" _! G9 P自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:- t9 m; Z- E6 |+ t
D2Client:" G- ?2 r0 a! a+ f
6FB20AE1为拦截输入框(用于获得命令)
2 @+ `7 Z3 b5 V' c5 a# E" X# _6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发: N2 E4 v) T* C: M
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发% }6 m; [ v4 ~" h9 O6 O: a3 k
6FAF4230为hackmap的loop点 我用的hackmap导出位置0 g) L. K* D3 V# `/ |- o F# G
$ E1 j+ I+ R* C% y k" N
' x( T! i. q. P
发包函数:: V" X- D( x7 D# ?, ?
class D2PKT_ITEM) C. d& @! {! m0 K
{7 X$ Y' h2 O0 M% Y: ~2 F
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上: n8 q: _6 [) ?6 I4 I6 {7 q
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
, Q, C' G# c$ j/ D; U( g1 `#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
S3 _) H ~5 P/ ~/ Q3 H) e# f#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上! r+ @& b' _5 @$ y$ ~
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH& w, i1 Z" C$ k. D0 t5 X% C6 j
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
6 W* ~! n9 h4 U S1 ] ~#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
9 Y9 l6 Z: r5 w* B: B#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上; U* `& ]/ J' v3 ]6 P0 k
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
8 s5 G& H3 n) I$ `; m4 ^#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店" Q: c+ G7 G) n8 A$ l3 a
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV0 C8 p6 r8 a# z3 `- E: d
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 0 J1 M$ E& | I+ e7 i, Y. R' n
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
' V$ ^3 @5 e2 f L! J, k#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上, c+ X/ f+ s) Z/ y: M- X
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
( e! |: ~2 _# T2 P1 A#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上7 b( s* ~8 |3 G6 U& A7 y
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -0 G) l! R2 z" K2 J" S v
; U6 `3 y L$ r#define PacketItemMaxTick 1509 f$ y+ ~5 l6 V, X; L0 ?8 E4 @
#define PacketItemPickUpTick 20
& q! S- z5 a2 @1 X
; ?% }# E% P8 V, @5 `private:' X. a" H$ V& O- ]
static DWORD _PKTItemTick;. k8 i9 Z/ O4 o* z
static DWORD _PKTItemAction;8 I( k0 a. \3 g0 n4 s0 @7 v2 [3 Q
static DWORD _PKTItemID;
. ]8 [6 ]% @1 C* H static BYTE _PKTPKTType;0 j1 S; a6 _: R
public:: G S$ s! a. S$ t4 l+ n
static DWORD PKTItemGetTick() { return _PKTItemTick; }5 y8 e! u( F& o6 }0 R k" u
- u" D1 i$ h1 `# _8 Z static void PKTItemRelease() 1 e1 M( D0 _; q. G- v3 B! b" K
{
* j4 }" a/ J$ j ?! s/ z. m6 W, _ _PKTItemTick = 0;1 p3 c+ K+ E- E" P8 i
_PKTItemAction = 0;4 M b; I2 {. o8 _5 {7 F
_PKTItemID = 0;3 E: i# m* B' S& o
_PKTPKTType = 0;
" X3 ?6 I* a! b, w4 I }$ I' {3 k P: r
; h# W* J' h: u: g) n* G7 Q! N$ a
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) ( L4 E5 f/ h; ^$ w
{4 [( [( N3 q3 @
_PKTPKTType = aPacket0;
) q5 r. b: s; `& \4 r V, F/ X _PKTItemTick = tick;
1 j* h: X$ G3 L _PKTItemAction = ItemAction;+ O! k; |8 u/ f1 M
_PKTItemID = dwItemID;
5 |( W! W1 g& L: |5 ~; `4 }$ | }
) p# b% H$ `& o" G* X8 @; g
# v) c# B& z; y; Z2 p2 h static void PKTItemTellW8(DWORD tick)
# J. u4 ]3 f. I1 A, A" `8 G1 [ {
% g9 _; U! [3 U$ `. q2 P' m2 q' B _PKTItemTick = tick;
* N2 L9 Q5 p. f9 @$ }6 a1 m. J, [ }
( r% w/ t4 v- Q8 p0 j" D* {) ~9 ]! J% H! j: {$ K4 A
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor/ N, ^1 ~: |2 h: m
{) j+ }, {( t& g- z2 x q* J% L: J
if (aLength >= 8)* ~2 ] s$ o! B) ?
{! q B6 q, `8 U2 p1 ?: z
DWORD dwItemId = 0;
* N' a+ y: _* L) y% b" h: q' K memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));6 ~0 K! A6 R2 _. C' o# A4 {( W
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
% g$ T6 l3 N5 }# ~4 N" C/ v && _PKTItemAction == ITEM_ACTION_TO_STORAGE7 H, I; r& Y5 w0 n) L6 x( U
&& _PKTPKTType == PACKET_NEWITEM
4 [3 E, y2 |4 w' M& E* W' M* x' ~ )
* f; p4 d- U. u( F, z8 I% k2 H {. q: k" @1 S' l4 e5 M7 B
if (_PKTItemID == 0 && _PKTItemTick)- [/ }# i, n j1 J
{& e" c$ r3 n- V
PKTItemRelease();
# c( f3 J i# N* Y) a }
1 w/ c, d( v( M. O6 h3 L else if(_PKTItemID== dwItemId&& _PKTItemTick)4 v# y; u" l; z7 C7 ~
{3 B' a7 R6 r& g: x8 B- V
PKTItemRelease();
2 N6 S" J% y+ Y7 e* Q }
# Z! \* A" B' R, c9 }% \3 Q }
4 r/ ]+ O6 z& _2 j. k- { 2 \5 U, X- a7 Y% C1 c' m
}
7 U9 l- O: o9 J3 ~ }' a1 y/ z! N% s/ a" T- n7 W8 V
# r$ o- K& L! ]8 B; w; I static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
, Z0 p& @9 i5 Y+ \ y5 l! } {' }3 _6 l) e2 `& p8 [ `
if (aLength >= 8)2 Y8 Q' d7 {; y3 h
{
; u6 E3 X/ n H$ R DWORD dwItemId = 0;2 g: R2 `9 r& s3 t ~6 `- N
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
( [5 K2 i; n& }1 v# }% w if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE6 s0 X( B+ h! [3 T
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE1 A/ z. u- r/ y
&& _PKTPKTType == PACKET_ITEMACTION, a# j; ~" a' v$ I% L! ^
)3 a) p; T, x3 U4 ^4 q
{
" M0 z- D& Q; ]* I( f if (dwItemId == 0 && _PKTItemTick)* y, G* n+ E6 ~7 E, d% V( `
{* _! a0 t# U5 p' J
PKTItemRelease();
6 ~$ j: A- J5 I: }( E }+ ?1 h& v# K) t7 w" D" d9 L
else if (dwItemId == _PKTItemID && _PKTItemTick)/ y# Q- {: C: }7 U$ |$ Q
{
2 P; B+ J' o3 { PKTItemRelease();
6 Y% x; K) m: M) M7 x& _ }
7 l" I; W& u( i/ m1 o1 S1 } }
! X- p' v% S- h, \2 j B& }) S$ J ) E+ M8 L$ x2 _ K$ U" I
}& e% U* `8 _ M' L7 Y& L- D$ z1 _
}) g- F$ @, m4 o( }/ |" Y$ h
. q: M J ]5 u4 q5 E* n8 T4 z
static void PKTItemGameLoop()2 U2 B u) a5 M9 Z: T- m
{! ?, i! F" W: S% k8 E% N4 V
if (_PKTItemTick > 0)) A: ~- u+ K& |
_PKTItemTick--;
) V2 w$ X1 \) I& K! t3 N else if (_PKTItemTick == 0)
/ w2 p/ v7 ^' O; r% a# T PKTItemRelease();
) Q, O* {- Z9 |+ v- ?+ t' i }# Q! a1 ?0 `8 @9 N V+ l) K4 c
: T- d I8 C. e; O, a
static BOOL PKTItemCando() ! }7 E, T c k M" c6 R
{' O) T5 G' o" n. s5 q, e
if (_PKTItemTick == 0)return TRUE;
0 D& O; `6 U% ~$ v' E return FALSE;
* x. {6 s6 }, k9 E! C }! A$ n8 z9 T2 I9 H; a: W; |
4 @/ }! R0 T0 |5 g. X6 F* A, S( j static BOOL BuyItem(DWORD ItemID, DWORD npcid)4 N. R6 o$ G0 G* Z
{- d" c! t6 n" @7 E$ w, }
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
2 c% u4 J' R! ^, { BYTE aPacket[17] = { 0 };
' O2 i6 b! d, y ^6 \9 m5 b' e aPacket[0] = 0x32;! k6 E5 ~* P% Y: ]- j
::memcpy(&aPacket[1], &npcid, 4);
; Q% |1 D( Q- U r ::memcpy(&aPacket[5], &ItemID, 4);
% B) J7 f4 U7 c: u( R; U //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);* S% P" k) r& f2 z
D2Net::D2SendToServer(17, 0, aPacket);
* v9 v% M; t% T. L1 I/ b return TRUE;# t, K3 O& h3 V1 E
} A2 V6 W$ ~# z* y& Q$ ~; N
7 W: G0 `" R! m0 i9 ?
static BOOL SellItem(DWORD ItemID, DWORD npcid)
' `7 E# R& y$ L& N {
# d0 N+ u3 `2 M5 Y7 R! g$ x PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);# D9 e q! L8 ~/ C# B9 \" q: j
BYTE aPacket[17] = { 0 };2 @% l: o ~' K! v9 N
aPacket[0] = 0x33;" a9 H2 `' n! P0 E9 y6 D
::memcpy(&aPacket[1], &npcid, 4);8 Z7 T4 ~" A& ^9 S, D6 V/ l% i
::memcpy(&aPacket[5], &ItemID, 4);2 s1 k$ d3 i' j/ ~) m# X. F
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);% m1 h" _ T$ }
D2Net::D2SendToServer(17, 0, aPacket);
! L, T4 o: W% ^7 I. _5 m; v7 G return TRUE;
( {5 R) P0 F: h9 K }0 B: x; _2 }/ r& L" x; z. v4 A
/ @9 G7 I5 O3 R8 _7 R static BOOL Interact(DWORD nUnitId, DWORD nUnitType);, S; O0 \1 ^$ P: M- g+ @" T& d
7 [# y5 u; r$ b
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
8 K2 a6 ^/ z- V& E r( i1 _3 [2 E
& U# s5 m5 m7 D) A4 v* g! ^5 n" K static BOOL OpenCube()* i9 @% l% e- J- w( ]9 M6 L7 A, a
{
! J7 m" k' M$ L) v, P8 ` if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
( U' Y# }9 S% w' b# d# A: |
* z$ i1 Q8 C2 H! h* U/ o( } UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
8 V# V- G) D/ @ V if (!pCube)
$ e/ D: M, T+ W' e {" \+ Y" O/ I+ v7 v" ~/ l! u1 r
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);0 b1 w% O& f% T T' r6 N/ ]
if (!pCube)
& o/ c. \, F. I) M7 t: ?7 M" Y return FALSE;
3 c7 w* l, k( a% x }
6 ?3 c' s0 C" I1 m6 H PKTItemTellW8(PacketItemMaxTick);
2 t0 ]3 | N4 Z) k F3 y* B6 N( Z- Q2 Z# Z. l5 J
D2CoordStrc mypst = { NULL };# X! B+ {4 q2 c: j/ R, T; L
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
" H: u6 {6 F$ M6 d) V4 M4 F M. n8 \0 N; I$ ` t( e1 |: `
BYTE aPacket[13] = { 0x20,0 };; P# J1 q6 T. ~5 A. Q; l
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
4 Q) H) e+ v& t( w0 j( Z9 u# w$ y ::memcpy(aPacket + 5, &(mypst.nX), 4);
! {, }8 t) a8 ^4 _* @, H6 F ::memcpy(aPacket + 9, &(mypst.nY), 4);
# E1 ?9 t' q' g D2Net::D2SendToServer(13, 0, aPacket);
, c6 Z. G% d L) f return TRUE;
, p7 A% `; U. ^# n! x% B( Z* { }
% D& \2 H% H# ], b
! O+ C4 K* n6 ]! N5 J static BOOL ToInvxy(DWORD x, DWORD y)0 G* p% T2 e: ]3 I% u1 p$ C
{
7 A( v" F6 N0 v% ]* M! ] UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
/ o5 k1 {0 W8 ]* `+ Y( B2 W' q( H2 w3 \
if (phand == NULL)
! K9 z" X, J- [8 q: u! `$ K6 c" y7 d return FALSE;+ l( X5 ]$ [' J% h+ v# W/ @
. H- P. r8 J. t/ c' n( I
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);" O% j8 o. Q/ ]6 @6 j7 y5 r* C) X
" q1 Q) w) J" C: p1 D7 Q
BYTE aPacket[17] = { 0x18,0 };" j7 W& C! M* T9 J% C
::memcpy(aPacket + 1, &phand->nItemNum, 4);# K0 ~; L8 H% v: P
::memcpy(aPacket + 5, &x, 4);
2 G* a* k( g+ m% x! l* D; i ::memcpy(aPacket + 9, &y, 4);
/ w5 d4 p, {/ X! P9 y7 N7 G D2Net::D2SendToServer(17, 0, aPacket);& @" Y7 @. }9 C& B w
return TRUE;0 [6 V) q) \2 o; U7 b G
}1 r, M. ~: C& v% f* d1 G5 j: v8 b
5 R/ I$ R1 a$ ?2 u0 x. l6 a
static BOOL ToInvRandom(BOOL bBagFix = FALSE) 8 t3 j" C6 b, o Z, s: l* b
{. Q8 _5 G+ y+ f4 y$ t! o
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);5 D$ K6 H( k B
if (!phand)* f+ o( l R# u3 k- u
return FALSE;$ X7 r3 \/ d* o2 ^1 c7 Z
int desx = 0;
* ?" k6 Z. y3 `: f) T; m2 T int desy = 0;! S* e9 _# t& E9 D6 T1 j; G
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
6 l9 r' u, {( e% | {
- ^4 v4 n, l+ Y' B) ~+ q ToInvxy(desx, desy);
+ ~2 A, Y J: H+ k2 {, A return TRUE;5 q4 u) f+ }1 w5 w1 {& o
}
, q, {4 Q& ~* P; D5 \! |8 j return FALSE;
y: b1 {+ b( e! `9 i }
, O( v6 r" f& e; e$ D) b( y1 a6 \, M) h( @ `
static BOOL ToCube()
5 l: r& ^5 n6 T* L" q! j {
# A0 K1 K+ d5 s) s9 x# _( {2 b( I if (!(*D2Client::ptPlayerClient))return FALSE;
- Z1 }9 ?0 L) b
4 n# n7 h: v3 ~- k" p- F+ N9 `, H c UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);$ |; x9 p+ b4 x* p) R9 e/ C
if (!phand)return FALSE;
f0 m- y% Z7 a0 |( o6 y" f! k Q% u7 C$ ~' k" t9 U
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
* P& D/ z0 k/ K1 Z if (!pCube)
7 Y F- K+ g0 V% _3 z& \ {% y% ~0 d* O& p- g9 R( I2 g* v \
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块6 f0 Q9 D7 Z+ d( I
if (!pCube || !pCube->nItemNum)5 t; S! ]8 J3 r. X t
return FALSE;( L( j) S* b' @0 A& U
}
; X( l9 P% q2 a4 s4 `
4 k7 [- U) U! S if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))+ f/ r) p" S0 w/ O( P2 }
return FALSE; c8 k3 _5 U3 i0 `; [
0 B4 W- @* W' I( L& b PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
4 C6 S2 b8 y/ H* k' v9 J; l% p: U* g" _% {
BYTE aPacket[9] = { 0x2A,0 };
. ~& x6 E* D5 F ::memcpy(aPacket + 1, &phand->nItemNum, 4);* n4 \0 }5 P4 y! N- Q
::memcpy(aPacket + 5, &pCube->nItemNum, 4);" g! w( F2 B9 H2 I4 o2 C
D2Net::D2SendToServer(9, 0, aPacket);
. M$ H" ] g, G# H* y( J: Z4 K return TRUE;
! D* F; l! q2 @; g8 z$ `
; I: G- s1 _- I$ p1 Z' W8 e }2 I% s6 K- h$ e. t2 q+ e$ v" r. t- g
. m$ P" a: H, L3 R: O static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
8 C8 X! O G1 @% ^! \
: D) n( L/ \- K) M: L static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存0 n4 {1 N* V, A0 y; q8 m
{
2 m& n$ T, }, x D2CoordStrc mypst = { NULL };
* g9 r$ `. _% m, _ D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
$ `6 W4 w8 f9 B/ u6 D( s ~
: F% }# Y- H$ u5 q7 ^9 }2 z2 ?7 `$ U if (!mypst.nX)return FALSE;/ N3 ~) i2 k: L* e2 [* ?
5 R' w; b0 g: p8 j0 ^: s& ` PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
: ?, \% w# a( r- z0 N
" ]* z! H; I, o8 q BYTE aPacket[13] = { 0x20,0 };
# o9 k, A( R/ e( } ::memcpy(aPacket + 1, &dwItemID, 4);
3 P- i( D+ t+ K ::memcpy(aPacket + 5, &mypst.nX, 4);& ` }8 D l2 h; W: }! [
::memcpy(aPacket + 9, &mypst.nY, 4);
5 A8 y' |' Z$ [( f) m //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
4 {8 R$ z1 q r; d- q D2Net::D2SendToServer(13, 0, aPacket);, Z$ n) G9 \- a. w# z8 C
return TRUE;
+ B/ M/ s$ h- g* ^ } g, }& Z1 h Y2 n" c3 S, `4 j
& W/ s5 I# Y# ~& V( I6 \
static BOOL DropCursorItemToGround()
6 R! {1 `/ O+ _ {
# V- k$ _; l( q- w3 f UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
* w$ d) U2 p ~# m! D9 d if (!phand)0 S1 E% z5 j2 E' D, _# D0 p
return FALSE;
. r/ i7 m0 H5 h( n2 ]4 m7 G; G. N+ w4 v( ]7 a! [
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);( E5 q- I; [( v! Z& b
: w$ {+ @' ?8 H3 b
BYTE aPacket[5] = { 0x17 };
- ]; Z5 m* k3 D) O ::memcpy(aPacket + 1, &phand->nItemNum, 4);2 V1 u3 ]$ Z7 p
D2Net::D2SendToServer(5, 0, aPacket);* G' s5 N/ s8 E
return TRUE;/ O7 G: Z9 ~ ^0 f# p& Q: U9 _
( \2 O) X; M* `& [& P
}7 `3 l) `. s. k
# H2 A+ m* n \4 @1 Q0 C3 W% u static BOOL PickStorageItemToCursor(DWORD dwItemID)8 |% R* a: p5 J
{" H% v3 l$ b& b2 X
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);6 K0 {& k5 d3 M: n" k
' p2 ^! Q# c; U! R0 Z/ \ BYTE aPacket[5] = { 0 };; v# {2 Y- t. W% a7 J4 V
aPacket[0] = 0x19;# `7 M! d4 A: M
::memcpy(aPacket + 1, &dwItemID, 4);
* E3 I5 ^, o0 L1 K8 j2 I. M //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
) S$ |! Y% q) d" J/ T8 c( W D2Net::D2SendToServer(5, 0, aPacket);
5 A9 v6 U: g3 k2 m4 Q) @ return TRUE;: i8 G( f6 L$ u. |# L, t. W
}
( }1 z" P/ r7 J# C0 Q( a" [
! l8 v" i; D, d( M: w. z# n static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
# Z; n. F+ a( P {! Q: j; t7 X0 g* d6 M' i6 h$ K
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
( x7 Z7 K( N& p9 S BYTE aPacket[17] = { 0x1f,0 };' k" o; ]# u& h9 p& X
::memcpy(aPacket + 1, &ItemID1, 4);
/ H+ R$ ]" A# x$ o0 e ::memcpy(aPacket + 5, &ItemID2, 4);3 F" y7 K/ v, P
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
5 @' d0 {7 j# S Z1 [- P3 k D2Net::D2SendToServer(17, 0, aPacket);
+ } J) X* C: ~( P, ? return TRUE;( z" D" l, R# l5 P4 E% `5 [/ w: X" P( ~
}0 V W9 s: J1 g0 c- u6 ?9 K
# B) x6 `* q5 h" q8 @+ ?
static BOOL Transmute()
F4 I2 g: B6 z% } {
5 {* G* g* g' @" U) K& k/ A if (!(*D2Client::ptPlayerClient))return FALSE;8 X' m5 S4 ?! E7 g
9 {% p b/ y7 X( Q if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))7 P1 s# e) ?1 E- z, h( q
return FALSE;
2 ?3 p- L# V, ?) Z, h
; t( y" G! U8 C- \8 C PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
$ B0 t! l, z* a& D% v& X BYTE aPacket[7] = { 0 };
, T& Z7 Y* C+ ^& B9 s aPacket[0] = 0x4f;+ f: l8 F4 l9 }" e) K6 q
aPacket[1] = 0x18;8 P9 M) a$ ^( N/ Y9 \3 M
D2Net::D2SendToServer(7, 0, aPacket);
3 m1 o& ~( L% e( z return TRUE;
. b/ x0 A" D% U. a J+ u }% ^% H1 B' y, X
};
. p2 P/ s0 C; ?- ?6 m
" F0 t8 w$ Y* T1 N. Y+ F8 \# p |
|