|
|
转载
' ]. Y/ o4 u b8 D; h% m自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:8 F' i6 A: U: s! u( ^
D2Client:5 C! J% H' r5 J( Y- N& Z
6FB20AE1为拦截输入框(用于获得命令)
( t% I0 v$ N# m1 O6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
8 p8 M& Z4 E& n* u s6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
3 O/ B3 x1 Y7 H! m6 i6FAF4230为hackmap的loop点 我用的hackmap导出位置
8 Z3 J3 P1 c* Y, ^% F4 s7 |; B. @' b% `& d% \( j, q8 V6 t
4 Y. @8 S1 g7 O; Q# ~9 \发包函数:! q7 \6 R: b$ V1 D8 @# L
class D2PKT_ITEM
" d. c! T h- k* G( u! F! n{) W* y" z3 c6 E7 q+ B- u
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
* m1 W3 I, i4 l' s#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多) X( P+ u& F/ p% y' g' z/ U
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
( A8 [' O1 c1 e% \#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上4 a- B" l% X$ w
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
3 X+ l6 A P1 K5 i0 e( o! o1 @#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
) [! W& p) O* O#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏( n/ ~4 e4 K+ X
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上0 Z* X# N+ H' Y( B# {
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
* \2 Q9 I# I) D/ c9 T5 Q4 n#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店# K8 _8 |7 J( U' ~
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV# n! u( |. O- G6 G' }
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
; S$ h5 p$ l* h x#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带( N- S0 o2 D. x, }& @* `
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上1 t1 X2 q3 T2 c. ?3 F5 ?
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
/ [2 H) _8 H9 M#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
/ L4 N/ r y4 m3 Q! Q% D#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -) I+ r: H7 K8 E) ]* Y( m) o8 J# e
, S$ ]+ q" z8 O; o. v7 i$ O#define PacketItemMaxTick 150
* _3 h$ o# I# ?" l#define PacketItemPickUpTick 20
3 w5 k2 x. N) X
6 {# O& v0 g) ^6 Q0 a5 Pprivate:
/ s& f1 [+ S2 H) O. g static DWORD _PKTItemTick;
; `$ o8 d0 x! T3 b% H' v0 z static DWORD _PKTItemAction;
% ?2 \0 R0 s" v static DWORD _PKTItemID;( V4 K u3 t6 F. j+ L- r, M; e
static BYTE _PKTPKTType;
# c- y* ^5 x! g" I8 k( u/ ipublic: O; J- U7 ~2 u5 M! R
static DWORD PKTItemGetTick() { return _PKTItemTick; }9 z2 ~( R' ^& J! B0 y3 d& t1 ]
; h, D) s6 d p" |# j static void PKTItemRelease()
: b& m9 o, d8 U9 B& J {
" g+ v+ m5 b: W _PKTItemTick = 0;
/ x0 }+ z- a! C5 ^( e( P _PKTItemAction = 0;1 k7 Y8 f% ]) i% O
_PKTItemID = 0;
6 P/ A8 D3 D% _! _/ @, D$ ?* s; k _PKTPKTType = 0; V3 D2 s: [0 `
}
' u+ w! M, Z, @, C$ i0 w, V7 ?, [$ b/ W
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) ( ?- A3 s( c# \2 [
{
+ h# M5 D) ]6 w. e( _ _PKTPKTType = aPacket0;
+ S- b- r' O" H _PKTItemTick = tick;) K9 e" o( h# y( s
_PKTItemAction = ItemAction;7 F+ B0 p6 W+ w
_PKTItemID = dwItemID;& H& \% h' [3 d6 c: L7 f& S2 q& q
}0 @# A& M% q# y% S- ^' N( P1 F
8 y% d, O; H4 B5 @ static void PKTItemTellW8(DWORD tick)7 Q0 n! {4 o; j9 [ ?/ u8 e
{; Q4 V: c: e5 k' ?2 o1 X
_PKTItemTick = tick;
9 Q( J- I5 \8 I+ ?0 o0 i- b }/ Y$ p3 Q8 s% V" m1 G( k/ q/ K
+ e2 t7 A5 u) F1 K L- r
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
6 z. X" |5 C$ x$ N+ o0 N {+ l8 z% ~2 ~- z0 o# q
if (aLength >= 8)
1 H& x1 k! L) w V# o+ }1 {$ V; U {" m U/ g+ `1 ~& h/ ]( N# K
DWORD dwItemId = 0;
8 T( X0 r7 F+ d* @& n" ~ memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
9 D4 H3 H/ q8 s if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE% ^: Y! J4 H! j5 _
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE S3 g7 X- M6 M3 m- n0 o
&& _PKTPKTType == PACKET_NEWITEM. T& O7 s( t. @! A- H
)
% N6 A) v' E2 K: g0 F, H* { {
: v' W! e, r' A if (_PKTItemID == 0 && _PKTItemTick)
8 x1 j, C" q4 f0 B8 l {
+ m8 f+ n$ u/ }6 S PKTItemRelease();. D9 n2 ~/ L, ]8 ~. c H
}. r& w. p3 D0 F3 l: k
else if(_PKTItemID== dwItemId&& _PKTItemTick)
: }; @( `: E) T {
" E1 {# P. i6 o" b" }* H PKTItemRelease();5 k' q* A6 T. H5 t% D" E
}
6 G+ I4 [: N& T! A4 J. ^. W }, r4 q8 u( K8 @1 a% f3 o6 @
F, k$ ?1 ~1 q* N$ C }
" X, S; p% s! R! |5 ]6 k }. o/ ^% ]+ |- Y
8 j7 {, ?% b& p: A+ f7 b
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored* l7 Z) c% w7 M$ k# n! G4 _
{
; G, U" w1 O1 u! L8 S4 O if (aLength >= 8)
- t# N5 {4 C/ k a {6 A8 K8 q. i* U; p7 U
DWORD dwItemId = 0;7 b2 |2 p' ~6 i4 F; m
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
. p4 W* D; N& D# z# H7 m if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE# i9 c7 @6 C5 \2 g' y8 \2 r
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
2 K/ y( u' p) n3 Q && _PKTPKTType == PACKET_ITEMACTION
7 b9 w& j5 c) x5 d! \: g )
2 K" n7 f6 e! {# x, l {; S [) X. Y2 l( a6 {
if (dwItemId == 0 && _PKTItemTick)1 z/ k% |) h6 b' r4 E' v
{
9 l2 B1 q' j( P PKTItemRelease();
/ z! o7 S" v ?- H7 j }; F, b: w, q- B2 y* p0 G; z
else if (dwItemId == _PKTItemID && _PKTItemTick)
2 u' g# m3 |$ Q4 `9 N! ^. v( P {
5 r8 u' A8 u" P& j. E' W PKTItemRelease();
( U9 h$ Y$ B6 V" O }8 c9 O& Q4 V7 e* ?
}' Y. l% K) I" d/ P; ^: \
& `/ `8 w: E u; t9 r7 C
}
2 g2 H; j: u* f0 j; c5 y6 b }
0 S `. s, ^5 ?5 o: h6 [7 t* u' k7 B( M9 A8 U( S/ _& Y
static void PKTItemGameLoop(), H5 I* t* x/ o G: M, _" S# u$ @
{3 x" d! g) P* c# A+ n
if (_PKTItemTick > 0)
3 s+ Y6 z6 e$ H' V$ F# P* X _PKTItemTick--;3 w7 ]" H& s9 T3 i; w
else if (_PKTItemTick == 0)3 r/ a9 U! Q: s! j& }
PKTItemRelease();0 Z; _3 z) S3 Y( p
}
2 p6 _$ F1 A1 x% p( U7 [9 @
/ s# s: G/ |# N' V# l9 M: Z0 X static BOOL PKTItemCando()
6 ]. M6 B" q; y- B- p. s- W {
( k% [9 e. N( d. {3 Z if (_PKTItemTick == 0)return TRUE;4 k1 s7 W; M# R
return FALSE;
; m& N9 ~1 T, V$ D" S }
2 d9 v I0 a! i' e) h; _5 y4 h5 d) B, \
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
- }& s5 x3 Q1 ?$ `' G) J) p9 g% V {
- k4 F/ F; }5 j* v6 W PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);9 s6 i2 L8 L: M
BYTE aPacket[17] = { 0 };/ _" g9 \, s! B) _6 W6 I ^, R. O- l
aPacket[0] = 0x32;8 y. M- v1 z" f8 o0 d
::memcpy(&aPacket[1], &npcid, 4);
$ {- E% r2 Q! {5 H; ?$ g; N1 v ::memcpy(&aPacket[5], &ItemID, 4);
9 U1 ]+ h8 \; _" b. ` //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
* p( ]% X4 J0 [; J7 n/ y* Q7 i D2Net::D2SendToServer(17, 0, aPacket);! A; G5 x3 m9 Q7 {1 D6 b& l# e
return TRUE;
/ _% \" ^" m E% d# ]8 ~' b" Q }
# T5 {& T+ ~: ?+ J' Y1 U6 W+ n" t- Z5 f0 Y# ?
static BOOL SellItem(DWORD ItemID, DWORD npcid) Q6 c/ M: {9 c5 J2 \- G2 P
{
: F, N8 |. l% |* m {8 X6 N- z PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
3 V) R( e- k: z- D4 q9 C) C BYTE aPacket[17] = { 0 };
, w' F' M4 L' j/ k) j$ S$ f- {7 O aPacket[0] = 0x33;4 E& X$ t3 k% x5 [2 o
::memcpy(&aPacket[1], &npcid, 4);
: X+ d! N9 c* N9 G ::memcpy(&aPacket[5], &ItemID, 4);$ {5 W1 I" A. d m0 B# ^: G' h- J
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
0 g6 y1 d, b1 }- f7 ^. v D2Net::D2SendToServer(17, 0, aPacket);8 R- e3 f4 z, }0 C2 Z- I6 c
return TRUE;
$ q8 M( J4 i3 n/ Z: ?8 g( H }
5 d2 L3 E- t. y/ i& W& ~) w
% }( k& Q) {2 L static BOOL Interact(DWORD nUnitId, DWORD nUnitType); F8 A4 J! {0 Z- }2 Y# W. F& f" J
0 s5 r" |/ `1 T& t+ _3 u" V5 F( `1 M. D
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
, |* J$ b2 N+ |' o) a# }9 E# |. i3 N/ V$ o
static BOOL OpenCube()3 ?3 n) { V$ E. q+ k9 d
{
0 h* F/ L" ^, M9 I/ j4 F) [ if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
2 d& b; _( `; k1 t
9 h4 A" `- {6 A, O/ m4 }! V0 y UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
( j6 [8 M. n; p V if (!pCube)2 v' q8 h( b; t% ^; W9 |- d) D: t
{/ F( x( H4 D- T
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
+ y7 T' A# F3 F X8 v if (!pCube)
# r* R6 c- ?# i1 f return FALSE;3 b% s) e P g7 ] I
}8 _$ I* {! L$ s% m! k
PKTItemTellW8(PacketItemMaxTick);
1 h2 v4 Z6 v b% N' E4 j! r0 H" v4 k; U4 W
D2CoordStrc mypst = { NULL };! E5 G# l! m( y
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
8 L- ~+ N' M- S ^2 d# ~2 B9 f* @/ P# M* B4 w3 D
BYTE aPacket[13] = { 0x20,0 };2 j6 F4 e/ l8 |0 F2 `' m
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
! V$ i6 w; r/ ~/ {0 U7 j ::memcpy(aPacket + 5, &(mypst.nX), 4);: q& O/ u& R- {$ c( ^4 q/ R* z
::memcpy(aPacket + 9, &(mypst.nY), 4);
! @+ ~/ @0 X* V0 ]7 e5 }2 W D2Net::D2SendToServer(13, 0, aPacket);
, C0 z7 \' b. z. f& T( C$ p return TRUE;$ d- P/ u7 [$ E! l; P* D, g
}
! j2 d8 x6 I( w, w' S5 B' s! S7 M% Q; w \0 p) Z& U7 f) N
static BOOL ToInvxy(DWORD x, DWORD y)! j5 _2 d, m2 z+ c% P0 l1 U
{
, J! f9 J9 j* V3 y n6 d4 v h UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);3 i$ H, _- s3 P) z) k
& d4 q h5 Z7 O' a `# g4 A: U! p% v
if (phand == NULL)
8 o# U, p4 c* a8 W; @ return FALSE;8 H) C% c2 `0 n+ D, H
+ j) j! a% K; {% E5 w/ H PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
2 q+ n" g% ?8 ]: e7 u E0 ^' `
1 ?5 ^; ~6 E+ G! S7 o BYTE aPacket[17] = { 0x18,0 };7 [ h4 A5 Q3 a" ^" [
::memcpy(aPacket + 1, &phand->nItemNum, 4);
3 }: ~; O2 g% m- h" o0 d ::memcpy(aPacket + 5, &x, 4);
6 V! Y5 `; h: B2 ]" s ::memcpy(aPacket + 9, &y, 4); g, T5 i' @, }- b: M2 B5 T
D2Net::D2SendToServer(17, 0, aPacket); l( B6 `+ D5 ~
return TRUE;
8 L- \/ |1 ~9 }, T. b$ l! K6 f }
; j7 J( Y4 t- C0 W8 [& r+ o1 P5 p: a, y' M8 [# O6 S
static BOOL ToInvRandom(BOOL bBagFix = FALSE)
9 \( v3 X; `9 b {
b' O8 U0 K# C" B( }$ E UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
3 ?2 y+ S: a3 ] if (!phand)
% y; W- M4 x& j) j3 J* ]8 | return FALSE;" L& x4 R" b, V* w5 r- a: x3 B
int desx = 0;
5 G7 X7 i2 ~: r& ` ?! f int desy = 0;
" Z- b) S% \# B9 J2 S if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))/ q( N; U, k' u0 x v* I
{0 i& g* s( _8 W+ H# |
ToInvxy(desx, desy);
& Y1 p3 q( O% C! | Z8 T! k return TRUE;# M4 e2 g0 U, v8 m9 x, y5 g
}' n& c0 T, n2 u- A
return FALSE;
3 X& U, ]0 ]) n8 ]: j }! G+ @5 Y" i! V- Z. y* ?: s
/ ], x- P" B6 A0 M static BOOL ToCube()
# b: T5 I; `& I; u) \: p {
Z" Q9 M5 B7 B: Y# p if (!(*D2Client::ptPlayerClient))return FALSE;
w* n- s' [7 k7 @
5 x: u# m. I- k+ j/ Q6 P UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
' O2 K9 c! `$ N# E$ A if (!phand)return FALSE;
# Y* T7 T( ]9 q2 m9 r
8 }1 A7 t' Q8 _6 e: B% \% D UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块; S# U$ y2 G8 ]& P, l& q4 v
if (!pCube)- i+ x' w# K/ I& @% k; q0 `2 E
{8 \* u8 x" D" }9 }2 J
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块5 x+ F. B: i$ z) k$ u* N
if (!pCube || !pCube->nItemNum)- B# ^4 y, R' H: Y, W0 ~8 U
return FALSE;
! x- \. A, x# }+ P5 j- c: q# n }$ V$ E3 y1 k2 w7 `
1 t) n/ [. s0 [! f/ L# }
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))- H: Q2 N8 o: T, s/ G- \$ X9 v4 L
return FALSE;
" n3 x* l: l. ? k; t' g0 j7 ~' t: M) K4 }! i
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
# {- e$ L1 b6 o+ {! t/ a& D. f0 r
BYTE aPacket[9] = { 0x2A,0 };
, p- i# @. |5 x9 u+ W! K2 a ::memcpy(aPacket + 1, &phand->nItemNum, 4);9 V6 l9 x6 s5 O: n+ N
::memcpy(aPacket + 5, &pCube->nItemNum, 4);7 a7 n. w( ] L7 }6 f% c, l
D2Net::D2SendToServer(9, 0, aPacket);
7 A" y" x4 C# d4 j; Y return TRUE;
' p* m% T% K# Y7 j3 j9 E' }# W+ v1 u) ?
}0 \7 O6 U- g" R u
7 w4 L0 J3 p" D3 G0 @# B' M static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
. Q9 Z$ S' i3 ^7 z+ l4 d7 z& l1 Q1 f) X$ b) c# [7 K
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
3 o4 }; D. @9 B {: x4 ~9 |% E8 d! y/ D, ~% G7 e6 X
D2CoordStrc mypst = { NULL };
* j1 A5 v- `( M D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);3 I3 z; T( p* q: p' p3 I4 ^
9 j+ N" }1 u$ b' F if (!mypst.nX)return FALSE;; T2 c( t5 J7 T4 _2 k% A
; m4 ]5 C6 Z8 e5 n' r PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);6 h- z1 C- o. G4 [( X
7 X; j. s" c* Z+ S, a% e BYTE aPacket[13] = { 0x20,0 };. q9 h3 |9 b0 z
::memcpy(aPacket + 1, &dwItemID, 4);$ Y: P9 a0 D, R- F# _5 D2 o
::memcpy(aPacket + 5, &mypst.nX, 4);
. e, }& r2 ~6 M: e' F ::memcpy(aPacket + 9, &mypst.nY, 4);9 G6 K! v+ O2 J( Y+ X/ H
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
' X1 i, z8 t; O, O9 Q D2Net::D2SendToServer(13, 0, aPacket);
* ^ V$ I+ T8 k. H) H& ]3 D return TRUE;. V3 ^; D/ f; @
}
& v9 u3 X. d- H" p+ U6 t9 `; c3 B5 C. t n$ L/ f! U1 K
static BOOL DropCursorItemToGround()( p* m/ T. v& @- u x' X. B* K! t
{
- Q' l7 _, F. r7 p/ B2 _ UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
, J5 A( _& Z0 Z7 F2 x+ C0 V& k: J if (!phand)
3 @/ |% o* V# B9 ~- v8 _. O return FALSE;! C4 p- s$ K+ l9 W' a0 q
6 c$ h$ n) l/ y. x9 G* ?) _
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
! ?$ b$ w B3 g- S' ^7 k2 Q9 m- a% |) X
BYTE aPacket[5] = { 0x17 };$ `0 L) I% S. N8 [' W6 W. j( V
::memcpy(aPacket + 1, &phand->nItemNum, 4);) z6 G' y) v I4 p+ ?
D2Net::D2SendToServer(5, 0, aPacket);
0 K' S9 D5 h7 j2 y- E return TRUE;0 G! k# ?' @, ^* B+ \0 O1 V
# t2 u, F5 f7 m9 j+ \ }% S, g4 ] c- U- h% V
5 I6 i+ I/ f, I1 x
static BOOL PickStorageItemToCursor(DWORD dwItemID)! p0 {& j7 M1 @+ ^2 y
{ y: `$ H0 c& W! A- R2 f3 ^
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);$ v, H5 ^) i: z j) {$ {; V
* L. n4 J, d# j9 H5 A BYTE aPacket[5] = { 0 };
2 K! |2 \" H% K aPacket[0] = 0x19;
9 C/ |" o0 l, K ::memcpy(aPacket + 1, &dwItemID, 4);
' C Q. v2 z, \& Y( N- F& Q //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
5 B& i/ {, M( q6 j; ]- [ D2Net::D2SendToServer(5, 0, aPacket);5 r/ V9 [1 n; E$ Q& _/ B8 L( A
return TRUE;7 j7 s: t: [# `
}
7 ^3 V6 f' g( g* Z
' V- G( n3 ~( P8 h: X+ |# l static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
2 ^$ y) |# P' ~2 q! t! i! }0 k0 t* Y {
5 l, K2 X/ q# O' q PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
8 z7 G! y& R2 F; n$ p" y$ h, A5 A BYTE aPacket[17] = { 0x1f,0 };$ w) i. B9 K9 n) n
::memcpy(aPacket + 1, &ItemID1, 4);
& o! N \4 e2 q0 U$ u9 [% u ::memcpy(aPacket + 5, &ItemID2, 4);/ Y. s9 o- ]4 Z6 L& H6 S* [- x3 J" H
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);. t( d4 x/ e2 `- Q7 v
D2Net::D2SendToServer(17, 0, aPacket);: j3 e+ T- t3 O o4 j( m$ n
return TRUE;
9 C2 N# P6 L$ n# U# s: } }& ]$ u8 W) _- f& k" A9 T
% O/ {# r6 q, G7 }" h- X6 v2 {! y static BOOL Transmute()7 d0 I/ L+ N7 e1 L4 W, y, r
{
) x- P0 j' Y( c# m3 z6 s if (!(*D2Client::ptPlayerClient))return FALSE;
* c9 ~4 P8 l( F1 T# }& K/ O; L
4 a/ b' k' [! R8 _% W5 [6 H+ x" i if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
# V: Q/ l, [& n0 K. h w return FALSE;
" p$ y: d+ t& b+ L) n# Y2 H
% B0 @5 p3 \! e8 w0 ^2 G( c3 F PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);' l% f* Z3 O; R* f/ _( Q, C: L
BYTE aPacket[7] = { 0 };; O0 S+ O9 b$ R5 {1 G/ C$ i
aPacket[0] = 0x4f;
7 Z1 z" h2 U; v( Z: a aPacket[1] = 0x18;( ]" g; v. ?1 [' `0 h
D2Net::D2SendToServer(7, 0, aPacket);+ _; |3 G1 k) ]$ F' A. k
return TRUE;
+ K( n1 {1 Z K6 I4 z9 R/ H9 ^ }
1 h. Z2 A U5 S};
3 |! O2 ^) F' B+ y( ^' R. M0 T3 O# n z7 v
|
|