|
|
转载
( p3 h( d+ V4 |1 f' M" k( F. V自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
% @- u' D$ r4 m' WD2Client:( S6 |( E @2 Q) u t4 U- e2 U5 ^7 {
6FB20AE1为拦截输入框(用于获得命令)
8 ]9 D1 O. l& R/ [0 N1 e, I$ w R6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
( P! S: \6 ]. m* w1 X3 s6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
: G. ^ N* n9 J3 v; j1 t6FAF4230为hackmap的loop点 我用的hackmap导出位置+ w. F% M, k$ X) _- g) ^% u, j
P4 O, M. h& \5 n
8 P2 U4 p, _& u) j发包函数:
0 o& ~0 k3 s4 [/ r7 Tclass D2PKT_ITEM: H9 |7 n9 S2 [3 Q
{
. R2 z2 _; R0 ?" A' j#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
; u) \. C* X+ q: |5 K4 o$ O#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
, T+ |$ V& y4 _#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
3 _" U6 i8 z2 _#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
5 I% N: H3 l3 B2 k2 t# N3 F#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
% [7 H5 h& ?1 v1 \0 o#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
6 a$ u: X; X4 J6 j, L& b% a#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
: Y2 Q! A J# _6 a, j* z#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
# @7 a0 s5 B9 Q g% t#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
b- [; d8 R4 b/ T9 x8 Z#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店) B9 {* X E, @! H i
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
- F; ]3 F' E( D& j$ e#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 2 ]+ p; Z5 U6 M" _4 }- T
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
9 d p5 y* `1 U, }# F Z#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上7 j8 v# ^4 `. H# u3 K* ?1 D; T: E, @
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
U, b- z# C1 M# K0 L+ R#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
3 ?0 _% p* k6 g1 c1 [3 a- n#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
" W- |: i9 o, b# v: e& h& n; v
+ w3 m/ t* j' {5 m5 ^" I#define PacketItemMaxTick 150. @0 ]) @6 J: V4 u& K% {: r
#define PacketItemPickUpTick 20
|. l' a0 ]2 J7 \7 l6 Q8 x# p5 n; H, p" ?* @0 m: P9 `: U" o
private:" ~6 H ^7 F L! `9 s
static DWORD _PKTItemTick;
+ \& |$ j# K; C j9 B5 T static DWORD _PKTItemAction;
' ^$ N- w6 J" k* q: Y static DWORD _PKTItemID;
) `% a/ X9 x6 U4 W7 j static BYTE _PKTPKTType;
3 n5 y7 E4 @5 S- _- z- \public:! l+ D( k9 }* h
static DWORD PKTItemGetTick() { return _PKTItemTick; }
: i) F' Q3 W/ w/ K0 u g' h% I) y
5 q# z! b9 D3 H$ f3 R( Q# W static void PKTItemRelease() $ Q4 _6 j7 T2 n. z1 f, M3 e
{3 t+ h2 k5 U. a# g
_PKTItemTick = 0; l+ w: [) s# N# \
_PKTItemAction = 0; e$ z9 ^/ T U% s
_PKTItemID = 0;
+ X& t; @: Q& f; N2 R _PKTPKTType = 0;
6 I7 g( S# o# q8 }: b g' } }
" M9 _% B9 m3 C% `- h6 K2 l3 M/ {5 E6 r$ X
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) + G5 k$ }) [4 f* B
{) [9 ^* _$ F' k) y7 N# X
_PKTPKTType = aPacket0;' k4 F8 R% p/ X
_PKTItemTick = tick;# r/ J. I f2 x3 A
_PKTItemAction = ItemAction;: g$ Y. F3 o; v( h6 \; y6 B
_PKTItemID = dwItemID;
, S W# d0 y0 G }
# F: T- z( `" ?8 W+ G) t, Y) \- n% w8 `% r
static void PKTItemTellW8(DWORD tick)
% g9 J$ I, X7 ~: _) x4 Q2 R {
I: m( q% ]* H _PKTItemTick = tick;! m6 h8 \, J! J j
}
+ T+ q0 ~: w" Y% K5 R3 q9 w* ~
$ d1 d4 {& o9 x% j( f static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor0 p* U5 H' Z8 \' C1 B ~# l* I
{
4 y# R( M& [2 y* B. k if (aLength >= 8)/ h- _9 b7 z; C$ u
{; p& C4 R/ L. H$ |+ x/ F
DWORD dwItemId = 0;
& r% E- J: ~& R% D* G* q memcpy(&dwItemId, aPacket + 4, sizeof(DWORD)); J9 o5 m" t4 ^' i4 I. @9 Y X1 J1 x
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE- J3 j% ^2 X* g# ?3 d8 @( h
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE. N# O6 h7 ^3 G _# A* h* j
&& _PKTPKTType == PACKET_NEWITEM+ u) G/ ^- ]% x$ U
)& W9 `0 h% F9 U8 W; ^/ V* E
{
2 X. _* W" ]6 W! L if (_PKTItemID == 0 && _PKTItemTick)
& c5 j5 n1 p& d# m {: ^5 _ v( y5 N
PKTItemRelease();
- Y1 o, N0 Y5 u# ] }& N3 w9 s0 N* r
else if(_PKTItemID== dwItemId&& _PKTItemTick)* n. Y; ?% R' p6 d
{
" L9 [1 ^+ d. D7 X PKTItemRelease();
2 I. t3 O6 c& p0 P }" F- ?- p$ W8 O0 g' w1 j- c
}6 V9 K8 U$ t) m, K( P$ Z
% m+ G7 d. ~' n/ N, p! n$ n6 v" |, s }$ i& ]; [& `) [6 o# h7 n0 i. l5 _3 k
}4 g) n& A5 X' J- m9 ]* i( t
- r& [8 V7 j" s
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored. h S' [( s/ }; H
{5 J* A' D9 a( n" D; X2 x
if (aLength >= 8)" v& [% I5 z) z0 D8 P( g
{' J# P3 N% \2 Y5 Y& t
DWORD dwItemId = 0;
4 N# e( V9 h/ S memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));5 {; E g: O# H1 ?
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
5 Z8 ^) a( ^4 j6 k6 \- u && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
" v% \5 X0 C, A# K; z. d && _PKTPKTType == PACKET_ITEMACTION
( P& m9 F. p: ~. [( F: I )' }+ S: |7 H/ Y3 j! {( ~- ?1 L
{
$ e2 ^/ ?2 C8 f- r5 O, L( I/ N if (dwItemId == 0 && _PKTItemTick)6 O4 j8 o8 C) E1 S
{1 H4 w# M3 k; j o
PKTItemRelease();
% D0 C6 d+ G( A3 q }
a4 \8 f0 q8 J" C+ g else if (dwItemId == _PKTItemID && _PKTItemTick)
- ^$ d( ~( |9 Q3 h! A. ?4 w {
7 a3 Q9 s( c2 b0 l, @* X0 V7 R PKTItemRelease();
5 f O$ D0 t( t }
V% S9 J, I5 A7 N9 N. P& [! J a }! p" I) U% P! T: [( Y
* A/ x- H, e8 O/ ]
}
9 b: ~3 `1 T$ v0 V }
! {2 u5 j# Q7 z [1 t, n0 V- d+ u) F- {( _
static void PKTItemGameLoop()' R; [0 ]7 g$ X: a, o
{
- d6 V1 u9 O( V+ h6 G! _' l8 a if (_PKTItemTick > 0)
0 z O6 o& Y: Z" S K9 o: ^ _PKTItemTick--;$ r# |/ ^5 t4 i( |
else if (_PKTItemTick == 0)8 r$ e9 K! C8 {9 E3 ^' R, ]1 Z
PKTItemRelease();. H5 W1 e4 x1 T% y$ R7 R
}
' H4 U' t( g2 X
2 h. V4 f9 B2 r' P O static BOOL PKTItemCando()
: }7 O& {: `, {! e3 l4 c9 \ {- |0 {- Z9 o7 w& z! t) w, F j
if (_PKTItemTick == 0)return TRUE;
8 ]3 i; ^% _4 a$ O return FALSE;5 @4 G7 ~" w8 U* Q. [! }# D
}
; L- u# z- x' x# m/ f/ W0 J' g. q; {( j9 _7 D, O. q
static BOOL BuyItem(DWORD ItemID, DWORD npcid)7 v; N2 _ ?+ i# F0 A4 G5 s0 L6 Y
{% [7 p1 ~! }# C8 R" T$ u3 M9 Y! }
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);+ j$ l$ ~8 h" \6 Q9 x9 g$ c
BYTE aPacket[17] = { 0 };" K* y- F; Z) U
aPacket[0] = 0x32;: a/ V+ q0 C0 i% a
::memcpy(&aPacket[1], &npcid, 4);
# C/ R+ @( O; y ::memcpy(&aPacket[5], &ItemID, 4);6 O' _2 o" ]) w8 N' {1 r8 u/ Y
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
# n A3 ~/ S4 {' o D2Net::D2SendToServer(17, 0, aPacket);
7 T/ {! O6 x- _/ p return TRUE;( \" q9 N8 H1 ?3 V+ v; c
}
5 E$ l3 J( b& @# s3 g) g8 p4 e7 o: X% ~0 z( g& H$ M
static BOOL SellItem(DWORD ItemID, DWORD npcid), `/ x0 H! Z3 P0 ^' y
{2 k" }% U# ]( T: m
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);7 ^/ I+ v$ N }$ y" O/ J; t( |
BYTE aPacket[17] = { 0 };# f: U2 O" P4 ? m3 u E
aPacket[0] = 0x33;* W1 P8 a. \; c e$ `9 q
::memcpy(&aPacket[1], &npcid, 4);' d, u- J, q% Y0 w
::memcpy(&aPacket[5], &ItemID, 4);: x( M+ P6 Q3 T% F; u- X( H
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
( b+ _' O5 a4 M) s e/ ]! I% y- g D2Net::D2SendToServer(17, 0, aPacket);
- z1 q1 h2 S6 o1 E return TRUE;# G' B5 [( m2 x7 t, U- O @' P0 D
}
- ?) t; B* g. V! \( w# B; j
# k2 V2 w* w8 w1 z static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
( S+ F3 a: Y, R+ a$ [) M: `4 b5 d* C B7 b8 t/ q
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
! \3 Z8 B& `) E- {6 y, e; N/ K- P d% W: J2 D$ F8 ~. ~7 P
static BOOL OpenCube()
7 a8 \0 {* `, ? {* ]- `9 Y! t8 \6 Y) L& J3 z2 x4 E0 k
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
1 X: l* E6 ?; L9 X" d9 A& n' H. R& K8 \8 ?
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);( N/ ?- D" d& M4 ~7 o/ E" q0 l* |% k/ P
if (!pCube)- B7 [4 k6 Y$ [: D- G3 |$ ^8 a
{; @( L: D: F+ j9 x( m9 v3 ]
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
' T) h( D; B3 M* t0 m1 z: G' Z$ G if (!pCube)
7 l7 ^) O: e( a3 |: N. }) G+ B return FALSE;" H; s2 u/ f/ ~- k; ~% ?* d
}9 u1 j' Z# `+ F1 G4 _
PKTItemTellW8(PacketItemMaxTick);& }# _# A. R: c+ j* c2 x
2 C7 x/ G y4 f7 h4 J D2CoordStrc mypst = { NULL };
$ m4 l, h# y: ]' E6 I+ Q D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
% F& ]! t% T7 X' ^" o+ }3 y1 d
8 y3 U2 b* e0 X2 j9 w- \7 g BYTE aPacket[13] = { 0x20,0 };
. y2 s* \9 |1 a f) z5 g ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
3 S; h; g- X+ p2 {; Q# I ::memcpy(aPacket + 5, &(mypst.nX), 4);% C* {0 L! [3 f
::memcpy(aPacket + 9, &(mypst.nY), 4);' Q2 p9 w1 T, y3 V- I4 [* w, I9 ^
D2Net::D2SendToServer(13, 0, aPacket);
4 l, J6 T7 E1 |2 J return TRUE;# u0 G1 M- c9 A, j V
}
/ m& M/ ^2 c0 a3 [# a# q" E: K% }- H; \/ C5 U% e* w2 J' y A- @
static BOOL ToInvxy(DWORD x, DWORD y) k8 g" k c6 b6 m& {% R m+ P, l J
{
/ L, @ s0 H/ D8 e UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);/ Q5 L* q9 B. Q$ g
- |% ^ o# X5 l m$ t if (phand == NULL)
! o( ?/ U; ^& J( w' Q8 H return FALSE;
1 I; G1 J5 ]2 ?6 a. e, k/ U$ o" r: D4 J0 e6 D9 N7 x5 B$ G
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
3 a- R4 y p) N8 f! y8 L/ m. z0 @2 J( `+ u( T
BYTE aPacket[17] = { 0x18,0 };/ n! d! q+ P8 N/ |
::memcpy(aPacket + 1, &phand->nItemNum, 4);
# G$ S) t5 d* O ::memcpy(aPacket + 5, &x, 4);
% `, q; H& e# s l! r6 ? ::memcpy(aPacket + 9, &y, 4);
9 R( T f. ]8 Y+ e. t D2Net::D2SendToServer(17, 0, aPacket);6 X! H4 Z" T% d, c ]2 b$ o% ]+ N: b/ w
return TRUE;
2 K) E9 e/ [+ N/ ` }$ x; S7 v8 a2 I0 t
% \7 F4 v( |0 V# v static BOOL ToInvRandom(BOOL bBagFix = FALSE) 9 r( b4 L' s6 L) ~9 j( i* Q
{
' Y1 l6 q4 B5 @; N/ b- x UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);# H6 H) ~& N$ z! H: R
if (!phand)! I) g2 d. q6 Q- }% M+ b3 i" y) I: V
return FALSE;
5 {8 W# \% H/ @& M# p$ t* D6 a int desx = 0;
7 O# W m- v+ @) s% s int desy = 0;
, }! I0 k# y1 T+ b if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))4 }( O" t1 c# y2 f5 [! U y
{
! I. j/ k. @0 V* w ToInvxy(desx, desy);4 Z \2 k' j1 o# R+ v6 }4 g
return TRUE;( ] K# O; V: A8 E' ^
}
- v0 R3 @ d3 o2 g5 ? return FALSE;1 M9 B' G8 Y: N8 j2 K- L
}- x2 a+ n/ x6 g
8 @ A- `4 V' R% A* R0 o" r; h7 U8 k static BOOL ToCube()! j. R( _" O. m: }- U
{' A( b' O/ F* c; ]+ k+ @
if (!(*D2Client::ptPlayerClient))return FALSE;1 B5 S6 l1 F2 u& X( j* V
6 ~& f& ~/ _' ]; |6 I UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);, r' i& g0 f4 S+ t9 X
if (!phand)return FALSE;
+ H$ K6 `5 K* p! P
4 m; }) U: F7 a2 s g! W, ` UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块+ w! {% q) x: O" C; o
if (!pCube)# N4 n+ a9 c* ^4 U
{
* T( ?/ r$ T3 Y7 ? pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
1 O$ U0 w+ @0 j if (!pCube || !pCube->nItemNum)* h0 D% Y7 @) N6 k6 W0 m. O- o
return FALSE;
( n. i5 I4 P0 N3 X1 t }
0 I/ g' K& U9 X \- d% r% m; @3 [7 E$ |; `: s# C% k" v1 ?% R
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
/ W' b/ m/ h5 q {" p0 i- [ return FALSE;) F( }* `" `% N- c4 p7 Z" n
8 G# S8 i4 H; {8 I PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);0 K; J) b* W7 E. ?& l l, A
@2 K) ]! x- V+ D# g, I BYTE aPacket[9] = { 0x2A,0 };, f$ T3 s N h. j/ m: z
::memcpy(aPacket + 1, &phand->nItemNum, 4);5 O- n8 f( p3 Q- a. B1 R8 v& L7 s1 A
::memcpy(aPacket + 5, &pCube->nItemNum, 4);8 O1 L) L r/ E8 t: x$ e8 L: t" Y k
D2Net::D2SendToServer(9, 0, aPacket);; a7 X1 l/ K2 F. M6 `9 o, t! M" k
return TRUE;
2 D: m" @, M! Q# I5 ?
6 G6 y6 H$ B* ?- y1 n5 D9 C }
! P6 { l* o$ w# r! _# j- K+ h n% d5 b( V! j$ B, E
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
& Z9 p K/ e9 I1 g C8 O8 {1 v: b3 d0 C* H3 b
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
6 e' J# Y) t9 p7 s {
4 q0 O3 u0 T2 f" h: W0 b D2CoordStrc mypst = { NULL }; O: d7 x! L0 _* Q7 l) U, i( k1 j
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);2 H( p' `5 _' _8 B
& |5 S, e) g* P" M if (!mypst.nX)return FALSE;
; e# m1 k& r# G( E# ]" ~( n% l
" d3 f3 M: f- I! {2 s: ?8 A. x+ n PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
3 R8 F% R3 q, X; `7 U# t. E% H
/ `; t' l j5 n! P9 c BYTE aPacket[13] = { 0x20,0 };
( w& q' X$ p- D- R ::memcpy(aPacket + 1, &dwItemID, 4);+ Z1 E5 x/ S% e) J) c( h
::memcpy(aPacket + 5, &mypst.nX, 4);$ i7 I, x. `2 f
::memcpy(aPacket + 9, &mypst.nY, 4);
/ R7 ^$ [5 x2 m //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
; Y& M9 L9 \% p( t D2Net::D2SendToServer(13, 0, aPacket);
, }7 b3 N+ D# x3 ` return TRUE;+ m2 L- S6 v, w# k$ S p
}3 u; a3 T- @8 ^2 L$ ` a3 H
- n- D( O) o( T. l, L
static BOOL DropCursorItemToGround()
i, y$ O, y9 j7 D" N5 o' G) W8 \( K {
; J8 G9 w0 a3 V% w9 i UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
; q8 B8 t5 v4 ?* P1 M3 e6 f( \ if (!phand)7 d; m9 V W8 l5 I9 C( `9 ^
return FALSE;$ y% D4 a* V7 X4 ^; a
) f# c& V8 s4 t& }, V$ h4 o) i
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
. d/ Z( m3 e- o6 k
3 ?$ m! S V+ c2 F BYTE aPacket[5] = { 0x17 };
# v1 B" t! J6 l2 I' |( x ::memcpy(aPacket + 1, &phand->nItemNum, 4);' n5 }. Q @1 x: r
D2Net::D2SendToServer(5, 0, aPacket);
& v, D8 S( D7 s5 f' u5 l0 c return TRUE;
1 Z2 w1 k4 x2 Z2 b. x, W/ w, E4 d$ j8 u
}
* C8 _& l8 K/ [+ S3 A, p' o* t) G' {. g0 T; s& E* ?
static BOOL PickStorageItemToCursor(DWORD dwItemID)
; H7 p8 [9 g1 _3 y! _3 i {1 e( e+ Y6 S+ t( S! E; p
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
2 l! \: \: D$ e' | \# A* ]
3 M$ a( t. b5 N4 J$ {: a BYTE aPacket[5] = { 0 };
9 @- n/ d0 h7 z6 B+ f3 { aPacket[0] = 0x19;. {7 G9 k4 X5 [* s. j/ x* P
::memcpy(aPacket + 1, &dwItemID, 4);
+ ?: k \0 h& k8 D Z- D+ |3 e //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);& c% f6 i0 K/ D. F8 E8 x
D2Net::D2SendToServer(5, 0, aPacket);
% y0 U$ s; O% |- I9 w return TRUE;; W0 a5 e5 d# {" A; r
}
& t& A' k2 h- T" q; c7 t5 f4 F$ c$ G. b6 Y
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
9 ~# q& ~- p9 M+ C1 i: L {
$ J Z9 U1 I7 }. S } PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
) C7 D2 v) W% k9 E8 O ]* C9 E BYTE aPacket[17] = { 0x1f,0 }; g2 O p% j5 W" }
::memcpy(aPacket + 1, &ItemID1, 4);
! n/ {) ~+ Q; I9 X- u) | ::memcpy(aPacket + 5, &ItemID2, 4);
: v" {4 R( J j. z //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
8 D$ M9 H2 { Y, P D2Net::D2SendToServer(17, 0, aPacket);
5 x& S. r0 O% w1 @, M/ X5 q D return TRUE;" G6 @5 h8 I+ k/ p% o- I
}
- {- L$ Y4 E3 I0 z; l3 f* C. K' u' G1 d4 i5 n: `
static BOOL Transmute()
) w3 v/ a. K; M- g6 z: R {
* H1 o8 G5 _0 d# m) }* i8 z if (!(*D2Client::ptPlayerClient))return FALSE;
+ ~6 E7 A9 l+ ~; [$ t% L- w9 f! t4 ^2 g+ [
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory)): V3 V3 F$ J2 x( b
return FALSE;5 V" q8 y+ h- L
: A3 [* O0 d& w0 B% W1 b
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);9 }+ i% z0 A/ k$ T K4 Q
BYTE aPacket[7] = { 0 };+ V8 y( L% Y4 n) Z6 L9 h9 _
aPacket[0] = 0x4f;8 d: X; O2 R8 e
aPacket[1] = 0x18;
6 h: F( x" u! i1 F: _9 L D2Net::D2SendToServer(7, 0, aPacket);( \ X4 f) I6 S& Y
return TRUE;3 }! \% e* c9 @" e
}
1 ]7 ?( {9 C$ L8 h6 J+ ~- |+ A" p# h};, Q" q# F& w8 M& d
% D1 E1 I7 y' h |
|