|
|
转载
% O; x# E. i% _2 d% {! C自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
. c. Z, a+ w, ^6 QD2Client:* N( i% c9 ?" G$ ?5 _5 T( \' |, W
6FB20AE1为拦截输入框(用于获得命令)) U/ y# n6 @1 }& R" m; w
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发, X7 \, m& M; P2 @
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
, T( ?: N( s% z. Z6FAF4230为hackmap的loop点 我用的hackmap导出位置$ _: z4 |9 r0 l0 u+ _) S
( p4 y# @" L1 i9 L/ @8 f. Q7 F B' \ V- u$ V+ v7 ?8 t/ Z
发包函数:( O% \- ]. f$ U G) W" @. v' X
class D2PKT_ITEM. E _" r: r- Q, \- \8 e; D
{; x+ v* _* G6 r
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
0 p& Q' H* ^5 g8 Q" [( J8 g: V& ~#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多: _" i5 L' ?7 f
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
0 M9 \" _1 h; U: F* L7 [#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上7 a% ?$ m( k8 D* p
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
, z5 S y/ h* t6 l5 {1 e: h! h#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上5 f' C4 l' X5 \( h2 p
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
$ g; s6 _" w I# _% d! v- S. ~#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
" _& a& n D- E5 Z6 ~0 j9 V#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
' Y3 v/ o& \7 S$ Y#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
4 T( m# }8 ~# x x#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV" |% e3 H2 M% k
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
& l- s/ g% c/ v$ O2 o* S. `) [#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带8 I/ p" h/ t- i# R
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
* _- V, \4 a4 z4 \0 k#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
6 o/ o2 J; X" ]; _! H#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上9 R+ E. Z5 F+ @; q& e6 m4 a1 p
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -9 l, L- _2 T+ h3 \
4 c$ f( f" t% m" K+ N0 w#define PacketItemMaxTick 150, t% L5 W& h0 s; h5 I0 M; p& C% z7 a
#define PacketItemPickUpTick 20/ \- X# q2 ^' {* p9 M
/ v% I" M: j( b. P0 R! \3 J4 \
private:0 h, t0 d7 x8 Y ]2 U0 L; E m1 b
static DWORD _PKTItemTick;8 {# q3 e8 \/ ?; h* ^$ G
static DWORD _PKTItemAction;6 u4 f+ K! L. s, H+ B6 C
static DWORD _PKTItemID;
# q f# t. I7 z L. Q static BYTE _PKTPKTType;
' [# Y2 {' c, J$ H4 r0 Fpublic:
+ U* f c+ K" a5 R3 M static DWORD PKTItemGetTick() { return _PKTItemTick; }
5 J$ o# z+ A; u& @9 |
9 s: E9 F% s9 d" D% `7 Q static void PKTItemRelease()
8 P% S) G4 C- V: x, Y: I {
7 y( e8 B" H2 d f4 X' x _PKTItemTick = 0;
$ y) W+ E0 D( ] _PKTItemAction = 0;
; }" K5 x5 N# t3 H5 n j _PKTItemID = 0;
9 [2 g& b3 J. r: o% q _PKTPKTType = 0;6 e7 C, l. w# n
}0 Z3 J' M( t- S l, l
- q. n7 S, e3 N9 \) L( U& u static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
* E( Z, x: `2 w7 @ {
( H8 V! t( T/ X* B, h% ~ _PKTPKTType = aPacket0;
3 l, D) _( Z& J% ` _PKTItemTick = tick;
1 F8 c# U( ~4 x% }/ A _PKTItemAction = ItemAction;
6 M: s C: n0 ?5 _" } _PKTItemID = dwItemID;
' l. Z8 i q- u) U* C }
) E5 D0 b0 ^* ^+ g! ]4 H# d& ]% b: i8 k2 D: i2 }
static void PKTItemTellW8(DWORD tick)# W9 S$ ^2 q9 ]" J1 s7 _
{
3 t, \- I% n. w/ U _PKTItemTick = tick;4 V5 r$ i2 n: n7 A
}
! g* U& d: H; v( C& k9 l
4 r) P6 l4 M" U) ^. q/ ?/ x static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
. N( X1 K9 A Z' S* l- W% B, b {
3 ~4 R" i( ^' U. {, i' c) w if (aLength >= 8)6 S$ N& e# [) a% e) t: p
{
2 B' x' @) M: }& y5 S DWORD dwItemId = 0;' {0 h" @( S5 m+ `3 H
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));( ~. S- h% n9 Q
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE. [: B& O- d3 a& _! l4 W$ [
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
, ?! m) R9 V. X W" h. Y# y && _PKTPKTType == PACKET_NEWITEM
" ?, v: C1 z! |8 g% R, V# D: T7 Z )
( J$ }3 i$ d# b7 [ P" R {/ J8 Y0 F8 \+ h/ m; d
if (_PKTItemID == 0 && _PKTItemTick)! ?/ g9 h3 z5 ]( m+ ^
{! v3 E; _& i( t( c- u7 `
PKTItemRelease();
' B: \6 C2 R; t }
3 m7 v. e* H8 Y* x else if(_PKTItemID== dwItemId&& _PKTItemTick)6 e5 v6 E8 [/ @. S1 {2 J! X, m
{
: L' }4 o! ]+ y PKTItemRelease();- c6 l( _- l4 p" V% t% |
}
# R- s" a3 P( ^: Z7 | }( p) f; j/ F/ `; w8 ?
: E8 C5 W6 U- N4 E0 Q! `! V! v
}
. b/ {/ B' j) n: |; q }
J2 u* ]5 x. ~" f L& ~! n& R* w9 D: p& I
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored/ A! v% [; Z9 z; E; x
{
7 v5 l2 T8 g: @, t& r. N; E0 z* y if (aLength >= 8)7 X2 \/ _+ d h4 K$ Q; M j0 n: f
{
% l1 U, z9 h( N- B$ N. d, ^( D DWORD dwItemId = 0;
% R4 b- N* t. p% S6 d% A memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));# m4 t/ s* k0 Q2 ~9 U0 A# }
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE( J+ g: n4 q8 x! A5 e4 u
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
; J3 |- c. F" A# l) M6 E && _PKTPKTType == PACKET_ITEMACTION
" N# H: V# g$ d% Z e )
6 z" {% L/ k; f5 z {
e5 ?" N D2 g& J if (dwItemId == 0 && _PKTItemTick)
. c3 u+ ~9 A1 g% J( ~$ o {* C) J+ z( W8 Q
PKTItemRelease();
& _( F' K7 g- `" o7 q$ i }
0 }7 c8 ]+ S* h* I else if (dwItemId == _PKTItemID && _PKTItemTick)# A2 B4 d- ~. _) Z: \
{
' j' M) T, p! N* A/ h7 V PKTItemRelease();$ a6 U) l+ U) [, m5 b) P
}
a; [& ~# }0 E5 P) q0 }7 k }/ E$ m( Q- M/ n: s
4 C+ u: L+ x8 Q: @8 M+ j" }
}
. B5 o& a: v5 F; N+ k }
X. O+ S7 n! \" b; t8 i1 N* A9 Y% j2 q1 G1 {. k
static void PKTItemGameLoop()0 N$ ~9 m* Z" V- R9 M$ r+ O
{
# p3 T6 r' j: j$ [ if (_PKTItemTick > 0)! L/ a# l/ E6 g8 S% q, ]' c
_PKTItemTick--;
: S; j2 Y; v0 ~ else if (_PKTItemTick == 0) s& `8 d2 n, B* V( n' c, K
PKTItemRelease();* W1 z; E: T: C) j
}" `7 x$ l# e" O9 V7 W# Y1 d0 Y8 g
3 k( G2 Z% \) {* N: d! b static BOOL PKTItemCando() / n! ^6 \ t1 E8 `- x
{
" k; Y5 z+ Y; k8 P4 d( h$ y$ k if (_PKTItemTick == 0)return TRUE;
: }( D+ Y' g+ [; O# f$ t n return FALSE;
r& k# H* m4 l }; g* A# { G7 o! M. r
6 e' z# k4 b' C* l) Z# \5 Z static BOOL BuyItem(DWORD ItemID, DWORD npcid)3 P3 l2 H+ ~, d6 U3 f9 L
{& R' O# }" N+ V5 [; v
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
) y% A: k' e) s* G+ u BYTE aPacket[17] = { 0 };
5 h# U9 c! i, ~; Y* _- `4 W6 K* n aPacket[0] = 0x32;
/ R* Z' o) ]) ^! y( H ::memcpy(&aPacket[1], &npcid, 4);4 Y0 k7 [4 `' ~) n+ o
::memcpy(&aPacket[5], &ItemID, 4);( v# t ?; m3 u9 s
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);9 |* G/ i. h! Z% b5 Z) {$ L
D2Net::D2SendToServer(17, 0, aPacket);
" E& N7 b9 q: c5 c7 @' g return TRUE;+ {% `2 p# g! L p! ^; U/ L
}
1 L( N) G' ?: ` D1 T8 F$ G5 G u; J6 I3 V6 Z3 {% E0 K
static BOOL SellItem(DWORD ItemID, DWORD npcid)
$ B3 y0 J1 c0 u7 z5 F* v {" e* `1 P, x5 ?5 e6 f- D
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
$ k7 y; |3 U9 o, y2 |) h+ k BYTE aPacket[17] = { 0 };0 R) ~1 X0 P! \
aPacket[0] = 0x33;: X4 _$ m4 U3 {7 c
::memcpy(&aPacket[1], &npcid, 4);
0 z: C- g2 z! q9 C! H ::memcpy(&aPacket[5], &ItemID, 4);( D$ `& j: `, y- S; S! p" q& L
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
0 L P- ~0 N6 U( ~" D9 @ D2Net::D2SendToServer(17, 0, aPacket);" u& |& z" o7 W3 W' ]1 M7 g0 g6 R
return TRUE;' _5 D+ a& r8 k2 E
}2 [! J8 @- H3 z W& d- _' q, a
6 A1 N" i4 U8 D
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);" B( G) J: S+ _8 ?$ W+ [
' _/ e3 W- ~1 F7 D! d; J/ p static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);2 E" k O0 b, L1 H# s
" A- F0 y8 W0 _' r( b
static BOOL OpenCube()
! @! M" c; z% o# v) \ {$ {7 B4 m" w, w" N3 j/ t; ~
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;7 f) ?' [3 q/ j& P* M
' L0 @6 ]5 m; d# I9 |/ Z
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
e, f5 E* M! I$ _& z5 }! m if (!pCube)
: i2 m, l% @5 v {2 C j/ u, }5 v! L
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);# P0 a* s8 z/ l
if (!pCube)# B4 z& V; k* Q! h: w
return FALSE;
- n3 s8 d$ s" a, O8 S% q, c/ e. [ }
: g3 U9 ]2 P* A- y PKTItemTellW8(PacketItemMaxTick);
5 n4 L" H1 E+ @, I9 L; g+ x4 u: G- y/ F7 S. Q
D2CoordStrc mypst = { NULL };2 |& v/ [4 i6 i. S+ [% l- s
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);& ?! I1 @9 _3 A. ~7 s+ y: v
& s3 V: Q, _" p BYTE aPacket[13] = { 0x20,0 };5 h0 s3 i. C) ^; I
::memcpy(aPacket + 1, &pCube->nItemNum, 4);
0 i, Z1 J, W% n D; ^6 O ::memcpy(aPacket + 5, &(mypst.nX), 4);( h* s! v8 g6 {8 k
::memcpy(aPacket + 9, &(mypst.nY), 4);
, `1 f4 _; A& N L" z8 I D2Net::D2SendToServer(13, 0, aPacket);* U9 q: }5 R8 a) _# i
return TRUE;1 y' {: D) U7 @
}
, r; V6 K9 _0 _. @% ~+ y# K9 k! H1 j
static BOOL ToInvxy(DWORD x, DWORD y)
1 n* [" S, i0 {: w2 x$ P {
8 s3 W2 E2 [5 Y' }; G1 c UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
1 z0 ?3 _. U I/ C, I/ d
3 c0 t4 J1 T! _5 ^) X4 j S if (phand == NULL)
& V* q5 w; j. R0 t% a return FALSE;
) g8 {7 T2 z/ A9 x/ _% v. {$ K- c, i+ Q1 W: U' |
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
. B7 M% T) b) n1 |
& A' |, [' D/ ?7 r BYTE aPacket[17] = { 0x18,0 };
3 P1 E5 C6 q% i$ H O* B& E7 t ::memcpy(aPacket + 1, &phand->nItemNum, 4);/ M/ E) _3 U1 H" Y8 T" ?
::memcpy(aPacket + 5, &x, 4);
* r, x( R. u5 ^5 e ::memcpy(aPacket + 9, &y, 4);, C9 o2 C E1 `! h# s
D2Net::D2SendToServer(17, 0, aPacket);
1 F/ @% ]/ W& C& d return TRUE;
& B2 f) C# o8 ~ }
: ~- _5 j/ {' B
1 m$ a5 }6 {& M# j3 r* A* l- B static BOOL ToInvRandom(BOOL bBagFix = FALSE) C, y- A0 K, t, O- R& z/ O) `8 V
{& v' U6 g2 f( B* Y9 y
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
( z: K6 n+ S ]; I# `+ w5 I if (!phand)
- \6 I$ U( R) `$ X, S return FALSE;
0 S% B- @' O1 {: n- ^ int desx = 0;
: Y, ~ o, ~4 t& N2 g0 p int desy = 0;: O1 ]9 N$ N6 J7 y# i. ?+ ^2 L7 M
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))) n: A: m `9 s5 S: k3 |) {5 N
{9 I y+ ~$ b# M: S
ToInvxy(desx, desy);; N6 G$ `$ Q* U/ v% s* W! Q
return TRUE;
3 e: I8 _: F' d o3 n A; f* w9 }6 J }
% T& j! \4 z. B4 B2 W$ E: g return FALSE;
; R' J7 v; Q: f8 C }
$ `% a: d7 X4 X* o
) ^9 B. f7 J$ x0 H static BOOL ToCube()
/ K Z) `0 o& e( Y {3 D- v* Q% x) z& M/ q; }0 r
if (!(*D2Client::ptPlayerClient))return FALSE;
9 }, Z: t/ q o4 ]
) w" N: m% Y2 a' E) A1 y UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
, q4 l# \ c& b3 g/ b: _ if (!phand)return FALSE;. o. @+ L' @! k1 |7 \
7 b% R: J$ G' h0 v P4 ]7 T% z UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块7 M* g# s' M* T# o% |4 i
if (!pCube)
, Y- o3 c7 n- Z' z6 \ {
9 c* j9 A9 ^& n0 o. U9 ~ pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
: r8 ]3 V' J) v( l# K if (!pCube || !pCube->nItemNum)9 g% J9 e9 C. r3 d; P0 e
return FALSE;9 C+ B& P' j0 J
}
: `! O8 f! w# G" X5 R" h4 U& W6 Q! Z, _. n* _* g
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
9 ~! A9 d2 {+ y1 j4 h3 _6 c return FALSE;
* j) Q5 n9 R, z% L* g# s% G- f
7 p& w' p8 ?# O8 q PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);# j" Z0 w3 m+ a+ n$ l+ |7 I
: {" c8 H8 `; Z! b! X8 ~. l6 n1 | BYTE aPacket[9] = { 0x2A,0 };
7 m2 ]) @+ ~$ g; l6 I% H ::memcpy(aPacket + 1, &phand->nItemNum, 4);
& ^* U1 r/ m& v) a. G7 L3 z5 t ::memcpy(aPacket + 5, &pCube->nItemNum, 4);* Z6 n" m8 s* @& i; U
D2Net::D2SendToServer(9, 0, aPacket);0 \- C! G* a7 u3 K
return TRUE;
6 d6 V3 V u9 B0 F6 e. z4 G4 S' B" s+ ~
}
) F9 ]) q( o3 f1 K, F9 T
' T: ^" }# B- M$ | static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);1 M8 o# Z# u' h i( f
2 M4 h8 f$ \) f3 T8 x, u# n static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存9 @* i8 @9 K7 t V8 ~# x
{
! A5 S% U/ z; P- I" T2 j9 d1 x D2CoordStrc mypst = { NULL };/ M+ _5 B# e" \6 W
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
: v0 [8 s% ^! a( N5 F2 `2 b3 h
" w1 g1 Y4 D# L, `6 g: i if (!mypst.nX)return FALSE;! O* k9 z3 P6 @! V% G: b
. R, Z: H" q; d" _: f PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
9 H4 B# a B* M& `( z8 i+ c
* G C; `: i- r% w. b: J7 h; D A BYTE aPacket[13] = { 0x20,0 };
6 ^, O' n' a- K) G, e7 l ::memcpy(aPacket + 1, &dwItemID, 4);
# K5 \; q0 T, y4 o1 h ::memcpy(aPacket + 5, &mypst.nX, 4);. L! k( j' z# w
::memcpy(aPacket + 9, &mypst.nY, 4);: H! L% j# u3 C6 I. u( m1 k2 S+ ^
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);& k! F5 E- M& J* t# n
D2Net::D2SendToServer(13, 0, aPacket);' _4 N" _3 h& Z0 z- h! h
return TRUE;0 M" u# _3 Y+ d1 T
}
L6 v6 Y5 ^ M. h8 B: Y& ^7 |5 I
static BOOL DropCursorItemToGround()/ b1 p% e! N6 ?4 v
{
& O- z+ x% p* M, I7 E) u UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
: L; ?' X3 F0 x5 T" \ if (!phand)& A% N4 _$ D5 e( ] q: h
return FALSE;
. k4 ^7 q" O! n6 ^
/ g' ^) z/ s3 I. u9 u5 j5 o7 ]& h E3 Q PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);1 d6 W& C' S# k$ R5 a0 H
5 W, l. [! \1 i1 D
BYTE aPacket[5] = { 0x17 };; C, z8 z: Z ^# v2 d
::memcpy(aPacket + 1, &phand->nItemNum, 4);
! O' y3 `0 ^( \ D2Net::D2SendToServer(5, 0, aPacket);
6 o/ i9 e% @' P# _ return TRUE;$ e1 B* p6 w% R/ o
: R& Y6 c- j9 I1 @3 Z+ v
}
6 u7 B, ~, R1 T p' Z* i6 F. p4 T6 y6 \ I
static BOOL PickStorageItemToCursor(DWORD dwItemID)! h2 d4 j" P& `5 B' N8 B: i
{ `% |$ K% k, W0 U: \3 P% ^
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);& R) Z( G. z, I
7 d" G- x; h) d
BYTE aPacket[5] = { 0 };
+ L) ^4 Y$ h8 J" H2 c0 K! P9 s aPacket[0] = 0x19;
' e1 I$ v3 \- G1 S% z, J, A. W5 L ::memcpy(aPacket + 1, &dwItemID, 4);
' M$ L1 D" {3 o4 g/ W //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);; S; V( U. ^: b
D2Net::D2SendToServer(5, 0, aPacket);
3 q$ S, u, P7 u4 B return TRUE;, S( m/ W0 Z0 I3 o) ], l9 L6 i7 ?
}
3 c }3 B3 L1 \$ \7 F
: y( r9 o% E6 L6 d8 C static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)# x' a1 b6 ^' L7 u. D( t' p
{5 q- L8 ]9 h9 ^+ N; M
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);) G/ l ]5 F; R+ {! F% I, o* `4 |
BYTE aPacket[17] = { 0x1f,0 };2 L ?, D1 p2 p1 |# ?/ J
::memcpy(aPacket + 1, &ItemID1, 4);
( J' v8 s% U P ::memcpy(aPacket + 5, &ItemID2, 4);
$ l! Z+ x+ m9 N //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
' J5 n8 c4 o; ]6 e D2Net::D2SendToServer(17, 0, aPacket);9 \. @ I) T+ R. z# K/ I
return TRUE;" X4 F$ ^. j. K1 d e! K* D, o$ A
}; F) z6 t* s8 r
& I/ x$ H& \% s3 T5 A7 [ static BOOL Transmute()
: ~% `1 G6 W* ?$ L! o6 k {$ M3 R% [( ^ d
if (!(*D2Client::ptPlayerClient))return FALSE;
; S8 _* @4 B3 ^ C( S7 d( ]5 Z! R6 `" o) R6 k9 d
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))4 U0 a( _5 r. ]( t
return FALSE;
& J9 V. j0 U4 g" ~
* ]- h8 w! ]2 a1 c PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
& L" U' N) B+ { BYTE aPacket[7] = { 0 };3 T% A% g Y& ^) K2 M9 V8 Y
aPacket[0] = 0x4f;
' _' L# K) A3 g4 R$ f aPacket[1] = 0x18;0 R C: C7 \' _% E% m9 \: P8 A
D2Net::D2SendToServer(7, 0, aPacket);
$ Y8 U3 m6 ^* P9 j6 l6 O return TRUE;$ P* ~: W1 q$ I8 o
}/ j4 C9 B* g4 p& w# \4 S
};/ a6 A9 w' r. c9 q9 t! F9 n5 @
3 U, H3 Z9 a7 L; j1 c" z |
|