|
|
转载9 V. m* t8 q: M( u6 d0 B
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
# I! b" k# _: ]- \7 ?: B/ K2 ED2Client:
4 q4 q, k& b Q0 ]3 k9 _- d" k. K; }6FB20AE1为拦截输入框(用于获得命令)6 v" S2 ]2 _4 p$ U8 j1 F9 x
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发/ U1 d2 J: `2 x7 M/ b x0 U
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
' u6 g) F" {! v5 G6FAF4230为hackmap的loop点 我用的hackmap导出位置
8 `) `2 p0 F6 ?# h2 U
) w+ D3 d8 o/ d- L% O
* V2 \) G6 C) a2 w发包函数:
+ d6 c3 m% A# ? P2 E5 gclass D2PKT_ITEM
- F1 N. C1 B) h5 K) G: R" \{9 j0 H* q9 g7 b" e; k
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上- ^6 ]7 s$ _ @- P* C8 y
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多4 I6 N6 D0 t( n- b1 B$ ~9 r2 ?3 `5 @
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上5 R2 o9 y# P6 p
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上9 |9 Z3 E+ D. y
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH: e* T+ ]8 j* L! d( @9 l. |
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上* w+ D: J3 F& ?9 C# M1 p$ ^4 a
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏( v0 d2 s1 }) G r( |5 P$ h9 `
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上3 Q/ A$ O, B% c) `4 O1 F
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
2 y$ a' w' ?4 |! o1 F( l#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
$ X$ z' v( B# E+ h9 w7 {#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV5 k3 J% U& N9 m
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
* ?/ d: B1 `# |/ m#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
" y7 Q9 ?4 z9 a3 h* t+ y/ P#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上% x1 @2 f9 g+ c5 T, \2 h
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
( [) I- l q O, V7 S2 O. y#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
1 [8 R0 l" J* ]& r9 P* N7 Y#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
: S2 \/ I$ X5 H
) K" p$ u. X0 p- B#define PacketItemMaxTick 150: V C1 N [5 X% \' P. G, N0 }
#define PacketItemPickUpTick 20, Q( V& m( x4 {
3 u9 o' f2 Y, E+ H* h
private:
' |0 C! X5 p" z4 O& b3 B static DWORD _PKTItemTick;
/ K. x* x, b" |2 F! y static DWORD _PKTItemAction;; a1 o/ p0 S( X- R" n
static DWORD _PKTItemID;2 v+ d$ z, ?0 z9 ?
static BYTE _PKTPKTType;* K$ _/ Y0 F# I# A# S0 G0 x
public:8 Z# C* P' B- f( X
static DWORD PKTItemGetTick() { return _PKTItemTick; }
4 D/ O0 S l. E5 k& u5 ~% J E+ x* A" B0 O- V& W% ~9 G& _
static void PKTItemRelease()
! w3 r7 H$ h" g/ u {. R$ ?+ q" k9 @6 m
_PKTItemTick = 0;
) o; n' p( W) k _PKTItemAction = 0;; Y0 G& V4 s9 P4 Z; N0 r
_PKTItemID = 0;" i |. V3 ?: [0 u$ j. {" {( ?3 \
_PKTPKTType = 0;
1 D4 L' H* D6 z4 _9 P- b/ T }# h& _( U+ c9 {' J8 \
- w0 [. F1 b, s) [ static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
0 g5 y( U6 F' b% L% E5 I; ~ {
7 y' l8 n3 c, j2 R5 Y& P) q K _PKTPKTType = aPacket0;
3 O8 r. _, m* k) f8 u) v, E* L _PKTItemTick = tick;# Z* Z0 `9 K3 T
_PKTItemAction = ItemAction;- H: w; `* T. B" F7 z
_PKTItemID = dwItemID;
: s x, E" m) z0 C$ q7 B) T }2 s3 @2 Q7 Q/ K+ f3 D& x
6 M' H1 s* V6 e( }' \ static void PKTItemTellW8(DWORD tick)- E6 f# e% e( @ }6 p
{1 P G" A1 \- M5 Y+ L
_PKTItemTick = tick;
1 d r g a) ]5 t) ~ }
' u) T/ N2 L7 \8 v6 |1 O" A
3 r+ W" x* m% r5 Y; m( S7 C3 R static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
/ [8 a/ c) x/ A( M% A {
; t* ]0 p( |' Z+ S, }1 ? if (aLength >= 8)
0 y6 \# P5 f& M: b* Z3 f" C {
0 ?1 U N4 U9 D8 d DWORD dwItemId = 0;% r5 R$ q& S+ H- B
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));) j2 G& v4 O% w0 a/ f1 k/ K. M9 ]" B
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
# F5 D# n2 {$ [+ h && _PKTItemAction == ITEM_ACTION_TO_STORAGE
i0 l# ]* ]5 B* t+ N8 E h+ Z && _PKTPKTType == PACKET_NEWITEM8 l1 H' a% O; n2 C1 }% K4 E
)
4 Z8 ^! u8 S, W5 [ {
6 E1 |9 b3 g! `% I if (_PKTItemID == 0 && _PKTItemTick)
8 x) v5 s5 c" a9 S, ? {
- s" M2 P" K3 U9 T5 } PKTItemRelease();
: f! U+ ?0 ]& H+ w }
9 D p) B" n/ T6 B/ ^ else if(_PKTItemID== dwItemId&& _PKTItemTick)2 E; o( `- W3 C( n3 j2 P
{" [/ u% e& D2 ?/ A6 Z
PKTItemRelease();
6 i7 S( s! p: i. E' I1 @ }
2 k% y, v' }. T2 K& q5 M) j }
$ k. P ~$ {! Y 8 K1 a0 t4 D4 E+ A% n
}! I3 d& G0 r7 K; {- ~7 A
}
' O! n) q5 X9 }' d& `* E0 y
/ W! y* ]8 d* w6 B static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored6 c4 w& a9 c) b$ B1 e' [
{
" q' L/ x+ j1 g% l# _. l if (aLength >= 8)' W+ p0 u+ G! @) t! S/ B5 O
{" [" r& M; T3 V
DWORD dwItemId = 0;
; n( p, N& N! O6 H9 o memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
* o3 I# p' \7 u5 N# x/ q if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE1 T$ \: D& [8 q" o& b
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
. T. r0 `8 W: v && _PKTPKTType == PACKET_ITEMACTION
5 E3 x% P# b& s2 W7 d' a* N )- B3 }. Q1 i8 b' H4 z2 S
{
. i/ ~" w6 U# U* ?- Z& y& m# s q, q if (dwItemId == 0 && _PKTItemTick)+ e" p' b( S+ R5 `* Y$ b
{! p2 A) J) O5 I0 G, l( D
PKTItemRelease();3 _1 ?1 @2 k& q3 L. L1 Y' M( R+ m
}
, }6 g0 l- k) W8 ?4 J else if (dwItemId == _PKTItemID && _PKTItemTick)
+ h& u8 d' ?/ s1 _# l* W {
6 o5 e! S8 e& c5 W `6 l) ` PKTItemRelease();
* a: o6 L. H. `( z6 V0 o# k$ O4 `) Y }( F+ A0 ?# N+ z* q; F s( ^
}
# F* c; A: E! ~ 6 ^7 i5 U8 U9 X3 s
}9 {5 k2 W1 z5 z! \
}# J& I5 _( [% c t7 q6 |
3 q9 ` I& U: ^ n" m static void PKTItemGameLoop()$ g- m4 R! R" Q) ?0 S8 J K, U- Q6 i. ~; ~
{
5 k) \& L+ A- }% n8 R& @2 H" O9 u- J if (_PKTItemTick > 0)5 T) [$ _; H( X2 e# q. }
_PKTItemTick--;
! E+ p5 l" l) N6 M5 P/ t else if (_PKTItemTick == 0)4 l6 y [! Z* {! f1 `$ i H3 H
PKTItemRelease();
0 `1 L- J( D* z# u }! c2 t, d1 d9 _0 r* c
. @" {1 D$ B- ^' I: c+ l
static BOOL PKTItemCando()
/ W; z0 ^/ ?8 m, U {2 o8 y; G K; u: ^1 ?- n+ _
if (_PKTItemTick == 0)return TRUE;
! Q) @( w" o9 x; ]+ W; @# z return FALSE;
2 e) `' Z0 R7 E }
- i, t# h. E( V+ S' E
) w$ q3 u c) V8 a; i: x+ Q- F& E$ n9 t3 M static BOOL BuyItem(DWORD ItemID, DWORD npcid)$ K5 s0 a5 d: W. [5 d- G
{
7 ]7 p% I/ w$ Z* m PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
3 F Z7 r5 ~! q6 _ BYTE aPacket[17] = { 0 };
% \$ |5 M, D+ }% \9 f, @ aPacket[0] = 0x32;
7 S9 }% Q; } Z# n' L/ N: C, U- K ::memcpy(&aPacket[1], &npcid, 4);
" R+ }( M! z& \; {/ {/ S- w ::memcpy(&aPacket[5], &ItemID, 4);" B: C( r( @+ i$ o: @ U
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);: H% R; ^. t) @+ p _
D2Net::D2SendToServer(17, 0, aPacket);
. U, ~9 _5 z7 ? return TRUE;
S. i* B% E: o }
! i1 l1 I, o& ~: D. U) ~ }- C: z7 {) U7 i' q7 Q
static BOOL SellItem(DWORD ItemID, DWORD npcid)% p' W# c1 V4 Y" ?2 w) z9 }
{
! w" z. k) W l0 d* h+ m PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);5 t/ F: h/ j7 g. V
BYTE aPacket[17] = { 0 };
! @8 \% A7 f0 z; Q3 e9 y$ @0 o1 ~ aPacket[0] = 0x33;
7 ?, O0 \- b$ P+ N ::memcpy(&aPacket[1], &npcid, 4);
8 J& u' r8 l8 j4 n/ j# {+ b b4 X ::memcpy(&aPacket[5], &ItemID, 4);( a! R- ~2 ~3 ~/ n. U O
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
: M& D. N3 S/ u! n4 g" ] D2Net::D2SendToServer(17, 0, aPacket);% m, M8 ~* J* t$ |
return TRUE;
! p9 `. f' m; S4 ~. C- p! c% { }
& V6 C" |& w+ e7 ~6 S, y% W/ {9 Q- m1 v- u: r2 f* e: N
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
1 h4 G+ X2 a G) G8 }
* z0 N/ I0 I" f4 K3 S+ d static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);& _2 u. z% a) k
% M O6 J( ^, M, d static BOOL OpenCube()8 O8 h( Z, K1 J% I: p- ?6 i" d6 x
{; t6 |7 ^3 r. f8 _2 f
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE; q4 J# X. x5 m' z4 j) x5 d3 `
5 j$ l% o3 D% F( y3 h7 y: C6 \ UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
/ f. k6 M( T# A: |" {5 s if (!pCube)
+ m e/ [; d# u$ x {9 Q4 o e1 f- f8 h' S
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
+ {& }2 e6 r; f. D1 q" j8 E) M if (!pCube)
1 _! Q; @/ k4 L7 G4 G; x return FALSE;
2 L" c6 _9 Y0 i/ Q- P" h& M }
/ x# ~% [8 ^/ I) e PKTItemTellW8(PacketItemMaxTick);' j( j$ ]" n8 L$ C# D2 `5 A% u$ Q
8 U' R6 Y% y, A) u% H2 ` D2CoordStrc mypst = { NULL };
+ \* a7 S) X; E/ n0 _5 h D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
( b' m2 E* I, k) h" ?8 D. ?! }3 ^9 {+ J/ h `1 u
BYTE aPacket[13] = { 0x20,0 };
0 V/ b5 Q. R) B ::memcpy(aPacket + 1, &pCube->nItemNum, 4); h% k2 z) {( ]2 w7 E s" x- E
::memcpy(aPacket + 5, &(mypst.nX), 4); M% M: `& b5 D5 N" J1 s3 c
::memcpy(aPacket + 9, &(mypst.nY), 4);* ?( @0 W5 C: v& j3 y9 \" z
D2Net::D2SendToServer(13, 0, aPacket);
& {8 ~% p d# P* p4 `4 E return TRUE;
! e( L% X* Q8 t6 _5 V+ z9 ^+ Y; q) j }
+ r( t. V; M% g$ V4 V3 O" w. {6 W* f, I* Z
static BOOL ToInvxy(DWORD x, DWORD y)
1 ?6 P. r0 f3 t$ h4 E2 a5 ]4 b7 r2 r {
! w- c5 t' d% R8 B3 c: f3 y0 m- W UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);8 e: C7 z' B1 g' F/ ~* Q A
8 D! e9 W: Q9 X' x if (phand == NULL)
6 V3 K0 N5 L' q3 b return FALSE;
8 G* d" S$ `; X- M3 q2 P; ^3 {
% p* T( z; i& f PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
. t# A+ C. G9 C2 W# K
. r8 p; i# g8 e$ {0 q8 j& R BYTE aPacket[17] = { 0x18,0 };
4 H( j) R+ Y: V9 t! c ::memcpy(aPacket + 1, &phand->nItemNum, 4);) i1 ~9 t. k2 s. W4 n" S) Y5 P: }
::memcpy(aPacket + 5, &x, 4);
. K2 ^' {( I4 I# n ::memcpy(aPacket + 9, &y, 4);$ h$ D% s8 @7 T0 q; ^
D2Net::D2SendToServer(17, 0, aPacket);
" j# U3 H6 u0 u return TRUE;
9 L/ n4 L; ~; b$ _ }- _3 m; x! M+ }# K! I
* \: w6 b7 ?9 y0 M+ [; e static BOOL ToInvRandom(BOOL bBagFix = FALSE)
6 ]( x) N. Q% m U7 I+ t {
* J( I4 S6 c# t+ M- \% v UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);* H7 w: n0 d. V5 _0 P
if (!phand), I" `1 H6 f* \3 u
return FALSE;: F5 J" Z/ J& B' {4 w6 r
int desx = 0;! p' P9 _; q; T h1 i& ?3 {! J
int desy = 0;
! |# \7 W& u6 O# V f& p: f! } if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))" ?/ i- {' L& n# b! m7 G
{
& ?# ^( Z# Y" N5 V1 K2 a ToInvxy(desx, desy);$ V4 v, \0 H C! U8 f+ l8 u
return TRUE;
: ?: K6 t9 o, Y9 _ }0 G) U9 P% K# Q, b1 k( M
return FALSE;1 H1 K. @5 P1 U4 Z8 K
}$ g( G* P% c) x
5 T' L1 D$ N9 O& M5 P( T
static BOOL ToCube()5 v0 }+ G6 L7 ]6 h8 g
{: L3 I5 X8 H4 s: l' Q
if (!(*D2Client::ptPlayerClient))return FALSE;
3 N0 b+ `) h# P$ R8 ?) D
7 a# a# }5 p h( f# r; I, C t' X UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
: [8 k( X4 G- ~5 I if (!phand)return FALSE;5 ]* }4 g5 ` u4 W9 W
. f4 o* e* z$ D) G+ q) s4 D: O# ^ UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块2 r& {& I3 L; s" ? i v1 V9 L
if (!pCube)
7 t' q& |7 l _. n$ X) Z {
4 B k$ g" D2 T pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块, g; E1 d* n1 t) m- b
if (!pCube || !pCube->nItemNum)
' s% k; @5 U' ?8 K9 B) G; { return FALSE;' J, {7 z/ G0 a+ J- e" `4 v
}# T! Q% w8 a- [) R3 E! ~5 H6 v
( C o- V1 _5 W" M- t
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
5 G5 \2 L& m# J& F9 `0 x7 G) N return FALSE;
+ P2 M; ^4 o7 y- c* H
) D `, k! X+ M* U) v% \ PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);9 D! z" z0 R) z7 s) d
/ [4 }# R* X: X/ T3 i# a BYTE aPacket[9] = { 0x2A,0 };
# p. v; R4 W- Y$ I7 ^( @4 [. K ::memcpy(aPacket + 1, &phand->nItemNum, 4);! m+ I& } f$ V4 H6 J0 S
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
: `; D# Y' ^# a* [% F D2Net::D2SendToServer(9, 0, aPacket);
6 C/ p1 B8 G7 Q, { return TRUE;
$ h2 |0 A' k; {' r R; q" H) O) r! R& B7 c" | x
}) N/ w' |8 |( z" {& A2 `! K
' ?( j2 T; H X0 N" N8 s
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
) b# `) X# Y2 `4 `+ r: L2 c4 f/ Z3 v% ?/ ~. }' S' j! `8 k
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存& Y: n! K9 }% P
{
2 g; d& p5 O- e$ n7 O6 T$ ? D2CoordStrc mypst = { NULL };
( B5 M- f$ O; O D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);6 K2 X) y- U/ ?1 {
; _; y" S$ E& J" V
if (!mypst.nX)return FALSE;6 s+ s2 c' \6 C0 b7 S
; i4 F" o# n% k# l0 G PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
7 ]; r) D5 c4 _5 k8 ~8 p" a0 J
: W% C" u9 E' G$ B5 A# ] BYTE aPacket[13] = { 0x20,0 };
7 m: e% M5 k3 Z- o6 Y5 J0 W0 i ::memcpy(aPacket + 1, &dwItemID, 4);
6 ^3 S6 ^- D$ m* J U ::memcpy(aPacket + 5, &mypst.nX, 4);. N+ h; j; S; o1 o3 b2 k- v: [. Q
::memcpy(aPacket + 9, &mypst.nY, 4);
7 a+ R" ~/ N! w //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
* M; r2 }9 y% H; ~' [ D2Net::D2SendToServer(13, 0, aPacket);
; D' }$ M& @- C, `/ n, ~ return TRUE;
$ l+ h; q1 E2 j3 R }
! Q4 k5 R% v- k0 _! Q9 O9 W3 c, p+ A" g3 E1 y v
static BOOL DropCursorItemToGround()8 u5 l" O- d( Q7 v ?
{/ D' S4 h; A: ^
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
7 v0 _7 s% d2 u; V if (!phand)9 u2 w: D$ ~* I5 [/ A0 {
return FALSE;
2 r; i$ K4 T# H# ]( D; d8 Z
2 }( ~6 P: i+ j' {! e. K* J PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
8 z( v/ U# ~5 R
0 A) S' m* o6 w; M1 [8 `- e BYTE aPacket[5] = { 0x17 };
8 x- |" }9 L6 @+ j' u; V1 o ::memcpy(aPacket + 1, &phand->nItemNum, 4);: n4 n+ U, e- t3 H1 z# V) \* y6 m3 Z
D2Net::D2SendToServer(5, 0, aPacket);
! K2 c2 O# r7 ]3 a. ^ return TRUE;
4 _: Q& M* m( w E0 o! I2 j! P
`' e& f, L3 y$ B& E* f }
0 W/ U( d$ k$ `( t2 P- h7 e7 d& r- M: L
static BOOL PickStorageItemToCursor(DWORD dwItemID)
6 N& k/ U: a+ \2 | {
* ~+ h5 f& S- I1 p- p t) ] PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
8 e. R, M8 {2 L _0 A5 @5 _; `( }. s4 l( P$ n
BYTE aPacket[5] = { 0 };. @; ?$ T( D9 ^$ A+ X! U
aPacket[0] = 0x19;8 y2 M: _" ` J5 `& x/ @
::memcpy(aPacket + 1, &dwItemID, 4);' t1 M [* e8 o! M
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);# _, N; D& j- @ N0 k- m
D2Net::D2SendToServer(5, 0, aPacket);
, R; N' O$ N8 F return TRUE;% }. k5 m" o6 V3 l# |
}
$ E5 d# X; |6 m, N" Y1 G; S% O6 s) _ w0 E0 G% o0 B
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)" h% S' e% J; m' ]" s# `4 V
{, s+ a% y3 F/ J
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
, c, V; i6 i# G ] BYTE aPacket[17] = { 0x1f,0 };
, E- l* ^- }1 W ::memcpy(aPacket + 1, &ItemID1, 4);
7 @! S( {* j$ {4 Y% y ::memcpy(aPacket + 5, &ItemID2, 4);
0 O' W' ?8 A7 S: Y! n //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);4 M f' ~3 @0 a4 ^# [; w% g
D2Net::D2SendToServer(17, 0, aPacket);+ p% a9 f+ s- A t, Q) C l
return TRUE;
( T7 ]/ L3 }+ ] }% o7 r) q% x) R5 [
" v# U2 D7 K$ }$ f
static BOOL Transmute()
! n" |) L' I- G {
% B& ^' L7 W* x: r6 n if (!(*D2Client::ptPlayerClient))return FALSE;
/ M3 r' Y( [3 |7 ?) u$ W. V) D1 [, {0 W& p1 K, I: m; Y
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))6 [. B" W( C) v9 f2 [9 c3 x! v
return FALSE;
w3 x; l$ l$ _: ?
; G% d- O4 Q6 S, |$ u PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
' f1 \8 k4 E' X# G/ _ BYTE aPacket[7] = { 0 };
; ~) c; V( m+ M$ C aPacket[0] = 0x4f;9 i1 r9 A" D7 w/ e0 K3 @; c
aPacket[1] = 0x18;! w/ L9 L* }% i% X0 E& X! j
D2Net::D2SendToServer(7, 0, aPacket);
2 ^ {3 I$ M/ r' C/ r" k return TRUE;5 p# \- Q8 W) W: H( N
}
" v+ ^ U8 ]. w4 D1 X! |};; w# a; j3 z8 v8 z+ D% d
( ]" _% K1 T- l6 _0 |' C- x# U4 P |
|