|
|
转载
' Q( D- }. h2 _% w( o* D自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
1 b4 j+ j6 J @/ h2 q8 HD2Client:
3 A0 x0 K7 w' ^: [6FB20AE1为拦截输入框(用于获得命令)
' ~* J, C6 [& \! c- {. K2 { L6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
' p2 N4 j, n6 n2 B/ [5 S6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
- I% [0 \( Q( i5 u! W' S6FAF4230为hackmap的loop点 我用的hackmap导出位置
6 n, K: l7 `7 p. i" \ s/ f7 N" C! }) ^1 b3 e
8 _8 n6 [1 `& t9 R* `7 [$ v- P发包函数:" P1 B- l4 K/ b9 z( K
class D2PKT_ITEM$ \3 g; `8 d4 E" ^" I8 M* T
{
8 _" c, d7 L% s- F: ~#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上+ B5 h* H! w; N( p+ H
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
; ~' U: {6 x9 D( L7 q% j#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上) q U( j8 p: I: ]
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
$ M; W, a& i) J& F#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
, p+ T; }+ w8 v#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上# s3 e8 h5 O1 V1 e; ?, u
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
- |: A& _, L# K) ^; B#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
+ g" }1 y- s3 ^7 {9 I$ D' n: I& |3 L7 u: S#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
% ?/ s- k: ]+ M; I#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店/ _) v! d, e& S- e$ @. H4 `7 R% U
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV# y1 ?. G$ {; ]& F" A0 c( D- Z! p
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 + y8 ^* W% M% N5 ~
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
8 z K/ j6 }$ [) O- T4 X F: }#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上5 K0 U" x# W' M! K: F
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
7 n% G* T+ F$ T* c, H2 Z {" Q#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上! B0 F* b& f) w9 U" r
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -8 e! N* J+ i u( {' u
1 _# b7 y2 p# E% Y; Q* K#define PacketItemMaxTick 1506 d. Z1 c/ x' L! {" K( w+ V6 ^+ F
#define PacketItemPickUpTick 20
9 z4 C# K% r6 e# U9 x$ `- ^2 k& I2 N( n2 [- J! ?
private:) l, i4 M+ @; _3 ]
static DWORD _PKTItemTick;; p. j% V7 {5 F5 L# m# J
static DWORD _PKTItemAction;
: b ]+ M/ {. ^ static DWORD _PKTItemID;+ ~: K) f2 H6 c3 {5 j- ?5 C
static BYTE _PKTPKTType; w8 Z7 p% _1 \- R# [* D: r
public:
: S$ b2 h1 N0 L static DWORD PKTItemGetTick() { return _PKTItemTick; }
. f4 y F2 ~7 Z7 O/ b0 u' ~ g$ ^, ~4 d2 t' i3 C/ i3 i) {! m
static void PKTItemRelease()
0 ^" c: b% J$ c0 Z) z {
9 p; ^. l# Z' r. L! F" V _PKTItemTick = 0;' u" `: p* w# x3 Y' f' C% v* a" [4 W
_PKTItemAction = 0;, G( q1 F& t) i
_PKTItemID = 0;* E0 r6 l, R4 {0 f2 l! [- }$ P; i; x
_PKTPKTType = 0;9 C/ V( E: E" J8 P% i$ D
}5 E; W4 n% r1 I& B0 t6 W$ S
7 s1 _* ~; Y' D( i) O static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
% n$ a# `3 N; X {) t7 K; m8 L' R+ I
_PKTPKTType = aPacket0;
% ]) }, G* Y/ Q2 t* L _PKTItemTick = tick;
% ?, n' u% m- U+ E& j' X* S _PKTItemAction = ItemAction;& w" u0 w" `1 Q+ _) A# l
_PKTItemID = dwItemID;
6 q3 j/ h0 z, S% b5 d/ x1 x }; ?7 w2 f6 l& W* Q! ~
; e) Q4 f) O% u2 { static void PKTItemTellW8(DWORD tick)
5 u" J& m- A7 D6 i9 K4 Z2 A {
) ~3 E) y P+ G: D2 { _PKTItemTick = tick;( f% d7 Y+ T: Z( O1 m
}2 N1 @( F+ a" h6 r" r' R
$ W7 }- B) @/ o( E
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor, E( v5 }& k/ L" n+ x6 }9 L
{1 U+ z2 k: h! A' z% ]5 i5 g
if (aLength >= 8)
' l) s, f' \3 \ {5 W9 K2 Q' R# t6 g
DWORD dwItemId = 0;
, R" {0 [& M2 K5 w8 v memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
' g; q+ e" {1 m) `6 W7 f3 c if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE _9 [0 k1 b z `3 B5 K }4 u; e
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
& j' Y5 v4 B8 ^5 Z3 B F0 L && _PKTPKTType == PACKET_NEWITEM; ]0 V& e& p0 D# F* m6 v! k
)
7 T4 }; a0 J" ~( J {
) q' W5 d* Q/ d2 ^2 |1 F if (_PKTItemID == 0 && _PKTItemTick)
" y$ |- A8 J5 o% ]6 t {
0 _" D/ @9 @4 v) Z: C" R PKTItemRelease();
8 B# ?! Z g, D; ~8 t. t6 p }
H" F s/ Y( Z else if(_PKTItemID== dwItemId&& _PKTItemTick)% N0 y2 ^% `2 T& g; }+ W! N! m% g
{+ g# W( T1 i$ D0 `4 ~
PKTItemRelease();* I+ }3 @/ ?9 F) E& Y
}
8 K- S2 v* c" O4 F4 h5 j. |# C: z }6 a6 x( S& i! g- K% A
# Y$ m! x1 u; M0 B' h
}$ n; |+ x- ]9 X
}
: f* h( n/ q1 Y$ b" w' \# n: u# w. ~ N$ \
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
; d# j, `2 l J s; l) y6 c {
& g% x! N& O; Q! ? if (aLength >= 8)
' B3 [$ W: X& _/ W0 V { j/ L- C' m" c- d
DWORD dwItemId = 0;
6 N, P K9 O2 R' H4 ` memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));& q) {) S) Y: m7 p7 q# q
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
- a9 S) t% k3 I/ E && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
2 j4 T2 a0 Q- _2 l && _PKTPKTType == PACKET_ITEMACTION
' Z) b3 k! W- k- W& q )
& o, Z+ J* y, D8 n* u( @5 c {( [% ^6 m( s: l6 D7 T9 }( W
if (dwItemId == 0 && _PKTItemTick)
5 Z r4 }/ i1 `6 v1 J {1 V$ b1 P) U- r
PKTItemRelease();, r) J% s. o) V2 N9 x D
}& Y& D# m, J) X7 \- U7 y7 f! W
else if (dwItemId == _PKTItemID && _PKTItemTick)& @6 U% ] A+ c
{
# z" a5 |0 N& d8 f0 F PKTItemRelease();
/ g5 L! \7 c* l3 j! ~/ r }
4 S% p, {" f% [4 c4 J }- r( t) W7 h1 |) b. Q
1 A4 Q- X- g8 f% Y }
2 f0 P ^ T1 ~! _+ r; F }9 T! n+ x0 A+ U& N# h& A5 V8 Z
; T; |: L$ D* X+ A2 \ J static void PKTItemGameLoop()$ |# ^3 K4 T8 ~& [
{# ?0 U1 O. `% g# i2 l) g' ?
if (_PKTItemTick > 0)# E. w3 _4 T J, q. {& n3 E
_PKTItemTick--;
u' Z6 z3 h$ {0 N" @: O else if (_PKTItemTick == 0)% m6 Q0 q8 Z+ F# O
PKTItemRelease();
- f" J5 s% n! Q( ]% m }
" l( G5 ~/ h% n* j9 N1 M, c/ V" W( q5 ]& N4 S
static BOOL PKTItemCando() + s7 w/ m$ J+ E l7 \
{8 U: b: _: @& m8 J+ u; M8 Y% G
if (_PKTItemTick == 0)return TRUE;5 k) ^0 z2 K$ D* K" ]1 t+ X F: V n
return FALSE;* i5 D& |) ]7 E
}
# ^3 { X8 O0 E0 c
7 h8 Y& ?8 O: h7 _ static BOOL BuyItem(DWORD ItemID, DWORD npcid)9 g$ ~# Q9 ]( ^
{3 a9 F. r2 S$ J& [: P& p5 V- [
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
3 g$ E- |5 M( i- }! p( [' a- }( K BYTE aPacket[17] = { 0 };
) W: s6 f! U& v: V2 t% F aPacket[0] = 0x32;; ?7 H% h! R+ y _6 f5 y- A4 |' c
::memcpy(&aPacket[1], &npcid, 4);, g. a. e7 [8 r
::memcpy(&aPacket[5], &ItemID, 4);
3 `$ p f: e% F" s9 | //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
1 q3 z# b: {( e0 X/ A5 _ D2Net::D2SendToServer(17, 0, aPacket);
6 u: h6 P I( w; z1 ] return TRUE;* @" r; F& d; R% w% v% n$ Q% g
}
/ u) j$ U2 o6 b& b- u8 p5 n- e( ^- P) E; c" B
static BOOL SellItem(DWORD ItemID, DWORD npcid)
0 X8 r# [( Y; w6 V {
5 [$ }1 I6 ]: E PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
0 w5 j8 K$ e0 g. v5 f% D BYTE aPacket[17] = { 0 };) y0 V$ z6 b% {: ~3 `& R: o
aPacket[0] = 0x33;
+ J5 s4 n, e; ~$ g5 M* d; h ::memcpy(&aPacket[1], &npcid, 4);# W4 h; K+ R/ ?# O+ ~
::memcpy(&aPacket[5], &ItemID, 4);
4 G2 x4 N! e- _$ h //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
) K1 B x r2 [ D2Net::D2SendToServer(17, 0, aPacket);
, L& Q! P# N; P! | return TRUE;
5 y( l# ?. g6 a1 O }1 I* J' w1 l u; h+ e: `& m
/ l2 m# v, }! `2 o! P
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);! C" g* s: q. _, }$ W2 Z
9 \4 E; \2 ` x% T3 b# }
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
4 t5 M) }- n$ ?* }! w* l \- }
9 x1 y1 n& d7 |2 A static BOOL OpenCube(). r1 a( Q' P1 `1 o; B! }1 }
{0 I* s* j+ Z8 U$ a/ n* w" V
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
" t: s; H$ E& A& n) i8 k! S2 X# f( j# t& [: @8 B' y5 Y. e
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
6 E9 {$ {$ Y `" J; M, Z+ l if (!pCube)
$ t" ]/ v7 B9 N$ {% K7 M9 y4 C {
: ~" _. V8 L( H pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);; U; |; E. w! o) f
if (!pCube)
( `- [# } r* t- j% O* C2 R return FALSE;" C) L3 }: R _# n' G
}. C1 N4 _+ T2 d
PKTItemTellW8(PacketItemMaxTick);) ^! i0 I5 v6 a0 P
Y0 c* H2 G/ U D2CoordStrc mypst = { NULL };/ n! G2 ]9 S5 D; T
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);) T6 C% j. B! h
3 ^0 Z; x( w+ o) m" u9 ~& K BYTE aPacket[13] = { 0x20,0 };* H" p, Q1 P; L* A) h! ~
::memcpy(aPacket + 1, &pCube->nItemNum, 4);9 w5 E P7 W6 `2 T9 ~* j
::memcpy(aPacket + 5, &(mypst.nX), 4);
, j6 l4 K- m+ p* n ::memcpy(aPacket + 9, &(mypst.nY), 4);
* [" ]* P- f6 s) h, d' n2 h) G2 c D2Net::D2SendToServer(13, 0, aPacket);" ]) N9 y; H/ w5 K; j
return TRUE;
x2 c) \, t* B/ Y }0 t. o3 X9 k. G' f) }" R
/ B7 w# @% Z8 |/ ]/ \+ a: w. }
static BOOL ToInvxy(DWORD x, DWORD y)
' v; B! U) E$ E, ]% p0 R& `+ t {
1 w& i# Y! ~" {* ^4 E i9 B" }& | UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
7 z% }# k* ~- ], `1 |) K. z4 ~! n" C/ q& U" w- h% F
if (phand == NULL)7 O9 q( s) d5 [% L2 J5 h
return FALSE;
. a3 } l+ C! a: M- }, r4 g% _4 L3 G$ }1 P4 Z! a
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
' B4 m9 O( Z' J. S8 h$ q$ M- i i/ O5 X' ~5 t& k
BYTE aPacket[17] = { 0x18,0 };
5 ]; Y( p2 b0 M7 K3 k" H s ::memcpy(aPacket + 1, &phand->nItemNum, 4);
$ D+ _/ n4 A" S3 n: H } ::memcpy(aPacket + 5, &x, 4);% \* O0 B; T. B
::memcpy(aPacket + 9, &y, 4);
/ F0 m) i- `. _, I1 S; C$ f D2Net::D2SendToServer(17, 0, aPacket);7 N. P9 c3 ~ b n/ P9 [5 D
return TRUE;9 i) y( B9 J- D2 n
}1 E% i$ k6 r7 [3 u l
" b- E. h6 f; Q% h- T
static BOOL ToInvRandom(BOOL bBagFix = FALSE) 2 e' k! ]6 f. f, ^& q3 U
{6 r6 s/ M. ]0 Y h) F1 [+ [
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);4 U# @ [: I! |9 ?( y S! u" B8 r
if (!phand)
0 [0 ?( k! Q9 B3 | return FALSE;5 v7 X$ ?0 o' g8 @# M3 V7 o) N4 c
int desx = 0;2 u3 [6 d3 U! t- N
int desy = 0;0 P [0 r# \3 {7 i$ s
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))5 h3 S& H9 h }) E% ^# j+ ^' k
{
Q% \2 c- ]) m1 j/ ?; B# S: ~ ToInvxy(desx, desy);9 w+ Z/ S d& j! O* r9 ~
return TRUE;
% r ]" {$ @& H9 q) J" K4 F& A' t$ T }* X$ C( r; a/ Q; U1 _
return FALSE;
* Y# \4 |- K+ [" e3 b* N }* H4 Z0 Q- \+ N l5 e f3 g; T& k0 d
2 h) ?. [' p. c' r& X- a static BOOL ToCube()- v: K* p4 p' d8 A/ |
{- i/ M" X5 F3 z
if (!(*D2Client::ptPlayerClient))return FALSE;
* k' L$ y* Z. w% ]/ M2 ?$ H7 }% E( t! A2 Q' P9 q
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);1 e. \1 e0 b# `" D. x+ d T
if (!phand)return FALSE;. W- t: M4 b0 `8 y E$ u& Y* B8 U" j
0 A. p, Q- d( O* g0 M
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
* q- d" C) D% }+ Q if (!pCube)
: f k8 F( \. q/ b& e& T8 ^4 C {, E, V; z: ]5 ]# K2 P
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
& r/ g& w4 ~, U' e3 [1 _' | if (!pCube || !pCube->nItemNum)! n; C1 I3 b% p v- S w" f
return FALSE;% g+ ? Y1 x! }% u4 t2 K0 j+ O. k+ a- n$ I
}8 B" S5 n! G$ b6 S5 l0 j
5 Q) @! O. m7 r. l8 u# o$ A! R% o8 x if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
" N2 ?$ q) e- S9 A8 L/ o W return FALSE;( m# |; c8 [% i% e1 j
" `" L3 I1 Y* Q& ^$ R, Z PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
, e0 ^0 P- G7 k; h5 U3 a
: G! T: F7 b/ @% D+ f( I BYTE aPacket[9] = { 0x2A,0 };
6 a) O4 ?* z: d ::memcpy(aPacket + 1, &phand->nItemNum, 4);
7 l1 c6 A \0 I# D- A% d: D ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
9 `7 q# F) ]" Z$ `- X1 @" }, c, m; B4 Z D2Net::D2SendToServer(9, 0, aPacket);* A6 c3 V0 J9 V# q6 E2 n. z" [
return TRUE;
+ o! ]3 r( l; ^( M
O; E, e' e j }
0 x9 n/ L/ Q/ r; ?
7 q0 e" w/ T; y/ U! g( s) [ static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
2 U; E% c9 _' u+ f2 p7 G; f9 i( o3 {# j+ ^1 U, W
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存( ]2 _5 V$ e2 D0 W& t, x. B
{( v% W& O. {' d- d5 S3 h
D2CoordStrc mypst = { NULL };
1 O i7 a3 K( N6 @ D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
# t: M$ h, T$ C. Q! j
- d# C; Y* L. S- _ if (!mypst.nX)return FALSE;
4 O- g4 X' O2 y* e4 }; H) W2 J3 } $ ^" d0 r5 u8 N8 l1 `9 t
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
" X& s; u* f. m! i+ b4 `- s# D- l7 _: V! n z3 W5 _
BYTE aPacket[13] = { 0x20,0 };
- d) l4 q- R/ H3 T4 I; D ::memcpy(aPacket + 1, &dwItemID, 4);' Q9 a/ X' M ?7 p) _' B- t4 z
::memcpy(aPacket + 5, &mypst.nX, 4);
) ?4 w4 C' ^( E3 j: \* r ::memcpy(aPacket + 9, &mypst.nY, 4);
3 z, ^" o4 c( f //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
+ l% E! G8 N# Y4 W$ a6 {+ |9 P D2Net::D2SendToServer(13, 0, aPacket);7 C3 J0 y# V7 C* \ b. D
return TRUE;! f5 x5 ]9 P& t) N$ M2 y8 ^# ?
}; j! n$ [) i0 K8 Q+ U
3 K5 A4 J) }3 g' h* u/ L static BOOL DropCursorItemToGround(), b1 y3 O4 L) G
{& D" J2 Z/ L. f8 D Z9 U
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
5 d# D% x3 ~& Q1 d/ b2 T* a if (!phand) l4 I, T2 m! p1 ^* r9 v5 h6 \
return FALSE;3 O% j/ p; `( R6 f
1 b( y/ C' c2 S% V
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick); L/ w1 x* q/ z
/ p0 p# S5 J6 y7 ?4 X3 h, n4 C BYTE aPacket[5] = { 0x17 };
8 ~5 }+ i& @/ p: `+ R( b, k ::memcpy(aPacket + 1, &phand->nItemNum, 4);) a6 W( T! \' f% b
D2Net::D2SendToServer(5, 0, aPacket); G- r/ O6 G' }
return TRUE;2 \% `5 g. R! b9 f( |+ Z! f( L$ \9 }/ `# R
0 h2 J' Y' i3 T; Y' \$ |8 K }
+ R5 P' f4 u9 d# A% \2 C, b3 T F" o" q( a0 ^, o8 }" p
static BOOL PickStorageItemToCursor(DWORD dwItemID)
8 J: h1 T V6 P( m {4 ^7 R3 j- K. O3 b* [& g& c
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);5 f# h9 _7 D( g. i, L4 B
' a* Q3 \! I& Z( m8 \
BYTE aPacket[5] = { 0 };* h* P1 G r- F# e$ w
aPacket[0] = 0x19;% {1 K" O# c. J4 q. R* ?
::memcpy(aPacket + 1, &dwItemID, 4);6 I# |% D$ s* ^ {) n3 ~0 g
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);! Z8 n g7 B, n; }- A8 q% g
D2Net::D2SendToServer(5, 0, aPacket);
" `1 a' M! M; S& m( e7 q g- r return TRUE;
i' K) T! a' U* Q, ^4 o }
H3 E$ o3 |6 U- B; }5 S9 F0 Z
5 @" A" a+ k a# v static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
$ l: B. B3 I$ J" u( C7 J& X {( t2 B- k# |1 _1 X
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);' I! Y2 Z2 W1 `. p3 O
BYTE aPacket[17] = { 0x1f,0 };+ H% a' L9 _' h8 I
::memcpy(aPacket + 1, &ItemID1, 4);
, v, M6 @4 Z$ r+ x& @" G6 Y+ \ ::memcpy(aPacket + 5, &ItemID2, 4);8 ~& d' Z: |+ ?
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);4 y, e0 I2 ~4 A5 P3 R8 W) ~
D2Net::D2SendToServer(17, 0, aPacket);
( \0 k) Q" I( n# H return TRUE;
5 H2 ~' C3 x: j5 g }
# N K# F! F+ ?* q9 C8 D7 o/ S) l+ p2 r- N
static BOOL Transmute(), `( a$ i; _" T" S: R
{1 N, |. N' E$ @. ?0 {: L6 J! p. S# J
if (!(*D2Client::ptPlayerClient))return FALSE;# u1 c3 L; G' ^8 y
9 G5 p2 l' X0 m5 E if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))4 u8 m5 y' X7 |1 }* ^6 X, Y7 C! p* f
return FALSE;( w4 D& X- ]: H/ r0 c. ]
- g3 S" c. X& T( p {6 e PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
/ l) Z2 M2 H# J$ Z BYTE aPacket[7] = { 0 };
" b, _0 d/ l9 M7 i2 W' d: _ aPacket[0] = 0x4f;$ O$ N! c5 b* h. y
aPacket[1] = 0x18;7 V7 |* p% i5 u0 C, h( \) ^& \2 c9 D! H% ?
D2Net::D2SendToServer(7, 0, aPacket);, H. ~ ]! a) P# e4 v( R3 [* q7 \
return TRUE;2 Z* p# b$ p7 N5 I
}) O, D; R- a9 ^
};
+ |5 a& m, U, Z( d7 S- W! `0 N# h+ n5 h1 f
|
|