|
|
转载! `3 Y" l9 o" O: G: e- m
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:3 \2 u2 ~$ q9 }% _& |! F) @
D2Client:5 s3 T. T- g! x3 n* ?- h; W6 j* j
6FB20AE1为拦截输入框(用于获得命令)
5 i3 e( `% t. i- ?: f3 n$ _6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发4 D# E! G7 k' ]; A. g( u- P0 H
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发( j7 R/ u' t% \1 Q F! H2 T
6FAF4230为hackmap的loop点 我用的hackmap导出位置7 p" x: ]: ?" W
; V Y2 M, [0 G2 w4 b, B2 q0 u0 b- p
发包函数:
- K( n5 `1 m$ E; ~ Vclass D2PKT_ITEM+ S, L1 H! @# V5 q8 Y* s$ Z9 c6 f
{9 S$ m! J& ?! n- Y0 `9 M
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上, `( }' Q s. g' q# U
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多. T! C* f8 b( |* i# y) y
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
( x) P L* D) j, E0 d+ X( Z#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上6 i- ]: c! l9 ^, E* E
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH$ h2 E* z8 k4 s% y' U4 p3 q+ h
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上! b; |9 [6 G' L' K, D
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏. V" t- s$ z" m9 I. O7 y1 q
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上8 u! j8 ?( l! e. P
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -/ `, m S5 @7 Z1 f- }
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
3 n$ h# X3 p2 D#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV% D6 f4 J2 @# s/ O; D3 B
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
# E7 j6 v! A( P+ Z#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
. {) S# M9 P) x J+ }: [) z" A#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
3 V( x3 h$ F! p#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
7 H# p: Z% F1 b5 I- A0 b/ {#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上. _% J7 T* W; v: Y
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
" G* g+ W' X' H( i/ t6 e+ S
; S2 E; B! j9 x6 ^2 }( s( Q#define PacketItemMaxTick 150/ I$ f% ~" ^4 ^& l- \ F! Y! \
#define PacketItemPickUpTick 20; q A, s) w% N$ @/ ?) L0 P
8 e+ N. E0 J% C4 }, u1 X {
private:% G' \7 g$ Q" F! K
static DWORD _PKTItemTick;$ @- R& e0 h7 n" ]5 Z6 B- T
static DWORD _PKTItemAction;2 H& L7 b+ d0 r7 h; L3 {
static DWORD _PKTItemID;
) N' o. I5 G0 g7 U! t% w static BYTE _PKTPKTType;
, g, H% {% O2 T. V' ]9 G% Mpublic:
# S9 m( P! f7 o$ K i static DWORD PKTItemGetTick() { return _PKTItemTick; }
! O# X7 u5 m0 K
6 O8 ]7 l! Q6 v7 T K, b* G5 g static void PKTItemRelease() , F, E( L( X* ~: i
{; k+ E! L$ y9 ?7 n! @( d8 U0 ~# L( ?
_PKTItemTick = 0;
c& Q1 v7 ~1 f" M _PKTItemAction = 0;
9 m# B N3 P8 X' J: S _PKTItemID = 0;
- h/ r9 r6 f; u9 D$ `# t _PKTPKTType = 0;
3 A/ C, T# S4 g1 ~ }- ?8 R1 x$ {4 m; [
8 E* Z+ J: M4 d5 S2 p5 w static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) 0 Z% A, K5 C! A0 z7 W! v
{
7 ^% s3 m' d5 S7 m3 M3 @ _PKTPKTType = aPacket0;
! [, g5 }/ O! k* }1 \5 X _PKTItemTick = tick;
0 ]# Q6 K4 a! ?* ?, e _PKTItemAction = ItemAction;
- x" c) V8 q' T _PKTItemID = dwItemID;
* O1 d9 u. [5 p; l8 t: ? }
' @- @6 I1 h7 M6 w8 {: `! S% e0 U
8 Q# @5 ~+ S; l0 h3 j1 W2 X6 o9 P- x static void PKTItemTellW8(DWORD tick)
3 P: q4 Z+ s5 w3 \8 y {$ ^5 }0 F; M: J# J9 e3 [
_PKTItemTick = tick;
4 L) X& ]# P2 H }: W& x& ^% _' Z! s2 A
4 z9 B' P3 J/ }( A& b+ y
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor+ U) P# U6 u" G1 S# z7 A
{
& R# ~. w8 K0 q+ r! n* V4 D if (aLength >= 8)
! q+ Q& v; ^7 r3 Y4 s, F/ G g {5 p- v0 l$ Z* O9 d6 D
DWORD dwItemId = 0;
( S# p0 q6 ~9 k! b3 g+ Y5 C9 b' x memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
* j* E) `9 ]$ {) C if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE, C7 d* C" P2 z8 {8 C- q
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE" n5 s% e9 o- K+ \& ~0 A
&& _PKTPKTType == PACKET_NEWITEM: S @9 X1 P9 i+ K7 W8 G+ Q
)- [# [% C, j/ z$ c& x- H
{
8 D# f0 ~9 N7 u3 r: n if (_PKTItemID == 0 && _PKTItemTick)( k8 B. O+ h+ d& }
{
$ M: Y6 Q; L! L/ T3 N PKTItemRelease();; M* a' D! }5 W6 I
}* Z0 t$ `& ^4 m6 x
else if(_PKTItemID== dwItemId&& _PKTItemTick)1 p" Q/ v x) D# }6 c: X* Y; J9 p
{) X( H( O; ~& e( ~9 G; h3 P8 n
PKTItemRelease();
+ Z5 @* L" ~( B3 l+ | }
; ^ @2 P6 u3 \8 h8 \+ k }. F! b2 T2 X3 d* f7 [
4 X$ C& l% |7 H5 | }: H6 H ]0 p/ q
}, P! k8 C/ `( G) Z5 Y2 b
1 [" }; u9 Q0 M. K$ J
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
5 E# U% {2 z' e' q9 v( G {
& B N' g% r0 Q/ P3 R8 S if (aLength >= 8)& g& _+ G5 R$ B2 W7 L5 U) u) t' ~
{' t" q4 E& R& d; \% T% a8 ?7 v
DWORD dwItemId = 0;; K# i; d" P( z) m" z
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
: r0 }2 F+ d R; M if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
& h, R: P7 C$ }- e1 R && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
2 ]' r" \: |4 Y) ?- S% g && _PKTPKTType == PACKET_ITEMACTION
. C; b% j9 z- B5 i6 @, }& |, ? )4 Y" o& _% |# g8 b
{1 |1 }0 J' Z3 [5 B6 U- X2 I6 f
if (dwItemId == 0 && _PKTItemTick)
0 P. w! ]$ V- _5 l {
: F0 I$ |# ~+ U4 t PKTItemRelease();
' X1 y; r+ F+ b5 R }
: g6 e# m; {+ X else if (dwItemId == _PKTItemID && _PKTItemTick)
* ~+ T& O7 F. \ {
1 p R1 b, G7 G# ?8 H' q2 _ PKTItemRelease();4 g4 C' P4 v* }$ U; H q; L. f
}, X( v* d: t" V6 ^4 K5 {
}
! o% m# _1 w- F6 V 6 d+ J4 ?3 P& {6 ~2 L. g0 B5 S5 F
}9 p, m! U% F* X) S7 I" \
}" Q6 t c# }5 z+ \/ ?. O9 M
- G* T# ?) ]$ f9 ]! L static void PKTItemGameLoop()
; l7 f0 w" ~* Z- S' D/ M& V7 v {
+ p. R8 \8 Y4 W" f1 \3 }0 D if (_PKTItemTick > 0)
" ]) g9 W3 W, N$ B) ~ _PKTItemTick--;
$ U1 c6 U8 \5 I7 Z8 o5 m" V5 I else if (_PKTItemTick == 0)
i% z& s/ o- v5 ?& N PKTItemRelease();
1 `& u: V9 Z. b+ k }! i- m8 a- k( _; `" O( i% z
4 L$ {. l: J! C1 i static BOOL PKTItemCando()
8 p0 @$ Z9 L0 P/ ? {5 {# r& [9 x# `/ N
if (_PKTItemTick == 0)return TRUE;
: I. O/ ?( {! p& x return FALSE;
: b, E( a- e) g% E }8 R0 U! `% O1 f, G
$ U' Z( x1 n# L* S) }
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
4 p$ T( V% o- h {
, `8 A8 `8 N+ M PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);; l8 _$ V- q& H
BYTE aPacket[17] = { 0 };9 T; I, c* W$ r1 }8 Z- w
aPacket[0] = 0x32;/ z _/ \+ F' r" [% M$ M+ E0 y
::memcpy(&aPacket[1], &npcid, 4);
`% L: K; g7 [9 j7 g ::memcpy(&aPacket[5], &ItemID, 4);) x- o' z' E! U6 b1 G: L
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);( C ?# c a. B; K
D2Net::D2SendToServer(17, 0, aPacket);; L2 A& d/ a7 r6 ]: B: c
return TRUE;
* r* K9 s7 Z2 t, U5 i3 R, r! B }
8 ~& }7 J4 v8 |2 }* E& z. z' r+ U5 A+ k; O
static BOOL SellItem(DWORD ItemID, DWORD npcid); F% u, U* }: Y
{
. f& N" O% o8 @/ U, r PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);2 ?8 B5 T- ^& ^7 F( z
BYTE aPacket[17] = { 0 };
3 O4 v; j/ |+ }; W aPacket[0] = 0x33;( Z0 h6 L L/ u4 d* Q
::memcpy(&aPacket[1], &npcid, 4);# v: y! G: W* h
::memcpy(&aPacket[5], &ItemID, 4); A' u! E1 A9 y5 [# x2 t( r' U
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);( m# n$ C) N0 u
D2Net::D2SendToServer(17, 0, aPacket);$ r0 _% U: [. l& n9 [
return TRUE;+ ], v+ ]4 X& a- s" e
}3 k, D0 W! @! j; C
* E$ i9 u, W+ k( y' B. b7 K- a! v
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);; h$ {, X& R! f' Y( l1 L
. w0 a4 |* C/ _# a, W static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);9 `+ J: `& n/ C& ?
! c2 y5 O3 m. U$ o* b) m; m" s static BOOL OpenCube()
I9 ^) [: p L$ ?4 K: C% C {8 ~+ y/ \1 s& ^7 V
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;( \0 R- {4 d6 v. @9 u! B) a7 n
M6 ?! @" j N6 m2 K- i/ |* y% ^6 R
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);6 N" h* c0 |0 @ [7 N
if (!pCube)
* x3 @3 V: ?; ^" ~* k6 d4 J0 j {+ R- @$ v2 c+ l! T# i5 D
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);1 X4 R$ \8 I$ U: h* a m y# f3 Z
if (!pCube)
$ y' ?4 A0 t Q- [. |4 \# G, M return FALSE;
3 P0 [. t# M/ R7 X1 f }6 O, d% F1 V4 A7 M# M; T+ h, t
PKTItemTellW8(PacketItemMaxTick);
- O3 d# T* n1 g0 ?7 [: Z/ x
8 V: ]) g/ ^$ c, G( b4 i. z- | D2CoordStrc mypst = { NULL };
2 p0 U: N1 b8 y D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
( v- M& `% t5 \+ H; y
$ R% Q9 r# o) ~, h+ W BYTE aPacket[13] = { 0x20,0 };! r9 H- _0 m' _7 C: J$ ?2 p3 p
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
& l% \4 H+ z' y, E ::memcpy(aPacket + 5, &(mypst.nX), 4);
; @+ j/ O; b: I, h# T( e/ ` ::memcpy(aPacket + 9, &(mypst.nY), 4);
0 P6 Z( q( Z1 p. E) k$ m D2Net::D2SendToServer(13, 0, aPacket);
. ?, ]( @. i% @! C" {* U$ o; k return TRUE;- H6 O4 `4 R3 N6 U" F
}
7 g% F8 L- n& k2 r% H& N2 V" V- p5 t/ o
& f( F6 P; D4 ]0 Z4 Z static BOOL ToInvxy(DWORD x, DWORD y)
V' q* Q- @, d/ u5 W" t {
1 {2 W. H/ t7 }; ? UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);6 J# I% w) r: o
3 ?0 {3 ?2 c5 b
if (phand == NULL)
+ ^' @7 Q5 D o: _: i return FALSE;8 E' N y: r& h/ Z& g8 w. N" h; b
+ c6 ?# ~, s) R' |# B: b [
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);9 b3 R/ x% R5 R1 r, s$ G$ T& T' \0 L5 {
- y# I- A" U+ g0 x8 {- v BYTE aPacket[17] = { 0x18,0 };( i r8 Z2 {! W" ?
::memcpy(aPacket + 1, &phand->nItemNum, 4);
+ J* G* u& ~* n) I ::memcpy(aPacket + 5, &x, 4);! A/ k2 Z" {: M6 \
::memcpy(aPacket + 9, &y, 4);
2 w8 J4 x. ~2 A4 K6 a% V D2Net::D2SendToServer(17, 0, aPacket);- r! I, E& B& J, u" C
return TRUE;" {1 t2 B! J \
}
1 G* O7 m5 E* X1 x9 [0 P- }! N2 C% h2 X
static BOOL ToInvRandom(BOOL bBagFix = FALSE)
5 V+ ] l) c( L- t. @: D {: Y) n o. @- K0 ]0 X
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);0 i4 A, W$ b0 b7 g
if (!phand): T5 q8 D/ F( i1 u3 A d% T( R
return FALSE;
! D* }0 x( [# u" ^* _ int desx = 0;- u$ c g6 e! m% o
int desy = 0;9 d- V; K: ]: W& M+ K/ J
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))+ [& Z9 J/ l" _6 Y0 ~/ e3 J
{ ]. x( L: r" m9 H
ToInvxy(desx, desy);
' t6 w, m. r0 s* j p% P) g9 q return TRUE;
/ k3 B+ m, ~1 {" v9 y }6 f* {* |, B* Q2 \" K6 ]) l
return FALSE;) r- v* y3 n. ]6 B
}7 I" J; k. G8 |' X8 q) x
, Q! a4 b" S5 ]0 y, f
static BOOL ToCube()
. w8 T: c/ H' ]- I, y# @ {
/ Z6 O S l. X/ @ D6 N if (!(*D2Client::ptPlayerClient))return FALSE;
) j5 b, O! D) S# x' H- s
3 D0 K$ S# M$ t" N UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);8 a: |& x- q) r7 B) H4 I. B/ A+ q
if (!phand)return FALSE;
9 i) e7 V7 A* W
* G+ Z% ?0 n7 }( D UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块: }! A4 } ~3 O; R3 l6 Q
if (!pCube)( [% {5 F! }# ]! Z) q' w
{4 s7 `& F3 T, h+ E( d
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块9 ?% v; c' R \, Q2 G7 E, X( q" s
if (!pCube || !pCube->nItemNum)
) T$ X7 P; x% D: w+ G$ v return FALSE;4 n8 `9 }4 D3 I7 T
}
4 j# _: E* @# ?8 r1 p$ t# k: E- ]7 }
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE)), W2 Y4 F' i8 \! a7 d, ]
return FALSE;
/ O; D3 B2 n, g3 a7 j- T6 j. d( ]+ A" i* [4 H3 M
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
7 D. ^/ K1 S% R! X' p/ b! U. e
& L& `/ ^* v( ] H, s BYTE aPacket[9] = { 0x2A,0 };
! r- y2 X% I" r" _ G, c' Y ::memcpy(aPacket + 1, &phand->nItemNum, 4);
- E: A {! P# Q% ^ s% J- Z ::memcpy(aPacket + 5, &pCube->nItemNum, 4);
- N7 |7 [7 g1 { F- [% O D2Net::D2SendToServer(9, 0, aPacket);% b+ ?" E- w4 J- S# y
return TRUE;
2 [0 j9 k" h& m' P" x" ?. Y1 T( d' o' ^
}
5 B. |( Y! i# N% {: E& ?1 @/ l- e9 E3 D2 y4 f4 Q# I- y% t+ G
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);2 I+ M8 \& m0 ]/ f
_5 T) b5 d1 ^! L. X# R' p$ t static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存7 R% U4 k w3 [9 p6 A+ I1 }7 P
{5 i: `, G+ C- ]
D2CoordStrc mypst = { NULL };- p! ~$ n# Z- t0 A2 [2 Q
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst); {5 m& n+ W5 @* e0 Z9 [: E
$ Q% U" p1 L( R* S( I8 G7 Y if (!mypst.nX)return FALSE;, c- s; V+ l& t; z- g0 Q
% Q& _. h1 w7 t# [ K
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
8 [4 L4 t" r) }! J! o# e
7 `" m4 p# O/ Z# ?2 T" u BYTE aPacket[13] = { 0x20,0 };
( p1 O: p" m( ] G4 z/ E0 g x) ? ::memcpy(aPacket + 1, &dwItemID, 4);9 b) I% s$ @7 `+ C O3 \ F- N$ o8 q
::memcpy(aPacket + 5, &mypst.nX, 4);7 f8 |$ a7 E9 N5 s r% |; H+ P( e
::memcpy(aPacket + 9, &mypst.nY, 4);
. h {& e# d2 N7 u //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
' ~, p' {; |2 b- ] D2Net::D2SendToServer(13, 0, aPacket);
* d5 B* g* F3 g return TRUE;
2 T V; R w2 y& F! f# U } c! X3 E X1 i% @7 V: Q
! a! ?' k8 N0 m, G
static BOOL DropCursorItemToGround()$ _( @" a+ j" m; _$ u6 Y) f
{% C2 U8 L& v. y7 E9 j, {+ t
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);+ _) z, Z7 | }! y, T; z" ?
if (!phand)
: ~% {% Y3 }4 @' v( z return FALSE;
: ^" D5 i' o2 ^& H' c/ p8 u r6 ]$ P
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
5 H) `$ b, ~( s$ K6 K }$ N
) I( T; }. B5 p0 } BYTE aPacket[5] = { 0x17 };
& B9 B/ z3 U5 W6 u' Q- C ::memcpy(aPacket + 1, &phand->nItemNum, 4);
# H% r& F6 @& P: j D2Net::D2SendToServer(5, 0, aPacket);
8 ~( A9 V+ y( ?! i" m, ] return TRUE;9 w }1 [3 o) D. r, M8 h B4 x
1 R$ K% {% n" c7 o/ T }
& O e! x2 V/ ?4 f6 g) _8 i
9 [5 o! z6 O4 M& F8 P3 Y. } static BOOL PickStorageItemToCursor(DWORD dwItemID)
1 J) p3 M: ` h8 r3 k7 L) S0 r) r {
8 |0 o' u! |+ c0 A& M6 d ] D, ` PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);" p; C" i; P& d5 x: j" u0 W* L
6 s( H0 U/ t3 O4 }" A
BYTE aPacket[5] = { 0 };" U+ l7 J4 d5 H. ] p+ `
aPacket[0] = 0x19;" g% }/ k7 ~4 [# h/ s; |7 P
::memcpy(aPacket + 1, &dwItemID, 4);
: d* B' w" R( q //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
. @3 i/ s% }) d3 i D2Net::D2SendToServer(5, 0, aPacket);
$ @: x. Q2 f7 @3 Y. F5 } return TRUE;6 z& B6 p+ u( F" w
}$ Q# `1 G) D2 K4 O9 c1 [
) G8 {+ `0 u6 I4 O: }
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
: w7 W F+ G5 C" `: l {
* I" N8 I2 e6 Y( G" | PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
, i! Y" p/ e' T$ t BYTE aPacket[17] = { 0x1f,0 };
. U" y) D# {* ~- V! C ::memcpy(aPacket + 1, &ItemID1, 4);
- P2 u- z( y3 X- F: Q+ z. h$ P" { ::memcpy(aPacket + 5, &ItemID2, 4);) s( y; w" e! X7 E0 j/ f1 p4 X
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
6 |1 t6 A. b" K+ s! y D2Net::D2SendToServer(17, 0, aPacket);' L5 n% d: b5 k+ v# I
return TRUE;
# X; y) t# S2 Q% A% Y }
h/ N1 Z) n( B- T
9 c3 O7 A6 `$ I5 l* T static BOOL Transmute()
5 M& h+ ?7 B' z( f$ M+ ]( T% c: [- E( z {
. F" S n( e; y5 w; W2 h if (!(*D2Client::ptPlayerClient))return FALSE;
! V! O; n* U0 E+ G6 B! ~4 [$ I2 E
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
. o3 y7 w4 U4 O; m* [; M& [ return FALSE;
5 M8 s( [+ {4 U5 V; M, v" R8 F8 V% f, ]3 ^. d7 s
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
- \; C+ y0 S w- Q BYTE aPacket[7] = { 0 };: R" }( |3 ]8 u; ^
aPacket[0] = 0x4f;
, h* {+ t& u; h aPacket[1] = 0x18;
) @4 r7 A. i9 k, H- J( o D2Net::D2SendToServer(7, 0, aPacket);
6 Z G9 c6 `$ ~8 Z return TRUE;. _. i& b) Z9 {8 C# ?* K
}
4 r' J6 }' K O};; k4 j2 f* @% N; ~
u# N4 ]& w3 s0 h5 a |
|