|
|
转载9 ?% _8 K7 s; [1 r- ~) s
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:3 z3 `( L- ]$ v$ f
D2Client:+ p( X4 `; V6 V' T
6FB20AE1为拦截输入框(用于获得命令). A$ L; |3 S/ y) N8 T4 Z) J- K" m
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
! l! s/ F2 m& P6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发$ f9 t: d! N; W
6FAF4230为hackmap的loop点 我用的hackmap导出位置
) H, `2 B# U; {/ {$ C, o9 K4 C
% [3 E; n, y; ?
; }$ o" T. z+ T3 d7 a发包函数:
! y# N& O$ O" u0 `class D2PKT_ITEM
. M) J( ^4 G! ]4 |& u$ A{; @# U: P3 b$ ~! C
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上6 Y# b* n1 C8 w1 p7 c' S0 {0 _
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
+ S# T: u' K& t9 u# V9 L% N- G7 P: o z#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上0 X* M, M" O( h
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上
! Q9 r3 j$ \4 y0 |% x& G5 [0 Z#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
# a5 r1 n& d* ^2 h: S) ?* s#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
4 ^1 X( t$ W) Q" @+ d#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏1 @- R+ ^7 ^7 t0 r& R4 b7 M' G
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上/ t' M0 J, j7 h; J
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
$ P% L _( p; ]0 I+ t0 z) { t#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
# r: N; Z& k- M#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV; E+ A% ~- S2 ~/ r9 U
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 * R3 H% X$ w2 G+ Y. P
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带. {+ L. j* Z& X3 `/ u; B; j
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上: G# k9 @3 A$ r
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
$ l, R# `) |/ e3 i" g# v#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上: q/ N/ d" O8 a0 F) X0 p2 b
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -
0 A1 ~/ g9 r j% J; J3 e- @1 ^; Q8 G! Q U+ F
#define PacketItemMaxTick 150
3 e" H- q2 A9 n3 j$ w+ A+ f#define PacketItemPickUpTick 200 ~- F. x7 w/ C( C. r
7 J( f/ x7 T P: Vprivate:) r, v+ a5 g& U5 d* X
static DWORD _PKTItemTick;' I G7 K, Y3 ~5 j% K% J- P9 Q6 B
static DWORD _PKTItemAction;
2 b! K% k5 R; _ static DWORD _PKTItemID;% J: w0 v. W$ F
static BYTE _PKTPKTType;2 [9 d V! P$ n1 q; G/ _3 [
public:$ U: w2 U) [3 `
static DWORD PKTItemGetTick() { return _PKTItemTick; }/ e: E6 o; w7 }" |
0 y. P% X% [$ B5 P
static void PKTItemRelease()
! K! l" c& {/ X( L {
- l* C; q" F' `7 f3 `, C, S n _PKTItemTick = 0;4 p/ ~1 M: }* Y* Y0 ^/ g. u8 H
_PKTItemAction = 0;5 J8 [0 a6 s4 R: X8 E1 f) A E
_PKTItemID = 0;$ w6 ?2 I- R5 {3 u) R9 H
_PKTPKTType = 0;6 C3 e% H6 p3 p; r* E2 `
}* h* q: ^8 P8 ]9 k, x/ A% X
4 {* Z8 Z9 S6 x8 Y
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
' O6 i a6 w5 L5 S+ Z/ X! f {
8 f5 u$ A( V- ?- z- N& U _PKTPKTType = aPacket0;
7 X( n1 h( A. ^) ~8 x- T6 r _PKTItemTick = tick;
4 G6 y: ^1 i3 y/ W8 n. s G _PKTItemAction = ItemAction;
/ G' i( h" `. a' \$ w: b _PKTItemID = dwItemID;5 Q4 u/ e$ |! e. A9 _- T3 f
}5 Z7 \* [+ }8 c O$ i J( V4 @
+ X8 ?' R4 _2 b) K& ~- b3 s5 r0 Y
static void PKTItemTellW8(DWORD tick)* I7 T! j: D! |( B/ Y3 Y3 ?
{
# Z$ A: f" K! c) I! K# ^ _PKTItemTick = tick;
5 |5 v) ?5 _/ `- V/ W2 m }
+ L7 a" q! u, T5 m/ g# }4 P
/ a0 X; X# C2 w) L1 ^ static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor. E4 z* B+ H2 D3 q: T# { w2 l
{
0 y$ L1 \# _" L$ _- B2 d7 r if (aLength >= 8)
* M+ R9 g" ~3 n- X7 `, @7 v {
1 S# V( H8 J+ @$ c. N! O DWORD dwItemId = 0;; s7 u( c- J. C5 s; A E) b$ O5 H
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
^: O$ \7 b1 f5 u* }7 r if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
' U( w+ H9 \. b/ B4 A( E && _PKTItemAction == ITEM_ACTION_TO_STORAGE k; A, x8 n7 s: P! U( t
&& _PKTPKTType == PACKET_NEWITEM1 Q5 [, Z- B, @; H2 t
)
a7 J( k- Z; Y+ ?2 H: C {4 F9 o8 g5 q& g# u/ B2 k
if (_PKTItemID == 0 && _PKTItemTick)
* D+ B' ^, F. G9 Y5 |" h; ` {
$ W$ o1 e" U. f, v: H PKTItemRelease();5 a7 q& \6 f+ A
}
2 \. b2 H c7 ?6 e else if(_PKTItemID== dwItemId&& _PKTItemTick)
$ c4 [1 z" J6 Z* u/ W {; l: L/ d/ b: L5 k
PKTItemRelease();
% `: X# c8 W/ p! @4 _# L }
9 {. F4 @+ i* n' ]1 o% s. r0 t" ` }( t3 i0 T0 C" u3 u) h
8 N! s1 R: [3 C$ f
}
. P! L, H8 E% d" } }& \& v( S5 D* F! ^% `: V
9 [+ p7 ~9 x: \3 k static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
$ ]+ Z* K/ J- E2 k" S! W% r& h {3 z S0 e4 g6 D7 I- j2 g
if (aLength >= 8)( P" X2 c% X- F: X' L8 R6 |
{9 X; t/ V/ r, |; f, I
DWORD dwItemId = 0;0 } s6 h/ P* B$ Q' A
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
/ _8 o. i* s6 N7 N* l$ ~+ V+ H if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE+ ]' W$ S" n7 I. }$ W4 P" x# O y9 U
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE5 U3 j) E9 _+ G- y) K2 K! z
&& _PKTPKTType == PACKET_ITEMACTION* \ \. U+ c; G& h8 x2 K
)
/ V: K1 l3 O; K7 l+ g {
& u9 g- Q' e& u/ c) a if (dwItemId == 0 && _PKTItemTick)
& C! o% \9 @0 N8 P/ A {1 V+ l& n# m$ n) \" e5 q
PKTItemRelease();& l' `" |. L7 A" P U8 t* Z
}# n8 f) k! g: D
else if (dwItemId == _PKTItemID && _PKTItemTick)
, e* J6 N u1 T( C- [) \ {
+ ^ o) v( G0 v' E$ T& }$ s! d' a PKTItemRelease();
2 G3 i9 [5 D' p7 ?! `- y }9 o" B) y- @2 N* y
}
/ `/ T$ B; Y+ |1 z% W $ ?" |' f$ ?) E- m: D3 o2 d
}2 V% u$ O/ J2 B) z1 ^: k9 g
}/ s/ e$ R/ r) E0 \ n- p0 C, {
% j2 ~3 _& c$ P8 ^; P3 j e
static void PKTItemGameLoop()
: F' _& ~9 c: g- h; O, | {
1 G' R5 L4 x4 p6 _! C" ~ ]/ E if (_PKTItemTick > 0)
/ W$ B$ \, Z1 z9 n5 v _PKTItemTick--;5 r$ b' @' k; c6 U
else if (_PKTItemTick == 0)
0 l- \, Q6 X; F; P( p% E PKTItemRelease();
- A2 n* \) z2 K4 r2 C }
( R1 G9 q6 N @ j) P j8 J" A2 p3 C3 S" p0 k0 N& V; Q; R
static BOOL PKTItemCando()
. U7 D) A% L5 O+ Y* ~, I {
7 v4 ?; {8 E, Y" _1 _- r) G if (_PKTItemTick == 0)return TRUE;- l# `4 [5 L F
return FALSE;
! B8 A/ L" i9 L! a; Y/ f0 m }: F# e- g w; o/ R
?* v% @) E D
static BOOL BuyItem(DWORD ItemID, DWORD npcid)* B f8 ^3 J, F5 d
{
; V9 A2 H3 b& V PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
2 m$ {! N+ ^% \) {# x BYTE aPacket[17] = { 0 };
& y; D6 j$ ?! |" r aPacket[0] = 0x32;, B' E( P. ?1 N& f) e d _
::memcpy(&aPacket[1], &npcid, 4);2 e' k* K' @! n
::memcpy(&aPacket[5], &ItemID, 4);. g9 d6 D9 ` T% D' h1 g9 B5 ]
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);* z, j+ y0 ], f0 ?$ K9 p4 F
D2Net::D2SendToServer(17, 0, aPacket);
7 L& w( g3 K4 h q return TRUE;
5 i) G( \& Y [ U6 n }% w0 x$ [. ~$ X& X$ [
0 d8 q2 ?4 L ?$ ]9 G( U5 Q
static BOOL SellItem(DWORD ItemID, DWORD npcid)( H9 \* Z' A0 T3 D3 z' g) G
{3 j7 o, w; S" ]. e4 l6 f
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);% b- w! d4 J% `4 ]: I* A& r% i
BYTE aPacket[17] = { 0 };
: J$ Z v; e4 t7 @0 h aPacket[0] = 0x33;
% C7 a' t4 B, Q( e+ \ @) T: P7 D4 g ::memcpy(&aPacket[1], &npcid, 4);8 |5 {$ U$ G. [) l+ z6 h
::memcpy(&aPacket[5], &ItemID, 4);/ M6 N, n- _) F) J& i3 L7 Z# q
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
: R# H' t1 b% w D2Net::D2SendToServer(17, 0, aPacket);7 r' k2 U N ^2 k& e- O
return TRUE;
& }8 F4 V1 O3 n }4 e' j1 Y5 w3 P/ D& j" ^/ h+ D3 K
) ?" t0 u2 W% {) t% B
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);; v0 Y6 S: _7 J( y* \: d
3 @) z D/ @5 l
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
- N& J4 H" v0 X9 [# P; @2 f8 [. v% s1 b. `+ _) H' @" Z
static BOOL OpenCube()
5 k! F0 K' F7 m% y" a, h {, Y3 q0 M% f9 v0 D
if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;- R* W+ |" w/ N- k
. G+ M+ b; j1 J& |, o: Q+ A7 A6 u
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
+ s h0 r. V5 D) `! E if (!pCube)! h: n3 A3 z' [( ^- `+ m
{
) J' w. ]- |+ C& J: ~$ I' u pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
" y4 e' V% e/ J6 C6 a if (!pCube)
+ l3 {1 h2 R& P; ^$ t5 M& `. L return FALSE;
& k) H1 D% c- A' M y% g* y }" O4 w6 m) e& q6 ^/ ~8 K
PKTItemTellW8(PacketItemMaxTick);) L* e5 @% I A
`7 B1 ]' E; k/ A: a D2CoordStrc mypst = { NULL };
) s0 p( n3 |& B D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);3 O6 l: W9 y8 g+ U1 _& h8 @6 F5 h2 ?
* k# D% \7 O4 y# P7 G% P6 I/ d
BYTE aPacket[13] = { 0x20,0 };
7 Y1 ~- I2 {4 N3 u" }5 o* ]1 r/ C ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
( B, ]) ^* f: d7 ]6 Z ::memcpy(aPacket + 5, &(mypst.nX), 4);7 f9 [; T$ m9 k' A' g
::memcpy(aPacket + 9, &(mypst.nY), 4);
+ M$ {& A& k. N ~) i7 ]# ?1 i D2Net::D2SendToServer(13, 0, aPacket);
' F# s9 u Z/ B return TRUE;8 X7 D7 m- A" D" u. U$ g
}7 I0 c8 H* ^& Z: `+ {
7 p4 `2 y( O6 L$ M: J" k! a: w
static BOOL ToInvxy(DWORD x, DWORD y)
) [/ ?6 B: {2 [) r G {9 |# e. p9 n6 P* `2 y$ E
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);' _' L! k" A/ S& \$ m
, d( h% s, e/ _, `7 `1 b8 e
if (phand == NULL): ^+ U$ s+ i9 s7 Y
return FALSE;) [( x3 J% z$ @/ I. C/ a4 Y
6 s: A, u* [# |, v$ @/ y- c
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);0 E- ?1 u4 [1 L$ p4 T6 N
* Y1 y+ i/ P( j$ Y2 M BYTE aPacket[17] = { 0x18,0 };
! J: S# d- i" e0 j ::memcpy(aPacket + 1, &phand->nItemNum, 4);) m% e4 n& t. x$ e
::memcpy(aPacket + 5, &x, 4);
$ J1 k7 N, i% ~. ] ::memcpy(aPacket + 9, &y, 4);
6 Z" B. {# q6 i D2Net::D2SendToServer(17, 0, aPacket);
! ?+ y) `3 a. n- `0 w return TRUE;# r6 l3 F* }, g4 L
}
& l* y; H8 N* L- G% o) z3 {0 S- X
; W2 w9 J b1 F+ e9 b) t static BOOL ToInvRandom(BOOL bBagFix = FALSE) 9 S; Z" `7 x7 [# r& `& o) Q
{- s6 e6 ~! u K, Q+ N# H, R
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);7 I: ^( O1 j/ F4 V0 J& N, ]( a
if (!phand). ?7 F5 b/ @2 y* A- J5 u1 W* X0 z0 B
return FALSE;
7 c# n9 V, o: ~" u9 |. j int desx = 0;. Y6 p6 a$ v" i( \( U I/ E
int desy = 0;
' G- ^! _& M6 r- ~7 `2 m: ?6 d if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))8 g# L# ?1 k1 [9 H
{
X" R7 ~: f( D2 b# u ToInvxy(desx, desy);( v( W: o: l4 X3 g9 j) Q" f; q* g
return TRUE;
- f) x. F5 F" k$ d$ ^" m }
6 P6 ~' t* k: S) d return FALSE;
0 J! A# r5 @2 O/ l0 h3 u! F }
1 W1 [( {0 S9 Q8 ~4 [# o# A
3 e! g3 f+ x) i- c0 x# L: _ static BOOL ToCube()
$ o" L5 j! n- x4 z3 T9 x7 s {
9 P/ r& j5 A8 x# V% Q if (!(*D2Client::ptPlayerClient))return FALSE;% c) W7 K0 T% H4 j7 q, L2 |. w
" R0 M& w9 R' b9 V/ [6 B UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);: E1 J) X2 U9 {6 y3 F
if (!phand)return FALSE;
, S4 E3 Z4 d7 a5 a* }# X+ q H6 |3 r! q& g2 ]3 P5 p, A
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块# X' B8 O. f+ o
if (!pCube)" A; N& D$ D" s2 Z( Y6 F0 @
{; c8 o" y, i. n
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块, |) ?" k3 n. b) Z
if (!pCube || !pCube->nItemNum)- r9 t6 _9 t$ N: u" ^) J" I7 G n$ I
return FALSE;
# ^2 @& Z' y; R- O* a/ v- z$ v3 m, n }3 A$ B C& B( i) O1 n+ A. y" ~
/ X! {+ R# W4 D! H( {
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
" X r8 ^& r u# A1 I3 }' x return FALSE;
# o- }+ p2 j/ j$ [+ O$ z# |- c- H. G1 y( P: y1 Z) g
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
0 P9 m0 p/ @- G
' X" G8 L# s# w4 v5 i8 L BYTE aPacket[9] = { 0x2A,0 };
7 h' u. k! j g) D ::memcpy(aPacket + 1, &phand->nItemNum, 4);% F- S3 F5 R) e: n
::memcpy(aPacket + 5, &pCube->nItemNum, 4);! l+ u# `+ q N1 `
D2Net::D2SendToServer(9, 0, aPacket);
; O7 [2 T' `0 f. b( G, n return TRUE;6 {3 K1 `$ i* L) O2 r2 @+ K& J. _+ l
8 @* M( a* a# f# x3 e4 ?# o
}
- ^' {; T3 c2 M6 @% ]5 @2 B* g6 ?$ s3 Q
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);- M, W+ j8 ^ ^$ P+ f4 f
z. r: B f$ ]0 ~. F
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
$ M S3 l: e1 \- B7 A8 p {+ v" \: u( ?( \
D2CoordStrc mypst = { NULL };
* i7 f1 L6 t2 Q1 y3 r D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
A3 S9 ^# Y9 ~# ~7 f5 A" ]) l5 A% N: ]" u" B; m# g" t( G2 y% R
if (!mypst.nX)return FALSE;
! z3 u6 S3 N" J; _% j+ f
9 ~; S1 b1 T! ?5 s PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);7 C# @3 a3 p2 }; j
, B- B( o9 ?: d+ Z. P- a
BYTE aPacket[13] = { 0x20,0 };
* ^& e z4 W e, { ::memcpy(aPacket + 1, &dwItemID, 4);
# F- t, E1 O& A. Q ::memcpy(aPacket + 5, &mypst.nX, 4);6 j! X/ j) ?" Z q$ X
::memcpy(aPacket + 9, &mypst.nY, 4);* Z: A& D5 G% E. T9 b
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);7 @3 C- v1 G8 }/ w: O3 S( R
D2Net::D2SendToServer(13, 0, aPacket);$ q$ P1 B6 A }6 g% A4 q3 {
return TRUE;
2 D, G3 S s* r# S; Z' Q }3 |1 z, @, v5 I8 n$ }; t
6 t7 d! b- j0 o* d! o$ G3 u
static BOOL DropCursorItemToGround()
; y/ k( p. ]- _! o) E {, e. d, p$ X3 L. E% a3 X
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);% R5 p/ h# q4 X3 q) E& L
if (!phand)
% e& [( M0 z$ W return FALSE;
8 _2 n4 _# ?7 S1 t
' K) s2 l' H4 ?0 H, e# H, f% I4 [ PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
$ l* J6 N3 K* U+ C, n% t' {2 x9 Z+ S* ~9 K+ E
BYTE aPacket[5] = { 0x17 };
/ ~; B& \% `% Z4 q9 V! m ::memcpy(aPacket + 1, &phand->nItemNum, 4);' X) t& H. u7 I, d
D2Net::D2SendToServer(5, 0, aPacket);2 s/ t$ n6 [2 B1 n, ?
return TRUE;
$ |* C8 q2 _9 g7 r4 V& {' B
" [! A8 d" M" d4 h3 p }
% n& m6 T8 S6 D0 a. U( Z8 Z+ [3 T7 _9 A/ f- S u2 R2 Z
static BOOL PickStorageItemToCursor(DWORD dwItemID)
0 e( z/ a8 t+ k$ ^1 j {7 M9 @, K$ h0 [/ W! T& F, E' M
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);: ^3 s1 {) i! n8 u
3 H( ]3 x* F' O4 b K BYTE aPacket[5] = { 0 };5 P- W: Z! Z* O
aPacket[0] = 0x19;; U2 a0 k9 ]! w1 ~5 p, }3 [
::memcpy(aPacket + 1, &dwItemID, 4); W/ K0 s3 b: e
//return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
. u7 n5 b1 N" Y$ @; E: t0 v D2Net::D2SendToServer(5, 0, aPacket);
% b+ K- @8 I# N4 E: X( r return TRUE;
! W* v. p6 F9 o7 I/ I6 u } B+ q+ Y- q/ j. C" W2 j$ p
+ d" X p& R C static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
, t) I$ f- h. g# _7 x9 I3 ] {
' c) e/ M) n+ Z! W! X3 g0 J PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
; b9 R: Q8 O* ^ d BYTE aPacket[17] = { 0x1f,0 };- ]) w" E: H- E- f
::memcpy(aPacket + 1, &ItemID1, 4);
! ?" I4 I' K0 K) s6 [& E3 d: t/ m3 O* N ::memcpy(aPacket + 5, &ItemID2, 4);
: g" `. S% R, ~1 a9 m$ L5 D //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
- j0 I* N+ G, y" a: h- ~; V D2Net::D2SendToServer(17, 0, aPacket);2 j& t' N) K5 ?) c/ o# \7 J
return TRUE;
- d! X+ T/ l* A4 ^$ h( D }- x. }& M! b/ W# s
# [. a( a8 o8 d. O6 v. S$ o static BOOL Transmute()" a9 c, q4 a8 J; ?- P' |) o
{
& m+ j6 l0 }/ |9 _3 b if (!(*D2Client::ptPlayerClient))return FALSE;5 v' {) X8 Y7 P6 b! `
' ?/ i3 H( t3 P2 R9 d6 ^
if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))6 h$ b. Q% e. f/ M
return FALSE;
; _% Y' A. y* a. i
8 p, \5 M+ H- T% X PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
# ?) n- |4 U* W" V. b BYTE aPacket[7] = { 0 };
2 ~. G$ h- F/ f; n* D" D aPacket[0] = 0x4f;
) m' w$ j, K% j5 J) Z aPacket[1] = 0x18;1 m3 M7 z7 u+ [! |$ b
D2Net::D2SendToServer(7, 0, aPacket);+ z# X, ~, g4 g! Z
return TRUE;& p! @2 K3 A) G# `" c$ ?; U; {
}
) d7 m, E% `; z& d( ~7 B9 F};" N- ~9 P' l1 _, ?
- \* g' }% u) a
|
|