|
|
转载6 }, a- G1 }3 e9 J! D. U. j
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
: o! w9 z u+ \+ k3 U2 @D2Client:
$ m5 K) B2 x3 h2 J; w- G6FB20AE1为拦截输入框(用于获得命令)0 i: n: e1 z. R. i0 s/ G/ }5 p
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发! @% S0 n9 _/ ^
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发$ `) |, }( y( T- p
6FAF4230为hackmap的loop点 我用的hackmap导出位置- _% N* @3 y! p- h
1 k8 v' I" P! I- r) \: I0 U, o3 u- i0 \0 }# g S
发包函数:/ [! c% K' K2 A- m9 n) h2 b9 b
class D2PKT_ITEM
9 h7 [0 L# h3 D{
! o8 R+ ?5 Z1 O |3 R& |0 V( `#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
2 d: ~" R6 W/ {0 Q& Q#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多" r4 [' R- |* Z4 G
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
: T- ^0 u* M2 \" U& Y0 T#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上) |- f+ S! |( ]5 Y$ l: A
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
7 K) ~6 I5 C- u2 q: U#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
% j% A% Z7 m. ]# g#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏, D( }# |7 ~8 e
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上2 ~9 S5 \4 C" q- k% P, v. H" k/ Y
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -. J% K# o3 C! c, _! ]
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店% p( Y7 B# E+ j# k; Z
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV7 ] {! q- ?* O3 @$ Y
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
+ _; | |# @6 n Q0 U#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带( T: {1 c# `$ K* W& P
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
% w8 p( c) Z8 }4 U6 N#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -+ K$ P8 b2 Y8 w. Q# p
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
' P& [. ~% |( N6 r& K#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
: m6 H9 U. L% F1 o: ]" Z
# M$ U" t; D& f#define PacketItemMaxTick 1501 k3 z0 Z2 J6 _. ]' M, }& |
#define PacketItemPickUpTick 204 c' `$ c+ T2 J. `& i' E P, O* U5 _
( h# f3 W6 ?" k0 A& lprivate:: S0 S; g v) r( ~
static DWORD _PKTItemTick;% Z% \; ? s. a! q6 e
static DWORD _PKTItemAction;
& Q3 ]) d3 ], ^2 i static DWORD _PKTItemID;
" e& j' K( Z. _ c7 Z* w5 L; E static BYTE _PKTPKTType;; ]- E+ m! m6 I/ ?& e! L7 @
public:* b: n$ K* K& d* j; _3 }5 B
static DWORD PKTItemGetTick() { return _PKTItemTick; } H8 x7 u6 m Y
2 b- q# i4 N) @6 X' @
static void PKTItemRelease()
* |" [7 z6 S* U1 X {6 [ S+ P6 ^3 | O
_PKTItemTick = 0;
3 `( G/ p* _* f0 ~3 r" L( V _PKTItemAction = 0; |* A* `/ t* q8 A
_PKTItemID = 0;% Q- n( N1 G* O& ^/ D$ `
_PKTPKTType = 0;9 e1 a* X- _% h9 V
}0 }, q- S8 z( u1 Q4 T
Q: ]! v+ l% D* f static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
" U- \# w, V8 _+ F {
# H0 b! O+ ^+ t4 `* F _PKTPKTType = aPacket0;1 o2 z/ k N. x' ~5 r
_PKTItemTick = tick;9 S7 N$ }# D$ X& t9 E
_PKTItemAction = ItemAction;
/ K; h0 F6 e, P9 V _PKTItemID = dwItemID;3 c3 |1 { I& k4 C
}; k$ X9 I O# Y
9 p, X4 i' I: i$ z4 M8 R i7 J- [
static void PKTItemTellW8(DWORD tick)
7 c/ K5 u9 `2 P0 C- h( @* Y {% Q) A0 O* e, A/ |% h* t) F% p, d
_PKTItemTick = tick;+ x! O% `1 e, J
}
# ?# g# w0 E( E$ e3 W7 T3 n: Q4 r4 [2 v! V6 s
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
+ u6 {9 W* z- [2 o, u {
6 r0 \3 Z2 z7 q if (aLength >= 8): j& S- Z3 T$ R0 \+ j/ c
{
F4 @: h+ H- _" A' @) [ DWORD dwItemId = 0;
w) Q2 J/ h% H8 c: o; z memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
# g4 P3 z4 q5 ? if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE) n$ P( r) Y% Y% {- [
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
" q1 y5 A, U- q' @% g && _PKTPKTType == PACKET_NEWITEM
$ o0 D8 p+ z! Z# \- M )* W1 ^, P/ Z+ S
{7 g* O0 W% k2 F2 M0 u
if (_PKTItemID == 0 && _PKTItemTick)0 \4 q9 x. a3 f% O& b7 G A
{+ Q% b `5 \! D! u! H- G9 }
PKTItemRelease();! h: U0 K* m+ n0 u
} T8 ~9 ?4 E) S) s6 S) [
else if(_PKTItemID== dwItemId&& _PKTItemTick)/ x; t! h, _7 |6 @' g+ i' I
{
7 V' D* ?1 h p/ X PKTItemRelease();* H: p1 `. }8 E, s/ J- F
}
6 \9 f4 ]4 M+ d- A; }# H; ^6 @0 Y }
0 m: \: x* T) S
! ~/ c/ q* Q' ?, r& w; [1 Q" b4 v5 f8 s }
& y8 p+ ?' C; K }5 G! c1 s* ^7 r' x4 X J
: O! S8 N0 c2 w3 D0 H
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored* M4 N" d D0 e2 U5 V: p
{
" t3 W7 b0 t" g if (aLength >= 8)7 D# ` w$ J. i
{
- x$ c/ q' X S' R. b DWORD dwItemId = 0;; N, x4 m* g, i+ \4 w
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
; T" k0 p' ?4 ~" M, l8 |# w/ ^/ P if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE! H+ j( T+ C B% ?8 u$ {
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE7 y: g2 {6 U9 F8 r% N f- q
&& _PKTPKTType == PACKET_ITEMACTION
, u9 p# ~7 P' K3 V: D- q! ]8 | )" T! b/ N8 I7 U. ?' B. R0 Q6 Z
{
. x5 k3 \3 _5 X) o% O& q6 R if (dwItemId == 0 && _PKTItemTick)
8 d$ W/ l$ A7 b5 c: v' x+ C {
- H' N' ]3 w: ] PKTItemRelease();
3 k7 q# g2 ~7 d: o }( x' T% ~) } h. i
else if (dwItemId == _PKTItemID && _PKTItemTick)6 T/ T1 O7 s# C9 G
{
2 s1 f# _. j) P6 }/ e PKTItemRelease();+ {- K! }4 r' Z6 V1 u( L( H
}
3 x% d) ~8 E/ F( y* O+ r4 e: M5 w! _ }/ U C6 x5 C1 X# g" F9 u/ c+ T
) R% I# w4 K' U1 q8 }7 t }
7 e/ J0 y( \/ o9 G* L1 r }* }/ [" `0 r4 L( Y
8 O6 K4 Z8 Z4 Y; {9 G
static void PKTItemGameLoop()
$ q& Z/ _/ H0 _! c4 R {8 R) H8 J: m- q) l
if (_PKTItemTick > 0)
1 r O# L: j: Y+ n0 k _PKTItemTick--;
" S9 M1 t# ~' ^/ g$ r: G! B else if (_PKTItemTick == 0)* W; M1 l f S3 `4 A" v, a& g, ^
PKTItemRelease();
0 @: f( c6 F# D8 q; E, w1 j }
" c5 n( [5 d& t- O+ X
2 i0 i& {5 e$ r; }$ c$ ^ static BOOL PKTItemCando() ! l' m( U8 ?2 M2 K; ?# R
{; [& |+ W1 |5 M2 R) z
if (_PKTItemTick == 0)return TRUE;6 Q- W4 [+ }( t$ T4 `
return FALSE;: u/ z" }9 d8 |! W# E' c
}2 s* [' u0 c# R' ?
7 z: O$ Z6 Z' x3 p' A static BOOL BuyItem(DWORD ItemID, DWORD npcid)
$ B8 l/ ?! `* M {
# ~9 L) B& C8 e/ U/ s( X; X5 ? PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
; n' d4 U8 ]5 _& ? BYTE aPacket[17] = { 0 };
6 ~3 h. j* x( R. ~) n0 N B aPacket[0] = 0x32;
J: ~, F& o# i& Q& F ::memcpy(&aPacket[1], &npcid, 4);
/ u9 I" D z8 [4 y9 D ::memcpy(&aPacket[5], &ItemID, 4);
0 ~5 K1 I0 ]" P //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);0 U: p, k7 h5 E- z: O
D2Net::D2SendToServer(17, 0, aPacket);9 s1 t4 {& k' K& \* Z8 C u' Q
return TRUE;* z5 G( F" c, @; r5 j- S% {+ k
}; }, f# C3 P: R3 H0 e$ s
: f5 ~, T: j3 n. b- V/ Q, b: p
static BOOL SellItem(DWORD ItemID, DWORD npcid)
9 D( n! t0 a l! {! Z {
$ b4 S: O) J* h% s. I2 T9 z2 U+ D PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);( b' D8 X5 b3 H" r
BYTE aPacket[17] = { 0 };6 ~$ D* a9 O8 H$ q. X
aPacket[0] = 0x33;' V8 I. n# c7 u4 m/ Y& G4 [
::memcpy(&aPacket[1], &npcid, 4);* C5 [4 L* k# @" ?* S& \& y I4 F2 G/ e
::memcpy(&aPacket[5], &ItemID, 4);0 G& m' ?6 u8 _. i8 E, [9 z
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);+ f2 G$ M$ U2 d5 z$ m* }1 b' P K
D2Net::D2SendToServer(17, 0, aPacket);
' P2 X* E& z% P( y$ A+ c return TRUE;
2 a4 O0 M9 g+ E7 W }
Q& s4 E8 @2 N7 n7 m F) \& V/ K8 m4 N0 R3 n
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
4 F. A ]* W1 J- l* v+ q7 ~3 _' K7 j% V) l6 b. [- p5 g$ V, j4 [
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);& _. m' Y/ w9 b Z9 j
- \5 D. [6 m0 }: K* |6 r static BOOL OpenCube(): {( g: I7 G; H+ q: [
{1 m( A& W; u) O5 P, i
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
+ \3 h/ J5 W1 h# B0 X$ n% m- p$ a: L4 w# ?
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);! O) p3 G R m9 R- {
if (!pCube) u" K6 y- ~ Z0 `6 y
{# w! m2 \: g8 r9 e1 f
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
% q7 C: b6 V2 V; H$ S2 g6 ? if (!pCube)
a$ m, Z* Z# l% t* W w) J* ~ return FALSE;; u. Y& I. u4 z; g
}0 M/ M& U+ Q/ C: E3 G! Z1 z
PKTItemTellW8(PacketItemMaxTick);: b! p* T6 i, [: h% y/ _2 T
# u" h& W" v3 Y5 _! D3 f
D2CoordStrc mypst = { NULL };
" @: h, z% C0 f4 W q/ K D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
& c+ u$ I, s& ?* Q# B% M; b. l5 I" P. ? @
) X+ ^! v( m8 t; i X BYTE aPacket[13] = { 0x20,0 };
; @' {* Y, ]' B9 K8 i1 }/ Y) H ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
( \; R1 }8 y8 F, i ::memcpy(aPacket + 5, &(mypst.nX), 4);, b: Q) }" q% h; ]% m/ A( X
::memcpy(aPacket + 9, &(mypst.nY), 4);7 V) t, R2 y$ p. K9 O
D2Net::D2SendToServer(13, 0, aPacket);/ X4 \# g6 n2 b( D. J+ A& [
return TRUE;
+ ^% m+ x8 T$ f( I# k9 t5 Z) b: j }3 i0 T3 C( |0 W2 O- W
' T1 m3 p+ y3 @: t' U$ u
static BOOL ToInvxy(DWORD x, DWORD y)
" }; S2 F+ W- z; S' ^, c {2 r% e& T! f6 M9 V% [( C6 N
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
4 ^6 _4 O) s% w" K$ T3 |
7 u$ R: Q9 F) | [7 k if (phand == NULL)
# T) C+ [; ^* r/ ~ return FALSE;
% x0 z! y3 g) c, k
, j- V* G7 A# ]* j: D PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
7 s% p0 @7 Q! d& c
: V5 N* `; X( g3 J BYTE aPacket[17] = { 0x18,0 };
" j7 f8 G) V% f3 \5 ~' s ::memcpy(aPacket + 1, &phand->nItemNum, 4);" c( b2 E8 {8 e4 Q8 J
::memcpy(aPacket + 5, &x, 4);0 P6 d8 Y# c( ~) ]. D. p) r2 N
::memcpy(aPacket + 9, &y, 4);
2 P- L$ Z# r- w `% d1 r7 T5 U9 U D2Net::D2SendToServer(17, 0, aPacket);
! F8 L0 M- d. l& J1 g6 j return TRUE;5 p3 Z; X! G$ \( W% a
}- h3 t/ d( j" Z* \% [( E
% s; u7 ]5 v/ p$ ] static BOOL ToInvRandom(BOOL bBagFix = FALSE)
% [/ @ v4 s4 u% m& U4 [ {
3 E9 U Y1 \7 v UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
. i+ @% O$ s. {3 ], P: D if (!phand)
/ D3 N5 ]5 |, U' z5 q3 { return FALSE;
( R8 q; w9 m: J$ I! i) H int desx = 0;
% U) T* F" `8 _4 } int desy = 0;
& ]4 h/ L* u7 h6 d if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))2 {0 a1 E1 f% }+ v
{
B) @/ G' t3 z8 A3 `# O9 ^ ToInvxy(desx, desy);
; p+ ~3 N4 u& B K e return TRUE;
/ B7 q7 x4 C n8 `+ c) ^ }* ^) U. P' a- ^$ [3 ~( y( J; o
return FALSE;- S/ z' |, ^) m% Q( b7 X* f
}! F2 O0 Z. x3 B0 O9 p g8 Z6 A% ?
; h9 O7 O: g3 ^3 O s! w ?5 e static BOOL ToCube()9 H8 k9 t9 K2 Z; D
{! V) ?: V/ Z/ E, v+ g$ |
if (!(*D2Client::ptPlayerClient))return FALSE;# d5 ?/ C% R& {& q8 I
! e: X, _5 H' ]+ z( f, ]9 Z
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);6 W2 ], [$ l/ o
if (!phand)return FALSE;4 f( n# x, U a7 T2 b
! n8 X+ s- b( r! J UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
8 Q0 S6 d9 O9 ~9 g5 C" b! G if (!pCube)% d; {2 _8 K& B6 U
{
2 \6 C# @1 m- Z3 _/ A6 U+ K# q pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
7 {1 e0 P# x7 E1 X2 w; f; t; b; { if (!pCube || !pCube->nItemNum)+ A4 G" y, A- ?' y$ ~! g: @; m& ~
return FALSE;
; x) o8 n, r T9 z) r$ _/ b; X }
9 V2 \$ t9 g6 D0 \! e6 q
) ^1 e( N4 i; u' y9 P if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))( L9 C6 j, n& R' W- N5 W: \
return FALSE;
, p9 b2 y! k! b% @4 @& z, [2 E( W8 G' H$ G
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);, ]3 J$ P, C( C X% A8 T
" U9 q5 [ F2 _5 _
BYTE aPacket[9] = { 0x2A,0 };1 ~& Q4 T2 B9 Y3 M5 t& v ^6 e* H1 U
::memcpy(aPacket + 1, &phand->nItemNum, 4);
) d" _' q8 b6 _: n% \* F; \ ::memcpy(aPacket + 5, &pCube->nItemNum, 4);6 F% x0 r6 m% ?5 a4 j* J# R& D ?
D2Net::D2SendToServer(9, 0, aPacket);
! n( F I8 X, a8 c$ t F return TRUE;( {5 M. ~) t% |( U
2 x2 b; M. L0 x+ l, C: O }2 o% h8 f9 i7 A8 s
9 e+ v# ]- \. Z" I7 b. W6 z static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
8 r' A+ r1 \" T4 S9 Q
1 M: O& r% |. m! O. q! m static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存# U# h' o3 i7 J$ p
{% `4 s0 g- O+ l3 T/ N& X
D2CoordStrc mypst = { NULL };
' A) P9 }9 Z( ~. S, G D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
# o/ f( e& J- k3 k% w V4 s1 x8 e& @3 x4 I: c, @: X! \
if (!mypst.nX)return FALSE;0 G1 n+ \) B0 ?- j D& v
% E5 u* T0 s8 q: \% C2 P$ y0 C
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);+ s4 H: N' k& x9 ]2 D
1 G% E7 x; s& X5 x9 w BYTE aPacket[13] = { 0x20,0 };
# y$ d* u) X# Y ::memcpy(aPacket + 1, &dwItemID, 4);5 t+ J* c: i1 j3 Z# n8 P
::memcpy(aPacket + 5, &mypst.nX, 4);5 ]# h& n' d# ~* P% n! k2 [. x5 q
::memcpy(aPacket + 9, &mypst.nY, 4);
6 Q5 f! Z3 P" U8 ?0 s" v //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
+ m; ^2 B$ G2 x* z4 V" g6 E8 S D2Net::D2SendToServer(13, 0, aPacket);' I" F6 G( F0 d9 I( L; c& |6 e* T
return TRUE;
% r: s8 [6 \/ z7 F }+ R8 ?/ p- [6 b+ w" ]4 v$ `' X
7 ]$ |# u' F* v/ J; j static BOOL DropCursorItemToGround()
* u* a& n J- V {3 @+ [) ]5 i3 S! m! A7 z1 @
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);' e8 X1 ]+ R8 S0 T5 f
if (!phand), ^2 a$ o T/ J; B6 U: c
return FALSE;# L- |& m- @" _. V; ?
4 }* ~' i3 | S* c4 ~ PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
2 ], q( x+ E0 f$ _ `1 K! p) v! D' a# s
BYTE aPacket[5] = { 0x17 };
1 ~( ]+ Z3 }% U9 a ::memcpy(aPacket + 1, &phand->nItemNum, 4);1 [$ v- j6 |( L/ w: t4 `& E: `
D2Net::D2SendToServer(5, 0, aPacket);. e- q6 D8 l+ ~; ?
return TRUE;' V9 m. t/ s3 _0 R
2 v" O8 U2 Z. A; i }
! r$ S" E# m- ~' D
% g; ~( W. Z2 }* P$ H: e l static BOOL PickStorageItemToCursor(DWORD dwItemID): Z+ d9 K# R) H6 I2 C0 b
{
7 S( \+ }( V! u4 y: j PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
' a' i$ [ I/ X7 t( r
' U) Q2 o* g; N$ M, } BYTE aPacket[5] = { 0 };; G ~. B" v* ^- o1 U, {: C% X5 ~" Y( G
aPacket[0] = 0x19;
; c1 x* y5 G# @* y4 z0 o* b ::memcpy(aPacket + 1, &dwItemID, 4);
; W' F, `. c( F% H* k9 [- R //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);3 a, C+ U. T; P8 Y0 n3 D2 R, e
D2Net::D2SendToServer(5, 0, aPacket);
2 O. }* _9 }) b$ K; a4 V return TRUE;- b4 M/ V) A( V: N
}
) K, g2 |" y1 e* M& A
8 v, R" r4 g" ?; | static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
6 V( T( b: x! U: i. f w5 a {. v8 J3 T' j8 U3 s0 N- Y
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
$ g& Y0 J# M/ i0 U2 C" a2 ` BYTE aPacket[17] = { 0x1f,0 };- f! z( I' A: ?; R; X* I* s$ m
::memcpy(aPacket + 1, &ItemID1, 4);* H/ w: q" [9 B' E( d
::memcpy(aPacket + 5, &ItemID2, 4);
1 W3 X. D) E: m //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
, B; C" }6 D) M7 F$ N& w D2Net::D2SendToServer(17, 0, aPacket);9 E% i. `9 ]+ W9 ~! a; H5 V+ [
return TRUE;5 m) A) L' [- t' s
}! N; g! h2 y* J T, m9 M
$ L F! {" \& N4 O( X. @2 d
static BOOL Transmute(). b) t0 h8 ^# ~+ ?+ M
{
, I- f0 a8 I( L& r- ^9 U- t if (!(*D2Client::ptPlayerClient))return FALSE;
5 S4 N) ]; Z5 }# H6 u* T, ]" v/ k6 V" b; ^ V0 C' [; n
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
t- Z: Z: n9 [4 L& f return FALSE;# l- V: Y/ _+ {: t; C" s- p
! B* z0 G6 U+ \' P0 U1 G PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
& x# e/ P/ Y& n BYTE aPacket[7] = { 0 };
! m; [" W" z$ U, N, V aPacket[0] = 0x4f;
+ ]: T0 N/ { G+ R! X2 z aPacket[1] = 0x18;: I1 [) \7 M0 a; |
D2Net::D2SendToServer(7, 0, aPacket);1 X4 g! p, R# c0 N4 K* W$ e
return TRUE;
2 x4 J- u: {( J* E }
% o0 ~- k) R7 S1 Z( E4 A};
% d `- e4 A0 E, j% c) a+ Q! E! e, y; R
|
|