|
转载0 X4 T. H* j, p5 h- Q- x/ y
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
2 e+ a7 g7 F) t4 J5 l; ~+ K, hD2Client:
% K1 [3 x: e$ ^: \5 U3 a3 \6FB20AE1为拦截输入框(用于获得命令)5 [2 Y: Z, ?" o5 q9 X% L
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
) t, Q' e8 R0 M3 ^ W$ W7 j4 Z# f& p5 {6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发0 j; U. G8 J& `1 }5 ?, f
6FAF4230为hackmap的loop点 我用的hackmap导出位置# g" p! V" w% D- J& z
: x7 L+ {1 v0 l
7 U+ a z' K. j# O# R& j# J发包函数:8 ?% I/ U# a/ m8 F/ _' \
class D2PKT_ITEM' h* r# G" F2 _/ |6 ]! V. l' @
{
6 H% M5 f4 n' p; N- P#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上9 L8 f2 T ^" D/ U/ i( G4 W; d+ e" Z
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
3 T2 X! t, ~$ ^#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
, G/ q) d1 {2 w% ^; v" L$ c4 X#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上9 N4 I5 e6 _3 c* p6 J/ v5 t
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
1 o2 ` M; M( Z#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
& }( ?( Z5 w% L/ t#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏; p6 v2 a* _! l9 @" b
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
5 W! _* v, p) O' f: ?' |8 o+ P#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
C- q6 N" s e& [- @6 G#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店6 D, U: U2 J7 a% S0 o( p- @& M6 |- j
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV$ ^1 V7 n- w# O/ f! e. n
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 # b$ e2 J+ o7 }: `/ f6 j" u% k
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带
8 C8 F! E) {3 O' M#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
/ o B' K5 s2 }" E5 z6 ]* J8 V#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -
6 P2 O9 l: _, }7 j#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
9 g! Q: h% c8 k2 _9 A9 {#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -; X) M: w+ N# h( v
" E0 g, |1 K* P T p#define PacketItemMaxTick 150
! m) k. {# D7 I u#define PacketItemPickUpTick 20! M% Y9 y ?3 S1 W* W' m# P9 v/ K
( O6 V) T/ g+ U7 Dprivate:% C& p3 @( x# ?/ u6 B. Y. i. m
static DWORD _PKTItemTick;
2 W6 B( x0 ~ B5 r" R2 k2 ^ static DWORD _PKTItemAction;
% }( w t' X! [5 S. J' D1 Q static DWORD _PKTItemID;9 N. @* S9 J' A' c2 w8 ~ z
static BYTE _PKTPKTType;$ Q" f; K( i/ ~! N$ q6 x: U
public:
" R& O3 H/ q0 h: l. N static DWORD PKTItemGetTick() { return _PKTItemTick; }, M6 e1 c% E9 O {% l
z5 T7 }) G+ G! A( Y/ J4 x
static void PKTItemRelease()
! s8 G; ` ^( q6 l9 ` {9 z/ S( `4 e X/ L; N* ^
_PKTItemTick = 0;
- M& R5 D7 w0 f" C7 z6 v n8 n _PKTItemAction = 0;4 l% H; [: w/ s# C: ?! Q6 v
_PKTItemID = 0;
. ^, \- u4 n2 }' I$ Y, K: d. b _PKTPKTType = 0;
0 u8 ]& O8 t& f4 W g }
8 Z' R: e7 M: k+ L, B7 M; ~: x+ m, |0 @+ T: o
static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) ! r# e- _( S9 ` T0 S* C% o0 m$ x
{* S- j( C4 j6 q6 F$ T& x% \
_PKTPKTType = aPacket0;
! k. \2 z- m' q% b7 U _PKTItemTick = tick;% I6 v) I: i, e( F* Q& W t* \
_PKTItemAction = ItemAction;- d7 x. i- d: y$ f5 @& F
_PKTItemID = dwItemID;
% ~4 e* R) a: S; W$ B% U }
1 b5 E: Q0 c9 |% r4 M
: V0 D8 g3 {) m L- _ static void PKTItemTellW8(DWORD tick)4 h6 |7 Q* A. {( s
{6 f3 A, [. D5 c- a4 Y5 u8 D
_PKTItemTick = tick;5 v0 ? k9 @) y8 [. n
}
. C4 M# q/ b+ m. r; j! \, t+ `: z: y1 b$ B. G8 p' K
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
4 a( w2 T' o/ \1 X! H/ Z: K6 h {& \4 G8 b- W0 q0 [
if (aLength >= 8)
3 }' z) z" u2 ]9 z1 E* ]4 W; a {* M/ i& o q1 o
DWORD dwItemId = 0;
4 D6 z2 q' o3 M7 E2 @ memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
7 f; p9 T" ]$ b4 w if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
# B" Q+ b& B9 l, m" b && _PKTItemAction == ITEM_ACTION_TO_STORAGE! W# j$ B8 R3 m+ ~; ~$ ?0 @
&& _PKTPKTType == PACKET_NEWITEM
- ?; F$ W5 s7 _ ). i3 I; o: B* {# s% l2 I. ?( L
{
4 \$ |0 R) @8 T. V- B5 v* u9 }4 o if (_PKTItemID == 0 && _PKTItemTick)
9 ?# U0 m0 j. W# t( v* a { q9 U! D* X+ i$ r5 ^
PKTItemRelease();
) S6 Q7 a- E) H6 \ }
/ I; `3 W( R$ P& h% j2 s7 i9 ? else if(_PKTItemID== dwItemId&& _PKTItemTick)
1 {( Y" H" O! V* e* Z$ ` {2 t) f! x; g( b
PKTItemRelease();- v! \ R E( q5 U T p
}
9 ~( L9 `; Y! R1 D X) F }- Q' O" {+ F& Q# D0 k0 q7 Y
2 A# q% P; j3 d7 m8 \( i }
, K8 ]- U' T+ B% ^! D5 z }3 j- U, U( D0 `. y" g
2 i: A$ J, ~) M) e
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
$ K2 j7 {( {* d% n6 q2 T& m {
- ~/ D& T; {0 c$ E; F1 u+ U if (aLength >= 8)
% ^+ \) b3 n, g9 o+ N$ U; p {4 v m( s. ?2 F7 L
DWORD dwItemId = 0;! U- x7 x v% t' n$ U* E' y( Z
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
" m) |: u7 }7 o8 P# f9 }6 U if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
4 J' i. `& y$ U$ r7 X && _PKTItemAction == ITEM_ACTION_FROM_STORAGE
8 h* s* \0 K, j) x && _PKTPKTType == PACKET_ITEMACTION; B& s) }4 {- n" w( w
), K# e4 U# d" o, a B
{; R( U9 I9 D+ r! C# a
if (dwItemId == 0 && _PKTItemTick): u: @0 K: u# p2 W% X2 [7 g* `+ N; R& A
{4 v/ S; b1 G% ?1 N. H
PKTItemRelease();8 K" s) j1 ~2 d0 m% d
}; ~% z1 U- X7 n6 G
else if (dwItemId == _PKTItemID && _PKTItemTick)% U1 @& A6 s/ \6 Z
{* O5 e% r, V# N& F# r- w
PKTItemRelease();9 Q( U: V6 v" M) a3 D
}
" m0 q! K4 R, e! C" v1 E }
' H/ }, B7 M- z A / K6 b$ U9 q! X6 |3 B
}! i4 U* h) A) g, f, d. a
}' @/ ^0 q7 K: J% U& i0 c6 j
0 _2 `! F$ i) o' f: C9 w/ g- g
static void PKTItemGameLoop()* r" t9 B2 ~* g- F4 _6 }2 P
{
6 W& r. j" a* _, r; i if (_PKTItemTick > 0)+ @, w8 a; a# B |; m8 i8 V# F+ @
_PKTItemTick--;
" c0 {* e7 s" [1 K3 M8 A else if (_PKTItemTick == 0)
" \ @6 j& F R PKTItemRelease();& l" K# _; J4 g3 s3 e- T1 [5 G
}
) U& _8 g, j4 E9 [
5 |$ Q' I4 g0 c( Q5 }; K( ]% T static BOOL PKTItemCando() ! z% @+ z6 ]" C2 v; r
{/ z; T5 M+ b6 V
if (_PKTItemTick == 0)return TRUE;0 T; V! o% a, x8 ?+ a
return FALSE;# B; p- `0 |$ J; u1 a
}* y1 \! X7 u7 S1 p$ V# M: ?+ Z
0 p5 F4 m. Q; z. Z( U. R/ `4 k# N3 m static BOOL BuyItem(DWORD ItemID, DWORD npcid). }2 r- |1 s" x' L, q0 x! g
{
9 c3 D A7 r" ~8 v5 j+ b7 m PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
6 a% B3 j/ n$ U- E3 e) u, J Z BYTE aPacket[17] = { 0 };% G/ v: S1 M1 @- H- @8 L, Y8 V% Q6 [
aPacket[0] = 0x32;! y5 ]1 C3 O7 e" B1 I
::memcpy(&aPacket[1], &npcid, 4);* t- a! ?- u8 I6 b
::memcpy(&aPacket[5], &ItemID, 4);+ g) R$ U- [( S) R- W9 i: ~
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);3 t4 ?. c( N0 A {4 t% {2 |
D2Net::D2SendToServer(17, 0, aPacket);# }* c7 m) H& |, _0 L! K% | O
return TRUE;! z p4 i; U% z: |1 K
}
9 W. e2 I( K- h+ A
. n. G0 t0 W9 }2 \* q7 x, e$ q3 a" z static BOOL SellItem(DWORD ItemID, DWORD npcid)
6 t3 x# ~4 k2 r5 o( y {: ?7 K: h! ~8 @* k
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);2 q, h8 l0 y% X
BYTE aPacket[17] = { 0 };
# v, I6 D, y0 C# v/ s9 y aPacket[0] = 0x33;
5 ~# A8 w$ T0 [; Y ::memcpy(&aPacket[1], &npcid, 4);3 ^) c+ }* O" a8 p2 r+ A
::memcpy(&aPacket[5], &ItemID, 4); o3 D/ h1 Z, K& J
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);. V& F- i- W' ^# i- }& K
D2Net::D2SendToServer(17, 0, aPacket);
, o) ~! c g I1 Y/ |$ r return TRUE;! S3 U7 S Q- `! [
}: w+ ?- N, V- \
4 ~4 W" P2 c' R9 h static BOOL Interact(DWORD nUnitId, DWORD nUnitType);! e4 a% x! r- q' J
* H- D+ F8 P# K1 u$ X$ `
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
3 {5 w) I5 U6 I# ]( m6 ~3 \/ N0 h
$ G9 F0 D1 ^% R static BOOL OpenCube()
5 o6 }! Z( c5 I& m {
. T$ U1 X. A! ]2 Q' Q! k. H if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
1 _ A" p" a" L3 v V# E0 w' N8 R/ C; Z9 [8 d5 ?# }
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
: u6 G* h% P" x6 ?* c if (!pCube)0 V8 M2 l5 M \7 e. v2 _
{
7 |; F" A& [ ?3 {) | pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);8 |; @% G2 M; w; u O
if (!pCube)
: e8 A2 p6 a& P) h5 T. i3 e/ L; r return FALSE;' w: Q2 I! Z: t* e
}3 L) }# m9 i6 v4 _6 v3 v' M
PKTItemTellW8(PacketItemMaxTick);' e X1 O( D3 b, ]; e: |
4 u m+ B0 J Q$ m3 o* ^7 L D2CoordStrc mypst = { NULL };
' V6 a5 H, ~! K! }* K% U2 Y D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
+ K+ l6 y' f3 C+ p& r ^5 D i& h
( M; t8 E) H- J; H BYTE aPacket[13] = { 0x20,0 };
' q! t; \' V. f9 o3 z3 C5 ? ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
& r1 }' s5 ?( E2 Q ::memcpy(aPacket + 5, &(mypst.nX), 4);% Z: X" V. h3 T `
::memcpy(aPacket + 9, &(mypst.nY), 4);
( A$ H5 E3 Y- u& Y9 ~: m3 J D2Net::D2SendToServer(13, 0, aPacket);% b* R8 F: i9 ^* v- Y, N0 m& V5 B
return TRUE;
2 Q# Z/ t+ t/ a* L }
5 `" N1 {! i. I! J9 R6 b5 y# K9 x4 Q& z: W- E
static BOOL ToInvxy(DWORD x, DWORD y)
3 d5 U6 q; L" |. F3 \* ` {
) j- |( Q, d- P2 E# | UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
2 q) _5 `& d" P- a; |, }3 d: X7 H8 {
if (phand == NULL)1 H! E0 t3 R4 U- p% v7 ~1 d
return FALSE;
! H U0 {+ H5 s+ x
: }5 M. V0 \( D& I8 n PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);8 ]) I, N) ]1 e' B ?- _2 j6 O
! q' x7 C! v: n; v6 R7 B0 R# A BYTE aPacket[17] = { 0x18,0 };
7 { X% b0 o8 \2 m4 b4 U: y: ^ ::memcpy(aPacket + 1, &phand->nItemNum, 4);
8 ?5 `2 b$ a2 @! _8 ]3 A" W1 Q ::memcpy(aPacket + 5, &x, 4);7 l# _% V" j6 ]$ C/ ^" F3 {
::memcpy(aPacket + 9, &y, 4);
8 U* T: E% y& E( P D2Net::D2SendToServer(17, 0, aPacket);, G& {/ J5 L6 I+ y- N9 K/ I
return TRUE;
- L. q, A9 q# `6 {$ K( [, M& A }
" g9 O& w' X4 N4 ]4 p# P7 h$ v0 \2 v: ]( i) l" |
static BOOL ToInvRandom(BOOL bBagFix = FALSE)
0 r. A1 C, S/ `! j/ y3 u+ ? {
3 `4 P# P8 P- {$ b UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
3 i. D! `# Q& { if (!phand)* k/ F9 I' F1 s7 e0 j5 L" {$ |, s
return FALSE;
8 _% U+ Q: ^+ V1 r# X* L# N: c int desx = 0;9 y. Q& m$ w. p, [
int desy = 0;
5 K y( l( u0 ?& f if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))" s5 @) R) n J) {4 G, i3 S
{
& I* Q! p( Y% l+ S; j ToInvxy(desx, desy);4 w' C# P6 g5 N% y
return TRUE;) u, X0 T& a& B. @8 T# L1 p! b
}' L% f6 q6 `7 F$ D$ g1 \7 N) q
return FALSE;
% o. X5 a6 Z* E8 k }
! A3 [1 n1 \; o, q( I6 h1 o6 y ^
static BOOL ToCube()
/ C3 ~ Q. Z1 I7 {7 a7 y* |! u {
4 Z: f. T) h, C/ C0 b if (!(*D2Client::ptPlayerClient))return FALSE;
2 E/ [) F* y6 H2 K6 B8 l% R$ k* ~3 j [; c0 B
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
+ U0 Z: N3 \6 O C# a( x% @2 A if (!phand)return FALSE;7 @# y$ t: T( m- v3 I7 `+ \
" `, R* ~9 s# u* Q7 L
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块0 e, e( p' g$ n. s' o6 y1 ?+ ?
if (!pCube)
$ H. c; T' ~$ f9 u& i {; I3 W, T1 Z+ m; ~0 J
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块3 K, F& N# [6 _) I& ?2 a ~( a
if (!pCube || !pCube->nItemNum)
7 M9 n3 D8 x5 P, _3 I8 u return FALSE;
R" n; o5 j/ T$ W }
2 M" ^4 Z! S6 g0 Z( y& J8 E9 n5 e, U
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
) N9 w4 P2 G- [" I return FALSE;
# t0 D' k3 c! B, K8 X9 B" n" J9 R7 O: @, R9 _
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
5 u# J) K9 A8 B! A% I, ~
$ q9 R0 @$ ~3 J# i* u' G BYTE aPacket[9] = { 0x2A,0 };- K8 t7 O# h; ^: x+ a) R- V( U
::memcpy(aPacket + 1, &phand->nItemNum, 4);! }9 B: y2 u5 R
::memcpy(aPacket + 5, &pCube->nItemNum, 4);$ x" \5 U B9 c* a2 w# j( z* p9 `5 }
D2Net::D2SendToServer(9, 0, aPacket);
' ]3 I, ?2 R6 O+ E/ V8 p return TRUE;! K5 Q6 ]. c) ?
! }: R: v: t3 D9 z1 q' F }$ k% P4 M6 k+ C( N! _! B+ Q1 S
7 B; m$ r K k; e$ x2 f) l ]
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
0 \4 Z( q4 K3 l4 s
+ s# H8 y3 s ~' ]8 `. @2 W s static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
. a) t3 P+ [5 G$ U7 I* i {2 Q, [" V6 N) j4 M4 R P) a
D2CoordStrc mypst = { NULL };) p+ W0 H8 K$ y4 v: S
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
_6 `% U) w* u+ ?/ K
) u7 s+ i8 G2 K0 Q7 |: U9 ~ if (!mypst.nX)return FALSE;+ E, [( S7 X( A! F {( W y
) u% A/ O) Z% A+ p) x' h9 j6 i5 G
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
" T% p$ t7 k. G# I2 R" u$ j$ k
5 l# @8 J7 U2 |! l+ _ M BYTE aPacket[13] = { 0x20,0 };
/ M9 c1 M$ J. {# X! W+ i# b ::memcpy(aPacket + 1, &dwItemID, 4);! y9 {7 |! g9 D; d5 c8 [- E( f4 U
::memcpy(aPacket + 5, &mypst.nX, 4);
4 a1 e9 m8 z0 { ::memcpy(aPacket + 9, &mypst.nY, 4);
" m/ T& @9 l( J& | //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);. r& Q5 x1 v) B2 d) l4 x1 ~
D2Net::D2SendToServer(13, 0, aPacket);. S, s5 l" f4 k9 }$ V
return TRUE;1 l* D( N' I& I9 c/ W, q8 ~
}4 \0 @0 T! S3 L7 t0 Y2 c" @. T) _4 Q
* w9 _. U0 Y3 A% x/ J
static BOOL DropCursorItemToGround()! h& D: @' m2 q$ M& s
{
( G% r1 e P/ w UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);8 U& j9 ~1 h% c* S" H/ m
if (!phand)# b) D( l0 `# V$ J
return FALSE;. p1 y4 B1 ?6 @* V5 ~2 m0 n
$ n8 ?% v. M5 }8 A0 ^6 a+ z
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
, D5 M) K2 x5 q9 r- j" U+ _6 K8 ` d/ ~
BYTE aPacket[5] = { 0x17 };: W+ o8 o% A: O1 b5 A; l: Z
::memcpy(aPacket + 1, &phand->nItemNum, 4);
* f7 N# q! E" O: m4 Y$ Y D2Net::D2SendToServer(5, 0, aPacket);
( Z2 W; v& l$ i7 x' e, M; b return TRUE;9 ~* t+ L$ a R- C4 X# F& {
- w! D' s1 z- N7 r3 W
}
: w; x& {( y% ]+ ]+ u4 o& n, n- X, a5 D1 i2 M% y% ]# W+ A4 }$ |
static BOOL PickStorageItemToCursor(DWORD dwItemID)
& W: n' b& R$ ?& k5 Y( ~: | {5 e# A8 z! `" Y$ f5 f1 s- c
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
( {, D4 ]3 U R# a0 j0 t, v3 `7 |+ }. P
BYTE aPacket[5] = { 0 };8 O, R" U7 {; ?3 g) X
aPacket[0] = 0x19;
; Z* ^' b6 T: i E" R$ T- v ::memcpy(aPacket + 1, &dwItemID, 4);
r% N8 u; T& X //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);5 G/ c- L+ u/ C4 K5 \5 i! i1 w
D2Net::D2SendToServer(5, 0, aPacket);
7 w7 X6 q" C2 H k- f+ A M) \ return TRUE;7 S& D) m F& U6 u6 S+ ^) J
}
$ [) J! I/ s- @/ r7 U6 w! d- Y* {/ Y! N7 S1 F% K/ |1 r2 f/ U) T& o
static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
p- _# d4 f# W$ z8 e) v$ {- p { W' ^6 K3 Z$ e5 {- H/ o5 \
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);" V" R Z& A1 o
BYTE aPacket[17] = { 0x1f,0 };
1 x* } n- @! }$ p7 b ::memcpy(aPacket + 1, &ItemID1, 4);
8 Y4 d: ?% V$ p. c9 f* d2 c ::memcpy(aPacket + 5, &ItemID2, 4);
3 U8 t. D* x: U' Z) q4 Z3 P //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
; I) u- b! L( p. o% {8 _: W6 T D2Net::D2SendToServer(17, 0, aPacket);/ r: o; S! G- P* M4 M: G
return TRUE;
t U9 v: q. M" r }$ `0 T( L5 R q$ B0 A- E
- X9 o, p6 t1 A, Z$ u3 V) v
static BOOL Transmute()$ ^% p8 d/ m% K) l7 ^+ @9 V R
{* m7 Q. B$ w3 o u3 Q
if (!(*D2Client::ptPlayerClient))return FALSE;
7 Z3 c! Y) [( @" T0 y% q: Q
+ [! j" C: g/ ` if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))/ J; u- h% ?8 X, p! F2 m7 a& n& S
return FALSE;
& C7 S K" Q c2 `+ m: `8 e' l& E$ J$ G1 x( K1 n# [, \2 p6 W
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
% V2 ?) T+ h. Z" h) e BYTE aPacket[7] = { 0 };0 I* d7 a- v @9 a) ~+ J
aPacket[0] = 0x4f;5 R5 n7 G; n0 |# ~9 V
aPacket[1] = 0x18;
8 h1 z; H) ~: n8 z L0 x D2Net::D2SendToServer(7, 0, aPacket);' f, n; h6 h! R2 \
return TRUE;$ a6 U! R% C9 P- J
}9 _: \5 t# x0 _1 _0 b2 T
};
! n! n% f& d9 S$ b+ t% w+ ~8 N( F: z8 c9 F8 B
|
|