|
|
转载
+ E/ B! j- ]4 [- O' }; H9 X自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
. G/ M' A5 }* Q5 HD2Client:& U; d. \$ g2 d$ d7 T" H
6FB20AE1为拦截输入框(用于获得命令)
# G P2 p6 M2 E, U3 j6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
& ]8 p" Z, s. J9 B8 p2 j6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发. z9 D# d; _ X' ]* x" V1 q( a
6FAF4230为hackmap的loop点 我用的hackmap导出位置
5 {1 H0 q2 K3 _+ E
6 q: w( ]* E# I+ x8 \( T7 t2 I7 E
4 }& T! B- m" c/ r6 _发包函数:) B- }2 n; b7 g2 ?( t9 D
class D2PKT_ITEM
5 I% k$ g+ V. \6 h6 t* e{) {( T( [% X& u/ Q$ X' {
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上7 x5 i' H, o; _& q3 Q6 S$ D
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多8 E, l. ?$ {4 p* e
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上 p3 k) P1 d3 A0 Z# s' m
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
7 X8 V; ]) b3 U" M$ S0 n% v0 P! x#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
# n. H. A6 H/ g) O/ q#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
' ]6 z; N( A; L#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
& s' ?; i1 I) j- T#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上& a U5 i/ o2 I% F6 v2 ^+ O
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
5 m$ {$ Z/ H6 V$ b4 ~% B#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
7 R2 _* @$ {* q/ O+ r#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV2 C2 k7 P2 }; x
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
2 n0 O* ~% X/ k/ ]- A#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
8 c) H* a( @5 L5 C" b#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
$ q: y) m) |: V9 t$ W1 @ |$ d1 M#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -4 B8 |- M$ J) R9 w+ k/ R/ T
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上' D) t4 S" ~4 y _+ U8 O6 a
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -+ u1 {- f8 a" ^- {, q- A
8 V$ [6 _: [# }8 E5 a
#define PacketItemMaxTick 150! B+ k: ~( h( C1 e, q2 ~1 {
#define PacketItemPickUpTick 20
' P; D. \6 }8 t1 e2 d. l" S; n5 I& V) W* p& C. b
private:
% Q+ k3 a2 M p static DWORD _PKTItemTick;* X; ^4 w* W/ @5 d4 `$ R
static DWORD _PKTItemAction;0 x( Q1 s2 j5 M# m) ?
static DWORD _PKTItemID;( j; h9 l4 X0 M: R) @
static BYTE _PKTPKTType;
8 w# X% j% j+ Z, e7 q/ Z+ q! spublic:
. x# Q2 O9 z$ [9 ]0 o( N static DWORD PKTItemGetTick() { return _PKTItemTick; }
2 v- E) U5 ^! B. V
( n& A% p" L0 j9 } static void PKTItemRelease() 1 c* C) \1 z9 ]4 J& J
{! p8 R n9 a( F! D
_PKTItemTick = 0;
. e! N- l3 b0 U! `% w _PKTItemAction = 0;
8 O! `1 M" X. h _PKTItemID = 0;! L; Z/ B s6 S1 g
_PKTPKTType = 0;2 R. e5 t5 J7 l
}
8 L9 ~' P- A6 L% d! I( f. m2 I$ t! M! u6 P- N/ z! f
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
0 @# N( n4 g) R( o# A9 N {" P" D" }) Q& ^( e1 e9 f, ?
_PKTPKTType = aPacket0;
9 N e3 X0 Q( Y: x$ A/ }, }, r _PKTItemTick = tick;" ?, }0 o0 T$ V3 \1 T
_PKTItemAction = ItemAction;
1 R( H- F: D2 H4 [ _PKTItemID = dwItemID;5 j$ E! g5 |- Y; O/ [
}2 W5 g" U3 ]7 K+ ^0 |' X5 Q
5 H7 C/ K1 Q x" T8 g7 E1 q; } static void PKTItemTellW8(DWORD tick)
3 h9 K# B" R: V; V& V# g {
+ O7 x6 c q, d6 r4 t _PKTItemTick = tick;
" N6 H L, N! R! L$ f' @6 f& S }6 ]5 d$ X3 q" N* Z, b
: x( a) Q; C4 t) ]) v: n
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor# t' r: U0 n+ Z5 F# u
{
; s$ L1 A4 b* M if (aLength >= 8)* O2 f5 x1 [3 Z0 ~8 h
{- c, C u! ^+ \
DWORD dwItemId = 0;
) F+ o1 q; \# q( [ G7 L memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
8 _2 f" p, R7 o- y9 i# M8 l4 | if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE7 q- r$ l: G8 E
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE$ y3 i" [4 J' ^& k
&& _PKTPKTType == PACKET_NEWITEM0 F- ^" {. F1 R) x7 J& x/ m
). F, J: F' O/ c8 i) R. D4 F
{) r# i' B" U M
if (_PKTItemID == 0 && _PKTItemTick)
- d3 D( N6 U" l- [9 J$ j8 q& t {' I [+ P0 I3 Y: W1 i$ j1 v
PKTItemRelease();
; Q" V% K" m* R# T }
) F9 K$ A- {/ W! o% Y else if(_PKTItemID== dwItemId&& _PKTItemTick)
5 F, d' c6 j/ i2 c2 Z& v {7 G( `" Z8 Q6 W
PKTItemRelease();
) y7 U* ]& r" P6 C }. F3 h0 e2 t, ^* o
}
: U6 S; G' \5 F) j0 { 6 ?. f( d& Z/ ~% p. o
}
/ T+ i3 A" X2 O }
f7 R4 a6 T# f- g- G' J1 E& j0 L
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
2 k2 d! n6 N, n* ]9 T `/ ] { T* x* {' D1 }
if (aLength >= 8)- g+ i$ D2 K$ X- ?
{# c' g3 M$ \3 W% F) R6 N. V
DWORD dwItemId = 0;
* S& \& i! a2 _1 \ memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));3 Y+ |2 L/ m! f5 t! ^+ J+ X) g4 L
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
2 @( y M# [; J && _PKTItemAction == ITEM_ACTION_FROM_STORAGE _! }& u! h' B! b7 s6 ~8 ]) y3 ]& x, C
&& _PKTPKTType == PACKET_ITEMACTION
9 _; g) z+ K" i3 w8 c" L( Q )
. P# U: G: K- t {( _+ t/ J# u A4 I3 _
if (dwItemId == 0 && _PKTItemTick)' M) b4 P1 j# @0 Q
{: m( F8 a& C1 M) g8 r
PKTItemRelease();
2 t0 G, t! E: w0 C# ? }
5 v7 a; x! Z. V" g# E7 z else if (dwItemId == _PKTItemID && _PKTItemTick)! f2 n" O! L [0 g6 {# v9 U
{2 J) ^9 _4 S( T2 o% {
PKTItemRelease();
7 G+ O5 o# H5 S }
" {# c7 _$ `% D/ s& |: V }
$ ?" w% b" q3 O6 c4 B- x! @2 e
% A2 {8 ~3 v9 s' l }4 L$ D% F1 E! e6 I- L8 _& l5 o- K
}
5 ^! Q+ b1 P! x! X$ t' I. x2 t7 A1 N$ z+ ^9 O b- q
static void PKTItemGameLoop()- H6 F8 [! p6 o4 u! d' o" r& |" h
{
, j4 o& I. R$ n if (_PKTItemTick > 0)
$ ]6 r1 @* W- C1 C4 U" R _PKTItemTick--;6 s* {% n1 {( v; r& m5 a
else if (_PKTItemTick == 0)
0 r+ P* O. N) v0 e* |7 O1 r \ ] PKTItemRelease();
9 Y1 x5 H/ `+ u8 d }
! b% K. G1 p7 ~1 O) G, d4 s3 A Y
2 o9 v4 f( q0 u" b8 V8 U* z5 H static BOOL PKTItemCando()
2 D% M* d3 q" e; q" H {) ]9 l7 v9 }" C+ c& c# _3 \# g
if (_PKTItemTick == 0)return TRUE;
4 y) `" l5 x4 c# K: O return FALSE;
; f" m+ k- c! H& h }
; Y% M$ B1 r; H& b9 L8 U
/ M7 T0 b/ b) P7 c) r1 u static BOOL BuyItem(DWORD ItemID, DWORD npcid)8 n) o0 b, `/ k5 D0 S- h' s- Q* x
{
! P. l7 \7 Y G; M PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);0 F( |- S, \3 ?* \
BYTE aPacket[17] = { 0 };
- L5 |. x, k2 F5 I9 C0 [6 f aPacket[0] = 0x32;
8 G9 Y K2 x% S ::memcpy(&aPacket[1], &npcid, 4);
% I! w2 T. g1 f! Y% f+ ^( H2 m) ?: ^0 K ::memcpy(&aPacket[5], &ItemID, 4);: B3 g0 ^0 L" O2 Y9 T7 p/ J
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);: T1 }" I* q- K" y; @% m; Y- y: v
D2Net::D2SendToServer(17, 0, aPacket);
5 q! V& ^# q4 w% J5 M+ E! B. W G return TRUE;: z _' L: @3 i6 I8 F: v/ o: }! e
}
* `: v; G5 v5 q q# k, c0 s1 U- `4 P9 w8 D
static BOOL SellItem(DWORD ItemID, DWORD npcid)
% J7 h1 j0 P8 b* y& E6 M! v h { M( d! w- v' x* m* ?
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
9 i; O0 [" L3 i& g BYTE aPacket[17] = { 0 };
8 Y" j7 w3 x" Q4 _; h3 O* ^( f+ f aPacket[0] = 0x33;7 Z E' W2 Y; z8 p- p% `/ g
::memcpy(&aPacket[1], &npcid, 4);
% {3 R' ~: a4 }7 U* x, v4 ` ::memcpy(&aPacket[5], &ItemID, 4);
+ u7 a( r7 ] O0 U+ I! O; A //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);; t. U+ ^) y1 k( |; {! W- _2 j8 e
D2Net::D2SendToServer(17, 0, aPacket);; W+ x8 q' f6 t& i% H
return TRUE;' H- D' s ]- N) f) I& @
}% q( d3 a! E$ Z5 h7 h
; r( `/ f( N9 V+ c
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);/ n4 a! E/ w" U2 P
4 ^: R) P5 j2 E# Y/ i/ U static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
' S3 O+ \0 P8 \3 o* R, {& Y; g g' @$ C
static BOOL OpenCube()
: T- Y. k2 i/ p( { } {
) a9 s1 Y3 t; I& u/ U6 x if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
0 h. Y, k% _2 i$ v! k/ Y% k1 r( L$ Q% u" m0 A( a
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);( }: I& n! k1 S) B0 N4 @
if (!pCube)% q& I; a- ^' |
{
7 K, e3 {. B6 ]" G9 [! \ pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
* m' s! }5 H. x: K if (!pCube)
: L# \- `/ v, F, h4 }& i return FALSE;0 V3 x2 A: @" q
}$ b& M$ |4 A6 [7 B! J! @
PKTItemTellW8(PacketItemMaxTick);& C" o' a. b% F v
9 J( ]" ]" l, }! u" W D2CoordStrc mypst = { NULL };
5 P _. T! t) i D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
6 b8 k+ G. A% W) ?5 f t0 P
( l' g/ _: C- W4 B( g BYTE aPacket[13] = { 0x20,0 };% B. S3 Z8 p* l2 C6 {
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
9 [3 h5 L' i4 y ::memcpy(aPacket + 5, &(mypst.nX), 4);
# o2 K9 t# _. g* X ::memcpy(aPacket + 9, &(mypst.nY), 4);! V2 u- L( B& t6 w0 v8 ^6 J x# O, q
D2Net::D2SendToServer(13, 0, aPacket);
# C. r. |. Z3 C y) E" e return TRUE;3 ^6 K+ E0 d/ L. |* ~
}
5 U9 B# @ H0 ?1 o* T" P
9 C: e/ L T. n* E static BOOL ToInvxy(DWORD x, DWORD y)! n v9 `6 Q2 a$ J
{7 ]! E2 g0 v6 J8 F" t
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);6 J& c% \6 T; U5 H6 w/ j
, ]/ j h' m: C+ B& W1 d if (phand == NULL); P9 x3 L9 q" T+ J' m
return FALSE;
% h3 Z% G; r, T4 E$ y- b
) Q \6 F, s$ }' ^. e% |% n PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
q6 A; z2 J1 t: s) _6 ~6 k- D* Z& N, A
BYTE aPacket[17] = { 0x18,0 };
/ a8 i0 A$ g3 F u ::memcpy(aPacket + 1, &phand->nItemNum, 4);
0 C/ u2 V5 U: j0 }8 B4 ~ [ ::memcpy(aPacket + 5, &x, 4);
0 S- j5 c8 ]8 H3 M5 Y8 E" ] ::memcpy(aPacket + 9, &y, 4);
' W. k3 I1 [: J+ m+ \! g" X6 o D2Net::D2SendToServer(17, 0, aPacket);
6 _! D% [2 z- b/ Y$ x" @) w& i) ^ return TRUE;1 J5 ]3 X+ ?. E: l7 W0 V% ?$ I
}5 }& {9 Z2 \2 B3 o
2 ?; d& U8 y$ D1 B7 o1 J6 C3 k static BOOL ToInvRandom(BOOL bBagFix = FALSE)
' v+ ~1 G y& P {
7 g0 k( y/ s( y& S( J! R" ?% v/ _ UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);$ ]3 j2 ~2 J8 q3 ?
if (!phand)
+ F* y D: q& M return FALSE;
/ _. q+ S2 ~" ?& C; s3 K. w int desx = 0;
. v; q8 ^; U) O' r. x# M9 { int desy = 0;
* a/ i* s$ l4 s" `7 ?# q# t if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))8 [+ W1 h f1 R
{
5 R0 e) |1 M- R3 f$ c, V ToInvxy(desx, desy);( s4 J% G2 Y4 u+ F m1 t
return TRUE;
7 E' l6 G" r' t- w0 e; y. a }
% I1 Q$ [. X9 a, B N return FALSE; b8 @ a0 H( f6 w/ O3 y
}7 t4 l1 a0 s8 E1 i3 @/ _
9 n, v1 t! w- {0 r: z* O
static BOOL ToCube()3 ]% D; F( g4 j/ \& K
{* A) e J% g1 Z
if (!(*D2Client::ptPlayerClient))return FALSE;; H5 N8 } A7 I5 c$ V
. D7 {+ Z9 K& h- H% a# G* J0 g* t UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
4 ?& S9 N0 T1 P, v+ y if (!phand)return FALSE;) S+ d+ S8 r/ L7 `9 K
: }, f: J4 D3 A: e
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块' ~* V$ }& G W
if (!pCube)7 O/ Z# P: P# Y$ ]# ` U
{
2 `4 q& t( }! G- g" h( Y pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块: O, W4 u h5 D7 Z
if (!pCube || !pCube->nItemNum)
C- R0 }7 v/ U \& ^% D return FALSE;
: X! c0 @# V* @9 Z0 e( G. I/ t3 @ }
- c4 b; t% D! N) W5 e- l9 w4 M# P3 m. ~% \3 q6 l
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))$ ?# R/ }/ [2 x0 ?$ _2 J4 Y# Q9 q
return FALSE;; {1 v7 A* p% K! ]# y7 }
! S; I1 K7 b4 ^* T: Y
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
& Y3 d" M5 B" V9 F+ v2 v
9 [2 U* |) f$ J- K8 T3 E BYTE aPacket[9] = { 0x2A,0 };. E' N% J7 Q* u7 A, Q
::memcpy(aPacket + 1, &phand->nItemNum, 4);+ T! K, v/ @: }7 q& `5 i- j
::memcpy(aPacket + 5, &pCube->nItemNum, 4);6 \1 |* K& h( L
D2Net::D2SendToServer(9, 0, aPacket);
2 x6 T Z' i) E7 t% J/ q' ~# B/ v5 T+ { return TRUE;7 z* U" k' X7 _! G
8 `' ~ x1 U9 r0 u" j }8 Y. e. D1 z- p2 ] g
* d' s4 Y+ J, o- w0 }
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);8 M6 W ?& Y0 Z% A) a
& M- T# q2 d1 b2 b( x: c, J static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
9 n' ~8 V7 p& o1 b {/ c6 }/ y: J3 V3 w& z5 Y
D2CoordStrc mypst = { NULL };; d. K1 X+ C+ M, c* h
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);& @: _2 ^3 q9 ]5 L
& K, E$ B/ s" q- b# B I! `
if (!mypst.nX)return FALSE;
" K0 X# x! @5 S! \
6 V# ~* l {6 V9 j- I* ` PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
' Z' F7 |+ A R& @( B; {% J% `$ _4 a7 M& c _
BYTE aPacket[13] = { 0x20,0 };" S, i V- ^/ B/ I0 y# ~2 T
::memcpy(aPacket + 1, &dwItemID, 4);
: b4 s- E& W Y# Q2 p( B; l1 U ::memcpy(aPacket + 5, &mypst.nX, 4);0 P P' }6 ^ |0 b& S- r, L
::memcpy(aPacket + 9, &mypst.nY, 4);
9 z) K3 Q0 A4 a5 g. l0 P //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);9 n1 r1 ?8 X& H$ K! `
D2Net::D2SendToServer(13, 0, aPacket);! \5 [( W9 E# H2 T9 K
return TRUE;( d, U/ @; X4 R8 C
}5 y$ f7 j4 g7 ]2 H1 O% i4 e
. J$ a; Z/ e" S* y/ f+ \ static BOOL DropCursorItemToGround()7 v- J0 f6 R0 M- C9 n
{* z9 o) B5 w( I
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);. o# |9 n& [& q V+ M# W7 ?
if (!phand)- m/ o8 w4 `% r- ~) j' y( n# y/ C' T4 O) T
return FALSE;
+ c% K- W/ a; q8 @# S
3 g( c# e2 J/ x+ Y" X X" M PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);# n% @0 [" D( R/ ]- y+ `* N
2 [8 W$ _; C& Y" T6 i3 |4 N
BYTE aPacket[5] = { 0x17 };
0 @( o2 s0 ~% m7 [7 c ::memcpy(aPacket + 1, &phand->nItemNum, 4);
" }2 h: S- x+ {* _ D2Net::D2SendToServer(5, 0, aPacket);' q1 V$ m! `9 M! J6 A
return TRUE;
( k( t1 E; O9 F4 n) n1 m+ n* ?3 F
/ w9 }5 {! ^- J6 ~# q }: m" ?5 m# N' `% m
7 i. Q2 C+ A2 u g: H0 Q7 X static BOOL PickStorageItemToCursor(DWORD dwItemID)9 R& s9 ^3 m" l9 Q
{
. o6 W* u# o0 O$ @% U PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
- Q& U* |5 _! o5 B- X" t/ |( X" V, G: R W- S, f; |, L0 K7 ~
BYTE aPacket[5] = { 0 };/ k5 P9 Z' a- N# D: ^
aPacket[0] = 0x19;6 E+ ~/ H+ o/ b7 N( ?
::memcpy(aPacket + 1, &dwItemID, 4);
0 c6 d& H6 C$ a$ a4 K7 K //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
9 I4 v- l+ y# U! x4 ~- {% n* v# i D2Net::D2SendToServer(5, 0, aPacket);" e8 K* F0 w" p' G4 O ?. Q
return TRUE;" O/ y3 {# r9 a0 _! B6 y4 ~& o
}
" B; g- u/ j! M1 {! ]( Z" Z2 `- U: v' D% ]; l& f
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
# @/ N: ?) h9 n9 a- i" C {
% N! w; b0 W3 n$ [ PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
; a/ [) L* N+ } BYTE aPacket[17] = { 0x1f,0 };+ Q# \7 x7 X0 h
::memcpy(aPacket + 1, &ItemID1, 4);
7 t+ s5 o/ A2 X ::memcpy(aPacket + 5, &ItemID2, 4);
$ h, U1 Y9 J. r1 e+ j5 Y //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
, k, l" N& z% L2 p5 D, ~" H# L; X D2Net::D2SendToServer(17, 0, aPacket);
/ C8 b6 q5 l N% @3 ~+ s; ]7 h+ I3 x return TRUE;
8 t# B& J- s/ \9 h5 D* ~ }
U) R4 m) B* D% C4 n2 y
# a- D$ N, g2 c( o static BOOL Transmute()
$ Q& V7 @9 n$ U/ X {8 S, n; F" D/ y9 }( o' Q/ j
if (!(*D2Client::ptPlayerClient))return FALSE;
& {6 S( ?( R( X# ]/ F
- D2 r: ^ v2 g) K if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))! ]) R/ j* B+ L3 E# H3 P: y1 ~2 j
return FALSE;5 W# Q8 g: T& {4 B! H* D
; }! K8 L$ A+ y0 k: j- V8 O1 g PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);9 d2 r0 E. m( B; X5 V
BYTE aPacket[7] = { 0 };
! S' h2 T3 O- J3 I" `* r aPacket[0] = 0x4f;4 x+ F/ g/ ]8 X$ ?/ s+ p- X
aPacket[1] = 0x18;
+ i' J' ?4 y& T D2Net::D2SendToServer(7, 0, aPacket);
/ p2 k, p y; \# Z; o return TRUE;
1 g2 ], V5 x; }0 j0 W( z }
% U/ R7 ~* }2 J3 B6 a};5 [1 y6 E8 ~- {( n7 b+ K0 F
8 P4 P% N+ n8 p9 L) ?" H5 ? |
|