|
|
转载8 s1 ~3 f, y, ^3 G: ~ S! h$ |! [
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:' n' [- @4 ?; x% b) T3 u' y
D2Client:
: j) i$ s3 t! F0 T. G/ P6FB20AE1为拦截输入框(用于获得命令)
1 B @# G; i5 c8 `4 y6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
( k, g1 y0 U$ p6 v( b2 u/ G6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发4 }: i: S2 k5 P" X' K
6FAF4230为hackmap的loop点 我用的hackmap导出位置 H0 x6 e" l# E. e9 J6 {
6 v" e6 l. M! R
7 G8 P8 S5 p- Z. \发包函数:& C$ B ?" G5 z& J+ z% F8 l
class D2PKT_ITEM
- S& n# t4 h* m" u z# U, |& r{
# f5 E& c ~6 C* r#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
" U* g7 M) D$ `; C4 S#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
; k) `5 O6 [+ ^* k5 `5 M#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
' p# A2 j6 o- \3 J5 \#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上+ r0 k( h% V3 p+ U; R
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
( ~- V# p- m {, [' M#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
. U2 \$ k+ V" ?4 ^) Q; P) _8 _#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏9 J' j2 g( y' A
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上- X" q3 Y# ~7 }2 L8 L/ h
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -' O6 N- Y% W& B; u- n' }
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店& d3 D/ c6 p V; K& j: |2 E/ Z
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV2 j( [- {1 c" q e- I0 o
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 / k2 U& A- U2 s
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
0 J/ g6 Q' s% {, j. {3 U8 x o#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上8 j! y% K2 T9 Z0 S0 ]! C
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
+ V( g) ]) j; G4 w# J* P- X#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上( S( R3 n2 P( z3 n/ A7 w5 f
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -* ~$ T5 @6 i9 ?2 k7 I& \
3 k# e4 \. g/ \" p# o b1 \#define PacketItemMaxTick 150
; |( I: o; a l" d' c/ Z& R#define PacketItemPickUpTick 20; f. d( u' B7 C6 @6 a: g
9 ?) h$ L! V5 ]4 }8 [9 Pprivate:
7 k& Z& c* {) g+ b* ? static DWORD _PKTItemTick;
# W6 d2 D* |5 n2 m static DWORD _PKTItemAction;0 D! O. S1 y; R+ ^$ r
static DWORD _PKTItemID;
" x) F- [- p. L7 g8 f1 s static BYTE _PKTPKTType;
2 t5 c& f" x { qpublic:8 H# U4 B% B4 t4 x7 P
static DWORD PKTItemGetTick() { return _PKTItemTick; }
. I4 T; ]. F3 u( O
" H, F4 X$ G8 C' H static void PKTItemRelease() 6 C7 [/ v% V% b9 x1 |+ r2 n. K
{
% Q4 a- |! H p _PKTItemTick = 0;
" C7 b! x8 W( j+ d _PKTItemAction = 0;$ G! q, R1 E: c/ B$ G* {6 ]" y
_PKTItemID = 0;( Q: I% D- r7 i: z7 c; c0 G
_PKTPKTType = 0;# ^4 G0 ]8 G. s
}
' q+ V% I$ d- X0 i7 }" Q. F% {5 F I0 C, `
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) " X$ B) k" ~9 r$ ~7 u
{% `5 V8 r L# M! g- G
_PKTPKTType = aPacket0;+ w: D# ?0 P2 A" z
_PKTItemTick = tick;% b9 a2 o: k5 v1 o% I; a- a
_PKTItemAction = ItemAction;
z% f' S. y& u$ c, V _PKTItemID = dwItemID;4 H1 {5 M) b# _! W3 _
}
! M/ ~# p! v( {( g
/ p* y8 I& g% {9 `. W+ b static void PKTItemTellW8(DWORD tick)+ q/ `3 @( H. q6 S
{! {& z; w/ c/ h4 T* H4 d
_PKTItemTick = tick;7 M- ]" u% T0 q& s; \0 b9 W
}9 G3 ?7 H; b" `2 s' g# l
3 X$ y# y/ z7 U* t8 p3 e static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
8 S/ g. p0 G. c: ^ {7 U/ |9 D; L/ s: b* j& j. b* [
if (aLength >= 8)
X* H( r8 c& A4 ]8 s+ ]7 u0 a {/ n3 i* f/ [* L& D! ]
DWORD dwItemId = 0;# j' W' E* Q. L4 y
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));7 {3 {% V- C3 O# Z
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
; Z8 i3 k( k( F8 A( l. u && _PKTItemAction == ITEM_ACTION_TO_STORAGE
; C+ s8 U4 l+ x* H# |" U! E && _PKTPKTType == PACKET_NEWITEM& w7 X# H- I5 @0 P% C- v) R
)
0 b1 k3 f3 W" p9 M" K- h; T& ?0 e {
% O. `1 k' Z: T6 t1 y6 t9 a if (_PKTItemID == 0 && _PKTItemTick)
2 L* I! ^& F3 |8 N {
y7 a5 v( T& U PKTItemRelease();
, t- k. w1 o5 u$ N }
7 {* H% j( {1 F( d9 p6 d9 d else if(_PKTItemID== dwItemId&& _PKTItemTick)
) q, \9 d% h3 U! |- }* T7 f1 \( r; o {) q. t& ]# O2 d& k4 q8 E0 ^ E; k
PKTItemRelease();
: v) O6 U* ]5 f& i1 x/ @ }
4 H! c+ z% r% v5 i3 W } d+ N* Z# i; h/ _, C( n
" R( Z6 i1 l% r# f }2 C6 V4 r* d- l3 F- S
}# V4 D5 [# Q5 ~9 S7 l% D( r
3 Z* Q' s# Y& n. D" T5 S
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
" f+ }: r1 C2 G: R% K7 j {: Z3 z& J, S/ Z6 Y1 T& H, n
if (aLength >= 8)( b0 r' D8 u S) g! ~
{
) x. o" {- v$ I0 \- R, ] DWORD dwItemId = 0;
6 h; M& R) Q& @ memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));, L+ ?& [- n: k& V% U9 t2 ~
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
& F- z' @, O8 \5 V && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
: j8 t0 s3 F2 \# v' r && _PKTPKTType == PACKET_ITEMACTION
. z. K, f6 H x% a) y* Q% x )
1 s3 X2 x' x+ d! _; V+ ~( m {
0 c; n1 z, N' b, N3 z5 v if (dwItemId == 0 && _PKTItemTick)
{1 {) c8 X; k4 V {
5 Z& P! m1 T, X! W% B: u PKTItemRelease();
, x5 f/ ^! l9 y) [+ L }, W% O& @; P% x4 @% x5 c1 W
else if (dwItemId == _PKTItemID && _PKTItemTick)' q( N ^/ Q9 ^, } H d
{
9 W; M% X/ l0 J5 x" m1 Z( r PKTItemRelease();" X, C5 r- |% @" N
}
$ ], B4 T: P/ B5 Q, [ }
4 t1 s% U5 ~- F! T- e5 f
D z# J1 g& l* S }
3 i5 m0 P" Z: W2 s8 O" x/ f; U }( O; Z( z1 x- r% Z+ A
: p8 T% H% q5 Y- S
static void PKTItemGameLoop()
2 A# h; [1 Z1 w4 H {$ h5 ]1 h. \+ L) y3 A e
if (_PKTItemTick > 0)
! ?+ n k+ y) E6 b _PKTItemTick--;
8 e5 W9 u, O1 U* ^8 S. x else if (_PKTItemTick == 0)
; d! |8 [/ ~% S9 }* O/ | PKTItemRelease();
" S* C z, m/ l6 B- H+ H3 @ }
! G0 u2 m# Z4 Q4 c8 k+ ?
; ?8 \1 c4 y4 K static BOOL PKTItemCando() ! S' M) e5 d# ?- _0 _
{. t0 c* h% Z( m# K2 l2 t. o
if (_PKTItemTick == 0)return TRUE;) [' c2 {6 K3 e& ~
return FALSE;
$ O- T* p1 Z1 {/ _$ B }
" b) v1 `( S2 u( b: Y; {( P; n" R0 L3 ?, g
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
8 c% l( ]/ a/ U) \# y1 k* L {
! C( W& V: p u; t7 W PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
( I; c( ~: X# N1 H& }9 y BYTE aPacket[17] = { 0 };
- M& d2 O$ M. S, L" ? aPacket[0] = 0x32;# o4 p2 c8 J+ K4 k6 h
::memcpy(&aPacket[1], &npcid, 4);
4 o N: P+ N% k# b* h ::memcpy(&aPacket[5], &ItemID, 4);5 d: V0 O* [" P9 d! v
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
. f' }% ]( n* b& k" W. C& F! U D2Net::D2SendToServer(17, 0, aPacket);4 p8 W$ D% ?2 \) a: L( i/ n5 J5 V* E, w
return TRUE;) u2 e- J6 Y+ k4 G1 E
}
# [, J) d2 o2 I* c1 |; R0 B/ c0 g0 r) Z9 h3 @" R
static BOOL SellItem(DWORD ItemID, DWORD npcid)/ R) e+ v6 ?# B- {/ ^9 I/ b& W
{7 M% E$ o) c+ S3 @6 M
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
3 u6 J1 v+ B m, A BYTE aPacket[17] = { 0 };
& F* {; T6 q' Q: Y. | aPacket[0] = 0x33;
0 u1 \% h' q9 V7 A ::memcpy(&aPacket[1], &npcid, 4);
1 u4 V' F/ B: n4 h* x6 o ::memcpy(&aPacket[5], &ItemID, 4);$ N1 h$ b' a: x& T6 |
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
* S7 d2 q, ~7 _% f5 @ D2Net::D2SendToServer(17, 0, aPacket);
$ | {' u. {) E6 f% @3 Z return TRUE;
1 i( a' b3 R! d5 X a }: k- W2 Y4 `( H
& b8 a$ o. d+ S1 o
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);" y% E3 j6 b9 U. @; x5 E; F
3 w5 z+ p' a3 {4 w- }' R/ x/ v static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
2 w F3 M5 r% _, D; s, k, a4 D) g; w4 V* l. K+ [$ H
static BOOL OpenCube()9 K, G5 `# Y" O: W+ d; D, Q/ A9 \
{
: a9 y$ k. l! G$ N5 c$ G if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
. ?) D, L" P8 O) B0 T7 M. z
2 ]- Y1 W$ C o) d5 d3 h* w! o, P UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
0 d+ z5 A" w/ ~+ p$ x if (!pCube)- j$ C# i& y" U' I1 H
{
5 V# h( z) e% J* \6 {. v pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
/ R! E7 t0 P R _+ U* T( D0 Q p if (!pCube)
# Z" `. P1 K3 q) t. m; i6 p, h return FALSE;7 t( U0 B! T p' K9 S" H. z6 Y0 p/ C
}
2 P0 x5 B' V6 j, W4 n2 A PKTItemTellW8(PacketItemMaxTick);
+ A6 F' N2 k( A. G5 ?
: [: p9 Q+ a3 [* L D2CoordStrc mypst = { NULL };
: n: X5 ?" D m7 i D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);3 B9 _" }( _/ B- F" V3 o1 x5 j5 l
1 t3 I, b* s7 ]7 V+ b BYTE aPacket[13] = { 0x20,0 };; D) h8 `+ Y- a
::memcpy(aPacket + 1, &pCube->nItemNum, 4);, f. @1 [ G5 Z
::memcpy(aPacket + 5, &(mypst.nX), 4);# U& }/ J2 H# B: V; B) o
::memcpy(aPacket + 9, &(mypst.nY), 4);
- }" i4 i4 O$ t: c D2Net::D2SendToServer(13, 0, aPacket);
2 v0 d U7 {1 H return TRUE;% F1 H8 Y5 W( G- j% D; H
}0 l; Y; x$ h. e* B. |; e
) m e6 t. f) h9 N& e! w static BOOL ToInvxy(DWORD x, DWORD y)
* h6 Z7 f& n T! F' n {' j% J+ s( ~& p1 Q
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);! } j% Z- D2 C/ ?
5 \* M I5 U+ `, r, h3 X1 d) M if (phand == NULL)3 k# C. s4 q8 ?2 f) x
return FALSE;
& h) L, [ p- w6 e1 q+ P) C: g! ^( T: V7 ?
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick); I. n! J4 V3 J4 i0 K$ t4 d7 [. |' H. ]
( ?, \+ A' n, Q$ r$ B% B BYTE aPacket[17] = { 0x18,0 };1 }6 ~0 y' E" w
::memcpy(aPacket + 1, &phand->nItemNum, 4);
4 e$ t: Q! r N- U+ z2 a; R4 ? ::memcpy(aPacket + 5, &x, 4);& r- u$ N; B9 P
::memcpy(aPacket + 9, &y, 4);( O! A+ R1 A& [- B p
D2Net::D2SendToServer(17, 0, aPacket);2 h6 M7 ~1 n! Q8 A. v
return TRUE;0 q- W9 D% U% g. ?) D+ j& J# Q
}
7 o! q" @ Y! B2 Z$ s- `( O
' C) U+ T* O, v& O; t) X static BOOL ToInvRandom(BOOL bBagFix = FALSE) % L* i9 C8 C( a+ |5 g, O
{+ G6 u: F2 G* |- n, N& A. u' X- C
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
; y' m2 e4 e Q( D* Z$ g7 W if (!phand)
" o% ?3 E5 O" i5 @8 y8 Y return FALSE;
5 B. B3 w) ~: s. f int desx = 0;: ]' r% Y% E) B$ ~& [) U
int desy = 0;
* ~5 Q$ J) e1 @ if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))& ]( k3 q9 E+ x# C
{
6 I- B! Q7 r4 x& w ToInvxy(desx, desy);
, c5 k2 |0 D, T# \ return TRUE;
. ]: j8 c2 J0 b& w }! q) q3 o/ V, H. D9 Y* b5 s) y6 X" h
return FALSE;
1 l! B/ [2 A2 {+ b }' G3 p6 R# H2 O5 ^/ z( P
/ ?% M- z' F" C! O" U
static BOOL ToCube()
0 }7 _& z: h5 t% R- l! O6 L1 | {7 h. Q; i; R9 ^% H
if (!(*D2Client::ptPlayerClient))return FALSE;
8 e0 Z* J3 r# Q, n3 a% t# T; R! A2 Z* @0 Z% G
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);" a9 D. @" q& b5 n4 I' C1 m
if (!phand)return FALSE;
6 }) T) w6 v( v$ d0 `0 m* s/ J$ q0 ~* {0 G/ Y2 y
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
' r' D9 P3 A7 T. f if (!pCube)
. X# v* E6 |' J" L) G6 K: p" _ {
$ {/ d R/ T" J, q pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
# F2 ]+ f5 N$ x if (!pCube || !pCube->nItemNum)
R) C% j3 G/ O, r7 g return FALSE; }2 \( h: ]4 g G$ x
}
, B& J O- N# ~
! W4 c2 Q! I* }6 D if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
3 P; V" D t' ]# t. G0 u return FALSE;
1 o. R+ f- k$ Q# D
! @& u4 J: p Q" r- O6 N5 R9 h1 M, Q9 f3 Y PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);6 M+ l4 _1 Q4 O$ ?) X5 Y
/ q" S. ~: A& f. ?& {) t& \ BYTE aPacket[9] = { 0x2A,0 };% W4 V3 X1 R. `) H% p
::memcpy(aPacket + 1, &phand->nItemNum, 4);
- ]# ^5 A3 ]0 `) o5 h9 V ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
4 s/ b! T0 I S$ U4 y- L D2Net::D2SendToServer(9, 0, aPacket);5 [/ W% s1 k% J& R
return TRUE;
+ H3 {1 B& H1 U2 q5 {- A7 g v Z0 K5 {. H, ^# j6 c
}, P$ a" B0 f' I3 z9 t/ I$ A1 x
- K$ u" @; _* s" o$ i3 Y" V
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
) w$ j: [# w4 T+ @' ]' R3 F
- \, c% A9 H+ i: A. n static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
9 t# d( B8 {; k" {% o1 K; {" s {
+ C5 Z5 u* D0 S/ k5 G! V D2CoordStrc mypst = { NULL };
/ C* o- d' V# x# [* \ D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);+ [$ ~* `1 A, q+ `) ~! G
# s5 f$ Z3 q9 k8 Q" S if (!mypst.nX)return FALSE;5 @2 A0 o- [# |
' L, R9 A5 J1 S* k PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
6 c) F6 o8 u1 {* d/ U0 ]
7 h q1 ?' V8 Y BYTE aPacket[13] = { 0x20,0 };' K+ V3 I: B1 t9 o, e
::memcpy(aPacket + 1, &dwItemID, 4);6 Z+ y [ p; Z5 d% h
::memcpy(aPacket + 5, &mypst.nX, 4);8 R3 R3 g; T/ M! W9 M! \
::memcpy(aPacket + 9, &mypst.nY, 4);
0 }6 F( V( u4 U' o6 w- W6 q //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
% M( O; Q0 v0 e6 T0 @, V D2Net::D2SendToServer(13, 0, aPacket);
+ @# D# e$ b ?* |+ B+ } return TRUE;
( k5 C; o$ H$ V5 x }( |& f+ R4 f2 P# n% C& B
, ?( b' r, b% U# m0 y, W* U
static BOOL DropCursorItemToGround()
9 m. a& j" H: H- N3 q {
6 p5 c6 ?: p5 v5 o) C UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
; q8 R4 F, i! u* Q1 D: h, O5 ]$ C+ z if (!phand)
. P# B; ^/ d j* [) X) i( Q2 ? return FALSE;
. G7 w- ]' r* C& k7 W. N+ @
9 M' M+ d% m5 V PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);* b& s' V. X8 O( r6 S; @
& r! J3 a: [2 r- g7 L. ~. s7 {5 M& Z
BYTE aPacket[5] = { 0x17 };+ r) L$ A4 b) r& |# }
::memcpy(aPacket + 1, &phand->nItemNum, 4);+ N" h8 E& |9 L) Q, y
D2Net::D2SendToServer(5, 0, aPacket);# z7 n7 \( c/ t8 K
return TRUE;4 J* |# R0 m9 E5 r$ a7 g, e
6 U- o5 F: M/ S. S9 k- v! W6 ?/ h }
4 h& ^/ @, h! ~" `- k: G0 @9 l5 r. G. H0 t) f8 ^+ y
static BOOL PickStorageItemToCursor(DWORD dwItemID)* _; r3 \! w$ `
{$ X* g6 b( G# j/ `0 G9 J
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);. x: b: x+ w5 n2 r- F6 ?0 C
; x5 C$ _+ D# ^6 V7 t
BYTE aPacket[5] = { 0 };
/ O& {) i. L4 l" N5 R- @& F) X aPacket[0] = 0x19;
9 `# D$ F6 U0 Z ::memcpy(aPacket + 1, &dwItemID, 4);: c% L o; D8 B! a% v
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
" @; `) P5 j! u6 A D2Net::D2SendToServer(5, 0, aPacket);
9 k. O% s7 |8 H; U* M$ \4 p return TRUE;
4 S1 F Y2 u7 ^( ~ V }
/ a% _$ A7 b" r4 ]4 d# W9 H* y# x# Y3 p+ C
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)* s) M% U, O% v) m
{
6 w: {+ s# F1 a G PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);/ R0 ~0 U1 b) J6 t1 m" T% _4 @1 p7 Y7 A
BYTE aPacket[17] = { 0x1f,0 };
: s1 i6 R4 L+ S+ E; l& Z ::memcpy(aPacket + 1, &ItemID1, 4);6 r' c3 o' J# f7 g! `8 N/ ^1 n
::memcpy(aPacket + 5, &ItemID2, 4);, S: E: T4 v3 o o
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
1 j. y& r+ C5 m2 L9 Y4 q3 {: s9 ] D2Net::D2SendToServer(17, 0, aPacket);0 \+ Z3 W x- w& `% M; b$ @
return TRUE;5 s! R% k2 _: {4 Z4 Q2 I
}$ S6 w8 ?* g7 b" G! o; P
1 ~4 ~5 K4 N3 d# F2 r9 _* h
static BOOL Transmute()4 }! M4 {& @- K5 S* Q& y) Z
{, r D# G" l2 E1 F3 R* e- E
if (!(*D2Client::ptPlayerClient))return FALSE;
& R& `7 i' }% F% v: a# g% m3 F/ g) y Y9 o& w3 N2 r; u" g0 ]
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
0 U' N9 t0 R5 s5 c [' f& q1 A return FALSE;$ F$ A* F. D; ]: V
" }+ |4 r [; z; e* C PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
/ p( r4 w9 h0 c& e- o5 s2 c BYTE aPacket[7] = { 0 };
. k9 u" `; Q8 R" g# T aPacket[0] = 0x4f;4 Q( p4 x9 J: q" R V) t. z
aPacket[1] = 0x18;
3 ?' s7 E6 z8 G. N3 y8 o D2Net::D2SendToServer(7, 0, aPacket);
) D$ O8 }* b* d$ E& N return TRUE;
) f) i2 C! V) `0 }9 S* X9 a }
$ T8 n e+ c1 C};
4 K; v. Q P. z! J8 n6 A# }3 {0 X& I/ A' |8 x
|
|