|
|
转载) z3 m' c( W. ^
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
( S( t7 `) c+ UD2Client:
+ V& Y1 H/ L5 Y5 Y+ |6FB20AE1为拦截输入框(用于获得命令)9 |7 O$ c! R0 J$ G5 e' C* R! f6 M
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
7 x D6 O+ q# l% }6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发7 s- ~6 T4 Q$ ^ ?. {
6FAF4230为hackmap的loop点 我用的hackmap导出位置' K7 e) l1 B R5 s7 N% N
% o8 {- E* ?0 A, p, u, l. ?& P) l/ Q( ^7 v
发包函数:
9 Y" K0 B# v# {; B& ?3 x" G# ~class D2PKT_ITEM
v: R L, q: y, q1 \1 U{
$ n/ w" E) d ]#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上) k9 b& U* o3 E0 P/ F
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多+ S" o6 X, ]: x9 G# x
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上7 m [( W- }5 K' K. a0 f3 L4 A
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上7 W) t8 |$ j, H9 L, u( G* x* d
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH5 a( o; _, T, ?8 I" i
#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
3 K, x ~! e! a7 k5 f#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
0 Q- R' ?3 K- Y( Y% r#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
: ~4 i, z8 j5 B8 ]& G#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
3 a7 E2 b4 @/ R. q/ C, \* B3 ~#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店7 B$ L5 l, T4 W2 E
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV' p' F( X* J. F+ J
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 ; q' ~4 m3 S. D
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带3 K& E; s3 D. e* E5 W* k e+ x
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
$ N/ [& s) d7 @* {#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
$ N; J/ D' ?; g#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
6 b4 o7 K O" k0 z& ?6 C#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -; ]3 J2 G7 Y) @# p u! {- y2 v# c
/ k2 V0 z* S& m h. v3 N#define PacketItemMaxTick 150" v1 e; ?* b, A; S
#define PacketItemPickUpTick 20) k) R8 i; S/ b- v4 \$ P. l: z
: s' N4 u: T' H5 S. I% vprivate:
5 g, U \, t) z) { static DWORD _PKTItemTick;
" c+ ^, ^1 Y+ K2 {' E0 a static DWORD _PKTItemAction;. B5 H# H8 A7 v8 d8 k4 I4 v
static DWORD _PKTItemID;
) `) b) z6 O6 M- U static BYTE _PKTPKTType;2 N7 f) ~% p& l' \: O2 d6 m% o
public:( M0 m- m+ O" M) O
static DWORD PKTItemGetTick() { return _PKTItemTick; }
, F+ m: X+ p7 B+ v$ f7 o9 Q0 d' I! e0 G- q
static void PKTItemRelease() & M/ P# U% _0 S( D
{
$ U. F3 y {& c* u _PKTItemTick = 0;
' q" z# w% h! O% ?( T _PKTItemAction = 0;
2 @) X0 @8 X. q- N. d2 e6 M _PKTItemID = 0;
% a* T' a# I n% L+ j# H _PKTPKTType = 0;) l, ^# R$ h% M
}
1 I4 m2 Z8 @& t9 C7 e; m% K$ z: G4 ^) @# y
, w" R2 }. M& A" D4 s1 ` static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) " t5 r7 n* K( O5 s
{
4 J: L }3 h9 A0 a2 p/ Y; O _PKTPKTType = aPacket0;
& C, [, Y9 v9 c1 T8 g# h! x _PKTItemTick = tick;) f( M, G7 H/ e5 M, R8 _
_PKTItemAction = ItemAction;
+ j c5 G1 j4 |/ \; L4 L) N _PKTItemID = dwItemID;- I) M4 t- I; E8 y4 q3 F! v, V* M. D
}$ b& G( `0 a4 r# [* g6 n' z! O
! c8 ~2 ?! ]' K2 [/ r. J
static void PKTItemTellW8(DWORD tick)5 Y. W0 w3 K: w0 j' K- k U9 O5 P
{' T1 }$ K4 G; c* g: n/ J+ e. B
_PKTItemTick = tick;. ~ L: G0 c& N9 o# n
}
+ q3 u9 s9 S- [0 h
$ g4 a/ u# Q6 Z* B1 q( y static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
% ~. k- o3 Y8 F4 r* w {
: x5 E5 c5 t/ t8 Z if (aLength >= 8)# _' V8 I9 O) Y7 c; ]; U
{3 |% N4 n* I; n( f2 `) g( W- S
DWORD dwItemId = 0;
( R& d l$ N: m$ ? memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));- {; p& u) ?9 i& C7 Y
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE; ^$ V7 A9 j# g6 C3 E2 U0 M
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
% \* Y+ B9 U2 R# m! Y) q. F && _PKTPKTType == PACKET_NEWITEM3 t: u& H% S9 a% f6 \
)4 ]* q5 i9 ^0 v, I5 D( e6 Z
{6 ]$ l. S; a: N$ m0 I2 l+ a8 J
if (_PKTItemID == 0 && _PKTItemTick)% Y5 q( o4 ^. j8 K% M% m2 b
{% U( j& k* _! z
PKTItemRelease();
5 l; z' s% O, V }/ C1 f( l# @* U( @+ R
else if(_PKTItemID== dwItemId&& _PKTItemTick)
) E; }( j# B, V# }) S {
6 L' g4 A! k& [ PKTItemRelease();9 _! K8 W6 l4 s- e3 K3 J
}
& n9 T4 {: G$ E1 C+ t1 u }, v$ y. }' [. |& b: d/ v+ \' g
( H& Q& _ K7 }2 s, M$ z
}
& K$ g! v8 j0 |+ c& Y }
7 G- f( T |- W
1 Q) }; x$ O M. f static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
# S" ~' R- _$ w! } {" y |' A; R6 j4 H
if (aLength >= 8)
; Z7 T+ K& {: B5 C! {+ G {
, m. y1 a$ n, A3 u& a# X+ P DWORD dwItemId = 0;% F+ z7 G! z! t4 F4 d9 Y* X4 A
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));9 Y* ?" A& [5 |6 ]; u s% ]
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
% ~# a& U: {3 S' C$ c && _PKTItemAction == ITEM_ACTION_FROM_STORAGE d: Z/ I. n2 t8 ~
&& _PKTPKTType == PACKET_ITEMACTION
$ K$ y4 A7 g" m1 i/ S6 v& s )
: b& ^* ?$ ]4 C+ B$ |5 v6 i {( P9 }( J2 Z. Q$ _
if (dwItemId == 0 && _PKTItemTick)$ k5 o& x6 R% Y4 O& v/ e
{/ w$ s" ~& _2 ~* H. e9 A. i
PKTItemRelease();6 z8 i; w& U7 y
}2 r/ D) }* y3 S/ l; Q
else if (dwItemId == _PKTItemID && _PKTItemTick)
9 o0 M3 ^3 L0 c/ | {; v6 i4 Y, H& l7 k+ B$ V- ^
PKTItemRelease();
5 R$ I1 {# @- z" A2 G e# P }
# N* N, ~6 h4 l- d' n6 j+ O/ Y6 @2 P; v) Y }- c6 o( N9 i1 m! D% J1 p! l+ ^
, ^. R5 F2 [ ~' @6 \& W
}6 |/ A6 q8 d$ A. v1 l0 e+ l
}" ?1 x& m1 A+ e( i: X$ y
9 r; t, ^9 d* u8 m( T2 Q
static void PKTItemGameLoop()3 \, i, f8 ?$ h# `! _8 {/ o
{+ M7 ~6 d5 t8 q8 T1 S
if (_PKTItemTick > 0)
5 [$ s) f$ Z' M) F1 j! n" {0 p _PKTItemTick--;
5 ^6 i: M- t* A& H& l else if (_PKTItemTick == 0)
3 t* u. w% B% g* Q PKTItemRelease();
z: }8 B, N+ h }
) M" F C0 p5 s" h: N5 c% b) I \. O8 \, N( z) T
static BOOL PKTItemCando()
# P4 `4 H2 F; W7 j2 H& ? {8 |! E- L. `1 V: m* M
if (_PKTItemTick == 0)return TRUE;
& _! b; X# C% o return FALSE;
, ?( ]+ Q& v* }- k }$ a( }/ ?8 r5 g3 c1 R2 }: m
( M) A8 F; U1 u4 m4 e
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
0 R; U( a6 u% d2 V {6 |& z9 u( q( ^7 X) g2 u( n
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
! @; }6 K9 T" ~5 d$ t BYTE aPacket[17] = { 0 };2 P% T( b5 G' N7 E4 M( ]
aPacket[0] = 0x32;1 D* h: M6 I/ W
::memcpy(&aPacket[1], &npcid, 4);
: m, @7 ~3 c4 Z3 o# i- L7 [0 x ::memcpy(&aPacket[5], &ItemID, 4);+ G& ~+ E7 v# I
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);4 E0 j5 j4 M/ y' w& S6 c. D
D2Net::D2SendToServer(17, 0, aPacket);" e, z; h- e; ^% [
return TRUE;: T9 ^1 D- y* A% l
}
8 R) @* {1 o1 J1 ]$ T/ ], f" [( J; z# j T
static BOOL SellItem(DWORD ItemID, DWORD npcid)8 K, ?6 A+ Q1 U- {( {, g. P) N
{. R/ y' b h4 k
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);) K# r; E0 k& g# m9 {, V' ]7 \, I8 {
BYTE aPacket[17] = { 0 };
8 u& T# U; z& b* J; h T aPacket[0] = 0x33;" S0 T! Q; F8 n: l% N+ T
::memcpy(&aPacket[1], &npcid, 4);
" f. P0 Z5 {7 \+ v/ C& s! s5 |! @' [ ::memcpy(&aPacket[5], &ItemID, 4); I% s5 y" {, l8 m8 [
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);9 E/ S" J; c. @9 w8 {* V7 _
D2Net::D2SendToServer(17, 0, aPacket);
, I0 f' V- T, y$ \2 x return TRUE;
# K" {5 |. o$ S# T }$ K) e9 ^. {6 l! m! E7 s
4 n P9 a* k( l5 O; L3 M static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
5 a/ {8 D4 ?2 ~9 L a' I) e! q0 J8 c2 I: q) }# h' \
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor); C9 B3 ~* c" q8 a
' v# t, |# G2 x9 {
static BOOL OpenCube()
2 Y5 I. H+ Y% Y4 W! o {% A1 h) j8 T6 S6 P
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
, \' ?. G% l# M4 m4 Q+ n8 G# U. N8 B7 P1 E+ |6 v$ u+ }+ A8 y
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
2 q6 C. v8 i6 U% E: Q3 K. u& V- [( o& I if (!pCube)1 v( Y: v( h6 b& v
{
# `" m" d1 Q( C. p2 C, J$ x6 f pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);) o4 t: z! |; o# C
if (!pCube)
9 ?4 M- d( H( l return FALSE;4 ?+ ^) R! [: r) _. I/ l3 N8 W
}
- m X3 M% _6 z, n j PKTItemTellW8(PacketItemMaxTick);- X$ C. d4 |0 V' @/ @
5 x7 F z' k) q- W8 X) | D2CoordStrc mypst = { NULL };2 M; _6 Q8 m1 ?" `4 w) G; Q
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
$ }3 o6 M4 [0 `. q% [3 h
3 @. [, O- Q! Q BYTE aPacket[13] = { 0x20,0 };
% o8 I6 B: [, W* d# @ ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
$ s( m: v% `6 e Z ::memcpy(aPacket + 5, &(mypst.nX), 4);
$ h1 H5 |+ V7 @$ @" D8 y% y ::memcpy(aPacket + 9, &(mypst.nY), 4);
! X% ^6 f5 d- i) s D2Net::D2SendToServer(13, 0, aPacket);+ E2 k4 `; _" i1 d9 c
return TRUE;
% Y( ?8 h) N7 m6 g8 I' d0 U }7 j5 y: B( T& B A
$ b) @- j# q3 I+ B+ o
static BOOL ToInvxy(DWORD x, DWORD y)2 H; d. V' _3 q: o( V
{* S- z/ R5 H/ p! [% ]5 S
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);" G1 F9 p3 d. y% G' r. s9 r5 W
+ T% n. W& a3 H4 l3 f0 n z3 h( F
if (phand == NULL)
4 O; q' S& `( p4 d! j( d7 J return FALSE;
/ l7 L6 i1 H5 [3 a6 e2 \' K
4 C( P& @/ d+ `: }' j PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);7 s$ V6 }, V7 h, j
' \" |, H! m$ B4 G/ U
BYTE aPacket[17] = { 0x18,0 };
1 T+ f+ }+ T% N/ w ::memcpy(aPacket + 1, &phand->nItemNum, 4);
# I7 h8 I4 w( S" O; }) B- t/ m ::memcpy(aPacket + 5, &x, 4);; F, t) g, j0 o# E( t# J, k
::memcpy(aPacket + 9, &y, 4);' i2 p1 x9 k5 N D5 x
D2Net::D2SendToServer(17, 0, aPacket);& X' N6 P1 K* R& h% D/ J0 n
return TRUE;' L% x o$ f8 d7 }0 y4 a
} U* v" d# ]7 E( B
+ j' m) G$ U$ i+ X
static BOOL ToInvRandom(BOOL bBagFix = FALSE) : Y, x. ? T" E. i: P! I
{
$ C0 h' \1 A0 p: J7 L/ C0 f! J: q UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);- W( g- O- T: @9 Q
if (!phand)
% ?5 p9 ?# l8 @7 U' M2 A return FALSE;
7 d& v: k+ d ~) s6 |. y7 z9 E/ [: j int desx = 0;
7 Y; O8 L2 `( F- _ int desy = 0;4 L1 ]3 m$ t3 m5 ?& j# D& s
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
- c4 @" ^4 j1 z) p' D {, Q( d$ k8 a/ B: f8 g g* R
ToInvxy(desx, desy);% J+ x3 t8 L+ @( S6 u1 A! N: [4 ?
return TRUE;
4 H7 Q1 e7 }: \# g8 X& H* P' \ }
! Q7 O4 X8 ^! t. \: F# r! Z return FALSE;
, Y; V- ~; ~7 C& I7 o, } }
7 }6 v# [) v$ R4 D
( G5 f9 H! P7 e- H2 s$ @ static BOOL ToCube()5 C0 B4 L: s. A& l
{- W) A1 F' R- _, p, y
if (!(*D2Client::ptPlayerClient))return FALSE;% m5 C. l2 i4 W+ `, B
# A8 O# X1 ~( E @- F UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
& m/ E( N* t! N2 |1 R. u if (!phand)return FALSE;+ \: C6 m1 q/ ?% a e, j
% w" j, g4 Q! I5 U0 G
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块* X* |4 E, Z* d2 W- r% m( h
if (!pCube)
" y1 ]: d ^& P1 _) w# o: T2 M {
' {8 G4 j# z, o6 K, ? pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
' y0 ]; N- I! v3 s' N" y0 ` if (!pCube || !pCube->nItemNum)
R( v7 r3 @+ ]$ S return FALSE;
; X/ ?: U, E$ D. g7 R }
5 u- a: k% k! l+ n% L# j g
" Y2 J0 a3 m4 t* U1 D) m# ? if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
$ E! E1 g) ?2 \- h1 b' V4 [6 }$ a return FALSE;# X* }0 i: {: O
l: \0 ]/ D' h PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
- ?7 ~. Y# s4 T s' G4 q) G& C& a
6 J! X. }% f/ W BYTE aPacket[9] = { 0x2A,0 };! y, X6 `" |8 |. W N. ]2 V
::memcpy(aPacket + 1, &phand->nItemNum, 4);
9 _; q! _# {) ]- f2 n ::memcpy(aPacket + 5, &pCube->nItemNum, 4);, m& S O* h& b; G! G! F' }
D2Net::D2SendToServer(9, 0, aPacket);
! S1 y; {' p4 u6 c return TRUE;
* ^+ Y- v+ d, s9 x: U E1 `! P! j! X" |. m5 x
}* m9 Q3 a: B& p- i0 r3 x
' }" W8 l( \, m6 \- M1 r
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);) E* X! V0 q. I4 E* C) t8 V
' @4 c F0 ]4 M( P! g
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
) s8 h1 g9 D* b/ F& _, S {
, B' t9 N) a) X* | D2CoordStrc mypst = { NULL };
* @2 b) A/ P- k4 v5 ?- Z, n D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
* c) e/ M! m$ P3 v3 e. \+ n+ Q3 E, U" C* Y: p8 } B$ ]
if (!mypst.nX)return FALSE;
0 L! n% e6 [6 p * |# g% Z( _% {: ^# Z
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
- _4 t( D) q2 y' u/ j$ G9 e& W1 @" F0 t+ p/ G
BYTE aPacket[13] = { 0x20,0 };
+ {) A% @5 M' i ::memcpy(aPacket + 1, &dwItemID, 4);. l2 Q; |8 ^, ^+ F
::memcpy(aPacket + 5, &mypst.nX, 4);7 A0 j9 {) p% ^6 x- o2 ^# r( S
::memcpy(aPacket + 9, &mypst.nY, 4);( }! ~' l) T8 b" n! J, f
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
% p' W" G6 Z' ^: M! l8 Z- r D2Net::D2SendToServer(13, 0, aPacket);
) E& x7 s; f' N7 ^3 T return TRUE;, O! \/ i L/ m2 c6 S9 R
}# X5 ^, b \! ]# o N. W, J
7 t. C3 s5 f& O; t% _7 s1 ~
static BOOL DropCursorItemToGround()
/ F9 D+ W" T [- |8 g% r/ g {0 Y. s0 M1 l- C a9 _7 M- g
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);3 L4 {2 d: N5 \
if (!phand) J" f( Z6 q: Y, t, b
return FALSE;
3 C7 j6 L1 P! ]* `& v6 X8 i+ D/ [ @
1 j" T- o2 H# {5 W* ?8 i PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
: }5 h- P6 h. V, w) p( s5 |( Y3 H9 V9 `9 N7 S
BYTE aPacket[5] = { 0x17 };* M2 g& n! \3 @2 U
::memcpy(aPacket + 1, &phand->nItemNum, 4);
0 L% I3 g! u; ^( P: [- | D2Net::D2SendToServer(5, 0, aPacket);* F( \5 ]# \7 }8 `( O0 W# ~4 i7 R
return TRUE;5 p3 Q" N3 ]. D$ X- J9 ?
+ R" @# a" M0 Y9 h; q }4 z, d B. j: F' e: K
$ i( `5 R4 i; _5 q/ V
static BOOL PickStorageItemToCursor(DWORD dwItemID)+ S- e% T# t6 {$ m# h
{6 i! R9 c7 Q* f' I4 J Z0 M! ?
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);# a! |3 @; R i: i
/ k( M* o" D) d BYTE aPacket[5] = { 0 };! E- S1 B& `* H% f: t: |
aPacket[0] = 0x19;
' [; F, A) X; z8 p( y7 r1 K ::memcpy(aPacket + 1, &dwItemID, 4);
' |9 R' a) \; f! u; v //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);% N3 B0 v! f6 T
D2Net::D2SendToServer(5, 0, aPacket);* U6 y" y# W! M: N5 Q4 @6 A
return TRUE;% b- v; y$ F- M, k( a8 Q# H
}
5 g2 z/ v- w. B! d1 D
* v" ~2 C9 y1 U3 C) ^ B0 Q% a static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
- v, _) P8 Y$ H8 e& C* S/ c( E {. j, X6 u) o' Z* e7 G3 U
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
# a0 N+ d3 ?/ N) e BYTE aPacket[17] = { 0x1f,0 };
) Y5 o" b$ @% f4 i' N( [7 `# ?9 J ::memcpy(aPacket + 1, &ItemID1, 4);9 T+ p9 h" ?+ u$ B
::memcpy(aPacket + 5, &ItemID2, 4);% q- D- Z% x3 g2 X6 x3 X, n
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
M2 J. B9 G9 ]+ ~4 n D2Net::D2SendToServer(17, 0, aPacket);
; h- p- Q1 a( _( C0 _ return TRUE;2 h( A B0 s$ X8 i
}2 S2 o2 T! x# ~2 Q J9 o
7 Y6 S+ x0 K! b
static BOOL Transmute()! R- }* a3 v$ l* c- d" `
{
) h# Q( @5 N3 z! ?+ k6 }! E if (!(*D2Client::ptPlayerClient))return FALSE;. w- L# \& {, L5 k3 b k
3 h7 _+ t2 t' ?! i M if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
l( q! ^ X' b7 i return FALSE;" |6 J0 ?+ s! F9 M: {
9 w |+ Y6 p0 E2 m PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
! n" o4 |1 ^( Y2 W! X. u BYTE aPacket[7] = { 0 };1 r1 k6 ]8 }1 r5 h
aPacket[0] = 0x4f;' I4 V# d8 X, a! L
aPacket[1] = 0x18;6 y' V& h4 L8 P
D2Net::D2SendToServer(7, 0, aPacket);
% [' y6 k3 V" D( K return TRUE;+ [# k% T4 M5 l ?* p# v9 `; T
}% _6 B2 J+ d0 S9 K0 \. l- l
};" f3 H, x& u4 J$ l1 b& Y9 R# z
( U( ^0 p( O5 g/ b6 U- x3 k1 v
|
|