|
转载
, P% G( \# a. r" q4 h自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
# [. v0 [& x4 w1 l- j$ QD2Client:4 K+ _" n8 W* T" v9 H8 @% {$ @ F. |
6FB20AE1为拦截输入框(用于获得命令)
& O4 M1 v) ^. k9 H1 ~1 [6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
% w% c7 u" u# z0 G1 Z6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
: I8 U- ?; N+ z. T$ ~4 r( B) C6FAF4230为hackmap的loop点 我用的hackmap导出位置0 }! J' P8 |( Z% H
- T' u# a8 E7 i' c7 N( R5 v
( G4 J2 Z$ n6 `' a
发包函数:
4 K& n1 S S! N9 l+ M! Jclass D2PKT_ITEM
" a8 ?& |' C5 p+ u/ X6 ~{ X- a( p1 x& @* j6 c) X- ]
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
8 Z9 d# t: ~4 X* B#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多6 z3 l( D3 U" D7 R" Y
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上. X" k/ r- T5 r
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
# ^& i$ T1 y3 i$ n#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH3 S$ g7 b% G! `
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
; \! F, X* K, l* j' g& y, e#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏1 b# J# D. P$ Y. w7 A' s, B
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
5 D0 c- i0 {; _' l f8 u; T#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
9 F7 i0 v5 [1 |( V4 d$ a#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
# M: q3 L" f2 a% L+ {: I }#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV% |& F7 \; @7 X# s
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 8 T# t2 i& @$ E: {- `
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
; Q& w: C- E ]7 O0 V( u8 m#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上2 O, c/ _7 T. g# t6 D+ M% B- I3 U
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -3 X" x3 p f. X L4 O! R5 |
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上; I# f6 G/ D- l& u7 _) s1 t0 t
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
+ h' k* t# _2 R1 A2 l5 _
7 H: L. S3 d! i4 [ |. i: P( ^! F3 D#define PacketItemMaxTick 1509 g& o) ]- Z0 Q* M5 l! W8 p; x
#define PacketItemPickUpTick 20
/ M% b. Z3 r8 Y S1 k
1 p: l9 L8 q% L e' hprivate:
7 S6 `( Z0 L0 x# L5 O( I! c static DWORD _PKTItemTick;
, n; |2 H2 ]+ C' S/ T% @9 o/ c( A static DWORD _PKTItemAction;
# ]8 F) K4 n3 {# r. W& ?1 @+ X static DWORD _PKTItemID;
5 @. Y, Z- K/ w! D) | static BYTE _PKTPKTType;
7 x6 |+ O3 i7 i8 x7 e, kpublic:
1 |) I6 V9 h: k4 ~8 F- \2 L7 ? static DWORD PKTItemGetTick() { return _PKTItemTick; }3 d9 R3 k8 ~, E. P! Y
$ Z9 [! l, E& t1 m# W/ V3 j* h
static void PKTItemRelease() 8 ~" a" V$ U0 L- O
{
- Q, d9 [! m+ D7 d. c _PKTItemTick = 0;2 |2 d9 `+ c3 j- E2 h
_PKTItemAction = 0;0 Y, \! D* Q( s2 @" R( L
_PKTItemID = 0;
9 e5 c. h' Q1 d2 { _PKTPKTType = 0;( O5 ?1 a1 P: y2 M
}0 V0 x" B6 N& m; [: @
6 q p7 [' X. ]+ c static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) 2 B( o- p- j: \+ t! q W4 H
{ }4 w7 {3 P, v/ m$ j f) H, j
_PKTPKTType = aPacket0;8 X5 T6 P2 @% g/ }& ] _% ?
_PKTItemTick = tick;9 A& I& |* o5 p, k9 y
_PKTItemAction = ItemAction;
5 a" E2 C: b. R3 q' | _PKTItemID = dwItemID;- k0 V' e2 I4 `1 h
}
+ W* q- F; H9 \
' ?0 U7 D' m3 Q+ E. [6 D3 k static void PKTItemTellW8(DWORD tick)
% c' E2 z$ L5 t: y {5 b2 r# E+ {8 c! l+ O! u2 ?
_PKTItemTick = tick;. j0 R1 `+ O$ H: K z( Y/ E
}1 e5 u7 p! f' f; Q
+ }5 p3 J) R: S4 B
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor3 Y5 C+ `7 ?" `# }8 C$ o
{
' j! B0 D9 @( }( k* H! s if (aLength >= 8)
3 `8 H" J; V+ Y0 p0 P& A- {* D- e9 n. N {7 C7 W/ F+ q0 M% x
DWORD dwItemId = 0;/ s( ?. ?3 s. p( f- W
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));8 O# j% E' Q; y3 f& X
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
$ ]: h; S: O0 R && _PKTItemAction == ITEM_ACTION_TO_STORAGE; S! Z$ R: U# Y, L \ @( c
&& _PKTPKTType == PACKET_NEWITEM
7 U# h. u4 z" u) h! d )
/ k( i3 a% y" W, c, F {
5 A; [$ t- |. I, n5 ^ if (_PKTItemID == 0 && _PKTItemTick)5 ^/ o3 v' U# d0 A
{
7 K% n Q3 w$ X PKTItemRelease();& q9 ^ G X( b' k
}
/ _! r( u( \4 B! T else if(_PKTItemID== dwItemId&& _PKTItemTick): ~% i: e% a. D! l, ?4 G
{; Y/ d/ Y/ {2 C" h( d) c& _, x
PKTItemRelease();
3 B% X+ H! E+ k) P# d+ X% m }; x2 Q) n% \8 }9 c, x
}0 Y! M3 m/ _' X0 F3 d( K4 F; k
; J& z2 R4 }1 \6 W( F, R }9 H+ e! g6 T( L$ R* D+ `3 J* P
}
& s5 Q7 b6 G( U: S* X6 F' a, ^" |( [9 r% E2 O3 x4 V3 @
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored W4 \/ |3 h( f2 t) P
{
8 G! a% G& ?; C. w A if (aLength >= 8)
+ h# j; Z' k7 }5 R [1 r( A( H {
) F% g& h! @4 B0 H5 w9 A DWORD dwItemId = 0;6 o8 I3 ^& Z6 `0 W$ B) v# [0 `$ _
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
; J5 }) I; f, z/ v/ ` if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE6 D, w/ @7 l! c; O5 b; }
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
/ b: q4 T& V* j && _PKTPKTType == PACKET_ITEMACTION
# O0 {5 C3 |, ~) Z& X )/ @' ^- F7 l% q2 K
{. b* @- g6 Y9 E: E
if (dwItemId == 0 && _PKTItemTick)
) t7 p1 Q9 U. C {6 {$ Z; u6 h& E2 e4 M/ C
PKTItemRelease();
% A# K) t! B6 P* Y& H6 V/ j }
/ L& k5 J: q1 j9 w; {' Y9 e else if (dwItemId == _PKTItemID && _PKTItemTick)
b1 v9 r* D$ a# Y- |* L {2 u/ N) z# G- E7 q
PKTItemRelease();
( k& X! s% b. u+ D3 T# @ }
. A, A- X3 L" I: O1 L }8 [8 N5 }; S" @0 J
+ m. {+ h e- G
}
3 t# X* L: Q% A }+ v" L- d" X6 p* o0 A
4 N2 Z+ J9 ~0 n6 c& E- Z
static void PKTItemGameLoop()
# ?: s: J7 Z4 I {
6 k* Q- y' u. \" g if (_PKTItemTick > 0)
& x, f0 o2 c } _PKTItemTick--;9 Y. _8 p0 d2 o% N1 [+ p5 z" Q4 ]
else if (_PKTItemTick == 0)
2 D7 O1 ^" a' j" ~ PKTItemRelease(); X1 L: L8 U% }3 d9 B8 f
}
0 m! s& K2 d2 J& k& f0 u8 ^/ q( S P" I7 I5 W9 c0 B0 E
static BOOL PKTItemCando() 7 Q" U5 x) j4 U. Y; o" Y6 C+ E
{
- W$ A! E! D* C# C& t if (_PKTItemTick == 0)return TRUE;
$ ?1 J1 n0 T& C' B6 i2 P5 X return FALSE;/ t$ [9 V! e; n4 K/ \) j
}3 m( A9 a4 ~: h+ d' m; k8 ~5 R
. o- E5 s4 U) r# W+ M
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
$ E- h. _( |5 Z! F# X7 C {$ A3 p8 v1 q1 k) M
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);* B6 S% b3 d1 K' c5 V$ v+ U5 t
BYTE aPacket[17] = { 0 };# H: ^+ \" m8 k, A$ P
aPacket[0] = 0x32;
6 a% x. R, Z6 C L5 K+ k ::memcpy(&aPacket[1], &npcid, 4);
8 b* Y- y- W+ k6 { ::memcpy(&aPacket[5], &ItemID, 4);, K# ~/ ]' ?$ N! |% [+ n
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);* }' i; k4 i; r/ @
D2Net::D2SendToServer(17, 0, aPacket);; I" u2 J5 H) T$ W0 ^, t5 f
return TRUE;1 z' v3 r P" X
}8 P: U+ p" f K0 f. T
I4 h5 E1 T1 m1 ^; Y static BOOL SellItem(DWORD ItemID, DWORD npcid)
, H3 m0 Z( _: p) o4 N {, S9 u0 U; }: Q+ ^* h* s2 e" u
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
$ b3 k' `* d1 O$ n2 U% L& _0 @2 w5 w BYTE aPacket[17] = { 0 };
" U1 ^9 [' P9 [, ^: G aPacket[0] = 0x33; d9 q2 d2 G U, u/ ]7 f
::memcpy(&aPacket[1], &npcid, 4);
2 O0 i& J3 G2 X ::memcpy(&aPacket[5], &ItemID, 4);# |* u- H8 u( d2 f
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
. _5 C3 D3 f/ I% p% D9 u D2Net::D2SendToServer(17, 0, aPacket);* k# o* ?' [# T) J8 V
return TRUE;
: y, F$ ]7 w; v }
8 _3 D' W9 _) _5 s
; Q7 l2 ~0 C% C static BOOL Interact(DWORD nUnitId, DWORD nUnitType);5 Y6 z9 e: { c
: ?5 Y) \7 w' _) F
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);0 N1 k. V7 q& y$ l9 M6 M) Y0 H: F. {
3 j0 o4 D8 w# S t- i static BOOL OpenCube() i+ a" K- L7 r2 J/ r' P9 q
{& a1 B. S# g/ C# O) x! t2 \
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
3 t. e& u, S1 z6 W9 j/ D, I
3 n) ?2 } s, T( E UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);) Y/ q4 V. L. V+ X$ I$ }6 ^$ x
if (!pCube)
, o# Q$ ?8 A; w) C( t" v: F- |0 g {
: l) s" k4 m; J$ y7 M pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);3 H" h; h/ l9 e1 B. ]
if (!pCube); B( q/ r1 u6 Y% T( u' T, S
return FALSE;
3 H9 {2 X+ R$ u% Z) G }
. v$ w1 W7 M& \( D* u, k PKTItemTellW8(PacketItemMaxTick);& L5 i& x$ C/ S: W q. m _
2 b" i8 M5 _1 H& U D2CoordStrc mypst = { NULL };& W6 K7 R6 K! L. c' |0 E
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
7 P( A2 n& a+ U
6 f9 A. a( g4 l BYTE aPacket[13] = { 0x20,0 };
; K! o F0 t2 D4 h$ M. p ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
* d* z& a* _) ^( E ::memcpy(aPacket + 5, &(mypst.nX), 4);) l- s; M- q. G+ ?+ y' q% D7 m
::memcpy(aPacket + 9, &(mypst.nY), 4);( A4 T/ [) |9 ?4 U8 I/ d
D2Net::D2SendToServer(13, 0, aPacket);& T: g$ @( \# i: ]0 t
return TRUE;& b" d$ ]# S: n* a9 B
}
( @9 g6 w8 R" `* [6 Q) W
; f0 w$ v0 ]/ I4 h static BOOL ToInvxy(DWORD x, DWORD y)' ^# c3 N. g+ I2 c, K9 u5 ~
{5 C2 e, s# q4 M/ E5 R3 K8 B
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
- Y' w# L4 A- J" a" p; i7 {3 l! Q! p, Z/ @- Q
if (phand == NULL)+ B+ p9 J1 I+ h
return FALSE;
. M* a9 M9 `5 l p1 J+ o. F" b" m0 }+ ?
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick); M$ r, _, C. ?; ]# H8 M
0 S j2 x# Q: S2 H$ b- B BYTE aPacket[17] = { 0x18,0 };
& S8 j2 @8 a; ^: @ ::memcpy(aPacket + 1, &phand->nItemNum, 4);
9 `' v8 W; R% V# [! t# x: S ::memcpy(aPacket + 5, &x, 4);
+ d* `4 L, z% u) {2 d" k ::memcpy(aPacket + 9, &y, 4);5 L, ?- K6 u: l
D2Net::D2SendToServer(17, 0, aPacket);
" m% H5 N! g1 n$ a return TRUE;
( ~6 t8 N1 d; A0 Q }
/ `4 B! Z5 k3 p: {: B! {
2 U7 Q4 O2 l, T4 D static BOOL ToInvRandom(BOOL bBagFix = FALSE)
# V9 N5 C2 [& l c {4 y; _! a7 O) p: S/ G
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);) d+ B1 d6 E: Z+ Z* G
if (!phand)
# M1 v8 m3 E8 s8 _; F5 z! \0 n" @ return FALSE;! V8 F2 N' W+ r' z- |. s4 m- a
int desx = 0;# w, @0 d" q n; l: ]& h+ a. T
int desy = 0;
) X; e" g H6 [! D" @( T# v: v if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
5 i$ N' Q l# M" w {' S+ w1 n$ _& q5 L
ToInvxy(desx, desy);
* d" r' ]2 X) n0 u1 } return TRUE; M9 [* ] ]5 F) H$ m2 U6 c0 y
}
* L% [+ t% m; Z return FALSE;4 ?9 y0 G% x+ A- n# j
}1 h1 \- `: @8 ?, `0 w3 Y6 Q! _
$ X; ]4 I o; C% k K' U2 x
static BOOL ToCube()
F6 P# v4 h% G0 i5 k$ F {
' U) G# Y: j" k% l8 w2 o. T# k w if (!(*D2Client::ptPlayerClient))return FALSE;5 R2 J6 m1 n4 c) r$ w5 d
3 k6 J) A2 g; D% o0 o
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);/ y% o- @/ W" @& Q
if (!phand)return FALSE;4 _' K0 ?+ E# {2 b1 z/ R
+ }6 z9 U. A& C UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
0 S! ?% w7 L4 r h if (!pCube)$ I- n; P+ p9 T, H. s' S
{
# L3 q7 W, f* i pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
! }9 i9 ~' s: A }4 p# n if (!pCube || !pCube->nItemNum)6 ^! W( C# T! v8 P( W
return FALSE;, D. \+ P! L- o+ M, Y4 T
}
& u# K# s1 c; ?0 w8 O c+ X7 \" Q; D. ]1 @$ e1 J
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))1 y& L1 V( E) T; Z o* N
return FALSE;
% h5 i! A$ I5 P, `6 s) w
$ b3 ~3 u# I; a+ x8 V PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
" D6 M$ \) x8 Q6 Y; w9 Y& P' t# m
, ?% t0 |* o" a' i. F BYTE aPacket[9] = { 0x2A,0 };
3 ~! a2 J6 i3 b/ p ::memcpy(aPacket + 1, &phand->nItemNum, 4);% X" Q0 H1 Z+ j
::memcpy(aPacket + 5, &pCube->nItemNum, 4);* \0 W% e5 c) i$ i# q
D2Net::D2SendToServer(9, 0, aPacket);
0 M! r1 a6 ^) {8 s9 c return TRUE;( R. S6 b. ^5 a* E
- v; |! B4 _( {3 H v
}( Y; t l3 @6 q# x1 G& D/ t- _
9 B6 H! P& j: u5 X3 S. d
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);+ P/ B/ L3 I1 w
$ |% u) y/ B8 c( D" o( i; I% T
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存" u# E9 j, g3 X0 y5 }9 K: m
{
, W7 l- q% ~+ ^- t9 } D2CoordStrc mypst = { NULL };
5 Z, a; l/ o& f6 k4 w; m D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
6 b& D3 N7 k) S0 Z/ @; Z* ]! G5 L/ k0 B$ v% S6 Y h7 o6 r% H
if (!mypst.nX)return FALSE;5 s9 A! i+ c" V
4 Z& |3 r: \/ U/ n, N4 b, u, i
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
. i! u4 o4 G r2 @) m6 M3 w! _( z" w2 V
BYTE aPacket[13] = { 0x20,0 };! i3 N) e! N/ q9 N1 Z
::memcpy(aPacket + 1, &dwItemID, 4);; m4 b0 I( p& T. @
::memcpy(aPacket + 5, &mypst.nX, 4);
, x3 J% D. }% T; l( c+ M1 x ::memcpy(aPacket + 9, &mypst.nY, 4);8 D+ g3 B: e: u5 {# ~
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);! x; U( H c; g7 E% t
D2Net::D2SendToServer(13, 0, aPacket);
" q) f9 R+ I! d( X* I6 f; W return TRUE;2 L: `! r" H9 a0 Q
}
/ D% @% F/ m2 b) j) a* P
& v. t. b' r0 }2 M; i static BOOL DropCursorItemToGround()
) c* m8 f: E1 J+ |% o {' F% ]* i F$ ~; ~
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);) j! Y( ~! z( H; {) d7 q: U
if (!phand)& S! z7 Y! q) {
return FALSE;4 H4 f" z* s% B( ^) M
1 m0 O5 [8 z, s2 F( P( ?
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);" b) j; E2 A9 W7 l) B( W4 M
" W- U: k B u$ m# |, S2 s BYTE aPacket[5] = { 0x17 };
8 b" v; I+ G1 N+ H6 l% f3 _9 E7 `+ d ::memcpy(aPacket + 1, &phand->nItemNum, 4);
8 G5 }/ V7 Q1 [: `. u1 _ D2Net::D2SendToServer(5, 0, aPacket);* R3 d, c' I. ~6 ~2 D8 L, o
return TRUE;6 @$ E) [7 w- ]$ v0 z/ f
4 o4 e; @8 r" l8 m } G6 h6 U' V- w
1 |* P' g, D6 n% B
static BOOL PickStorageItemToCursor(DWORD dwItemID)
/ i I h) Y9 i$ o {
@9 ^7 c) L& x! d! Y% U: ? PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
( I0 `% r. j0 H$ r1 K3 T1 W* \! |9 F
BYTE aPacket[5] = { 0 };
! Q/ w C. A5 d- k% T aPacket[0] = 0x19;
; V! i$ ~! q/ b ::memcpy(aPacket + 1, &dwItemID, 4);
& J; F( W& l; T# D //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
' L, _ p% r; P: S! n% V D2Net::D2SendToServer(5, 0, aPacket);4 W% ?0 g% n& t; U
return TRUE;, F6 W6 T. C9 a( ]
}
; ?% ?9 f( w5 B$ L# P8 @: M# l% ?8 d9 Q( u, o0 ?
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
0 t+ o- S. _5 A% r# r& k {
`# c8 c" l+ Y5 I; a PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
0 y1 B) v2 }+ A p8 D0 i3 H* \ BYTE aPacket[17] = { 0x1f,0 };/ L' }3 ^- A$ C S5 d5 u+ R
::memcpy(aPacket + 1, &ItemID1, 4);2 r3 S' A) u8 f O3 r! ]
::memcpy(aPacket + 5, &ItemID2, 4);
& p; \! X, h( m# R5 t //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);/ Y8 T6 a- X/ D* K w- ]* n
D2Net::D2SendToServer(17, 0, aPacket);
( H2 D4 e0 n$ Y. {: ` return TRUE;; k8 o/ E: x9 w
}6 O, D1 r0 S, a2 h9 V
4 @9 R- q1 }0 z$ Y% S static BOOL Transmute()
: W0 Q& v' N' M0 Z {
9 `1 D0 N$ g8 M3 I5 L5 s if (!(*D2Client::ptPlayerClient))return FALSE;
0 C% Q1 Z: v1 X$ c
* a" J8 T9 w5 x3 K if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
- L% v- S& {; Q1 N% d return FALSE;- F# A" X% Z b [8 |, X- j9 c
* j2 d* X# X$ M% c
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);7 l2 H# n5 B3 Y( @
BYTE aPacket[7] = { 0 };6 o" k, y8 t4 }1 _) f' ]
aPacket[0] = 0x4f;$ E' s; s3 x: {) L
aPacket[1] = 0x18;
) t& \3 [$ h/ w( h D2Net::D2SendToServer(7, 0, aPacket);3 ^3 _) Z& g+ Z9 Y0 \3 s0 D
return TRUE;
/ \+ `) |) M; m) L8 V }1 `/ }# }9 }/ j. l" e
};( U* X1 O) J& A7 `' T L4 ^
- j9 u* ]7 @2 l7 `
|
|