|
转载2 T/ U, Y D; G' o6 }1 P/ }
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:5 N% s5 w. v, ^' _/ B
D2Client:
! w; }" z- b+ ~. D8 q8 ~6FB20AE1为拦截输入框(用于获得命令)
6 O+ C1 m- W* P6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发; Y, ]: C3 t4 @* N# p
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发+ `& N7 q! D1 k! g
6FAF4230为hackmap的loop点 我用的hackmap导出位置
* G' K. E+ L6 Q: T) e* T: ^. [/ e l$ q
& Y2 g( u7 ], a$ l' v" B4 C发包函数:
9 ^# R3 S" Z& `# ^* a7 nclass D2PKT_ITEM W& s4 G& T' B& G; L
{+ W+ @1 @# e0 o' v! B
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
" l+ h7 l% B; Z, Q8 a#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多% _! ~ u" F, M& s9 l, D; Z
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上- `+ G7 y" s: g- X0 O
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
5 ~& W. T2 `. l2 ~( e/ \! ~#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH7 b, G; D+ j# s L" }7 }
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上5 \! ]& L) u4 g& P0 T
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏4 B# `5 q+ x' I4 g/ J5 b1 I; f
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
' s$ k+ l( C( ]! x! C& m& B" Z#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -0 l! p9 O, C5 r& {- _9 P
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
* d: x z4 r: r7 F+ B4 @& E#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
) E! b- }$ {* k+ L6 x) {& @2 |#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 ( r) V0 |6 s1 \$ J- w+ f9 S
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带% B& U8 b) _6 p8 O
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上9 l; p- h% a- e4 F/ q
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
2 n- v" k" X' H, T$ x8 C#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
! U* Y. y3 {: s8 }* `#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
0 _( _/ n8 Q) ]) g* O& t$ m- J, d
* s+ T0 N5 L: O @: Y" s2 m7 Q#define PacketItemMaxTick 150
, P$ `& L$ @: Y- Z& \#define PacketItemPickUpTick 203 E7 Q: z9 @5 d6 _
; l3 P9 x# U0 ?' N R
private:+ L" [7 C* B& A3 p+ ?$ M: d
static DWORD _PKTItemTick;
0 i! J, n2 D* s3 q static DWORD _PKTItemAction;1 `( r: H4 t9 [) }# @
static DWORD _PKTItemID;
$ m. M; h: e; V) p# [% _ static BYTE _PKTPKTType;
- t# }, l8 S+ G8 c/ fpublic:
. i/ l$ E# K2 y; L" F static DWORD PKTItemGetTick() { return _PKTItemTick; }
2 @( K! Y- V+ a& S, Y* s% ~
- R$ D8 ?. s: B z- O static void PKTItemRelease() ! l) P' C8 j. Z* d, o
{
3 ]' k- m* m" V$ m% C/ b9 Q% F _PKTItemTick = 0;' b& H( N( \! R& |. G7 |- {8 a" Y
_PKTItemAction = 0;
z7 B& y) I7 Q1 s _PKTItemID = 0;2 A- h/ e, L/ f! K
_PKTPKTType = 0;$ X4 I- I' l" W7 G8 R( q! w( G
}
1 W* e5 ^7 }7 N6 |" l
) x+ f0 G9 A: `5 H: C' i* F" j static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) 9 U9 E3 S0 P+ f8 w1 b0 O/ R
{
: d! I5 K& h0 }. n5 P X# _0 j" J _PKTPKTType = aPacket0;$ p) |: @; z6 [
_PKTItemTick = tick;3 O1 {( U; X( ]3 v: C
_PKTItemAction = ItemAction;
/ l. U& b5 Y% c& f: s7 ^) f _PKTItemID = dwItemID;
3 x( A/ v- q3 ~' |5 |. Y" e8 x4 B }
. k3 L+ [8 k- \- J$ V9 R6 g. U) b! w+ Z& y" Z
static void PKTItemTellW8(DWORD tick)! G8 N: V: m% ^3 B2 l d2 j
{
$ v2 Q$ U3 i' ]& m2 { _PKTItemTick = tick;: p/ T3 |1 V9 ~ C
}* U' h3 z( [9 s" {6 o
- ~, a3 s0 C v! e. d) e static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
# {! U. K% g5 | {
0 I; o# q. W! T5 K, Z) B1 C if (aLength >= 8)" w3 y' X! w; x3 [1 V
{9 l- S$ ^5 e Z& d# o5 P# ^! I
DWORD dwItemId = 0;# W8 p0 T8 ~7 i" ~
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));2 z5 _) B/ P5 s; p
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
& S/ u: \7 V$ O ^7 J. |* n, P && _PKTItemAction == ITEM_ACTION_TO_STORAGE! E, |4 K' H4 \ ?( l% e2 @9 q3 E
&& _PKTPKTType == PACKET_NEWITEM
# o4 o9 }9 D) ?' T0 ~+ l )* w1 N/ |, D8 f' j( g9 R3 L
{
3 h) I1 [9 s% Z0 v if (_PKTItemID == 0 && _PKTItemTick)& n: K- q- g0 e% P, Z+ k
{8 k* A0 F) q7 _' J2 Q/ g
PKTItemRelease();
0 y m. f- K8 i1 z; |% | }1 p+ I$ [! h5 L" l# w$ R8 e3 Q
else if(_PKTItemID== dwItemId&& _PKTItemTick)' O. Z1 U7 W- c; a# x" |( @; k
{ e4 N2 X5 M, z& W) K
PKTItemRelease();2 y4 y* g0 n% ?
}1 ]& [0 i5 u, w2 ^- h# |
}, ]2 d" S: p1 }; Q# v6 Z
* x. e& W3 S5 E8 o! C/ x
}$ n# ]4 z! O; q6 {
}
; A! I- V3 q, x* Z$ X: H
" f; Z" G- m2 K+ b8 u static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
+ M0 p4 t& U0 g& v% o! K! _2 j {
4 _* D& R: p# A* r" ~ if (aLength >= 8)3 b) @, t& p* o* Y/ H
{
4 p, c1 Q9 j3 n. G6 W$ [1 H DWORD dwItemId = 0;% T! E) ~; Y3 ?; H ~/ Z( y& K- I5 q
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));" T$ W3 C, N; s7 ]% l
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE l" F' I5 g2 @2 y
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE0 h' ]* ^9 w9 L( p& K
&& _PKTPKTType == PACKET_ITEMACTION& u- F7 m* ~. ^0 y R3 C
)
/ p8 G% C( T+ Q. Z {$ f( I, R# H5 N. ^) Q; b6 [
if (dwItemId == 0 && _PKTItemTick)5 H& D) M4 v- \& B. q
{
F$ `. Q0 ~ z7 ]7 | PKTItemRelease();
% b+ ~9 v- Z" r& s9 B }8 g& S9 K5 w: n' `3 @" ?3 ~
else if (dwItemId == _PKTItemID && _PKTItemTick)
4 B/ J/ S, m6 J X1 [! R! t {
/ n* v. {; U+ u: D PKTItemRelease();
9 i+ y' U) q, `+ X" B5 t }5 Z* y0 _. C9 o4 E, w
}/ e S- L+ G- M2 }3 M
7 F5 L8 b$ X9 P }' L: g) n3 s4 ?
}
1 m# m3 U+ l- S
4 ]5 {. x9 d, ?. l1 ^; c& W; _% ^ static void PKTItemGameLoop(). V. V' L: o- ~
{! ^$ {" r" U e$ @
if (_PKTItemTick > 0)4 u& h, s% ~# b9 T& d
_PKTItemTick--;& a# n! c7 e6 Y; F" O
else if (_PKTItemTick == 0)
! A& O5 w" C" M ?1 x- u/ T! H) L PKTItemRelease();
8 G# m0 i4 J% T6 U) k- R }
8 t) n6 C5 A& Z3 h) W* R, s: c$ y. m! [" K; f% k2 N
static BOOL PKTItemCando()
! _1 u- T x+ L1 c {5 `1 c- `" H. n$ f) y" M$ x. t- U# K
if (_PKTItemTick == 0)return TRUE;
8 @2 E( T- H8 ` return FALSE;$ ? h2 K: T) {4 j
}/ ] ^. u2 S* @0 f2 y" _; O+ R
, O: p* R$ a" \ static BOOL BuyItem(DWORD ItemID, DWORD npcid)
- S$ {; o; |5 J: H {& b% e4 E- Y p3 K4 X1 K$ v- [
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);6 P. l3 |& O0 G
BYTE aPacket[17] = { 0 };
. D; i' O% ~7 L% B& _2 L4 D; d aPacket[0] = 0x32;
2 y) s* {. V! u4 M) {8 j7 B; X! d6 } ::memcpy(&aPacket[1], &npcid, 4);. q3 c! q. d" L/ q* D: f; L
::memcpy(&aPacket[5], &ItemID, 4);* I) A3 p0 f( o' ^, [
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);' P/ u+ ^6 g5 E1 g+ {
D2Net::D2SendToServer(17, 0, aPacket);
' `, C1 P" l& ]/ u6 N% J$ h return TRUE;
- H$ c7 `- A+ u8 D6 n }" |$ U1 S' T1 N# a
2 P8 t( d) H% ]2 w' w% X4 `: Z static BOOL SellItem(DWORD ItemID, DWORD npcid): J* E6 M2 ?+ U% e- g4 C; E0 n( Y
{
8 B3 W! u- P6 \, y2 K* @5 J PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);* I0 S, _/ @: }+ j/ _
BYTE aPacket[17] = { 0 };
# K+ `- U6 J4 U2 l aPacket[0] = 0x33;- ]$ b0 F5 h% @- r
::memcpy(&aPacket[1], &npcid, 4);1 j; ]! G- x. F1 Z
::memcpy(&aPacket[5], &ItemID, 4);
/ N( B, |; X& {! ^( z! q //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
! B9 Q8 {( e6 t4 z& z5 w D2Net::D2SendToServer(17, 0, aPacket);
! ?4 |" F5 `: M) b; Q6 M return TRUE;
, h( O4 J$ t4 l5 e4 \ }# O9 e- x: T( A0 G$ A) `3 r
0 @( q+ E* a, Y; ?9 D; F1 I) U static BOOL Interact(DWORD nUnitId, DWORD nUnitType);. ?: V- S* `3 R9 z' i
2 I' j5 J8 C/ x' n3 G# C7 Y
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
0 P2 X0 Q% V8 p( o( V( C; S9 f
( }5 [: k% W' Y/ c static BOOL OpenCube()$ o$ x! u8 O9 t" t0 [% E" i
{7 B: {5 `% N! W x+ |
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
4 i2 M b# n4 r0 k, g7 ]+ M, J) ^4 S) L' m6 z
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
( n" T A# h" v6 v if (!pCube)
# k/ e7 ~' `: _ {
5 k7 f/ V# I" w# a+ o. I- S pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);3 o9 M' C; F5 g( I: [
if (!pCube)9 @6 n: v# R7 q3 Y1 M4 S! `
return FALSE;
" }( R+ M9 H9 U' U0 \4 N# x }
Y+ O7 T+ I9 y9 J$ u PKTItemTellW8(PacketItemMaxTick);2 j4 E1 y, w- D) }- v X
! ?6 F9 t7 A- x! A: c+ b2 n
D2CoordStrc mypst = { NULL };) G- O: B/ A. R$ `$ X U4 j
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
' o: r5 F3 w* L7 V" ~9 `
/ g! i: K9 n4 B1 }+ ~- ~& n BYTE aPacket[13] = { 0x20,0 };0 `# M1 K4 d: U( P' t
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
: a) T: x/ C2 G6 {* Y; z ::memcpy(aPacket + 5, &(mypst.nX), 4);
Y+ |3 A1 V: B1 @3 D5 s8 f y ::memcpy(aPacket + 9, &(mypst.nY), 4);+ @$ _4 q- J: R$ N( s
D2Net::D2SendToServer(13, 0, aPacket);0 g ]( d3 Z) `; ]( q2 J
return TRUE;5 s3 N. F! S. e, [
}9 ~- L: w+ J; N! s, a4 n3 o0 s
. u* \8 N/ w; a' ` static BOOL ToInvxy(DWORD x, DWORD y), D# a/ _: ~3 X$ r' j
{
# [8 P( ?# R3 `; L UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
/ C, w6 f$ \# j5 s2 _! U/ {; t0 S; K3 x* `2 Z
if (phand == NULL)
1 ^8 M7 x9 {+ H/ u6 W# r4 ^ f; x return FALSE;
; J% C/ W$ F1 y1 y: [3 {& I4 H# T
I! `9 V/ J8 ?1 u9 S PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);5 e Y8 c) T7 l+ G; `# P! H6 g
' Z6 n. a/ o7 x* s8 L; a. g: H BYTE aPacket[17] = { 0x18,0 };
" L$ ~0 i6 }* w9 a+ Y+ ?0 \ ::memcpy(aPacket + 1, &phand->nItemNum, 4);+ y; x8 P7 D- n$ x/ ]1 r
::memcpy(aPacket + 5, &x, 4);9 J" `2 s2 c, z% y3 G
::memcpy(aPacket + 9, &y, 4);
4 [ O: Z4 n! e D2Net::D2SendToServer(17, 0, aPacket);
" X2 Y3 \( w/ Y% Q& s$ _6 u return TRUE;
; S2 N* W0 l: V9 F1 o) m. D }# I5 V/ H. W+ q: O E+ r
3 G: p' S+ ^+ V$ x
static BOOL ToInvRandom(BOOL bBagFix = FALSE) 9 X; e, I* Y% c _* @
{
2 ]) |# T5 s7 ?* {/ G/ l( x UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
5 \5 L9 P) @% G& a* ^( ~# { if (!phand)0 i: G2 p$ x" g, s* @, ?: \4 `
return FALSE;
, m0 u; S/ k" _! w g8 h- C int desx = 0;
& G7 l/ t, K. w2 z: A int desy = 0;
4 _$ M$ P, Y* Q6 K; s2 I& Q* j8 k( _ if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))$ ]9 X8 p: g( G: O6 u) M1 J
{% M, Z3 u% z2 v8 V& |
ToInvxy(desx, desy);$ ]- a9 k) v3 m
return TRUE;( ?* ^4 u; G7 T4 h$ @$ Q! C+ X+ S
}
3 @0 J2 d( b! i% \6 V7 Q return FALSE;
. T& c/ p! b6 P. _5 k) j }
' q) Y$ t) U- p% Q% y
* |% e b8 i2 ^7 @ static BOOL ToCube()- g1 W, Q' b- `
{7 F& p* A, {* F8 Q4 C+ r
if (!(*D2Client::ptPlayerClient))return FALSE;" q6 z4 `, \+ |/ q6 }! F- q8 V6 I
* L! H% [3 |2 q& M9 `
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
+ ]/ [2 h% b8 j' D if (!phand)return FALSE;( }) G0 M4 I" @- F( q
( D( A" J- l) ~4 g
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
6 V6 V7 i- g4 b! i( S+ G5 @ if (!pCube); v& H, C5 a% l
{
( l c; ]' Y4 _0 P/ L ? pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块- M0 }6 f D7 m! S3 _
if (!pCube || !pCube->nItemNum)
+ ^7 s- V& Q1 _3 Z; f return FALSE;
7 ? d- M8 e4 o* j: Y }8 ?" b$ z9 _# A3 G; O( O3 ]+ P$ `
) q1 U) j% p* J) \1 L% ?' a$ _ if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))' C2 z; c$ o/ [. R
return FALSE;: g" o$ |0 m5 F5 l8 p" p: J% W5 O
# ^! b! l5 b" s0 \1 b% M PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
* e/ E4 C( ?' s% x/ @
: o& [# L9 n( x% |8 \" M$ W* d BYTE aPacket[9] = { 0x2A,0 };
2 j2 R+ D2 H/ }& o ::memcpy(aPacket + 1, &phand->nItemNum, 4);5 f1 d8 L9 e$ h% _8 u
::memcpy(aPacket + 5, &pCube->nItemNum, 4);: m8 h0 ]3 a7 p; m
D2Net::D2SendToServer(9, 0, aPacket);4 `3 h0 Z3 v! S4 P
return TRUE;! L$ M# G! z/ r/ X6 @
# h' v% _" Z+ @) o! _ }4 M- q/ j2 _. p( c; K/ l6 p
* p1 H% V% C9 H. D2 d; m, y static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
& [3 {: \% W8 v3 |( \2 J2 ]
+ ]' e t+ m6 ]$ L" ^( w+ O static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
; j1 D# C3 q4 I$ m. i7 \- V% ^, A) e {; h( a5 n- {7 T6 u4 b! d
D2CoordStrc mypst = { NULL };
* x5 F5 z$ ^# f" i- k1 ] D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);5 F/ N$ l+ |. j {3 F" J
8 ~7 c7 s# e% h7 j& |( {. l. y
if (!mypst.nX)return FALSE;! |! q6 N |& d3 U' ?
0 x- K2 k6 W7 \5 I/ c PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);/ v$ G% |! M2 a4 l1 y+ u, B
8 @; D) T& r: f$ w BYTE aPacket[13] = { 0x20,0 };
$ t! ~: T( {/ K( G, d& Z3 D ::memcpy(aPacket + 1, &dwItemID, 4);( D$ Z4 r9 M% [! q: o+ D( a6 Z3 R. f
::memcpy(aPacket + 5, &mypst.nX, 4);
; E6 S' C5 R5 |) k4 ?3 Y ::memcpy(aPacket + 9, &mypst.nY, 4);
" _9 K8 @& t% x# s //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
2 n2 ~1 j' z: f. C1 \ D2Net::D2SendToServer(13, 0, aPacket);
9 B f+ @: `; l: a return TRUE;
0 Y. |7 X4 O6 ?) p* P- ~ }
, s( ?. k+ f/ O4 d5 E1 d7 o4 {! N8 k) o$ k! P' d8 x
static BOOL DropCursorItemToGround(), O' c& V! ^# A
{
d: V. r1 h& a$ K/ F* k- c UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
8 L% t/ J0 l+ ? W- f* } if (!phand)# x( ^# y% h* t- F- L
return FALSE;, F, C: z% |( R. C3 c. y' p7 q
3 K2 m9 c# B! t) A" C2 | PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
+ l( B1 m% p" x
/ a2 b8 x Z6 P) Q BYTE aPacket[5] = { 0x17 };( Z+ A) h$ J1 _% Z1 M
::memcpy(aPacket + 1, &phand->nItemNum, 4);
/ n l" }5 i5 R3 K4 w+ u3 d( F D2Net::D2SendToServer(5, 0, aPacket);
: g6 _) X! \5 r! o! j. A' E. y return TRUE;' Q* }7 F6 w& }
- `- M' W6 F% p( G+ p }
0 g* G4 u4 `# P; `$ }, C3 W- Y, F5 i% ]1 p% w8 E% E) c4 ~
static BOOL PickStorageItemToCursor(DWORD dwItemID), u( b8 |9 _9 I9 `
{
1 ]4 w; x( G$ y" N PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
/ u1 S) J9 V( S/ A2 T* Y. x6 \% [* C/ `
BYTE aPacket[5] = { 0 };
8 ]! T( F) n% e0 C aPacket[0] = 0x19;
+ R/ ~( q8 _& b9 g, m6 w ::memcpy(aPacket + 1, &dwItemID, 4);
( r3 A/ h6 C$ k3 ~ //return D2Net::D2NetSendPacketToServer(0, aPacket, 5); @3 I ?+ |3 |8 J) D
D2Net::D2SendToServer(5, 0, aPacket);
/ H" D2 G2 v6 {) y+ J return TRUE;
: d6 t' O! r4 v9 T t" e( q }
. T4 f. n, E+ ^" b/ \3 c
, D+ ~0 j7 ^8 E$ y8 b4 h# {& z static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
+ t: m; F: S9 M" @" G+ Q: }; e { A- N6 x; M( D7 y- z
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);( l# L7 T5 c5 i( Z
BYTE aPacket[17] = { 0x1f,0 };
1 j3 [1 `$ o7 E' C) V: k$ r ::memcpy(aPacket + 1, &ItemID1, 4);' X: C$ Y, E& z- E$ G2 }
::memcpy(aPacket + 5, &ItemID2, 4);
. F3 o- ?3 T9 R1 I0 O //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
: I3 u. L2 T8 j" {- J D2Net::D2SendToServer(17, 0, aPacket);
- n$ H* G/ u8 I P return TRUE;
( k; c3 P; d4 v# _ }6 K* d1 ?1 ?+ t% F2 v
& H. T, t9 Q; N6 B; w0 T2 l
static BOOL Transmute()
) T. a$ F3 k( U7 {! n: y4 h {, v6 |8 O0 s) q: I& D- E
if (!(*D2Client::ptPlayerClient))return FALSE;
2 d/ X2 M; f7 j& f3 Q# @ _
' ^. U+ S3 h9 y9 g if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))& G! ?$ K* K; D) t# I( D7 Y; [
return FALSE;
5 x; \, K- u$ n
6 B' x/ L6 F8 E7 [0 @* N PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);3 w3 C! X& v1 w6 f5 F5 f( Z& R
BYTE aPacket[7] = { 0 };+ t1 L R! @6 \/ {; U# G
aPacket[0] = 0x4f;
6 e$ z: U! z" j. z" B/ o# H aPacket[1] = 0x18;! c4 X- k4 P4 @6 K, D1 ^
D2Net::D2SendToServer(7, 0, aPacket);5 M: z/ N8 y) ^
return TRUE;
* m5 ?2 o6 ~! h1 r& b: n2 I }
) D5 w0 Y, E. j: _1 I3 `4 O/ @};
! j& M! J' ]; `
! Y% l- j0 |) X1 H |
|