|
|
转载4 F. K! X. y7 I2 a4 _" Z3 X) F
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
* x0 b F4 r% X' F# d& YD2Client:7 q" h( m* e( N3 x. K! J. {
6FB20AE1为拦截输入框(用于获得命令)
8 x5 J5 a2 d' W$ D4 { `6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发+ O' X8 a% ^# A, L- r S
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
; {0 {$ N& X4 r! F0 u8 y/ D$ A6FAF4230为hackmap的loop点 我用的hackmap导出位置: R! [3 K# W7 k' E) E' g: Y' p7 T
2 M. N, B- A. r) z8 z# t0 V( ~* o) f0 J/ p8 a/ {9 x7 [! `
发包函数:
% R1 x9 c* t& K+ fclass D2PKT_ITEM
" {, j( j! Q/ M0 G1 G/ ~{( [: d* E0 S6 F
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上- X; E2 Y4 {, s" f
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多" J5 x0 H5 ~, F- @" _
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上; Y" w* I9 y5 R ~( c
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上7 ?) R1 H7 m: v/ ?3 {; f% B
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
+ A% z7 S+ W3 Y4 m) o#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上3 s8 a5 E6 b$ d- t4 r% X; Q6 P
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏3 A( H6 F0 d0 E" D2 d& A
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上# M+ N7 U2 ]& D( R
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
6 q5 o" I5 v3 J#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
4 u$ P: R$ @7 }. _3 m% h9 _: U; o#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
) m1 \, o3 X) K1 ?4 z" k0 Q#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 ( J! U4 P. o4 k% ]! I7 g: |& s V
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带$ e+ a* B' C7 I. j
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
q; p/ f |( X#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
# Z. k! j9 H F4 |# b4 V$ B F* s#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
) k N7 A6 \8 |1 w$ J1 S#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -: A; B& s6 ?7 a0 f0 E, E8 `) M, e
& T4 U8 q' E9 S8 o
#define PacketItemMaxTick 150) S3 }2 L8 u* c
#define PacketItemPickUpTick 20
; ]2 Q1 K, ?- C3 Y! W: _4 o; y7 l3 s2 e% Z J8 s
private:
+ S. W7 m% q$ p8 W: a static DWORD _PKTItemTick;3 e6 J# {( L6 l, z) \
static DWORD _PKTItemAction;
- ?* d) v2 s" k/ n2 c static DWORD _PKTItemID;
5 E# L$ L d, L/ o( w6 N8 r static BYTE _PKTPKTType;( n4 B: x3 k" s
public:
, o7 w2 H3 }. B/ g$ r static DWORD PKTItemGetTick() { return _PKTItemTick; }
! V2 i6 |. ]5 h& f3 D1 Q! N& N0 S; _9 {9 q, x$ C
static void PKTItemRelease()
8 S; S, t9 o& j# L+ |+ w; U# I1 y {! k7 U3 Z/ s5 u- T; D) E3 g. H) N" @
_PKTItemTick = 0;2 h! P. o% A. ?' f5 c, r3 _
_PKTItemAction = 0;
' W# \/ @; W, a1 w8 x- D0 C: j _PKTItemID = 0;
0 z5 f) `- m( ^6 o" ?6 B _PKTPKTType = 0;0 T6 ~" f% o$ |1 O5 O
}
' c E0 Z/ H+ w& w
2 l; h# b- L {& d6 E' d" a; e static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) 2 j# S; ?4 Q- i7 i D
{4 v% _6 p: n$ u, N. T
_PKTPKTType = aPacket0;
0 m7 v9 M! C Y- w* A/ F1 E _PKTItemTick = tick;0 v8 q- {& c0 E3 p$ F9 B
_PKTItemAction = ItemAction;
8 c: C. P4 B7 o; ]! z% m _PKTItemID = dwItemID;
0 `" {% k! C/ r0 I8 L }' f! H' O: g6 Q( r+ _; v: {7 m
/ K+ T' U# g1 [1 z$ j3 r$ }; i& l static void PKTItemTellW8(DWORD tick); T9 g% H" M5 Y- T" c
{* Z& c) G- a5 d: B
_PKTItemTick = tick;
# x% p& j' S7 H& m) A }
8 k' Z! H4 r4 f2 U& P$ u
3 @ U; |4 }9 _3 f z; U static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
& _& r8 G( p8 o- N& l" w {8 Z+ f; @9 t6 V7 V/ ]
if (aLength >= 8)% b, D. b3 k5 o# V/ F8 J2 n
{5 y* i$ G E$ k" e8 @: l$ M+ ~; f! K
DWORD dwItemId = 0;
1 x' b/ D+ u% p& Q# y* p9 I memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
( F1 I/ [3 ]( @2 s8 J' t9 Z if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE! v) P! \/ {$ `+ v9 }$ K
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
' \" J5 X. \* l. F' R. m* W6 Y& B && _PKTPKTType == PACKET_NEWITEM" n# d7 Y4 l. N6 @) o! P
)$ j) a% y: V0 p4 i2 Y* b
{
' Q6 }( r# w# ~$ ]% j1 y if (_PKTItemID == 0 && _PKTItemTick)/ O' B l: U0 l- J% T
{
& A( C: X( K |9 }) j PKTItemRelease();
; T0 R' z k( U' g! d }
. N- t( |+ H: H: o; K7 ]& @4 K else if(_PKTItemID== dwItemId&& _PKTItemTick)
5 c$ J) ^5 i3 e1 C5 g W: w5 r {" V1 i% }9 G9 U- E. _& B
PKTItemRelease();
9 `8 i" M! G- [ }
% `) s1 i' N) r! s }* J& i! I5 d* m5 [& z% h/ t
+ K$ C8 Q. H q3 f: m: a }
1 m" ]6 W% ]" N" x1 V6 C }
- }) e0 {& p% k& N1 I5 E
8 y; o1 C3 S0 ?2 \9 A static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
) s) H2 o- \* _; |/ K/ l1 J: {* c {* Q& V+ |9 |4 _( w. T
if (aLength >= 8)
: T) z: P$ F( P {
3 \) e% M: s! b# b% K4 u DWORD dwItemId = 0;
( I h! F/ v, d/ {1 f% J memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));" J6 u& y) b" M( }) b5 O
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
+ I5 f+ ~# m% h% S/ W$ p) B# @ e9 x && _PKTItemAction == ITEM_ACTION_FROM_STORAGE. t1 N: |! I( ?' B3 W, D6 S7 |6 P' |
&& _PKTPKTType == PACKET_ITEMACTION2 U* i* R: X6 P5 a1 y
)
! ^3 I; V+ I' G7 s2 K9 ?$ E {
2 Y& E: d0 p3 S4 K6 y if (dwItemId == 0 && _PKTItemTick)
, G7 Z- p- j4 L" w {' a1 \% D6 l5 X& L. Z
PKTItemRelease();
" ^" R) Y0 m/ G* ~: S2 o. u }
u- ]( N: r, s9 X( \, @! g' ` else if (dwItemId == _PKTItemID && _PKTItemTick)* \; r, }- Q) [7 a5 Z/ h6 d* t
{% w' n5 z/ M% |! v: l
PKTItemRelease();- N8 L: h+ ^7 b! _2 G, [
}) T7 ]- J+ F! U- d# J0 f. I0 s1 ^
}
{8 q9 Q: ^: d1 k9 k
3 K5 y7 h% L3 Q r {: f* z0 x& j }
' _9 j5 z8 `4 L' p8 P" k }
/ @7 X, {( x. H$ n. O* |) Z& o
9 A' {) S" r$ t$ N9 p static void PKTItemGameLoop()8 A) s* P. q3 C7 E
{* X. C- r" |! u4 C% b# w) a/ b
if (_PKTItemTick > 0)
; Q' H4 F: l/ @' s# V' c* D0 W: } _PKTItemTick--;) J/ ^* y4 y. }' U* M* d
else if (_PKTItemTick == 0)1 {6 |+ }+ v7 V4 S# T8 H
PKTItemRelease();
/ Y( Z3 u5 z( Z# X4 `; o; Z }
: h5 r. A( e) ?: h" k5 e' a
+ q: h4 H, w, ~6 U' x static BOOL PKTItemCando() ' R4 Q$ t) B' m/ t
{
; E8 K1 ?5 N& ` if (_PKTItemTick == 0)return TRUE;# _. J& Q F) X$ r* J# D2 o: g
return FALSE;
" _2 R( v. L) M3 u7 q }
$ M, W; q1 g2 X
' ?* o5 \/ a; x! P static BOOL BuyItem(DWORD ItemID, DWORD npcid)
9 ~% q) J } W& y# w3 J1 T2 f {, T }: `2 }+ ~
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
8 L. g4 w% T8 j BYTE aPacket[17] = { 0 };& t2 S* H5 W+ s5 I. B% t" E
aPacket[0] = 0x32;& l" m- V# Y1 k# F8 C
::memcpy(&aPacket[1], &npcid, 4);
0 A7 V1 c$ W2 Z5 i" r: G5 {- ^/ D ::memcpy(&aPacket[5], &ItemID, 4);2 j6 ?' ?; V% w9 ^
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);5 N. p. M3 `9 `! n: R! ~" G
D2Net::D2SendToServer(17, 0, aPacket);" N% f d( X5 H/ r6 L
return TRUE;: f8 A* a' }+ L! e+ A: @
}3 |, y z9 Q# P
' }0 y8 h N3 j# I- j static BOOL SellItem(DWORD ItemID, DWORD npcid)1 C2 Y5 Q2 k4 H. ?& g6 ~
{
% f! `7 t. Y8 [4 G5 z0 C, _ PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
4 t4 e( S2 y" v BYTE aPacket[17] = { 0 };4 h+ l* [) P5 H
aPacket[0] = 0x33;
8 N: p" Y" y0 e0 k, ` ::memcpy(&aPacket[1], &npcid, 4);
# O) A3 m* T! x V* n! ~ ::memcpy(&aPacket[5], &ItemID, 4);
u! Y E& K% r. L% ^- w //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
) @4 e* r3 Y, J$ _; D+ ]# _9 _- f D2Net::D2SendToServer(17, 0, aPacket);4 s. [+ s# z1 H+ o) d+ b/ N7 u. v' m
return TRUE;
. a& \9 o& M" D5 V: x1 A: ^- Y) b# z }
) \2 \0 k& N" q
, z* }. z$ H% p j static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
' q8 L+ T5 |+ E* f1 | Z+ b
" Q) P& ]3 n2 J. ?& v" G# ^# v6 F static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
; x* N! ~7 a9 }
4 J; Q9 }$ I& Y3 Y$ T) L static BOOL OpenCube(); m# S% T0 R+ n5 \' ~, c& d8 g
{: F, L. F7 I. }. [3 f- ?, G# B# M: U" {
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;+ U" i: g) \" x
?2 ]" Q6 j$ F' ^7 i UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);$ F; l# M# F# A9 a0 N# l
if (!pCube)
3 a) f( B" m2 L5 _: x {
, ]+ y& d- X9 @" f pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);9 r) M9 @' e8 k# s
if (!pCube)
, b4 M( I9 w; I& Q p, ~ return FALSE;
) u/ N: k: s" g& p" f }
1 k" ]: _- r# q9 N3 n3 Q PKTItemTellW8(PacketItemMaxTick);8 W) X8 E3 B9 v
+ h& v/ J$ ^7 h% V- P; z
D2CoordStrc mypst = { NULL };
, W- \5 b7 o- a0 T* n% k% l$ J D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
2 y, V7 d3 @ t! X
0 t& m7 N) ^- X' P( {$ K BYTE aPacket[13] = { 0x20,0 };0 n2 l+ d5 a+ r% p
::memcpy(aPacket + 1, &pCube->nItemNum, 4);# ?; n* @( Y: }$ H' ?
::memcpy(aPacket + 5, &(mypst.nX), 4);
; H. b+ L+ J& P ::memcpy(aPacket + 9, &(mypst.nY), 4);
# A+ j: C& K3 z% p. I D2Net::D2SendToServer(13, 0, aPacket); Q# p: l* o8 R4 m3 H* u
return TRUE;2 }3 J1 A/ Y! [6 ~- U9 i
}3 m+ w1 i+ N6 H: e g
6 x$ C/ J% y2 L% g" \* N. ?4 E# {. A j
static BOOL ToInvxy(DWORD x, DWORD y)- v4 r, j0 u/ w( a
{
: z* f# t, d( N UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
' `+ g' m3 x: Y A2 s
9 `# A2 b6 R, @1 d1 e if (phand == NULL)% S, m& u7 j) V! b" O) B
return FALSE;" K7 f1 Q) t( q3 N
3 Q+ \; [0 f4 _8 R6 v( Z# X) \. E- y" c
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);9 a8 t5 v6 Q4 @; B: E, \/ ?# v+ r& r
8 c; A' O: [* e: i7 I
BYTE aPacket[17] = { 0x18,0 };9 {4 y+ x7 v# x( G4 f5 d4 \
::memcpy(aPacket + 1, &phand->nItemNum, 4);7 C3 k0 S7 J0 w: Y. e2 s* B4 E3 x4 e
::memcpy(aPacket + 5, &x, 4);
! I `" B1 [* w5 X& a' ^ ::memcpy(aPacket + 9, &y, 4);
! e u+ b6 r4 v2 X D2Net::D2SendToServer(17, 0, aPacket);, D/ e3 h4 [1 ~* c
return TRUE;
2 i" a3 Z2 g9 e& K } f0 _6 _/ W3 L; P
# R: v' H& B P0 _# C; v9 q) b static BOOL ToInvRandom(BOOL bBagFix = FALSE)
: b L5 B* J" @: z: ` {( A6 s& S7 s+ ], Q' r2 L
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);7 B4 G* I6 j8 |7 ]5 t
if (!phand)2 B I8 K* b) Y0 {) P
return FALSE;3 I5 T- D. f' s1 `! x3 W1 Z8 U
int desx = 0;
. `9 d" p6 \+ M* } int desy = 0;; m2 l8 G( a: u; r; P5 w4 P
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))! j' P& p8 i& r% D% x( a; N
{
- k0 w% i! G& ]8 b# Z+ P. x ToInvxy(desx, desy);- C3 c1 F7 g+ p
return TRUE;7 P& i ~4 B4 i& D- R. {1 ?
}
. [) k( X, g& L+ A& a return FALSE;
. Y9 V+ j E( I& t8 r" h) I0 G! M }2 y; n+ n5 W5 u. h, G
# Y7 d9 S5 b# f. Z static BOOL ToCube()0 k {6 Q0 B6 ?4 O2 n# C
{
5 e# e; W' ^4 G5 a, e# Y$ b, s' { if (!(*D2Client::ptPlayerClient))return FALSE; I+ o l2 H( n& }, W+ X' A1 y
' q$ t9 \! t+ H/ v7 \ UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);( l: ^. M$ K1 c0 `; W8 k
if (!phand)return FALSE;! f d/ M$ ~+ n$ Q/ J# S
8 ~& S; l# d- Y9 @% D. N$ P UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块/ j: @% N8 c$ W# U6 K
if (!pCube)6 c7 Q4 f( T( D+ M P# O
{% u6 N/ y7 R, F( J
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
3 y T6 F# q& V$ m9 G: L if (!pCube || !pCube->nItemNum)
! T. P3 a/ S- W! M4 E+ ~+ Y return FALSE;
% C/ x2 b1 c# |( S }( q% X+ M7 S; ?
' s5 L: ~+ o0 [
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
: Z. ~6 j( S& }% |: v$ X/ r+ \1 |* a/ l return FALSE;
2 [+ g4 O0 \, M( l) N" g/ z
# { L2 G' x' s0 r) l1 j8 J PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);, k& R8 K9 U) B% ~
4 b* ^- `2 m8 T2 _' i" v+ G- \
BYTE aPacket[9] = { 0x2A,0 };: w/ |7 s M `0 q9 o2 t
::memcpy(aPacket + 1, &phand->nItemNum, 4);- a" C9 e' g2 |4 a% O |" o
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
) \9 ?/ G/ R9 H1 b6 n9 d: D D2Net::D2SendToServer(9, 0, aPacket);
8 X! T% w1 g: c$ j& M/ i/ P return TRUE;
* p4 r }: ?! [
. M: q+ W8 m9 g }
5 H& p: Z# Q, u0 l( D/ c( s6 Q s3 m9 }
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
+ v. ~- t8 ^& a' z/ U: G& P9 U- I+ I/ N$ O( {( [
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
* V; b) ?9 D" e T* m, k {9 D- T9 L$ L% y. G ]
D2CoordStrc mypst = { NULL };6 S2 Q8 E% i# ?& f8 [( z2 k4 g0 d% `
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);% }/ r) U0 t" h) c# {
/ D5 h% K: i( l- `# y# W/ p) R8 Q( L if (!mypst.nX)return FALSE;
# {* A6 X5 g9 Z5 X3 B, w: a9 m: c
2 Q$ V6 L% ?4 o; I PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
1 H$ Q7 H/ r+ j& J3 ]: E$ M% |+ ^7 R. o S7 Q
BYTE aPacket[13] = { 0x20,0 };
. I9 `8 b/ v! f$ @ ::memcpy(aPacket + 1, &dwItemID, 4); I$ N" U2 T8 H7 |: R: @1 f
::memcpy(aPacket + 5, &mypst.nX, 4);$ f k" {8 m; |, \
::memcpy(aPacket + 9, &mypst.nY, 4);4 s/ a3 M6 @! J% c
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
0 K2 o6 @1 ^5 C- `7 { D2Net::D2SendToServer(13, 0, aPacket);
+ ?$ b! m) ]% m& I return TRUE;
% E b8 z# N. e2 x& i { }' H" u) l1 O9 r, j+ d* F
+ J$ I& j' R) L( g0 v static BOOL DropCursorItemToGround()
$ w- m$ L$ g& F- {. s- z/ c* `# e0 I; c5 r {$ j, ~) a. h3 i# b+ ^
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
5 l( ^$ s' P$ h if (!phand)# ]1 k0 A& I# N! H+ g4 A; u
return FALSE;
, a6 z% m5 y% _. h+ Q; f$ b5 A* Z5 F6 R x; ?6 o5 M( B/ o i8 T( _
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);7 G3 `$ T5 ^) M+ }! V9 D
8 |1 ~* R6 {6 z8 ]2 { BYTE aPacket[5] = { 0x17 };
, B' I7 B" I0 C$ u2 W( K+ D- J9 e" r: D ::memcpy(aPacket + 1, &phand->nItemNum, 4);& b4 L- b ]+ k0 u
D2Net::D2SendToServer(5, 0, aPacket);4 Q+ Q2 a) n6 r5 T( T2 I6 P- D. [
return TRUE;
0 l) o6 n4 g9 x4 g6 h, h
5 Y" ?4 u& ~3 ]0 z, Q2 S }
- J( X9 u: | X. p( @6 O/ A Y2 w9 X' W. e* D
static BOOL PickStorageItemToCursor(DWORD dwItemID)7 d. q, s) W S5 d- d8 x9 G
{# K5 P8 y! s. C O8 i, x
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);, \+ n2 x; r3 Y5 u
' [% X& D& O# z5 {) k5 U+ x; s0 [ BYTE aPacket[5] = { 0 };
# R5 v7 D* Y) p2 L/ L3 s6 Y aPacket[0] = 0x19;- D+ |: T2 A" O( H, q5 m
::memcpy(aPacket + 1, &dwItemID, 4);8 n, P7 m3 A) P# b9 S
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);. ?' d+ m* c S6 r% o
D2Net::D2SendToServer(5, 0, aPacket);/ h: @, a, T2 U3 ]- Q$ A
return TRUE;. i" P7 [5 F) h
}
+ f0 G3 Y2 l J5 N% D' ^# j6 T
+ x4 X5 Z3 y- M static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
! Z2 f3 ^% e! M9 n8 Y ? {' t( h, B5 W% r% G
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
0 z4 w2 c% ?3 w) W/ k+ } BYTE aPacket[17] = { 0x1f,0 };8 ~& A+ g$ \* s% {
::memcpy(aPacket + 1, &ItemID1, 4);6 E) Q! ]; {, w! T9 e+ i# {+ N) }
::memcpy(aPacket + 5, &ItemID2, 4);1 }0 K: Y7 Y$ f- n$ u
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
: g# C. u, _9 n- } D2Net::D2SendToServer(17, 0, aPacket);
/ o2 ^! h2 A5 b, ~2 z return TRUE;, V/ n& W9 T! B; \" z7 M1 @
}
0 O& h$ _3 t6 R3 u
! e7 d( }& R: B static BOOL Transmute()
; W) e4 n" K9 K9 Y. j$ T {0 i" `5 f9 h- x' ?+ Z
if (!(*D2Client::ptPlayerClient))return FALSE;+ b! i7 O' f; x" }% F( a' K$ u
2 W* b$ k( e/ T8 O if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))$ v1 M' q, e( l q% m( n9 N- y, B2 S
return FALSE;
" [7 ~% v6 W& Z3 h& Z; [' ~" n6 t. q7 }0 Q ~& P% H( G1 [
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);, ^ i) ~2 `, l! O7 W; s0 T
BYTE aPacket[7] = { 0 };
; Z- E6 |! W4 ] aPacket[0] = 0x4f;
u" F$ z5 V+ v j% | aPacket[1] = 0x18;
j* R! `) L9 d: j9 e D2Net::D2SendToServer(7, 0, aPacket);% F0 ~. N w+ {7 q
return TRUE;) ~0 l, A/ S; r
}
6 m0 E2 C" O1 b0 w};
Y2 ? E, J0 x; L2 Z: w/ p6 s* [* I1 I, i9 G
|
|