|
|
转载
8 d, v3 Y( E0 P4 h" a! _& S8 W! m自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
/ ]2 n" {' @8 X& [$ |D2Client:0 B; M z' H' e' {
6FB20AE1为拦截输入框(用于获得命令)
/ k, j: T& Z; k2 T- Q% S6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
b! P: X4 A* U ]6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发6 z1 s. d# i2 l: h) ~0 r7 i
6FAF4230为hackmap的loop点 我用的hackmap导出位置
+ W" @' b) i; @
5 _! J5 Y! M; {/ o) y' O3 ^! k" @2 O, \
发包函数:
6 f7 G3 \8 ~! D6 J3 Nclass D2PKT_ITEM1 S' B8 o9 m* u3 ~5 O) h
{8 q) F4 \) K7 A
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上) K, w. q$ V; J( K8 E
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多0 G3 \+ |( g, w) h
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上6 {* o( p4 k, z. K' O, ^ {& J
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
) K" D; t& d& n' V: ^ e6 u& X#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH& s; k5 a# O5 F; B
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
9 z4 [( W1 a" T7 Q) N6 Q& ]#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏+ f& ?/ H* R. S2 b; a' ] [8 D( Q
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
1 z$ c/ X3 t# d: Z#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
* u6 H0 \8 a" m3 q* _#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
C& w% M5 o% c: M& m#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
1 ^2 Y2 U/ j) G#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 0 E8 g8 C8 q- e$ v$ ?
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带2 Q8 `. L9 k) T9 Q% }- M3 e* s
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
* C2 Q5 \9 d" `( b#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
9 u, M, b& h( O0 [#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
& K* s5 g, s6 G#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
0 e% M$ k/ S* Y2 G; G6 U! Q8 l7 e4 {
#define PacketItemMaxTick 150' f: |/ c" C- ^1 _$ W
#define PacketItemPickUpTick 20
/ L6 W2 j+ B$ m C+ Y t' P3 v7 \4 z- X; F
private:
" `4 `# h- `* S6 z static DWORD _PKTItemTick;, j4 o& ]4 H, ~& d$ T( ]: Z" o
static DWORD _PKTItemAction;
# u9 R5 d4 }) I) p- b; ` static DWORD _PKTItemID;
/ e! ^+ Q, s" W* T( X: t# T/ F5 `; a static BYTE _PKTPKTType;
* F5 Z7 v1 n. ]' apublic:
/ \' Y) X# ^/ k/ d static DWORD PKTItemGetTick() { return _PKTItemTick; }0 ^; S. [+ Q$ F
6 R( t9 [$ p8 o; w static void PKTItemRelease() 5 M: i4 Z* e8 J4 E
{) L' C$ i5 O+ E! l ^8 L* u: g
_PKTItemTick = 0;+ C, K6 D4 k1 _; G
_PKTItemAction = 0;
; N1 [% q( L p6 w. H _PKTItemID = 0;# y6 s" I0 r+ S, L9 X: H
_PKTPKTType = 0;- w- C' k+ Y( g; L5 T
}
# I$ t$ Q7 k, ]/ s* a. s* W2 r" a% F7 s; J+ V/ e
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) $ d L6 E0 a3 P/ H
{9 E# `; s3 U5 _; [' O
_PKTPKTType = aPacket0;
- ^: D" u! M/ i3 Q4 G- T) @ _PKTItemTick = tick;8 m/ F( X. e! ]% z: y: _
_PKTItemAction = ItemAction;
$ y" d( c/ N, D" L ^$ z5 V _PKTItemID = dwItemID;
* F, w7 x" T& Z }
: i* \: ]3 A& J+ N& o
) U5 T+ c; Q& |% P" [ static void PKTItemTellW8(DWORD tick)
4 f9 t2 E) n7 w {8 b* T" @" q% }+ A8 ~
_PKTItemTick = tick;! }: |6 P2 j) x! \1 [* [
}9 V- ^3 R4 x$ E! \2 C
/ ~( b: u7 e r) [ static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor. l3 m# f; t0 X0 [# }9 v& }
{
! J9 ]' y8 f; Z- a if (aLength >= 8)
8 e3 D+ U. F& a' c& e2 {1 l {4 v' l& n; Q3 n8 l E3 ~7 W
DWORD dwItemId = 0;
3 i( l6 c+ t! ~4 D+ v memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));4 Y: K t7 r/ }; r+ k" P
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE2 f1 }* D v# V
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
' t' n% \) Y- |' g2 S && _PKTPKTType == PACKET_NEWITEM
& o. a" j: a( P/ |: j: d5 c+ [ )9 C) ]+ k$ U' P2 [
{
9 C- C5 }! b! r2 C7 G! Y: ? if (_PKTItemID == 0 && _PKTItemTick)
* V8 Z9 U4 l4 }9 U4 g0 d {
% ]; [. B ]* i9 i0 E9 F9 V# F! M PKTItemRelease();
9 [& W s5 n# r$ n }2 J, D- g. [& q3 m3 j* n
else if(_PKTItemID== dwItemId&& _PKTItemTick). f# w# _' O; T* ?# Y5 T" w
{
; M f2 D% ^8 ~% K s PKTItemRelease();
S2 V6 U3 G9 H1 I X2 p1 X2 F }
& |; k& `5 a5 u! c9 i8 ^ }
! o1 \& ?3 W5 ?+ f" l" i/ b a ' f8 Z) j. j( r6 ~, {' i' O
}
; s0 \- K3 p2 E0 s) S( h0 U7 K3 e }2 r! ^; v: D6 [) s! Z
" x/ [& n6 Y) f! n3 {% u* j% Z4 [ static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
& Y4 l* U4 b+ H3 {- r) _* d9 z- k G {
1 _, ` s5 R" }: {% x9 v5 C8 s if (aLength >= 8)
6 Y5 v4 V3 {" p3 D+ ^% H {( `( f' ^2 f5 j6 D8 j( |! {
DWORD dwItemId = 0;- v* m2 g$ x/ [3 m1 B& ?
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));3 N' |1 C; ~% h" d" A; ?3 \
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE0 D% N* u7 o) D0 {" Y6 _
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE q$ e# z4 D& y. Q
&& _PKTPKTType == PACKET_ITEMACTION
9 c/ a# \+ ]: P2 _! r )
# d$ j5 `, o. i! ~8 W {
$ o! o/ b* l# t if (dwItemId == 0 && _PKTItemTick)
( U0 } M1 }; e+ d/ K8 W5 o {, `4 l `# M5 U' W7 l3 C
PKTItemRelease();
! t% g" b# I2 H8 {) y5 X } g" G' o$ [5 R7 |4 ^
else if (dwItemId == _PKTItemID && _PKTItemTick)% k0 y1 c- O, {2 Z
{. Y' N9 [. f+ w0 _. g: _( x
PKTItemRelease();' W! P3 E- L% Y. Z3 Z4 w9 N# S
}
9 o) |% N. u3 R; G: n* X! e* N }
! H) Y+ c8 R& O) `
) Y2 b; b8 q, f5 G- {$ F$ { }) H; E& T; k0 h% o p7 @
}
* |' ]' b) e1 j$ n* j! p1 R
: G* ^) z- D `" `. v4 X static void PKTItemGameLoop()3 o/ d) A. m& u' c, M5 G
{* t6 S8 r2 o( O8 g* w& B5 o# u
if (_PKTItemTick > 0)
% B! O" @/ y: J7 y' _6 _4 w _PKTItemTick--;
' W% X0 B) c- t0 h; |8 m! L else if (_PKTItemTick == 0)
. C$ r$ I1 j5 s, P' U( ^2 X PKTItemRelease();; b/ E# D9 C9 f: [/ n) V) o- M
}, t: ?( M& K3 O- U
. K% N( _% U/ Y- j/ _
static BOOL PKTItemCando()
; {# v5 b; Q5 [; n. F/ X! O {
- U% q. I4 m3 P' J# F if (_PKTItemTick == 0)return TRUE;
$ T2 w2 ]) w, X return FALSE;
8 q# z& @- ]: @' @5 L9 x }
4 n: Y0 D; v7 T4 [% H4 c
, s; n: G9 v* S+ M9 S( S0 d static BOOL BuyItem(DWORD ItemID, DWORD npcid)- Z; W) m1 l4 k" r ~
{
4 L. u! B; A9 F+ K5 X/ T PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
+ k4 T2 O8 h8 ? BYTE aPacket[17] = { 0 }; _5 W5 Y% O: A2 X' |6 _9 H
aPacket[0] = 0x32;
0 [' f* ]5 @; i) m" K' O4 l5 X ::memcpy(&aPacket[1], &npcid, 4);- y/ H* D- Z, u
::memcpy(&aPacket[5], &ItemID, 4);
2 `! e. d8 p& |7 S3 j# ?0 }9 ] //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
' ?* u$ C0 c7 f+ B/ B. ] D2Net::D2SendToServer(17, 0, aPacket);& c) ~, }( k. U0 Y2 Z. T$ L6 f% |
return TRUE;
' B* m7 J: X ?8 b& D" z* c } Y; B3 G( t0 s/ x
* J( `- H9 P' f5 ]/ y9 [9 K static BOOL SellItem(DWORD ItemID, DWORD npcid)/ A. ^. U' n- V
{9 C" L1 p: v2 [: t" f: F
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);1 T0 N5 D. ^2 N" a/ u
BYTE aPacket[17] = { 0 };
8 `. c$ v5 s- d- v7 u( N) m8 N aPacket[0] = 0x33;7 M" |, o: Q; O! B! N0 m* k
::memcpy(&aPacket[1], &npcid, 4);/ H3 J) b, `. c9 F' p0 B2 S) I
::memcpy(&aPacket[5], &ItemID, 4);+ V7 t9 \1 n: a/ R
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
. W1 r- P9 c0 H D2Net::D2SendToServer(17, 0, aPacket);
3 p1 `/ Y, z- ~* ]# t6 u' t return TRUE;6 n! o& V$ }5 e6 y5 r
}
/ k! p/ j6 J( v2 K3 k$ B3 B& F6 {$ G; }: ?) y4 q
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
' M% e6 B9 P; }7 f) o6 d2 J) l9 f0 W1 a4 a$ C' ~3 m
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);/ A+ Z/ y, q" T/ {- b4 J$ X2 f
Q, q* o! U6 ^$ S7 Z- d static BOOL OpenCube()
2 {) ?4 d( R6 j3 u {1 u: j1 x6 e9 S, X" @ n4 ^" G
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
6 L: d! q' y+ R( b, T
9 @5 ?. T; Q( w, ~9 F6 A UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);( J% Y* G3 E) K$ M" s& s
if (!pCube)5 N3 ?( e- _8 m" k; D+ n4 `$ o
{
3 g: }! m i" {* `. Y! P pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);) f( m8 ?. N0 U q( N9 y( X
if (!pCube)
2 M- v* b1 I" N+ Y& R, `. D% X1 F return FALSE;
. k) o( f6 j; V/ G) W }
# L6 s/ h. K9 V T! V& G2 N PKTItemTellW8(PacketItemMaxTick);# T0 z3 D6 H& u2 x* X# F
4 L" q# J: S! R5 @$ h" P* Y
D2CoordStrc mypst = { NULL };' c q: s0 O& h& _5 l; F
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
* V% D8 ?, R/ H% o* C; `/ ?- Y" n4 d0 K; A ~. K
BYTE aPacket[13] = { 0x20,0 };
( T- B X1 {, e ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
, N# [1 K- O% g5 k2 h/ l$ F- f ::memcpy(aPacket + 5, &(mypst.nX), 4);
; S d7 y- @( Q, `0 x ::memcpy(aPacket + 9, &(mypst.nY), 4);
" r: Z: p9 {% Z6 f; p D2Net::D2SendToServer(13, 0, aPacket);* T$ ?$ H# ]. X+ ?
return TRUE;
4 \; f" r3 x. a0 k! h5 o } a: y4 ~( n2 ]' I1 `
" |/ D6 K# r6 W! k% f static BOOL ToInvxy(DWORD x, DWORD y)
' A A( T P Y% ^8 I8 T2 \ { T. K2 q; ?& t' `2 y1 i
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);: k- j7 O$ B" m) L0 N1 D
. q) M+ u( N/ }3 E. p if (phand == NULL)$ H5 g9 ] c. C# L+ {/ `% w
return FALSE;
4 g G& M. n* B# S: C7 T3 A9 ~3 \# I5 a8 {# x
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
8 N0 e" T: i1 W: S( `
4 O' V5 B% |/ [) T6 y: B2 \3 q& i BYTE aPacket[17] = { 0x18,0 };
( x3 Z. q1 a$ E3 t, ~# P* |5 K ::memcpy(aPacket + 1, &phand->nItemNum, 4);
3 v! o2 K7 Q4 \5 J ::memcpy(aPacket + 5, &x, 4);
) V; G; B! n" Y0 U! t) L ::memcpy(aPacket + 9, &y, 4);2 J* g8 q+ N5 F: Q
D2Net::D2SendToServer(17, 0, aPacket);
2 E" @3 U* ?1 O' Y return TRUE;
$ C3 z6 @% |1 E/ d8 |, K7 n$ ] }
/ e! P7 x& K6 m0 G% f# \# C
1 X0 W. U+ s, l7 C. A. S+ n2 D; x static BOOL ToInvRandom(BOOL bBagFix = FALSE) ) S0 n+ s& a, |0 L# T: x
{
: l* \* G+ x8 J3 | UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);) l$ l5 N0 {1 t7 S
if (!phand)1 z+ W4 U" f+ n
return FALSE;9 s% {0 }5 N# `2 w- y# u6 J
int desx = 0;2 v% G" U" D% Z; Y
int desy = 0;
) A6 C) I& y$ _& O, L1 v+ o# A if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
5 y6 g3 }2 S7 }( `8 k9 e {
; k8 F, a m" \ ToInvxy(desx, desy);
+ C9 @& h: n& V/ ]6 e" V return TRUE;' P5 F2 c( ^& m6 W
}9 W& j& j. B( `- t: c; K
return FALSE;
/ {4 t2 S& i+ p" O0 c" v }
) t9 A6 N3 b3 \9 e! R, d3 o* ~" M
3 d: |! N7 ^ A. { static BOOL ToCube()$ s' a$ N% n: h# C5 l+ Q& s$ t
{0 n. Z. y0 ?- E, a- a! S
if (!(*D2Client::ptPlayerClient))return FALSE;
% e- E2 ?# g/ P; T: _0 V
/ x# @7 i3 {+ z- I! w, C0 |* V UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
) `3 e9 Y, v* O' a K if (!phand)return FALSE;6 {$ Z! a3 c( |, `% y
' a% P# F( p0 d UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块/ S" _7 L) E- t8 C E+ O' }" Q
if (!pCube)
/ e( @1 [6 ~7 {" k' N$ Z: | {9 `' c3 u; j% u! F# f
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块* B* s! \) B( S4 B
if (!pCube || !pCube->nItemNum)' ]1 ^5 r" Q& T/ o, F) U9 X
return FALSE;
) D9 K6 v' S/ l/ ^' @) H }! M' @" ^' H+ o9 ]! A) l
4 a: n& ^! i- d; Y" i2 O0 ?
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
( j6 F: b+ i# ]$ V. K( e8 A- n return FALSE;% s9 ?' a* g1 o- U3 @! l& y9 B
- c! {+ t1 P. V5 [ PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);; f* S+ E8 M- u$ T8 l
( C `# o2 t; C7 |" l' E1 `' c BYTE aPacket[9] = { 0x2A,0 };" M- t2 |. e! \# t8 w% `
::memcpy(aPacket + 1, &phand->nItemNum, 4);
- m, n# d, L* o8 J$ n ::memcpy(aPacket + 5, &pCube->nItemNum, 4);& U7 e+ c$ R: ^
D2Net::D2SendToServer(9, 0, aPacket);
: ?% ^& p# E( U8 Y6 a; G4 ~5 o return TRUE;6 @" K2 L3 ^: l- k
3 n6 J. _* ^. I2 @: l4 _% V0 s
}+ \; u+ i" G+ ?3 J* m$ I
' h6 V! }( k0 S1 c( L& d
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
. w; d3 Q4 V% A! Q, t
' c; x$ J+ v* }: r& j9 w7 H static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存3 B2 U w4 ^0 D; U) z
{
9 I" Z W( F9 D* v; i, S D2CoordStrc mypst = { NULL };0 C8 V9 ]8 S3 O2 Z$ v; w7 l
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
0 v/ R1 A$ U+ t; T6 Z3 d0 @7 S9 \: j; d& ?, o. O) i! v
if (!mypst.nX)return FALSE;+ p" W4 i* E/ g. F5 r9 ^# r
$ _4 {8 I$ s/ N8 U# ^ PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
( w4 D/ f6 `9 R1 X) i# U0 e, M5 }) ^) F+ T4 Y4 Q6 m
BYTE aPacket[13] = { 0x20,0 };
/ T* u* Z5 m2 V! d0 ? ::memcpy(aPacket + 1, &dwItemID, 4);
* }" ^3 e. t, ~7 o+ j4 ? ::memcpy(aPacket + 5, &mypst.nX, 4);6 [' P7 t, l3 @9 Q1 @. _
::memcpy(aPacket + 9, &mypst.nY, 4);1 q; t# R) L2 o
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);5 L M" ^# d1 p. Q" N. V7 C
D2Net::D2SendToServer(13, 0, aPacket);. d$ k" ]2 m$ {/ y2 d- u
return TRUE;
- Q+ G& r, ^, H6 U' S, n }
7 ]2 {0 k! r2 r! O2 s2 n3 c
( E K+ t' p, `4 N6 u) a# g5 M- K static BOOL DropCursorItemToGround()2 E0 u: G2 H2 u) Y3 \4 r6 N0 i
{
& i& M% J) Z2 Y3 |' C p* ~" N UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
5 A" ?4 t; `" F2 E: Z# r if (!phand)) [# K( W* `1 q. S% i# i6 `
return FALSE;
0 Y E; v7 @8 @: F" C
. D8 X3 Y% {* _) j3 z PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
% `5 _7 G3 Z) S5 x( m2 Q# f7 ^& _7 V8 T& ^# t) f9 Z" L
BYTE aPacket[5] = { 0x17 };
1 x/ @) u0 d5 J% e+ R ::memcpy(aPacket + 1, &phand->nItemNum, 4);
# g, q" W( X1 j& u1 h0 l D2Net::D2SendToServer(5, 0, aPacket);/ N9 @' a% ?7 w; o0 c
return TRUE;
7 Y% _( \" g) t1 |
" g7 W& U9 r8 N$ V$ _0 b0 k }- X K! V. r& b$ {/ U9 F: r7 d
- |7 h3 o3 @* W: ^0 C: f. Y
static BOOL PickStorageItemToCursor(DWORD dwItemID)* I% b) U2 D9 A( m7 }
{- o+ n3 G( H' g, V1 U+ S
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
, ]4 o+ H; V9 F( a0 T5 M4 W4 P' N8 S+ [% h/ u/ E" ?
BYTE aPacket[5] = { 0 };
3 W" d% x X3 C3 _& ~ aPacket[0] = 0x19;* v: `' f% E" z2 j" p+ y9 B
::memcpy(aPacket + 1, &dwItemID, 4);
5 Y, r& c# D* U+ D3 g //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
' n* u% ]3 [, y% r$ x }6 H4 ]$ _ D2Net::D2SendToServer(5, 0, aPacket);
9 v( {. E1 m% r) x: e) c return TRUE;
0 Z7 V) t" h& H! A2 | }
0 L; N$ D" C; X1 U+ L8 Y% G1 n
- O" `7 {( c) d' I1 J static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)4 I- [6 S& s# s8 \9 [
{
; y/ Z; U( a! _1 ^$ Z- C PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
( g% z* w, D. d% ^ BYTE aPacket[17] = { 0x1f,0 };
, W# _0 b1 B6 q- w2 ]" `; N+ p ::memcpy(aPacket + 1, &ItemID1, 4);
+ Y. A: F* T9 T) E ::memcpy(aPacket + 5, &ItemID2, 4);
& g: q; C( \& O# [! X3 p; P2 V: P //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);* a3 i0 \2 h5 \( l$ H7 s$ J
D2Net::D2SendToServer(17, 0, aPacket);! Y2 m( N3 G, X; @* U( O! M
return TRUE;
- W6 D; T8 i# Y4 _3 { }- l: {$ f7 C5 Y2 i0 f6 \
: M8 W( r$ V8 S9 a/ \0 t
static BOOL Transmute()
+ \* y1 g) S& r" o: W8 P {: N4 }# x4 X- {9 z0 b& @5 M2 C; Y
if (!(*D2Client::ptPlayerClient))return FALSE;
! b; O: B1 E1 p$ H
|, d9 X' K. @) g if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
1 v$ \; Q+ q! w w return FALSE; u L! W0 j5 @* X' ?+ W
- g8 F! |( E4 F6 Z* e PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
- e$ B5 p/ {8 q+ C" d# k1 i. o BYTE aPacket[7] = { 0 };# m: d1 u* u& g8 |8 o
aPacket[0] = 0x4f;! G# z" ]% C/ ?# Z
aPacket[1] = 0x18;
1 w- B/ W' ?: G D2Net::D2SendToServer(7, 0, aPacket);, L5 R, D- O- F4 M) ~( Y
return TRUE;( j# R+ l: ?, p# T! k
}' A$ l( R4 l7 H, Y
};
- J1 Y6 _4 g* s5 n5 i- a# D+ s; y
6 v2 r9 d/ K. I5 g |
|