|
|
转载" G8 {, `( m+ _. q
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:! R l) {+ i# O: ?
D2Client:) t/ J7 F/ w3 x0 b& M% }
6FB20AE1为拦截输入框(用于获得命令)
* p7 d' f7 f. U# h8 }" Y6 m6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发3 w1 c8 Y7 M8 `, Y. S8 X" p3 U4 H) j
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发. |) V9 X8 F0 r& i# L5 l
6FAF4230为hackmap的loop点 我用的hackmap导出位置3 V/ F- _3 w, K7 w$ E W3 c
# E6 i! i6 I5 h7 H, I
* I0 l c2 X' S8 M: L1 z5 j发包函数: c$ c O; B" f# H
class D2PKT_ITEM. B' U! Y: X k* x
{, F8 N- s; o: s" s: }+ b; K
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上. D% H0 ]; J- c2 z
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
5 [1 k, C1 `3 Q# [' k4 k#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上. R3 B# f! h1 J: k" W4 U$ U5 Y6 b
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上3 ]2 [, A& d0 S3 ~
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
, D+ L3 U8 l1 ], \$ O#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上: e$ |- `/ i/ i9 b, z1 d" f
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏. r! m! u1 l5 g& V% z u" Q
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
! ]) U/ ^% N N. d4 M2 F#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -( B! G/ l' E1 [( K, Q: Y. z& d1 d9 }
#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店* [- }8 m7 L, |; l5 q
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV
5 R& W; K3 j1 L; Z- W1 T7 h3 ?; d, I#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 , f+ }% O7 H, @
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
$ }% Y# J9 Y+ i# |2 K#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上0 s) A) ]8 B" V& P+ t/ F
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -; l% _6 o+ l. v$ \: `- Q9 ?! ^
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上; W* X$ p \& R3 V' ~- H
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -+ |+ o' _& [; B7 J" \. D
# Y3 j3 F2 h7 Q: i- t$ t( |#define PacketItemMaxTick 150. F9 K5 r8 s( Z' }
#define PacketItemPickUpTick 20
, T( t4 c- a. ?2 }) X% [- r9 E I5 d( @" h [" _1 {% `8 k
private:
- S; X2 u3 Z4 ?+ G7 J( S static DWORD _PKTItemTick; I! E% K+ r$ _, A$ Y" E" g
static DWORD _PKTItemAction;
7 y& q6 C* P& b* h+ C1 y8 U static DWORD _PKTItemID;! p6 S1 t3 J) m0 a
static BYTE _PKTPKTType;0 l; j% t, Y" i7 z7 g
public:
9 ]& _4 v7 b9 f' x) g static DWORD PKTItemGetTick() { return _PKTItemTick; }, t& r4 G* R- d: I$ o) ~
; ~5 p/ _( K5 D; V4 k- v# G static void PKTItemRelease()
( ^0 R D+ M! G/ d# u {& [. M: P+ s: ]9 }& t
_PKTItemTick = 0;% b3 x2 i. `5 c* Y3 O* [. V
_PKTItemAction = 0;# ~" p. o) v! f* ~$ a0 s" e
_PKTItemID = 0;
! n1 I& y; Q8 I3 \+ f _PKTPKTType = 0;
; I$ a. p u# |% M: o }
) C9 _ E& E/ \8 R0 _/ C
* M% D0 `% w* f# O: f u# t static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
( y4 i- Y$ R5 H5 p9 |) o# I( u {0 m. z# h/ h+ C; n
_PKTPKTType = aPacket0;7 H, S% y E: A; P$ U1 ]: _
_PKTItemTick = tick;( g% R/ C6 q8 V% t
_PKTItemAction = ItemAction;
7 L: C7 b" r' P; N _PKTItemID = dwItemID;- M8 u1 K7 h5 a5 g$ _* Y3 k
}: ~9 O( W, ], o! ~0 v* [6 g9 D
0 P7 K( P* m$ _) S2 ^5 O$ X static void PKTItemTellW8(DWORD tick)8 G1 U! B, O4 U) T: x ]
{* n) }2 ~/ T+ U5 V- N
_PKTItemTick = tick;5 P6 v6 _8 B3 a v3 b7 \9 \( a; M
}
+ ?2 p" r0 B. K5 H7 [+ j
0 ^9 J2 _' o5 ^# N3 B, K static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
) K' W0 ]# V) l8 | {" A# s+ Z6 D, j0 \0 z. v4 ]$ l
if (aLength >= 8)
2 q! `* h1 M8 L) w2 t* J$ i {0 p5 r& Z- g5 D4 F: j- U
DWORD dwItemId = 0;6 H9 w; M' ]$ _- l6 r+ v H
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));. C( u8 |" R" @' S- f9 D* Q+ x
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
3 N. r& G; d2 {$ K# ^ && _PKTItemAction == ITEM_ACTION_TO_STORAGE
, @7 n* e* ^ o( m F$ S0 R && _PKTPKTType == PACKET_NEWITEM/ m6 c$ w: @( k: t# G
)
, F+ r7 M' F: Q# G f; o. X ` {
8 b& n# X- k/ ~7 n+ w if (_PKTItemID == 0 && _PKTItemTick): l' B$ C4 Z% \6 z8 Z5 ?# H, M: D
{
# K8 T0 ^7 {0 T7 _9 g0 k PKTItemRelease();6 K, H- }+ |, w4 y2 p: J0 D
}/ W3 {- J) J; o
else if(_PKTItemID== dwItemId&& _PKTItemTick)
0 L3 e6 D7 Q& Q8 Q {
& S- m7 [. N$ ^; `- [ PKTItemRelease(); K$ @) d$ g T# s) k
}$ F" M/ {9 g' F
}
) T- ^" Y7 _% g# {( I/ T$ f+ s
$ o% U6 ^# ~8 S }! S9 o* c7 s; L, U( w* r; q
}
' n( k1 h2 G9 F6 d" p, `% D1 ^% `4 n- k6 b
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
1 K$ f2 f9 T2 w5 E {7 t; F! _8 Y* [2 ^
if (aLength >= 8)
9 |1 Z( H, m3 D% X' @6 R {: ~+ u5 P+ M k# C; P- ^
DWORD dwItemId = 0;
) d! ]* U A, b9 ~ memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));7 }8 t& @8 r5 r2 B( y2 w+ R. h( h
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE( n) p% T9 _, A9 ]: |
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE
, Y `- l, z( N# }; p9 n && _PKTPKTType == PACKET_ITEMACTION
* k& o& W% N+ U' O" \ )
# ~8 Z1 [6 Z- s! ]( l0 J {
8 j/ |5 H- M0 |- @ if (dwItemId == 0 && _PKTItemTick)
7 f2 V( g3 r: {! Y {' _; [1 B/ z2 v# L% [& F* v
PKTItemRelease();- n' o' O* X5 e- |5 f, U& u
}3 s5 M; {& ~) n( y
else if (dwItemId == _PKTItemID && _PKTItemTick)
: ]# i/ l( B& y& \+ G {# a) F. ]5 k4 Y4 t1 U* j; w
PKTItemRelease();2 L+ d& y0 e# Z2 R
}
; \; z/ y: ?7 v7 J0 }. j+ l) }+ L }+ l1 s+ z5 S. @) K. [" G* k5 X
# [! D, V4 V( _
}
+ I& G6 M" ~7 S# Z1 s }- `2 A. I/ \/ _: ^' Q1 w$ s
+ s% R& Q& e) S0 v& `# R7 B
static void PKTItemGameLoop()
: K' Y/ S( A( {% g$ s4 M6 K. x1 o {- Y5 o* z- C' Y1 I% D
if (_PKTItemTick > 0)
' z) I8 V6 d9 D2 |/ ?: g _PKTItemTick--;# ~. Y, u$ n3 ^/ z+ M' T
else if (_PKTItemTick == 0): w: r. e% ]3 L" e; T
PKTItemRelease();8 H9 M5 N3 @( r
}
& C- K' u$ e" m; y2 Q- `- f' {2 J1 b C
static BOOL PKTItemCando() / a$ e( m# W( E- {6 n! L" ?; V
{0 {1 A9 N" L4 F; k% G
if (_PKTItemTick == 0)return TRUE;
+ H* @# X6 ~ w8 M8 \8 z" V# U return FALSE;' J. q8 M& \& ?" K6 e
}* \9 H4 e0 s" [+ u6 @1 b L' v
2 o- n) Q( B1 w. R% p! F2 U5 N static BOOL BuyItem(DWORD ItemID, DWORD npcid)# f1 k" P7 k0 ~2 @
{
' g# h7 M- `8 v# d PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);- {% J/ v7 v7 }5 H- k/ |8 {
BYTE aPacket[17] = { 0 };& \/ }8 u# p0 E4 Q* j
aPacket[0] = 0x32;& l( q0 K; o ?
::memcpy(&aPacket[1], &npcid, 4);
* |1 U! L: k1 Z ::memcpy(&aPacket[5], &ItemID, 4);
2 S' m$ b4 p, p. [2 {3 B2 }2 U //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);! V$ F: E6 D( m
D2Net::D2SendToServer(17, 0, aPacket);
, U c( O# {. N return TRUE;
1 }# Q# q" ?! X/ B+ A }: D. B- t0 R+ v# z/ q8 W
& Y6 h& c1 V% O3 O) y7 E. r# O0 X& u static BOOL SellItem(DWORD ItemID, DWORD npcid)
2 [2 w! P' I5 M: r6 p, b0 k {
8 n) n, T4 k6 \/ `7 D PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);& H: C I2 O! Y; Y: ~! v
BYTE aPacket[17] = { 0 };; f5 x! j6 U9 `6 Q) z
aPacket[0] = 0x33;
0 }$ ?+ E$ a# e. `, V) a ::memcpy(&aPacket[1], &npcid, 4);# Z9 L- k- c- T/ G j
::memcpy(&aPacket[5], &ItemID, 4);( c$ \4 j1 B4 X8 `
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);6 L* k0 V7 c; ~+ M2 B* B4 d# q' S$ y
D2Net::D2SendToServer(17, 0, aPacket);9 W- D1 `0 ~! R5 T2 s5 K( z4 g' M& v. M
return TRUE;' `5 \2 s* o6 t
}
( n7 r/ C1 R' ]% H& e- z3 w1 ]: @! s# Y; ]3 u- k* t- Q& m5 `
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
: y X, |% G& t. {4 p
4 E k* y- E: N9 j* J& w! g static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
0 _/ h$ h- W6 l3 o- B! x6 f/ t9 P$ s3 T
static BOOL OpenCube()
" T0 z1 O% E5 p {
3 D( [) ]& R. q if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
' ~$ S7 ] a# \# q* J$ z: |! g( s5 _ z1 n
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);; S1 B. w3 K: M- Z% U
if (!pCube)7 T1 k$ X# a! n2 s( y; Q! l: I
{
* } L- g4 @# t) \! j, v7 C pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);" L* |. W E$ U7 s* D! W8 c$ R
if (!pCube): \4 U; f/ O! F' {) v8 B; q! A
return FALSE;, `5 Q' J3 m3 F2 i1 G# q, p$ Y/ g7 _
}
* o- A1 G, s% | PKTItemTellW8(PacketItemMaxTick);
4 X$ @1 d* Z ?0 u7 k9 [% k
6 {: a( P5 j: M! _( I" {( S6 l D2CoordStrc mypst = { NULL };
6 e" H6 y# ]& H, J3 e D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
2 z' {7 [3 Z& W) _) h Y) J+ i/ p h0 S
BYTE aPacket[13] = { 0x20,0 };- ~; _3 u4 b& V$ f3 a
::memcpy(aPacket + 1, &pCube->nItemNum, 4);/ S% I0 |1 w) ^+ A d2 _4 B
::memcpy(aPacket + 5, &(mypst.nX), 4);* k, ?6 X$ Z! {% B1 e9 e
::memcpy(aPacket + 9, &(mypst.nY), 4);4 N7 @* h8 ^; u" J" g5 u; j
D2Net::D2SendToServer(13, 0, aPacket);/ q! {3 [' Y, p$ B: L
return TRUE;- G" [. a4 o& R
}
$ x* W# |. X0 V- ~ H; e6 }" u, e- M
static BOOL ToInvxy(DWORD x, DWORD y)
8 t9 Z' r: p+ ] {" `6 u& F" ~" W# f: f% D+ N0 `& v
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);" w3 e/ x$ i4 E2 {
# M$ l& o2 Y V" n
if (phand == NULL)$ T. C# k) |$ Y1 G+ N c& X
return FALSE;
! z% n9 h4 s k7 f
+ g! Z- j/ ~7 ^. y PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);+ M3 [6 j% x- ]3 T. L( K
( p$ N. P! h x+ ]5 | R
BYTE aPacket[17] = { 0x18,0 };0 j" J" |6 M+ d7 h0 K$ i
::memcpy(aPacket + 1, &phand->nItemNum, 4);5 `' I( U$ w9 p
::memcpy(aPacket + 5, &x, 4);
! c6 \( f6 u# p2 n ::memcpy(aPacket + 9, &y, 4);
/ w2 n& |" L: R r; |4 u$ Q D2Net::D2SendToServer(17, 0, aPacket);% M; x4 c# b% ~6 ?" s
return TRUE;
2 o. S% G8 n9 _! v) R4 i/ N1 ^ }
- ]% ?# q' P" t1 X4 t X( {6 h7 ]' k
static BOOL ToInvRandom(BOOL bBagFix = FALSE)
5 f- I" ]- R8 X$ j {* W8 e/ V' F8 X$ Z% D5 K; z
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
# K+ n& c+ _" E& p if (!phand)
9 S6 L! A% V3 k return FALSE;
/ b9 d. Y7 F, X int desx = 0;
! J3 p- O5 _9 D, m int desy = 0;* l4 J" A( K |. o8 j8 s q2 ^" u4 G
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix)) M9 ?7 r; x* ~: z+ ]( n
{* E8 U) A3 \# N
ToInvxy(desx, desy);
5 W; h! P. ?7 u" \8 `$ b return TRUE;4 _: E+ Q- u, t" ~
}$ `, z. z; i# M/ u; H J) H
return FALSE;
3 O+ p x0 b6 u2 F/ O: p1 m8 \: Q }3 p* x, I& D; j
7 H! ?- q# }- o% x. }
static BOOL ToCube()7 |9 B% [: ]1 a9 D7 j7 N
{- x5 K: i& a; y: |: P
if (!(*D2Client::ptPlayerClient))return FALSE;
" l% D* e% z# X0 V, L) x* Y G1 j
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);! g- S x* p: k/ j
if (!phand)return FALSE;
( p0 [0 g. F' F, ]" ~
; u* ]6 n: U! e# O! ? UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
" c, [/ N6 i* s* Y2 j0 u- T- z if (!pCube)0 u' k* I1 C* r8 L% |
{
4 |9 [3 t) Y3 R! I' z. J" _ pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块
" q9 h" Q( K/ \9 z3 h if (!pCube || !pCube->nItemNum)
) {( N, c0 h3 }, ?- s5 R) y L8 F return FALSE;
7 w! N4 z! V1 B/ Q1 p/ p' Y, C }
. S( ~: ]; w+ B3 i4 x% {" I4 L. j; Y) h
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
9 W y, x0 t; o& F7 ?* G# X* o return FALSE;
5 E& l$ Z9 j' b' M
3 a" Y8 C% w$ X) N PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);2 A& n5 V# ^+ S8 S& V/ D1 ^6 a2 m
; I7 O" F8 _2 N: N: K
BYTE aPacket[9] = { 0x2A,0 };7 F8 W7 w* W C6 O
::memcpy(aPacket + 1, &phand->nItemNum, 4);3 m& v: Q$ n) ]# w& s
::memcpy(aPacket + 5, &pCube->nItemNum, 4);2 J% q% ?8 O y# k3 `
D2Net::D2SendToServer(9, 0, aPacket);
0 p, `. J u) m8 Z+ y9 @ return TRUE;
& q* P4 L) N9 E; [
; w9 ~. e0 q1 T5 c* P) Q+ f }
5 g0 l3 u! p- S: x2 k' Y: H! I- L; z7 q: Y4 [% F7 j* ^2 V r8 r
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);. A. b1 k G8 T0 v3 J8 m
2 ?6 d7 s1 q. H static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存6 z& c4 {6 @% d" L5 s: ]
{, Y# M1 Z$ ?( g
D2CoordStrc mypst = { NULL };
% ]9 k5 N' u4 ~ D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
% O1 d& j ~3 W1 t
) _- C4 @- e' w if (!mypst.nX)return FALSE;( i8 X, U b/ Q, a6 _6 x/ [
. K5 s/ U9 s& M' v; T4 a$ |# ~ PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);1 E3 |+ O) w0 D1 C
- p( {* q7 t* L5 I# @
BYTE aPacket[13] = { 0x20,0 };) v3 B9 _' k/ C+ [
::memcpy(aPacket + 1, &dwItemID, 4);) w/ G$ a7 d1 R$ |
::memcpy(aPacket + 5, &mypst.nX, 4);
8 M, E. y5 J: N1 a ::memcpy(aPacket + 9, &mypst.nY, 4);# Z) ~% B P7 U- a6 u4 x! m: j
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
- `5 O7 k* ^5 U D2Net::D2SendToServer(13, 0, aPacket);
* {0 E# j* x+ Z return TRUE;7 a2 {- c6 J n5 ?! Q, o6 e$ s+ `! ^
}- o; f" \! W' }% K
& w* Y- u! p! M1 `4 ]6 i8 q9 y9 E
static BOOL DropCursorItemToGround()
w: Q* T, p& ^ {
( A% o% L0 }5 |; n UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);- i7 D$ u9 i. g: n
if (!phand)
" ~6 d/ m. N$ f, X$ f! s1 J$ t return FALSE;
* u9 i4 r. i& A ?% i6 F5 e4 E0 G* Y8 v. W3 k% t2 [
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
) H! V) ^) f/ Y+ l8 I, f+ O; r! l& E+ s: \0 D& y8 y$ L+ F
BYTE aPacket[5] = { 0x17 };/ k2 d: }; g" M3 C4 z$ W
::memcpy(aPacket + 1, &phand->nItemNum, 4);. U/ P. l, Y, C; E- K+ E# `
D2Net::D2SendToServer(5, 0, aPacket);
A! Y; m6 f+ [9 y+ Q+ z3 w return TRUE;8 W8 \* c! o$ t6 t
3 A0 n% g% h3 {( t3 Q }
+ E& X3 }$ A+ j8 y' N% U+ x+ `; i! Z0 I) S6 ~# l
static BOOL PickStorageItemToCursor(DWORD dwItemID)
$ T! o6 \$ W/ { {
( n' T" Z: ^1 | PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
& L- i |: D; c! s! }* B. K0 t9 a8 B% X8 t5 H8 q- f7 p
BYTE aPacket[5] = { 0 };2 ?9 e/ w$ c% g+ y; M2 R
aPacket[0] = 0x19;
- x1 c( y" G1 j. `! G- o; F* X% X ::memcpy(aPacket + 1, &dwItemID, 4);
E" c, ?" Y) J8 D2 z //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
; d1 c4 M4 n+ t D2Net::D2SendToServer(5, 0, aPacket);! u1 N H, @; X8 q
return TRUE;
: {0 E% k1 p) d. P }& X' e8 h6 m' U; B
: i# }0 ?. D' ? static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
# L( I+ F, O) V( k {% p0 J# I5 |/ H7 n2 E
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);0 \% @$ C7 {9 Z7 v) H
BYTE aPacket[17] = { 0x1f,0 };5 Y: n7 U* |# G1 R
::memcpy(aPacket + 1, &ItemID1, 4);
. V4 s/ ~8 u9 @; E$ _! Z" l ::memcpy(aPacket + 5, &ItemID2, 4);
/ ^6 K4 @. r# W6 W. D$ e //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);4 l# y0 P. c* z( v
D2Net::D2SendToServer(17, 0, aPacket);
6 Y) b# |( M5 _ return TRUE;
/ }9 M5 o: B7 U" D. T a+ d: c E }
, F4 d4 O( |9 o i1 m0 a& g! V% o/ e! E
static BOOL Transmute()
- D' v9 D, A5 @) x) w3 s- t {$ Q' \7 S( ?/ T" B& D
if (!(*D2Client::ptPlayerClient))return FALSE;
G4 q7 { I/ b% P! P
: [0 g" W1 v# r: v if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))! r/ m1 E1 d( w# M7 [8 [
return FALSE;
2 a$ G7 |: U0 X- }! A2 M- f9 s: `0 V B" {- z# ]% V" b+ j
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);% x' Y. w6 d0 W
BYTE aPacket[7] = { 0 };4 r# m* o5 A7 h* W; u/ ~3 m
aPacket[0] = 0x4f;
( Q w5 |; O9 j3 u# ] aPacket[1] = 0x18;$ a% y" d7 [; N1 i3 H0 E
D2Net::D2SendToServer(7, 0, aPacket);
0 |& j# i0 h3 P' E. K* D return TRUE;
: E3 k/ [( ^; J9 C5 ?& o9 ~ }/ B# x' G1 y6 ~. W* H; Z' _- Z3 B
};
& O0 r# H1 I' f2 t# n" ?+ y U2 Q4 R7 W& P' b( A7 p) S
|
|