|
|
转载! S5 O+ i- h) d/ ?# k6 Z3 e" c
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:! H) P$ X; J& u
D2Client:
[8 T& f8 X1 I' K# j( u4 x6FB20AE1为拦截输入框(用于获得命令)# p$ N# O; v# T4 N G: \+ v, h
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发# x5 Z9 I+ W( t8 H/ o9 M
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发) v- Y4 v4 b. M5 D9 S3 O4 I
6FAF4230为hackmap的loop点 我用的hackmap导出位置
7 a9 M6 p L$ r4 M* g7 l& X
7 q- i2 K2 m4 D2 U2 I/ i6 M& C2 H; v1 ?: n
发包函数:" y% m" l) X6 I& f* G
class D2PKT_ITEM7 c' l4 l8 L+ V7 j' F% X+ y! `6 C
{
1 Y8 G+ S5 K! o( S L* j#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
% _& t( L5 W" L) v1 [#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
; \* Q7 _4 x' t- t#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
. t' \$ t- k h; j#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上* h1 J6 o D% f0 |: r
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH/ T6 ^$ W! |5 Q+ L2 R
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上1 `' y6 `1 A% ?8 Z+ y2 X" `; _5 F
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏1 M) V: w9 x2 b
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上5 s& \0 K1 N, M5 J9 }$ O4 V
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
! P# p3 @, S7 s' d- y% D& I#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店( Z7 h* F: ` h3 H* k# T
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV7 r1 U3 ^" k8 C* g
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
1 C- B1 g! G' c) h7 K#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带, R& p- D' K# x; N4 T
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上 |- `1 Q- h% y w
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
- U6 }+ y- Y9 |9 s( _#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上3 F' R' `! D( t
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -% ~( j& h; \* v2 ?9 `
7 C. Q9 ]' A! y9 s2 I0 z#define PacketItemMaxTick 150% z# B+ d% x# p+ f& |
#define PacketItemPickUpTick 202 v9 X% ^: S; Y/ W/ k
3 F. a& C0 n. R; m* J; Hprivate:6 Y/ k, x' L% I9 x
static DWORD _PKTItemTick;
7 u" W5 `5 b# B1 ~+ `( S8 {1 _ static DWORD _PKTItemAction;3 L% W0 |2 Y: d# _/ F
static DWORD _PKTItemID;$ [, d- q1 C) o# [
static BYTE _PKTPKTType;) M; `$ B9 v, ]! q1 y2 @ a$ X G# q
public:- x1 x3 ]2 r7 d
static DWORD PKTItemGetTick() { return _PKTItemTick; }
' y3 o8 ?4 w% [+ ~
& @# \! X# Z2 t& R& X% H+ X8 `9 W0 L9 F static void PKTItemRelease()
! Y& _& O5 G) E1 e( p7 H4 x# c- t5 ? {- ?9 X$ o' G3 L6 J3 p) T
_PKTItemTick = 0;! X; n; Z) \. x
_PKTItemAction = 0;
- g( O% j; k" u- L! c( f6 W2 }, @ _PKTItemID = 0;
3 @9 s% @6 D0 M" ~1 f! { _PKTPKTType = 0;
. f3 u# }& V0 Z: t- @: Y, K, n } G( z+ K3 Y" c* d
6 _$ T) C2 ~. v7 W0 A( N# s; g static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) $ R% ?5 V/ M0 ]3 I! q
{- C z6 _2 E/ s) o& @: c/ }# b* D
_PKTPKTType = aPacket0;6 f: i4 }( W4 z
_PKTItemTick = tick; G; {4 c3 Z3 r5 y
_PKTItemAction = ItemAction;& Z/ e) F: ?* S. I% Y
_PKTItemID = dwItemID;4 K) F5 \! \" \. v* Q
}
! F7 E$ Z0 ~' o6 t; w5 h, n. \ M4 e4 w$ M- I: A
static void PKTItemTellW8(DWORD tick)8 `) H+ V- d4 Y7 D- x$ M6 e
{6 I$ M, l. J, f4 n. U2 e$ P
_PKTItemTick = tick;
2 t' P; y8 E% i" M5 S" U }/ p3 [* F: d. u2 Q
& }' P1 i0 |5 r2 G4 f: ^7 I$ |" ~# Q
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor; b* E$ j2 r$ N* Z9 t2 w9 N& }; ]( ^
{, W3 _+ o. y8 Y4 V; T/ a
if (aLength >= 8)
% I6 Z. O4 ~ r) T+ w& { {! f3 x* s2 ?) k F$ m
DWORD dwItemId = 0;
$ h. H1 p \. I* J% D+ ^! b memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
" X/ ^# `; Q2 o$ A% B if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE; g: z. Y+ P$ x6 A, s2 Y$ I2 s
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
# }$ S8 V, e5 i% M. I. Q && _PKTPKTType == PACKET_NEWITEM
& _' c7 K$ P$ H m) @) d )4 B( C9 I8 o b& o+ y: g
{- Y9 V$ c! s( S1 a5 W: z0 ^
if (_PKTItemID == 0 && _PKTItemTick)
\- k# ^4 ~, T$ X- e {2 w" {+ A% a' ? O+ `$ h$ g: ]# Q" [
PKTItemRelease();9 U3 [1 j# m6 A, ^: p& ^
}
0 A* t r7 p. [6 [6 ]1 p8 i else if(_PKTItemID== dwItemId&& _PKTItemTick)" T2 n, w3 U" [4 I# F
{. ^2 X7 \2 S4 _+ r f) W8 `
PKTItemRelease();+ K1 U z7 z# m6 \
}9 Z) f4 {0 ^8 E; i& j7 X6 L) k
}! D, U9 D! ^/ f2 g y P8 B+ N( y# _0 C
8 r0 ?) u* _$ `# y& @
}8 D! u" d& @$ o' x& S. i) P
}
' S: I4 L' k& U
9 ]0 L6 y+ J+ M$ C3 w static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
2 ?8 }) g5 Q8 w o8 C$ o T1 Z {1 c% ~+ C, R4 h" T6 o/ C
if (aLength >= 8)
% R0 a9 b1 e; [* b {
9 L7 c; M* ^6 p4 j& D2 b4 m DWORD dwItemId = 0;
- Z5 D, {. U6 l5 U: @) y J% |" l memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));9 \, B& n: H8 o! W( g; i7 r
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
$ w7 K/ y* ^* \" V" c && _PKTItemAction == ITEM_ACTION_FROM_STORAGE0 q7 X9 t+ z5 }
&& _PKTPKTType == PACKET_ITEMACTION; K5 e3 q6 A* A8 j( ?0 J5 a' O
)# f L: ?( Q1 a3 H3 ?3 U- s; e
{ D+ O1 _" z. Y3 s4 x, Z, C
if (dwItemId == 0 && _PKTItemTick) S3 U( ?( t- T: m
{
3 D- b* \7 G+ _* i# h- y PKTItemRelease();4 Z. W/ E" o& R' `
}2 @- j- b: F! N% Y
else if (dwItemId == _PKTItemID && _PKTItemTick)
$ l; W) @8 |1 a7 g* y {9 X- x( v, W% @
PKTItemRelease();
; [, J9 ]8 a; e0 k }
8 I5 a% c9 w8 C$ i' g* I }
1 @/ x$ @ ^+ U% |6 q5 V
! [; v* I+ y) c- z9 C8 y* q }
$ h' [: ~( K! `# O! D3 A* P }
) F, ^* H& \4 s! |9 F5 I; G8 D
" ]' @- o( B1 }+ M5 @ static void PKTItemGameLoop()( x: B' ^, S8 H- K! Z
{
. V! j/ G# X$ [ K! M& E( ^ if (_PKTItemTick > 0)2 H3 {# h- O0 m9 p
_PKTItemTick--;
9 ]) @0 z/ r2 m! D: T else if (_PKTItemTick == 0)$ g* @" T( ?3 x- m5 ]$ T3 ~
PKTItemRelease();
# I! b. Y p" r1 F( \+ j1 ]1 \ }
6 q0 M: p/ P/ l3 q( v4 K
) B! N9 S! Q0 ?/ } static BOOL PKTItemCando() . \& v4 }1 W* i! s
{
- N* c$ r6 G% U) F if (_PKTItemTick == 0)return TRUE;- h1 R1 A5 w# E, K
return FALSE;9 E. F( z( v v
}; l9 \ n$ C6 M9 m* A
( [6 r, M7 d2 r+ u static BOOL BuyItem(DWORD ItemID, DWORD npcid)* A, R! h: J' B; T0 C9 I ~7 J
{
( D, j. k3 l" `& H p' f0 e o PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);8 l8 p+ ~2 U% {0 B# _% ]2 [6 ^
BYTE aPacket[17] = { 0 };
- ]- |- x/ S% a6 a6 i T aPacket[0] = 0x32;* w+ ^8 h7 v: J4 z5 S# e5 j0 `2 H
::memcpy(&aPacket[1], &npcid, 4);
+ y, n6 s+ b" k: B ::memcpy(&aPacket[5], &ItemID, 4);' G; \/ u5 G! T+ W8 _( _
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
" ]" c* F* Y1 _- g D2Net::D2SendToServer(17, 0, aPacket);2 |2 i( T9 N; c m% ~; F- }3 \
return TRUE;8 ?1 E: T' @# }5 ]3 t0 G; p9 A1 y
}
9 _# d8 ?: A8 i5 q7 u3 y# Z1 \
' N+ M1 n/ P0 V" @ static BOOL SellItem(DWORD ItemID, DWORD npcid). e: J7 z- _# _4 t& `' P4 t8 i
{3 x) ]( f1 [# ~* J6 v# `2 a
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
8 R, I4 {4 v/ P/ A# Z7 ~ BYTE aPacket[17] = { 0 };8 x; N- F$ `9 I4 O
aPacket[0] = 0x33;- f4 Z! q ^) D4 w
::memcpy(&aPacket[1], &npcid, 4);
4 m q5 e) R% P% a$ M$ u6 ? ::memcpy(&aPacket[5], &ItemID, 4);1 p% [5 A( U$ P. D1 w* e$ W1 [. [' [
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);% @( y0 ^6 c* r. H3 Y7 i$ E
D2Net::D2SendToServer(17, 0, aPacket);+ ]3 X2 C' p2 Y4 c \' ]7 ]0 x
return TRUE;
* n8 k: X y! z. I6 O }. W" n: ^' X+ Q
% U- S2 X. N- P( Q; x1 t static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
0 ^; A; }' n% w! X0 F* T
2 t6 I+ u* z# k$ ^$ t/ J- X static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);- l: g$ N. |1 T# ^; w4 e
2 T! o& E0 `: F( [( S; u# {
static BOOL OpenCube()
' _; {2 a B/ x1 t# { {& r" t$ S( @' h% f% q* I1 ~. u
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
0 X E: ^8 ]/ j' H
& B4 P# }) m& j UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
' h; V+ t' _4 F/ r% |. {; v6 B if (!pCube)
* _. ^$ u# Q7 d. P {
" L3 L; Q& t% D/ u& w pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);# z- H7 i2 M( M4 _* [2 l
if (!pCube)
, r/ `; [- ~4 C! ^ return FALSE;5 d, Z' F/ \. j) G6 }
}* x7 R$ S0 ]9 A
PKTItemTellW8(PacketItemMaxTick);
) W Z- A! U3 b6 Y% ]) X" K9 j8 u4 ~0 t, z/ C
D2CoordStrc mypst = { NULL };
3 F3 G I4 |; @% ~$ q D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
' |( _* G4 _- C/ D$ Z) i* R) r2 p" n! W4 {5 y3 T
BYTE aPacket[13] = { 0x20,0 };
8 S; G, J9 I8 z: ] ::memcpy(aPacket + 1, &pCube->nItemNum, 4);! C' A1 V/ [. F& A3 H# l
::memcpy(aPacket + 5, &(mypst.nX), 4);1 C/ r; Z/ c+ N+ R/ ], K+ Y# I
::memcpy(aPacket + 9, &(mypst.nY), 4);
0 k: }( ~' p# N% H, b4 \: Y3 O D2Net::D2SendToServer(13, 0, aPacket);& ~( X2 j2 `. x1 r
return TRUE;* b3 M, _3 i0 v( w( M: I
}0 `" v. F' u' f6 H" D- k
& z. ~3 E2 l; a6 f8 I3 r, n, F static BOOL ToInvxy(DWORD x, DWORD y)
) T6 c$ D* T$ \ {
y+ Z4 f; r# S1 y5 ~1 y! U8 m$ Y UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
& C2 l( {- w8 U; v1 E* Z$ z4 H+ ^
} X$ H! ]3 b6 E% h if (phand == NULL)
, M, F% a- X" P, V# m! Y/ `" h return FALSE;
, G$ v+ D6 Q9 G+ h9 ?/ _
! d% S. |4 v0 @% ^2 U5 k3 y PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
2 r" m+ x6 x1 m1 `$ o3 i5 |4 i( H0 g+ i! y! ^# X! F
BYTE aPacket[17] = { 0x18,0 };
! G- a ^1 l% r J3 u ::memcpy(aPacket + 1, &phand->nItemNum, 4); n* R6 k9 z- I- P: Q* [+ L
::memcpy(aPacket + 5, &x, 4);" c6 y2 E" g; l
::memcpy(aPacket + 9, &y, 4);
1 V X* l. z, x D2Net::D2SendToServer(17, 0, aPacket);1 Z- c( h" A+ b6 ~8 C
return TRUE;" E+ m( L! @: u, j3 T! V2 Z# |0 M/ {
}2 U9 h. q5 |! ^
1 y- G/ w" @2 _2 V
static BOOL ToInvRandom(BOOL bBagFix = FALSE)
. j/ D' O) A/ ]4 j$ p0 s {( j2 M* G; X0 C8 y' j
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
4 G1 |! T2 Q, p if (!phand)
& t2 M& @) i" X return FALSE;
9 _8 u3 k6 F8 J' t6 K int desx = 0;% Q$ b: k: g! N1 S! J2 I
int desy = 0;& ?$ g/ ]" H! z2 B
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))- F) b9 g) C# j& W' h4 Z, [
{
& P$ x4 a# A& ~8 l6 a# F$ n, C$ K d ToInvxy(desx, desy);
5 }3 {- K1 [; G2 h5 h( w return TRUE;8 Q: ]9 T. s4 F% r5 \
}- l# A% F9 u' ]# D0 T0 }+ n2 v
return FALSE;
7 ?, K( L" k) O* ?0 f }; l( W' {9 C( R# S" i0 x' I6 v
! Q; ]4 }( N% N4 U$ k" q9 F6 h
static BOOL ToCube()
( C# c) z) W8 m. _ {* {' u( J/ t( t; x4 l+ ?* g! d9 B3 v
if (!(*D2Client::ptPlayerClient))return FALSE;. v/ A$ A' P0 M) U# T& a5 x
Q4 C, g* M) B2 z" Z5 b: z
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
- f+ J- Z6 I9 Q if (!phand)return FALSE;1 j" P6 O9 c0 o* z- B2 x: J& o3 J2 j
; d) n* L( X( M6 Z" e5 k7 n UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块' [. U+ R$ p2 j9 ?, L
if (!pCube)& d l3 f7 F9 {4 X
{# h$ ?! g, z' ]$ n& M
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块: l; e; k( o# U$ U2 i
if (!pCube || !pCube->nItemNum)1 Y' F7 L' B. r9 z$ F- S8 h4 ^
return FALSE;. Q- E7 s1 s1 i% U! [2 T8 a
}
& ~, A# F O3 i: w9 n, w1 i/ t2 Y: K; @- Y$ C) b0 Q7 ?/ _, c3 j2 `
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))6 ~9 _) N& s: a
return FALSE;
* ]5 p8 @$ ]: @+ g: v" a# D, x$ f6 M0 M4 d: D4 |( S9 m; g
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);4 ^* f- p& q, r
2 T; Y# w+ n7 c$ `& d BYTE aPacket[9] = { 0x2A,0 };
1 k2 k9 B) a+ F' j% P& I ::memcpy(aPacket + 1, &phand->nItemNum, 4);3 O8 k& V, n+ Z4 f8 J2 {
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
$ k! n7 g! n1 N D2Net::D2SendToServer(9, 0, aPacket);
+ I7 V) D, H B0 ^ return TRUE;% m, q. _% q* `6 I
5 V$ x; F( l: |4 B }/ K" z0 t# q" S2 M
- W6 c+ S/ Q+ Y2 F( B! t static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
. E" [, W* j. X* h% F4 M4 H1 G
- d- h. Z6 U0 z% y5 c2 r* e: L static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存0 Y, T2 O1 j; \: G
{; B6 y; c6 J- Q' l4 m7 @0 r, U# u1 `
D2CoordStrc mypst = { NULL };0 J/ L3 x' [+ _* r9 `8 D3 F
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);0 z! P0 _+ g) r3 ?6 K2 K9 }' h
; k+ }7 i8 a- O' Y if (!mypst.nX)return FALSE;
# w/ T; W( G/ A( x9 g" J7 J2 F8 `
7 A$ d8 n" e6 |0 Q PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);. G1 {3 P# Y0 M# R# o/ ?
5 o4 ^ ~4 N2 I5 P7 b BYTE aPacket[13] = { 0x20,0 };
2 ?; o8 {' W4 G: @$ i& q9 C ::memcpy(aPacket + 1, &dwItemID, 4);
S; a" L8 y" ?9 a ::memcpy(aPacket + 5, &mypst.nX, 4);' J8 ?1 j8 o w- X }) x
::memcpy(aPacket + 9, &mypst.nY, 4);- w u8 h4 ]; I' X3 a
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);! |/ v) u0 }% ?3 ?. `
D2Net::D2SendToServer(13, 0, aPacket);
1 r3 b* B8 E% E2 w$ Y5 { return TRUE;1 I+ w! W3 m* _
}
& }, A* {$ T/ } s
6 T1 Z* ], Z# g8 e- V4 H static BOOL DropCursorItemToGround()) n4 F5 S, f- _. h3 u! r- m
{
3 U% Z6 @ S: p; r5 d- o9 C4 n UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);* D6 j/ ?$ c- h
if (!phand)
! k* l; A. j$ D& b v: { return FALSE;& i7 Z- u& m4 j; ?2 v/ k, s9 i
- x5 m8 R& L- }: o) K4 o v" q [
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
# r/ o8 C" x. r. O# P% r% E6 M4 v7 I0 h. i) C7 L3 X" [
BYTE aPacket[5] = { 0x17 };8 |1 O0 v. J2 t4 D
::memcpy(aPacket + 1, &phand->nItemNum, 4);
* J2 O- G9 S2 W0 X0 ^( a8 ~$ g D2Net::D2SendToServer(5, 0, aPacket);5 h( F& d, ~5 `3 _9 @
return TRUE;
1 B+ j. }3 s& q" X% e2 F8 E7 D$ n5 R) L
}
* r- b. c6 l- S: `/ l7 U, S8 A" u, Y1 t& h
static BOOL PickStorageItemToCursor(DWORD dwItemID)
1 F; @( T' T9 g" X. ` {
" x) o% t0 q6 [( x PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
! l# O3 H* j, j/ Y
6 e5 y( O9 f9 z) Z9 F! x BYTE aPacket[5] = { 0 };
% K' M" D) F- E) l3 A& T aPacket[0] = 0x19;
% h! e! s8 n- f; H" i7 M ::memcpy(aPacket + 1, &dwItemID, 4);
0 g) I3 m' n( D- n8 X5 ~ //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
. Z# p3 i7 k; r9 w# W D2Net::D2SendToServer(5, 0, aPacket);7 q& _, Q Z7 \' A
return TRUE;! ~2 `6 y, A0 p A, Z2 t* g F k
}3 @- z! Q! u- D s
( Z. k b' L/ h \
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)5 `* Q5 ~8 b7 {3 M i5 r
{
' |. k: q7 P, ^: ?7 T PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
. g2 k# R; f8 l' `$ E [ BYTE aPacket[17] = { 0x1f,0 };1 |+ i% {- i" w) e
::memcpy(aPacket + 1, &ItemID1, 4);* t: h7 T" \4 d1 V* W6 s- E# I" Y& B
::memcpy(aPacket + 5, &ItemID2, 4);
) M ^& |" j+ u0 L; ]- u //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);& s4 }1 p9 o+ @$ v% f
D2Net::D2SendToServer(17, 0, aPacket); d( U- P: ?7 Q* J) n
return TRUE;
; [+ _. l" L- b D- Q; n }- o; F4 e a7 x3 ~4 v' O
9 _7 Y4 Q/ L# F: v7 U
static BOOL Transmute(). z' Y' {9 H1 N
{, D4 h7 s. J% i! [8 _
if (!(*D2Client::ptPlayerClient))return FALSE;
/ f9 M$ n- ]$ a+ {) K/ c# b( t
5 R! j+ [& o1 g# o, q if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
9 q. `$ ~ P H1 m6 Y% }( J" c* {- c& l return FALSE;
; \+ T: a# \) j* [& x
5 n4 D+ F& B) Y v PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
8 I* }) ?7 O* f BYTE aPacket[7] = { 0 };- Z. n, g) N2 j
aPacket[0] = 0x4f;' t) {8 D. \/ R( e1 x; O
aPacket[1] = 0x18;, w4 V) h6 z/ J# t' j7 u
D2Net::D2SendToServer(7, 0, aPacket);. i+ f$ O( l; e3 w* o. B4 s5 i
return TRUE;& F, S9 _9 W/ B" `; K: B& W7 H% ?
}& O. ?6 }7 s: B4 _+ }
};
* P! K3 \+ h0 l+ I& ~$ |/ O, x* N5 c9 O, x4 n% @* o
|
|