|
|
转载5 g( W( C' y2 k/ f8 c
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:+ ^( Y4 T: H+ k8 I& |
D2Client:* A1 i8 n: S6 u/ d, `/ P
6FB20AE1为拦截输入框(用于获得命令)" m9 M' Z. Z! ~4 V$ P
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
" _. O! N5 d- x3 [6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
/ U" c# V" \$ y: T+ g0 S. z8 n6FAF4230为hackmap的loop点 我用的hackmap导出位置
9 V5 ?8 a, m& `7 p: W: Z
% m& D* J) H9 a" R5 C2 P4 J. f1 Z9 H" `% V0 c9 o: r& R
发包函数:2 P* j9 C! U, u% T! w
class D2PKT_ITEM
( k0 D% @' H- e; E{( G9 y8 B0 C, O. E4 b/ v6 C( g
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上5 X5 [6 s! v) J% b" N0 n" S1 @& S
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
; {# _: ~ X, N( ~% g#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
* R2 L3 A( f1 o1 s( X( v' `! T+ q- G#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上* O' X8 g: d. y$ O. A% N% `
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
9 ]+ {4 b, b2 }8 [8 ~% N#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
) j( x" t& L) C( R- x( [ O#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
* H7 j( r4 V7 R#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上: N4 g5 R: R4 }/ `. u
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
% U# V) A8 ]; b/ m8 m( n! X. H7 T. O#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店/ v4 L4 W' n! D9 a. v+ c; [* K
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV/ x1 U- J( n% u
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
; O- l. s8 ^0 R6 V' w, E#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
) r$ h0 r' J( b#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上4 @1 F. w# \% l5 v
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
: p* C0 N- `+ s# X) S* e& Q#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
$ u9 k$ e6 C/ ]* z/ j) V#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
. x1 J1 c$ Z# U0 ]# w8 O c, U
8 _6 O4 t( r; b' S9 p+ ~#define PacketItemMaxTick 1508 s& C7 `' x" Z7 [/ ~
#define PacketItemPickUpTick 204 {( P7 ?3 ?0 s: F7 p' C8 x) e/ @/ l6 f0 k
* Q% u& y% e7 x6 e; d( s: g0 Vprivate:
' H8 k2 c9 v$ A7 \7 D1 B" V) G static DWORD _PKTItemTick;
# d/ h! K+ \- L& K/ Q) @ Q static DWORD _PKTItemAction;
: ~# t) T; U# n static DWORD _PKTItemID;5 c/ n) g& N/ k, w( y4 \; \
static BYTE _PKTPKTType;" F4 j2 C; | R4 \' A
public:
+ v$ Y" E! P z static DWORD PKTItemGetTick() { return _PKTItemTick; }! A3 B$ I& O v
* d4 P! R& a5 t: d static void PKTItemRelease()
7 c4 H) M7 O n; j0 Q, a; p {
4 D& Y8 A; W7 H, _6 ]# T& n _PKTItemTick = 0;
^: E' S! V* X$ w _PKTItemAction = 0;4 D5 |0 E: Y3 U
_PKTItemID = 0;% f" `2 p4 s) C, i0 n
_PKTPKTType = 0;+ E' ^ R; |% D$ \! ]
}7 ]( Y+ _ v- N, g# a
4 Q. Q) @/ R2 k# L
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) * y/ @% o+ Z9 m! A2 v; w
{
5 w9 K1 \' F( j+ f" x' Q% M _PKTPKTType = aPacket0;
: `; }* O* S0 j _PKTItemTick = tick;
. q1 n2 [8 g+ p# ~2 F& t, [8 P _PKTItemAction = ItemAction;/ [* F u/ w4 j. a
_PKTItemID = dwItemID;
8 J- ]& W% P: D }6 Z* j* _ w1 \! \& `
8 g! L- q, K5 v: x% I" r
static void PKTItemTellW8(DWORD tick)$ j# o7 } v8 Y, m1 b' z8 h
{
* J1 |. o3 {8 E+ E7 `% r: g _PKTItemTick = tick;8 B: B( ^% [1 W0 }) z$ A1 S
}3 F. Z% H" |" o8 ?
( i" U7 I7 T3 H0 w0 |5 [ static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
% u p. ~! ]' x8 K) o. Q {
: s, } V' \/ } if (aLength >= 8)
7 G' D: t" u" u d; j _ {
- V* C! ^, B- `; l- C$ i# V DWORD dwItemId = 0;1 ]% V1 k# M2 {2 ~
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));# j2 f' I2 }8 {4 }- w+ e
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE o8 v* a; q( L. Q$ m
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
, w# Z2 X& `9 i' i( _! z9 O && _PKTPKTType == PACKET_NEWITEM8 ]/ M- F2 v: H& ~
)" _! s! A! Q/ v' \
{
; _) a5 Q+ x9 `8 b: T# F# T if (_PKTItemID == 0 && _PKTItemTick)
! x+ Y5 @6 |4 u; ^. ^7 X5 O+ Y {1 e1 [8 g8 }. h1 C5 c" I
PKTItemRelease();
, B3 ^( e5 X5 m- F }
. ?8 J$ N2 u, v c else if(_PKTItemID== dwItemId&& _PKTItemTick)0 x, X& o4 z* t1 R
{: M: v e) W2 ^7 Z! m* x
PKTItemRelease();1 }# P! k9 y, }1 l
} k! R7 _4 o1 G) ?$ P
}+ U! L1 }- m7 Z0 z; r
3 E3 V. m# C6 C. d
}
% w( _4 J* ?8 U3 Z3 U }
3 y7 i3 l! Z7 @8 x l: g( K
" `! q0 x, m( n u static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored+ Y1 {4 B9 A9 I; X8 y
{3 s# t4 \4 Y4 C* U4 C" }6 L
if (aLength >= 8)
' b3 L( J- f# X! A. K; O5 C. ]' A {; l" ?7 L8 X: b: A. J: q! t
DWORD dwItemId = 0;: f, ~; }3 B0 ?* W6 |- S0 T
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
3 g( U! S: h! U$ q7 X( C/ Y if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE! ?7 t3 g7 Q( C4 F
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
2 b. u2 H2 m8 Z8 S' G && _PKTPKTType == PACKET_ITEMACTION
5 T h$ B! ?' e* j! e7 A9 O )* B: S# H9 _( B1 j" |
{
' E9 j) J+ I! S/ F! s2 ~ if (dwItemId == 0 && _PKTItemTick)* `/ s5 c- @# w# \2 g6 m
{
2 Y& @; A, [+ Q9 L" C! |6 d PKTItemRelease();0 ^- D8 I0 V0 U& p8 o" I4 G# ^
}
0 c/ E* O4 G0 j0 v, k" S' o4 W" } else if (dwItemId == _PKTItemID && _PKTItemTick)
2 t% ?& S6 i, C3 Z! B% a {
9 G* N5 O/ |6 x/ H PKTItemRelease();5 F, C$ B/ X3 ]+ r- C- G
}
+ ^7 n6 F- N4 v# T- ^% Z, A9 y }
+ g; v. t9 V; A8 w
5 d4 g4 [' C. E) }; m6 p3 {1 _7 r }( R! l( C# ~3 ?
}
% ^! C" W" T3 ?$ d2 Z* h
$ H$ Q% n% X+ T+ z; h static void PKTItemGameLoop()8 d& W, ]+ A1 M; ^
{! o9 N! H+ T6 G
if (_PKTItemTick > 0)
& N' s2 r& {- F$ C: ?4 A _PKTItemTick--;( ]# C1 \" A; e& g$ \
else if (_PKTItemTick == 0)1 W# w3 O2 b# ?9 G6 I! I# A0 _: v
PKTItemRelease();
B1 y- H9 W7 }6 U; e1 W# c. t: ~* c }
4 Y9 R7 n7 b) O4 W3 @% |( q% U/ C% U; Z
static BOOL PKTItemCando()
" t' }% N$ {' L( D1 H8 J+ Y0 f {
$ Q4 Q: N8 n' Z if (_PKTItemTick == 0)return TRUE;7 k9 `" U; C2 @4 {% J; v0 V! i1 {( a
return FALSE;
: {( ^8 X: k3 }! O1 F" w }. r. g+ u9 i) \- t- @
. I# B- r/ N4 o, R
static BOOL BuyItem(DWORD ItemID, DWORD npcid)( n1 s4 V( E6 G' q/ K
{: q7 i* q1 e0 X" h2 M+ r5 M
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
, h5 @+ D, `+ A9 @ BYTE aPacket[17] = { 0 };1 R5 E: Q! p% ^; K+ Y
aPacket[0] = 0x32;
& W- c# r, o) G2 G ::memcpy(&aPacket[1], &npcid, 4);
7 |8 A* z: ~$ E/ E& O ::memcpy(&aPacket[5], &ItemID, 4);
; s: l) q, i* V- i //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
* _( }7 d, M1 T% j D2Net::D2SendToServer(17, 0, aPacket);$ p1 I) M' d% y8 C; e
return TRUE;
. J" R2 v9 {$ {! j }
2 \0 o" G; E: _
5 @" t9 E9 e: g$ b& F static BOOL SellItem(DWORD ItemID, DWORD npcid)% T+ q8 T4 h3 [$ A
{
4 D; I. B- n d3 D PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);! @1 ~) E5 j& r
BYTE aPacket[17] = { 0 };
* N% X5 v, @3 ^/ B) R* K aPacket[0] = 0x33;/ b/ d1 B, {$ {
::memcpy(&aPacket[1], &npcid, 4);; b* f! h/ i* Z! [& N3 Y
::memcpy(&aPacket[5], &ItemID, 4);1 t) V/ A/ t( r9 G& V
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
4 q9 N! i* M0 C0 U$ ` D2Net::D2SendToServer(17, 0, aPacket);
1 }* E! |' |" Y# c: k return TRUE;
0 g/ V! l4 S) p1 [ }, B( K4 O' t7 T
/ j) k0 T; Q4 e8 ~) a static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
# K8 V+ c2 P& q- C; h
& ~: }6 s; b% s+ i. f( |+ d static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
1 P( ^- L, z* r) A" F- O
' k7 L u# t) ^3 X* o# p$ J static BOOL OpenCube()1 |7 Z1 E8 m Y7 ]) m2 S9 D; ~' _
{" P: T3 a: t% R, w7 r- L2 a
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;/ E" [7 X+ q/ ?3 Z. W) y1 g
) n% G, `/ W5 s2 _/ Z, [2 W' a% ~ UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
9 I% U# T8 y( r/ d* b. D if (!pCube), w4 z/ k* l5 q. _- y# Z3 V
{
4 x1 Y- }; a/ }: m. ]+ _9 z0 @3 I4 E+ G pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
9 B) F1 I0 o- G9 }- ` if (!pCube)1 C2 L( J9 w; ?0 C( c5 s5 c& a
return FALSE;- Y9 Y1 v+ k: F+ q- r F4 V
}3 s) }( M5 l' x9 R1 R) d: j
PKTItemTellW8(PacketItemMaxTick); A e3 J# k( j/ Z
! X' V/ W5 H1 @
D2CoordStrc mypst = { NULL };9 z3 z0 w y8 x6 C+ \9 J
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
! W$ x) d( `5 D' |4 @2 W/ j+ H6 b! b8 P4 @$ r! Q6 j& A& t
BYTE aPacket[13] = { 0x20,0 };
: ?; M H' o9 {6 |" ? ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
' d, y4 }" A* k$ u# ] ::memcpy(aPacket + 5, &(mypst.nX), 4);4 p5 Q, z: P+ l
::memcpy(aPacket + 9, &(mypst.nY), 4);0 l' f: u2 I# Q9 ?* P/ _( X) [8 C
D2Net::D2SendToServer(13, 0, aPacket);$ Z( \$ I- K% H( ~5 Z0 u! N
return TRUE;
' W- I j3 i+ X% r! a7 |' E }
6 F! r6 {% O( \/ s' O% i% t1 G. Z, S4 p7 B" E+ f. `
static BOOL ToInvxy(DWORD x, DWORD y)$ f Y' o# f% q8 D
{# C* ~6 _& m f, B3 v) o/ A3 i
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
' O1 s7 y4 I: a$ f& P- v7 T. ?7 A/ ~6 r% I
if (phand == NULL)" @1 M H2 Z" Z- H, o" J" v+ I6 h
return FALSE;# s2 B( Q4 r, x$ e
& U5 o, T8 \2 ]3 s# c5 i4 n
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);8 l! L' m& ?# l; ^2 x
/ q. _" D E% z1 Y" i
BYTE aPacket[17] = { 0x18,0 };
- P( H- t; d2 k8 M ::memcpy(aPacket + 1, &phand->nItemNum, 4);% m: f( @' l& j
::memcpy(aPacket + 5, &x, 4);2 N J# _) z* s) E6 Y' e4 o7 C6 e
::memcpy(aPacket + 9, &y, 4);2 H. `$ g2 w8 }! e7 H T4 S
D2Net::D2SendToServer(17, 0, aPacket);
3 s7 g* o j3 A0 Q0 K5 v return TRUE; _% q9 y9 X, m/ R! O7 s& q2 Y
}
9 n. [, t# g0 l
' a" N$ {8 s( B; M& k+ V4 ^% E static BOOL ToInvRandom(BOOL bBagFix = FALSE) J! {/ x6 F( H: z3 C, J6 t
{ h: d- l; M1 a5 F2 L
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
/ _' t, s) d1 F) D) U9 X if (!phand)0 a9 y' e& e$ B# ]
return FALSE;
2 Y+ `! y: J* c" m% o. s' C int desx = 0;
8 X, A: }2 x+ a8 J [( e int desy = 0;
# Z2 w" s2 o, C# n% v if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))* v0 [" X! ?/ s( o! L- {
{" V2 m2 \9 H4 ~1 |1 H$ a( d
ToInvxy(desx, desy);' I% L3 F& _) _9 d( {: ^& g
return TRUE;
' `/ }. l1 c- j* D4 a/ S; c }$ I/ c$ U, C$ {9 N( U
return FALSE;
% D& Z1 p4 a3 a7 t1 J/ u; K0 ] }
" {1 e3 C a6 a, g: X
$ s5 @- F7 u- a- o/ Z2 T static BOOL ToCube()
* \1 |, S9 k4 D1 h( k {
# r( `, f9 W- A7 y5 p% w) q9 v if (!(*D2Client::ptPlayerClient))return FALSE;
" p+ u. A2 d/ m) q) M5 @: j- ] w6 {- t
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
% u* l# q5 O' U% u5 B if (!phand)return FALSE;
( Y Z4 P8 F+ O& e5 N
r6 R d; Q0 s6 }7 s UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
- M, i7 r! W9 n3 N( x if (!pCube)5 r m: k+ q. {& M% k8 l$ t# k4 Q3 Z
{6 Z5 B6 `2 }# e; W8 C, E' j
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
3 `( i0 m; o: r" ` if (!pCube || !pCube->nItemNum)
* p5 I4 u( f" \0 T' p return FALSE;
4 ]% c4 E& U$ O# s1 f }
1 q8 g% r4 E! q9 [: d
4 m" r7 I& m5 a( W) M' v if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))! r0 s' }; g( y* H2 T5 a0 q( F* Q
return FALSE;' ?# b" t% ^1 q' N3 ^
. W" \2 E j3 }% R/ q. V PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);) E1 W' [1 m' Y9 L
& `$ r9 B M' F$ S& M# S BYTE aPacket[9] = { 0x2A,0 };) F, y, w. q# `4 }! I& ~1 G
::memcpy(aPacket + 1, &phand->nItemNum, 4);
6 y. I& y. A0 b, r' Z ::memcpy(aPacket + 5, &pCube->nItemNum, 4);( E, [ j! n2 X" i
D2Net::D2SendToServer(9, 0, aPacket);
1 S' f7 t5 N7 Y- b return TRUE;
9 v: E$ t' W0 R2 w t4 ]0 v% v* C) [5 m1 r" v
}
' i. ?8 Y% B1 c* R+ }; X" M6 U+ E
* _' \, N0 ~% B' O! P8 T7 x static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);7 z |! v5 W. d# O& \% F1 ?
3 `. ~- k+ A x0 T) A
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
) K. x- A; X5 u7 O) b {9 X9 ]7 J5 x* Z9 K; ~
D2CoordStrc mypst = { NULL };8 `+ m) m8 ~/ _9 T- d
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);* S; W3 G. g/ d3 c S; e+ c: b
2 _7 o/ T# l0 a: i( h if (!mypst.nX)return FALSE;
: G5 X. ?* n1 U7 a3 F8 H
! @+ L2 ?. `9 N( C3 L; ?3 g% C PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
( i* ^- |. V$ \. r4 U
3 Y7 x% Y8 M( j( r7 J) c BYTE aPacket[13] = { 0x20,0 };
1 F X5 }& N4 A' y: v ::memcpy(aPacket + 1, &dwItemID, 4);; h2 V8 R3 \4 r3 c" S6 R# z1 O
::memcpy(aPacket + 5, &mypst.nX, 4);# B, {. R D( ]. Z; d0 r
::memcpy(aPacket + 9, &mypst.nY, 4);3 ^, q8 Q2 H! h4 K1 o" f& B
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
) `, F2 A+ z( I/ x( T D2Net::D2SendToServer(13, 0, aPacket);
0 w+ P" ?9 x) X2 E2 r return TRUE;
: R$ N% a* q Y* |3 p }+ L+ ^, F- B' e" ~7 D& y) y% p
$ [/ x+ Q' j1 T1 x7 g: x; C
static BOOL DropCursorItemToGround()! |& i6 M0 X4 X6 ?6 K. ^8 Q
{) D, |: u% H. J6 H: P9 E4 R
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);5 R" [0 S$ q. j: ^% S( T+ @
if (!phand)1 u% {4 K6 A+ v- k1 M
return FALSE;
: N1 a) e- K9 C. F* r2 E" _1 @* L% f& Q, V9 s( C) m
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
9 Q! y/ e% ]4 k0 t% k3 {! B. X' p+ S y* @4 r8 o6 Q
BYTE aPacket[5] = { 0x17 };
7 G) a% I) ?/ Z ::memcpy(aPacket + 1, &phand->nItemNum, 4);# \/ ^5 ~& s% r R% n3 S
D2Net::D2SendToServer(5, 0, aPacket);( I D8 R% B$ s( Q$ T* {
return TRUE;( f4 v& t/ W% F/ o+ ], t0 [+ q2 F
/ s6 ^ x. s' M }, F. i3 g; F8 o7 b8 V4 t5 A/ r/ m
/ P$ t: }; D7 n8 u; q. }: |; z
static BOOL PickStorageItemToCursor(DWORD dwItemID)
5 U3 m0 D. t2 n0 ?1 j {5 i+ b5 Z8 b0 S* [* m; P
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);6 Y' Z/ S9 w. E7 q5 ?3 _# O2 A
- X) w& C: W* k% n; z6 H
BYTE aPacket[5] = { 0 };
; e8 S( R2 |+ g0 Y aPacket[0] = 0x19;% y$ C0 C8 [6 o( h8 P2 E8 o6 w
::memcpy(aPacket + 1, &dwItemID, 4);1 q Q( ?; }4 N- W4 d
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
! [2 q# u' X: E" M. t D2Net::D2SendToServer(5, 0, aPacket);1 i4 ?0 c% d! u! y) r
return TRUE;
* D9 K* I9 h: N }
+ N* S- D: q# |* |+ @1 k
0 t1 \) m7 R- b" b static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)" Q0 [$ W2 @! j8 e
{
/ v ^ d2 }3 b+ e PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);% z" \( i" r) z4 O
BYTE aPacket[17] = { 0x1f,0 };
2 ^# F, k0 _3 q/ R3 k) j ::memcpy(aPacket + 1, &ItemID1, 4);2 r Z7 b4 T2 U0 a! f
::memcpy(aPacket + 5, &ItemID2, 4);
3 I9 v+ l _- b. Y //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
5 f% U# e: F. y0 R' e9 c) W D2Net::D2SendToServer(17, 0, aPacket);
7 W: L. N9 {0 \# w return TRUE;- C, [- e% i8 s/ {& k6 n
}4 m/ w Q/ M0 y/ j
) Z. B2 c, c) w static BOOL Transmute()/ x/ P( {6 I4 z/ u
{1 J H7 j7 }+ \3 r' o
if (!(*D2Client::ptPlayerClient))return FALSE;
3 m# d$ ]+ k; b7 M9 F2 `2 M3 q; P7 I. l2 v; y
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))- E9 N3 g& ]+ X; D) ^! Y, x
return FALSE;
" A- P0 F. U0 u; @3 L7 K" x. }. s" q8 ?/ u
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
* G( L0 o& ^! S) Q& E. I BYTE aPacket[7] = { 0 };
! T6 Z! ?3 t& q; a# n+ s aPacket[0] = 0x4f; r1 b, n4 h% e$ ?, R9 a
aPacket[1] = 0x18;
+ `% I+ o$ G' m1 e2 w D2Net::D2SendToServer(7, 0, aPacket);
! }' w9 b a( i- Z return TRUE;1 O2 \ |8 T: U0 ^9 I
} V; U# a( q% I( t
};3 [" g6 D6 e* J: x, P5 L
7 {) [1 Z+ b2 X2 h) T+ E
|
|