|
|
转载
: w% O0 S% n8 ~- v$ R自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
$ V. E7 Y" F9 [% OD2Client:
, ^' {' r9 ^# i6FB20AE1为拦截输入框(用于获得命令)7 s& t: Q2 k8 y6 G3 p
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发- A9 |" G3 O% E
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发
- f! v* U1 \" w& ]6FAF4230为hackmap的loop点 我用的hackmap导出位置
. A( a; N. j% Q( s, q0 s5 _2 g9 u6 @% \- Z
' m" z: E2 I- q2 y9 S发包函数:
$ z4 o; x. a8 [class D2PKT_ITEM+ o% |% x; |% G/ Q
{& D5 X5 w1 \, f% a7 _& ~' u5 V4 N) I
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上7 D# M. w' K+ x% P9 }( I
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多0 ]% n8 w2 C, |7 [
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上4 X% i8 U7 }4 M7 U+ I& t
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
9 q( m# o( H3 t J8 |1 W# x#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
3 q1 h! f5 o7 ^1 w#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上. D, ?( s: e) X8 Q1 Y/ o
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏3 T% r$ p6 l6 N
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
: \/ d; v: v2 ]3 A#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
9 N' }! [; Q; s9 d% _, s#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店0 {$ E1 y7 w e( y
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV0 j! }$ f' a7 P( U
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
! _4 J" _1 p* ?#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带0 f( @5 K+ U* P6 b
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
! d+ g8 f# G" @- Y#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -1 x' h3 e1 N8 _. e5 B* b
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上4 g( K, G0 s& H" `
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
. \$ i! x% Q1 W- y
6 B1 g& \" c; h) T2 V#define PacketItemMaxTick 1507 a' V, j1 ~5 i3 g, h% X# o
#define PacketItemPickUpTick 20! W( ?& M- U: ^, j
- M4 f* z* v' t" [* Mprivate:+ F' h3 z0 `: E) i) e% P! r- }* u
static DWORD _PKTItemTick;
: s5 T0 o2 w4 U. { }& t# F static DWORD _PKTItemAction;5 {' r! W x( \" X$ ?$ l
static DWORD _PKTItemID;* B: K1 U* J6 d0 j2 P
static BYTE _PKTPKTType;
: H2 M7 r6 \9 D6 ]public:
3 x$ ^# i" ~* b! X; r static DWORD PKTItemGetTick() { return _PKTItemTick; }* U% H$ F v1 E4 ?7 i
{4 i. h, R! b- W4 P
static void PKTItemRelease()
3 Y/ f5 f' b& k9 Y( u, `: O {2 N9 g8 M' a; w5 K
_PKTItemTick = 0;2 o7 m; U( D+ j* D% N) w. u
_PKTItemAction = 0;
4 i. P, \% _7 d B$ M _PKTItemID = 0;/ n6 r7 l% M. s9 x, {
_PKTPKTType = 0;$ k3 v7 M) `; U& j
}
* n. U( F! R" x! r+ q8 }! {! Z! u9 g1 N0 J; x- H$ \
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) 1 {# @: [6 U! X: U" [* g; k
{! o1 A: E$ C8 i d) W" O
_PKTPKTType = aPacket0;
; b y( W( N* c _PKTItemTick = tick;: E7 R- R& M: Z$ _% d
_PKTItemAction = ItemAction;$ n7 Y p- k. H; J$ Z$ b
_PKTItemID = dwItemID;
" @! F- \9 f$ U5 p L3 T( ?% [. } }
& {% O* s" D& e" L7 x5 s, @1 m
|* u" `. h7 o$ D static void PKTItemTellW8(DWORD tick)1 |2 N- W& j( J' l( T) c5 s. n
{
0 p7 }. }% _0 s! \/ s' N7 N _PKTItemTick = tick;
% q0 S8 F# d& l }
" z) y4 k+ F0 R' Z, d; p6 {1 o% W1 X- i2 F
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor) C7 I# G9 X; g5 D) Z9 E7 U& {
{
5 b# e" Z: A8 \5 D# T1 w if (aLength >= 8)
+ i/ j) E+ ?# V# \4 {. L7 w {
9 z% }" h; D2 i' r( }; Z1 a DWORD dwItemId = 0;
; z, |1 G1 h; t, b7 j4 x memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));- P' c3 y, U: V, b& `5 r
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE8 S2 T/ Q3 l; W! Y+ t
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
$ ~6 N$ k+ S# x5 f; }, b && _PKTPKTType == PACKET_NEWITEM i+ q) T4 h* b+ D# r0 c+ ~! C% V
), A, h9 K2 H3 {* ]2 O
{$ i1 a8 H! G$ L- e b6 I: y
if (_PKTItemID == 0 && _PKTItemTick)4 [4 N4 z3 M+ f w$ ^7 Q4 R
{' M" Q- P0 ?' T! U$ z+ o! p3 w3 Y7 b
PKTItemRelease();% T: U5 J0 L* J+ O3 d- E z
}
# n8 ]. u% E/ m' } else if(_PKTItemID== dwItemId&& _PKTItemTick) i1 }+ { R ^5 }! ?3 ~
{% C# g/ B$ N2 x/ ^: F1 U
PKTItemRelease();1 _; m7 S* _0 S, M2 I) t
}: V8 K/ t6 v4 O% w
}; ~1 L# C' f- e( m2 t
+ C$ J# P4 B- k r ^! i$ r% e }5 P6 s- _" I% S$ J2 m, }
}# S* N( \- S1 _% \0 Z
, r0 }' j& d6 Z) I. E8 p/ E" M
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored+ b% K9 T+ M; m3 ]( b
{* {0 S2 X; L8 ?$ i$ n7 C
if (aLength >= 8)& x: X5 R- o9 E( p
{1 R9 i; V6 g% {6 i3 `$ \6 {: g. N
DWORD dwItemId = 0;0 q. x4 q$ J2 z$ {! }; c
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));8 A7 _/ U( v$ g- \; \
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
! O4 M! x8 G* k B4 Y% b && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
& i. O1 P, J4 ]' Q, T. x- v && _PKTPKTType == PACKET_ITEMACTION" N9 e# {. a K
)1 S+ \0 m! B0 F7 N6 X6 @
{
, W. s: j" G$ i, | if (dwItemId == 0 && _PKTItemTick)" w( e! k- w- r6 k3 H
{
7 `8 D; O, z4 }' c# i% j1 p* e a PKTItemRelease();% d* j0 ]0 F0 ?9 w2 S6 L) N
}) l" F3 i- }3 d, k
else if (dwItemId == _PKTItemID && _PKTItemTick)% x2 E4 Y2 [9 C" C6 w
{
3 A9 s7 E6 a2 z1 K Z0 B& e PKTItemRelease();
& R0 c v; g* D6 S# x. S }9 m5 I4 O4 k) Z
}6 s ?& X6 |' N# j7 P+ J
: W( t- E1 I5 t8 H% E+ Q; j3 C$ U1 ] }" \1 r7 l7 X; ^* U, P
}
9 P8 Z+ W! N- ]1 { e, L/ ?' G/ G1 q/ y: @2 P
static void PKTItemGameLoop()
' I- I+ b& `0 x* r% L$ ] { {
% I( n/ b: Y- } if (_PKTItemTick > 0)8 } w0 e* }: ~9 m3 h2 @' G
_PKTItemTick--;
4 _! @ c' { e& L/ D else if (_PKTItemTick == 0)
: J! ~3 U5 O# M' | PKTItemRelease();
* a7 z% O8 u5 a' v) l4 I }- |2 [8 d/ u7 b. w! s3 P F. R
4 ^7 F: K+ I" R9 v3 L6 `4 m# Z' W: ] static BOOL PKTItemCando() , G: p# M. n0 N# K0 ~
{
! k2 f# ^: l' _1 @ if (_PKTItemTick == 0)return TRUE;. D+ a, [* c5 f. j2 Y \: e% \
return FALSE;
' k* _+ l' R! l9 Z% s2 Z5 _, j+ P. ` }
2 r' Y: c8 s2 t' B3 q. R1 N2 |* r5 ]. D- y- @' t
static BOOL BuyItem(DWORD ItemID, DWORD npcid)! G+ c2 W% m* u. F+ s: u
{
* S- ]% _$ L. ]" J# r PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
* d& w/ i, l3 v# |' R+ Z BYTE aPacket[17] = { 0 };
! q" m$ [* f6 d8 D4 g# O0 h4 }. B aPacket[0] = 0x32;# k8 U+ _/ Z4 T. r8 K& @
::memcpy(&aPacket[1], &npcid, 4);
3 P9 N& k% D. y2 \2 r. k ::memcpy(&aPacket[5], &ItemID, 4);1 @1 V, x1 Q; ]$ }) @+ k
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
# n# o) ^. u0 |3 i C2 X4 w, I D2Net::D2SendToServer(17, 0, aPacket);* j! x1 ?& n! o# [/ s
return TRUE;) o8 J: h! I- c/ i$ {2 p7 @! q
}- S( Y) p" M' h" t
! D4 d* O7 `& O3 J
static BOOL SellItem(DWORD ItemID, DWORD npcid)
) s" \; J, c! f! J {
% b+ [: W0 ^: @1 R PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick); z6 B0 E; Y6 T" b2 w# z6 K
BYTE aPacket[17] = { 0 };
' }! H! x3 b9 ~3 f1 \0 K3 L aPacket[0] = 0x33;" t) Z* `* m7 C8 ?5 y! A4 H
::memcpy(&aPacket[1], &npcid, 4);
8 z0 J! M6 u0 V$ @! T# ^" A ::memcpy(&aPacket[5], &ItemID, 4);
! O3 B, Y+ ~# w, B, S; x! D; T1 W //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);5 w" A: }) P1 L/ U: Z
D2Net::D2SendToServer(17, 0, aPacket);
- z( m; q" X4 Y# o" c7 p/ m" y2 t# V return TRUE;
6 c; `5 F! [5 `8 q }
; j; ]# y6 R* P+ |: {2 q+ R3 q6 q/ M- h
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);, b5 k- t4 a& y% b6 \2 l/ a
3 H* A: {/ M7 _! s) h' ^
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);. m; Q- G& {; L# n$ o k& W
! [' B' Q0 I8 M! L! i
static BOOL OpenCube()
9 G m o: i, i3 \ {8 Y1 H0 y4 C5 R; {2 |/ }, o; f
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;1 u4 y" @/ v: Y- n6 W1 V
7 \ ?- o7 I9 |8 L4 [ UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
/ j6 H7 ?. r8 \6 u; F if (!pCube)4 K9 G8 x- }0 \: O1 N P! i. P% t
{0 |# P2 v2 u7 G- |% R
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);/ U5 E \6 c R3 H
if (!pCube)+ p) k) K$ |$ n0 |
return FALSE;6 q& J* O% U7 P1 o/ ]/ Y
}
/ a9 L3 O: q- U# ?5 {! a, e% P" H PKTItemTellW8(PacketItemMaxTick);
3 `$ B5 [/ H$ H: Z5 a* ]
9 [2 d K1 e0 x8 m! L D2CoordStrc mypst = { NULL };
; q! C7 m8 x( Z D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
: ~0 q+ T5 k7 O8 _
# o$ p6 Y8 t+ g. T! D BYTE aPacket[13] = { 0x20,0 };
- N$ S' ^, E# k ::memcpy(aPacket + 1, &pCube->nItemNum, 4);+ m S! s$ _2 {- e9 Y, d
::memcpy(aPacket + 5, &(mypst.nX), 4);
" g: M+ }2 e1 ~! G/ m& M6 X8 [0 }* u; A ::memcpy(aPacket + 9, &(mypst.nY), 4);
, ^' n( j1 t6 C. c D2Net::D2SendToServer(13, 0, aPacket);
; S$ D9 L4 @( `1 o. R return TRUE;8 D4 {" E3 b% p: G1 F
}: c: U9 U/ L$ b% k3 M+ f
" q2 n+ B7 o9 F6 J static BOOL ToInvxy(DWORD x, DWORD y)* M `5 x3 e0 U1 E4 Q; Q: ?: f
{
8 @" h! \/ u& i% S UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);2 m, J( d0 r! f# w: \ [5 b* p) k
q+ g& N4 I/ v/ r& @3 B3 c1 U if (phand == NULL)6 ?/ q& L1 G4 |% M2 V+ a
return FALSE;8 n* T% L6 C% }: r
4 k6 f' k2 L8 w" D, F
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);5 V* h. z5 V# U4 y0 {# }
5 K& W, _" H9 t BYTE aPacket[17] = { 0x18,0 };8 @- @6 W$ v+ _
::memcpy(aPacket + 1, &phand->nItemNum, 4);) a* Z$ v0 n$ Z* {
::memcpy(aPacket + 5, &x, 4);
" l! v4 y$ m3 p ::memcpy(aPacket + 9, &y, 4);
7 z" W+ D& A0 C& F D2Net::D2SendToServer(17, 0, aPacket);
3 t* a' g' Q! L9 M1 d* m return TRUE;+ X% Z& X; j- Q
}% H, c& D. w/ r
' f/ k* L" R# M9 j
static BOOL ToInvRandom(BOOL bBagFix = FALSE) * V& k9 X' ?5 } z: t% d, j
{
$ M0 G! ~- ]8 \$ j3 f. }5 ~ UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);3 `# z0 o* Y e4 Y. O9 x! [
if (!phand)
3 |" G! x# @- }7 x& a& g4 ` return FALSE;
0 v. s6 ?: g" {& k int desx = 0;; G8 |1 T. e3 N2 K" w
int desy = 0;" U# {1 N2 W B
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))" H1 A$ `9 Z b/ i1 _. L
{
4 @- V) I9 ~6 f8 s# { ToInvxy(desx, desy);
& `- s5 H% d. ]! F/ t2 _ return TRUE;
% {8 z; e- T Z! k; K) h. A }
& j3 R( C7 A% z! s$ b5 o6 P return FALSE;
! E) ^5 D1 C$ y. b }
3 c" w4 L8 n- E' Z( |7 Y( g7 S2 Q( m) N4 G# ~
static BOOL ToCube(), ^4 P5 H" f, `/ G, T! K
{$ o% {, ~. S3 {1 T- K J# ^# M
if (!(*D2Client::ptPlayerClient))return FALSE;4 y4 O% W3 o: m: n. A
Q o0 }- J/ l0 c* S6 f" b
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
; M- b3 S" }( V1 h4 K4 \1 I0 P' C+ O7 R8 W if (!phand)return FALSE;
$ {& V6 R- G: m3 Z& ~5 V8 U. b C( k" Z+ a/ x. ]
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
5 C: T: k8 V [5 {2 h5 b if (!pCube)) r4 @" @! {2 Y. U n! H: i
{
5 {; U( ?$ n3 O1 ^ I; A pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
5 w4 p* w2 B% V9 @) t4 b/ h* k if (!pCube || !pCube->nItemNum) X) _7 { e9 F
return FALSE;. M+ ^$ f. i( F
}0 `( |6 Z/ f1 v. v" b
% v: w$ u7 q# a3 E if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
7 m. R& S8 x9 ]& g% a return FALSE; s9 @7 O1 }; K- a4 x: m
1 y8 {2 [! h- E. y$ }+ X$ X3 {
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
& Y! s+ i1 D: G$ Y) y' W2 W: p& |8 T" P! W+ I# L% O+ F9 a# P4 K" t
BYTE aPacket[9] = { 0x2A,0 };
7 y" ]# {% b( A x- d o ::memcpy(aPacket + 1, &phand->nItemNum, 4);
5 c6 ]: t* [- u8 ` ::memcpy(aPacket + 5, &pCube->nItemNum, 4);& P2 I# {4 r n1 {, c* z
D2Net::D2SendToServer(9, 0, aPacket);/ A" r) X, T* o* S, C' h0 H* S) T
return TRUE;0 \' g1 H) ?, L5 U' D
: O k+ D, a' ~( ]; F! t/ g* P5 U3 ~
}
6 _; T; c- p* l6 p$ X
W: Y1 b3 X7 O+ @* y c; K static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
# R! e3 l( i* { V* l+ g' r; P
: t* p# z2 O4 n4 i3 f2 G. a1 `3 z static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存! H9 e: W% S, ?
{! `% `$ p0 n; A0 [% K3 C# S* H1 U! q
D2CoordStrc mypst = { NULL };& A9 b l+ u( c0 Y0 g, S. H6 Y. s
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
& t3 o/ c! \. a7 K, E1 G [1 A9 ~
/ H* a/ W' g. _1 h if (!mypst.nX)return FALSE;
2 L) R* Y0 F R$ R' d4 |% p/ s
! S1 Q+ s5 s2 p* }) `) Y PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
9 D0 G- A% W+ K: O% _, x: E4 r& T- [ |) ~8 V
BYTE aPacket[13] = { 0x20,0 };
- d; }5 N# O$ R. v) w ::memcpy(aPacket + 1, &dwItemID, 4);! \# H0 D+ O' s. R3 r+ I
::memcpy(aPacket + 5, &mypst.nX, 4);* T' k& }7 j" F, I$ C9 i( J
::memcpy(aPacket + 9, &mypst.nY, 4);
[# u* m: D1 D: [+ y8 f //return D2Net::D2NetSendPacketToServer(0, aPacket, 13); o) n* C% }, d& T: O
D2Net::D2SendToServer(13, 0, aPacket);+ I! D3 K+ E0 y; c6 i4 g! q4 O& @
return TRUE;& j0 E0 R8 {2 Y
}
$ }( A5 Q0 _* g
- p. J( @) Q3 c- W. w9 i static BOOL DropCursorItemToGround()! h4 l/ f( [; _8 F. o! a' m- Y
{# t) g( V' T, r# e) D
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
( v9 C4 f6 O p& e5 i% E8 g if (!phand)
2 a0 k% o/ _# W return FALSE;6 k1 k# D$ q# a) h- z
+ H, O8 E1 E% F7 q0 a! e PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);7 i% y3 t& A/ h7 I- T) `/ C% s( B
" Q1 l. {# d. A6 |- g
BYTE aPacket[5] = { 0x17 };
; k# D& D+ p! S8 e$ ?& _8 ^ ::memcpy(aPacket + 1, &phand->nItemNum, 4);" o& t# |4 l( K. i8 |+ N
D2Net::D2SendToServer(5, 0, aPacket);" J+ [- w% n; O' M
return TRUE;3 f+ [" I1 S$ N' }
: Z" h+ }' n# i, a
}6 R$ D6 s' h! `
; o @& [9 {3 C$ D% j6 ]
static BOOL PickStorageItemToCursor(DWORD dwItemID)7 e6 h1 M( ~ @$ x8 S8 a2 u5 l
{8 j: J8 W) o; k0 A! M
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);7 [# q3 f5 w$ Z# ], @
2 T2 i: b* I) A# p BYTE aPacket[5] = { 0 };
2 ^: E! R+ i# @. X% w5 P3 L' P aPacket[0] = 0x19;
v; O. n0 j: v/ E& b ::memcpy(aPacket + 1, &dwItemID, 4);
" d; x, ~# a- { e$ K //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
' s' a. I: | ] D2Net::D2SendToServer(5, 0, aPacket);
) g( }- |# V; _. n0 B return TRUE;* `: T+ y. F" x# p' H7 I
}' {; M4 Z, A4 }) P
# |/ G; T% l; I# d; W
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
6 I& Z3 T' d1 K; k, Q4 l q+ W {' r" B: u5 a) s* @: v
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);! C, U7 b5 H- T6 r1 s! y
BYTE aPacket[17] = { 0x1f,0 };
1 [4 V; ^2 y7 \9 [ ::memcpy(aPacket + 1, &ItemID1, 4);
+ u) x& Z2 Y! x4 a7 D. ^3 j ::memcpy(aPacket + 5, &ItemID2, 4);! i8 l% L+ h) N# k
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
/ Y0 _6 g. h1 \' j, k6 e7 v/ | D2Net::D2SendToServer(17, 0, aPacket);! c a- V1 B8 } |( K# b
return TRUE;
V8 d7 w" S, u6 ?9 W& s, { }! b$ r5 s2 p, e" x) W- P
2 P3 e/ a( _/ F, g7 ~# V1 n0 L( C static BOOL Transmute() M$ u8 q8 y/ i2 R. u
{
4 o4 t) W& `6 M: O" M1 n* x if (!(*D2Client::ptPlayerClient))return FALSE;! @- T& H1 [; q( Z4 G
6 S' o1 o* u: t5 _% _
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))! ~1 ~0 m! U# v
return FALSE;) u v4 v' }9 G3 f
% @3 M% k$ u6 @0 G8 j5 y6 _
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);7 t1 b5 i- K4 q( K
BYTE aPacket[7] = { 0 };
2 \1 Q( h8 M b$ H: U aPacket[0] = 0x4f;$ J( p" ^% S- o# V3 W. y2 Q/ j8 Y7 v& m
aPacket[1] = 0x18;3 ^8 r- Q( o! m& T/ T: h# ^
D2Net::D2SendToServer(7, 0, aPacket);4 M$ o! \6 c% r! P! o
return TRUE;2 G7 n' w) A; a1 ^( F# t" l; Q
}' Y w' [: C" e* K5 ?2 S
};4 R) ~' c3 Q1 H! {
3 x! l/ c# j9 b( R7 k8 e |
|