|
|
转载7 k1 `4 A% i/ P' D
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:% y& X- Q5 _. m; {+ g4 V' Y
D2Client:5 d5 r ?8 g! C; U( k
6FB20AE1为拦截输入框(用于获得命令)# ]0 m/ B" v! o3 A$ u
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发
- O8 E. G5 G+ }) f6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发% \: U$ ~# o1 S" Q# ~
6FAF4230为hackmap的loop点 我用的hackmap导出位置, D0 {0 Q1 D5 k: N2 G
8 T& S+ q- Y9 F$ w, Y2 Z) C9 |: g( x6 \3 F- h6 s5 S; }6 o
发包函数:
& e! l# e6 z' @/ g& Z2 T$ P8 ~class D2PKT_ITEM: z+ ?2 \ u- v* g
{. P- D; g# F9 }! N' m! e* R- m
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上! f9 }7 H K k
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
+ y& ~$ E) O. S0 S#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上' t9 C- b$ ~- E' L5 B
#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上2 a1 w% w. X, U- `% E6 p: ~& c
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
$ V- R, i& {: R. h6 s8 g$ s8 V#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上6 i6 A+ a: t* Z, Z3 m" H! S# G
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏7 U( g# ?" I6 Z9 {3 C2 y
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上" o* G6 v- Y8 L+ `
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
" x1 b/ r. x" H9 p/ D#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
' ] [8 p8 }8 ^. {! `$ U, A3 `+ b#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV" b5 v! n) l3 [' P* D" T( w, T
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
' `) H% ~. o+ }7 i1 i. y. \" o#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带! g! Y1 O7 Y+ M& D T( }
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
4 F& }' Y7 ~7 W: ^$ u$ Q/ O" v" T#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -- q/ D$ B1 t% f" N$ V
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上
* x) x* J" F/ q#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -, A! ]0 y# z$ V" e7 c2 s
' I$ z0 ]+ Q; [) h$ Z* F8 w' y
#define PacketItemMaxTick 150
" R* w# X* V3 G7 l#define PacketItemPickUpTick 20: [/ l8 @8 t( {8 S5 ]+ {; u1 e
. f5 B$ b+ @) {
private:2 K* k% ?, \: G: [
static DWORD _PKTItemTick;$ C6 m. B* m, ]/ m3 D; X
static DWORD _PKTItemAction;
) v! k+ ]4 `7 c% ?0 g static DWORD _PKTItemID;* d5 }7 _# _2 J. e6 g1 m* v
static BYTE _PKTPKTType;4 K1 l+ i+ R7 T# }
public:# }: f1 J2 b% p( O9 t
static DWORD PKTItemGetTick() { return _PKTItemTick; }
' D5 g3 l+ [; U5 H; f; o$ l
6 I1 e8 D- S1 j8 l! d static void PKTItemRelease() ) L# a; n0 _9 G$ x& e: b
{+ r3 Z1 V8 d# Y8 U/ _
_PKTItemTick = 0;: M/ T$ Z6 `( W0 |
_PKTItemAction = 0;: h1 c( @- r, V# u
_PKTItemID = 0;) d0 W5 A) T: ~
_PKTPKTType = 0;
3 x4 B! L* A" \1 E- t }7 ^8 b0 ?8 {1 T0 b! @* Z
& K5 R' X0 f9 o1 V; I$ f static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick)
: ~) G! q' J9 I5 }% d& l3 y8 t {
$ j# i2 K5 r" @3 @ _PKTPKTType = aPacket0;
; y3 L8 N" ~8 b7 \) l! J+ ? _PKTItemTick = tick;
+ G0 y Y; e) P: G* E _PKTItemAction = ItemAction;
2 {* a' s0 K v* N _PKTItemID = dwItemID;7 \0 _$ a" a6 t7 o# M! T5 R
}
2 A$ i( f E6 c; R3 B3 L8 {
! u' t" V- s5 w n2 |, I static void PKTItemTellW8(DWORD tick)- N0 `, j; W! p
{
: M/ c+ D5 Q$ l! J _PKTItemTick = tick;
3 m A, R- l' F* b$ U6 X' ? }
" b$ I/ x# |9 W0 r- _4 E
" Y( J$ p! w% W7 k9 C( b; l static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor* _* r; U* W0 H5 c3 R8 {0 T
{5 g8 s* m2 |% C$ Z; l
if (aLength >= 8)
% W1 F- L5 I7 x7 B {& \( L( C6 W1 ?4 s5 M
DWORD dwItemId = 0;3 `- C& N8 U# V8 C0 I, Q
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));+ V; Q* `0 I1 q$ e" ~# R6 z) b
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE. W: r" I4 i. T1 e. n) @
&& _PKTItemAction == ITEM_ACTION_TO_STORAGE
0 f; V4 q0 C) x' w9 c- ~ && _PKTPKTType == PACKET_NEWITEM. m8 ^8 u! s1 ] f6 ~" O
)
3 T3 M: z' V* X: @ {4 a; @7 k' E6 a# G8 ]
if (_PKTItemID == 0 && _PKTItemTick): ^5 W) i: F' e8 V0 i N! t/ s
{
; @2 }' z1 c. m3 `2 H) X# \4 R: R PKTItemRelease();
2 {+ C! f7 \: O/ h7 f8 f# e }
% ^9 C" L2 j$ P else if(_PKTItemID== dwItemId&& _PKTItemTick)% P" y Y* }5 H1 C
{! W, ^6 u# G9 ~' T# f6 X
PKTItemRelease();
* G+ u. I' I o% f, p' l. Q }) m- I0 X0 M# w% G
}
3 v" A$ _- o/ Z9 T5 t+ @4 d ; B' Y: X- I; W
}! ~* s! Q: b' I- i7 v0 Y
}
4 O% a' \' q1 A8 J& R, d: |* @+ s* I3 s4 D* I4 K" x
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored4 O9 q/ ]+ A' Q2 F; R9 @
{, s& r- `# e: X4 a
if (aLength >= 8)% |/ H, \, b( f6 s9 O$ k0 a+ b
{6 D0 o. t4 ~, `; V0 u" H/ ]
DWORD dwItemId = 0;
/ b" Q) F5 z: {# g9 Y- @ memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
- n% o0 z8 W, N% {# f8 y3 D' n3 [) B if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
" _/ U* T: O; N; v& S && _PKTItemAction == ITEM_ACTION_FROM_STORAGE6 k3 z& ?' E1 Y4 j
&& _PKTPKTType == PACKET_ITEMACTION5 p& D i* Y3 A* X" S7 k: Q7 U0 }$ T7 ]
), |' }2 [# m2 I% C/ [
{7 X) K! U9 t) e
if (dwItemId == 0 && _PKTItemTick)1 O. ]7 D; Z/ `8 y/ H
{* k0 u# H$ w1 b. D
PKTItemRelease();
& u: {) u8 E- \8 N( I/ ? } O: R5 _3 Y5 b* X! m
else if (dwItemId == _PKTItemID && _PKTItemTick)( C6 J$ ~0 \$ b; c" `
{& t8 J0 N" |- l4 J; v* E( i
PKTItemRelease();% [1 `: F+ v8 I9 e' w i) j, z
}) a; Q! k$ ~: y" N8 a; ^
}
6 t2 B# i! \! Q% \& o
) _1 J; U. t% H8 A' E/ ~ }/ F% w8 ~, M4 L$ d! O
}2 |. }6 U, V8 ^" _
5 `0 Y! B, b/ \: |# C static void PKTItemGameLoop()
2 w5 @8 i0 C5 V1 e+ i/ Q: v {1 w6 o& k# H: H$ ?; N
if (_PKTItemTick > 0)* ]& b* m0 s5 V) r7 W3 J0 o: W
_PKTItemTick--;
9 @1 e9 h/ M u$ {0 ~0 P( I" g else if (_PKTItemTick == 0)' M$ M( F* V! M0 [8 S# g
PKTItemRelease();1 H( O8 G+ K( _, |# `# U0 J) a
}! s0 G9 K$ u5 G5 a
9 R5 W k% J3 z- j9 h# n; ~ static BOOL PKTItemCando()
- X# D9 Z* V4 }$ h1 A; [- P {
# N$ ~8 l6 T& a6 B if (_PKTItemTick == 0)return TRUE;1 g6 J) N1 d4 K7 t
return FALSE;# R' H, A* V! r8 Y2 i
}
# p7 p% a" P( M& N* v* e& K3 C1 k9 B, U
static BOOL BuyItem(DWORD ItemID, DWORD npcid)
- ^ H1 F: ^4 Q* t8 X. ]7 s+ g# T2 K {; p4 @: a9 H" R+ u2 Q {/ m( H# u# W
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);" f+ @9 }8 s. v: Q: f" J: r
BYTE aPacket[17] = { 0 };
5 T6 M8 x! Y- r, y; k2 y' c aPacket[0] = 0x32;% i; U9 b$ I6 \& c
::memcpy(&aPacket[1], &npcid, 4);( v9 |" \$ ~$ T6 J' I
::memcpy(&aPacket[5], &ItemID, 4);
0 o* Y/ w: c8 E/ l/ x( E- U3 | //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
& R, V( z3 C0 q7 F# g+ x$ E! d D2Net::D2SendToServer(17, 0, aPacket);
' B/ l& _5 y9 V. o* n3 [1 L: T$ o return TRUE;
/ n S! E" P# ]; A }
( f& M+ A' }5 I, {1 O9 ~
2 Y% N& m2 P! e) \) c2 | static BOOL SellItem(DWORD ItemID, DWORD npcid)7 N! S# [. l5 c/ L d
{! S' w2 K+ l `+ i2 `% L+ q; l
PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
' \" `" ]. `3 s+ C# c! P4 j. m. v BYTE aPacket[17] = { 0 };! }& B0 N! P5 x6 m/ a
aPacket[0] = 0x33;8 j6 V9 q, m. d5 y. X
::memcpy(&aPacket[1], &npcid, 4);
$ }' \/ M' j8 o7 B# ^1 A! V7 K ::memcpy(&aPacket[5], &ItemID, 4);
. C) z! y# Q$ B: W //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);' c/ m$ K$ X' g! q
D2Net::D2SendToServer(17, 0, aPacket);0 T$ Q2 \4 S3 ]7 q& S% }( w
return TRUE;
. w- v- V1 }6 K8 K% Z# {- W }, R3 y% J! G0 M5 n; R9 |/ M
4 K* X, w4 W$ ^
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);
9 b; o+ V) D1 l$ ^- z: X( k; g& u/ m% Y
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);# E5 ^) V5 l" ]
6 X8 C& @7 ~; E! D: a
static BOOL OpenCube()* t6 b! s3 G8 T- h
{
, e: {& Q/ I8 Z) j if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
$ t8 e0 i& Z. n! J
1 z$ h7 L# ]. G! C p' l UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);
9 a: D& a& R% P U if (!pCube)% H6 O+ t$ t) p S1 b2 [
{: m F7 s' g2 b) u: a
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);6 K, }! u5 @3 G3 S1 _8 k
if (!pCube)( i5 {% K: a2 Z6 B7 N
return FALSE;
# S2 A% \* H9 R6 a, H* b' Z }
7 G ]1 b+ m: K# E: Z PKTItemTellW8(PacketItemMaxTick);0 b+ ^8 Y5 b2 n- R" Z6 G7 h, ~
& k7 x" W0 V- |4 U0 q2 E) O
D2CoordStrc mypst = { NULL };1 w* E D. o/ e( I" D
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);" f2 s9 @+ f/ l. r
5 A- o+ r8 Y$ ^6 ^6 G
BYTE aPacket[13] = { 0x20,0 };
: Y" ` o6 L8 h ::memcpy(aPacket + 1, &pCube->nItemNum, 4);
: L: [" @7 ^ c1 |6 ?" r ::memcpy(aPacket + 5, &(mypst.nX), 4);" ?# K. h* u4 E9 q1 i s, C/ X
::memcpy(aPacket + 9, &(mypst.nY), 4);
9 {7 N7 `8 X/ M7 K1 J: Z D2Net::D2SendToServer(13, 0, aPacket);
! Y$ w* \+ Q5 Q8 K return TRUE;8 `$ g7 @! L: |4 p) S& N6 n1 Z
}
]& K7 A: G. I! n: O( G" `3 `$ i" V* _0 y: i& |. r
static BOOL ToInvxy(DWORD x, DWORD y)) p% f, p% e. s: ?. Y% Y0 E& R
{
8 h: H2 X1 J: v6 I- a7 K, h) V X UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);9 }4 l! c5 A! J6 U! {
! g) u# k* g) F& J, M
if (phand == NULL)0 i5 y' c$ r9 L" e/ M" r7 ~
return FALSE;) U/ g$ m2 Y! U0 }$ a6 E
1 S1 F1 K$ k) U PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);8 P0 @% F, t$ W' O
) d' j+ E0 g- Q3 d' v! \
BYTE aPacket[17] = { 0x18,0 };& @" a3 p- b4 \, W. z
::memcpy(aPacket + 1, &phand->nItemNum, 4);' C; E2 o3 j- s; a5 b0 D
::memcpy(aPacket + 5, &x, 4);
. `0 u) D" W: t0 s: y+ r- P3 P ::memcpy(aPacket + 9, &y, 4);
# p% ]5 Y% ]7 B D2Net::D2SendToServer(17, 0, aPacket);( f9 g8 l! B* S, H o/ H
return TRUE;5 n' s ?+ y5 T7 Z$ k
}: n* N, F {3 h
+ P, r( u6 D9 f% H3 D6 F8 _+ Q static BOOL ToInvRandom(BOOL bBagFix = FALSE)
) l2 s. |; Q* P0 p0 P$ Q( c% H k {
4 ^2 V5 F2 V4 Y9 w6 U/ h0 q UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);# D0 J9 E1 ~. X6 R+ `' _9 i8 b( C
if (!phand)
* b& D$ I i) M return FALSE;6 M% y) c S/ o7 Z5 o8 K: c. P
int desx = 0;' B: f) ?( V: U$ w5 {, b
int desy = 0;
2 s! W; c' q) S if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))
) W0 l. G/ ^- D7 L {+ A/ M1 s! S8 |3 N: J
ToInvxy(desx, desy);
4 M% Q- D" v! ?" F1 ?, n return TRUE;
/ i# a( Q3 ^7 s }
3 l8 t6 K: X0 J4 ?) x. |& F$ A return FALSE;
1 ~! C9 a9 n. `: o) U& b8 v p ?) m2 _ }* |# Z; O9 k( A' _; [4 a L3 Y. e
& V# R) k$ N+ x$ H
static BOOL ToCube()
" B2 F7 k1 @* [( O {
) Y, N+ n/ a8 a2 L F& I if (!(*D2Client::ptPlayerClient))return FALSE;
. n g; _4 z; `# g( g7 U( H
) @/ {; r$ U% y" w- i UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
- V: A5 O7 e: C4 Z! K, z9 g8 L if (!phand)return FALSE;
& S2 M/ } Y2 C' e7 U8 b) P1 E
& a# z) V9 _; I% ? UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块+ ^$ f" P0 z& i3 U# \
if (!pCube)/ h, D' ?5 e$ X; y+ F$ ?
{
+ C& L8 k" s& p% i5 _) j pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块* y2 d' X [; D, c7 p, U
if (!pCube || !pCube->nItemNum)
! t; w5 C; I5 `9 {4 I) \5 R1 q7 ] return FALSE;. G' P2 j! R. l7 k0 y) ^( r. f( T
}- a# c( c1 F7 b, ?$ w
. r4 O# i" {7 j/ o) u0 y
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))8 ?2 p& T# s3 i$ _5 S' i; T
return FALSE;
% q" C8 P1 R' E) j" M. Q- k8 R0 t5 V6 V- _. {) e/ T: Q& e- h
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);( Y4 I+ T- K9 R ^& P8 `( X/ g- }
% r) y5 f% x/ ?* A( A/ Y! {* l! }+ {
BYTE aPacket[9] = { 0x2A,0 };
: j0 D& }% n, \8 j! w' R3 x ::memcpy(aPacket + 1, &phand->nItemNum, 4);2 W) b! B: R/ \7 a6 P) e: P
::memcpy(aPacket + 5, &pCube->nItemNum, 4);4 c' j% A" D6 }
D2Net::D2SendToServer(9, 0, aPacket);4 \2 ~$ `+ S, p/ W0 C
return TRUE;
7 n. a8 M5 P% _5 p% \4 i9 Y! D; I: F1 U8 A& k/ |' o/ V
}1 J, g+ n! P8 R' w @ U( e0 R. f
5 q/ O8 O3 [& z1 w7 |& ~ static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
; `9 Y+ s! ]( k, C' D# |3 f
: S+ s4 x1 j7 V( m2 {7 H/ F7 B static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
, Q- Y' \$ h/ a( ]* ^ { B5 I, m) m6 l) `3 C) S. |
D2CoordStrc mypst = { NULL };( e2 k# R- O, C" S
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);& o1 x/ {1 e. Z+ z4 ^
. U7 _( X* k! r. ?$ I6 @/ S" C if (!mypst.nX)return FALSE;/ @8 N- q ?0 t" B- }( O8 v: f! J
6 E7 x8 s$ a9 v4 r( G6 s6 c
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
( O' n- {2 Z4 d) f+ s3 [% L( Q
8 |; w# s# e, z) X BYTE aPacket[13] = { 0x20,0 };
1 n6 P( }& Q; I, I ::memcpy(aPacket + 1, &dwItemID, 4);1 F! w+ S+ d. Q2 r, b8 [6 ?
::memcpy(aPacket + 5, &mypst.nX, 4);7 u( t% F7 a. l9 x9 u, u
::memcpy(aPacket + 9, &mypst.nY, 4);( v" t" @7 q6 {& d1 A% S* k+ Z
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);0 @ [! ~# v1 s' B* ^+ U9 [
D2Net::D2SendToServer(13, 0, aPacket);
" |9 n+ b$ s4 g return TRUE;6 ~) P4 W& x+ G2 R# D
}
P7 l x; J; D) D1 w4 q$ T
& L. J' }) z# [# Y7 Z static BOOL DropCursorItemToGround()+ k+ g% ~4 C4 K& s7 w5 I
{% b* N. j' d. w. B7 B5 A
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
0 v b% i, @) g# C# i" V) m if (!phand)' n& E" r, r' [
return FALSE;2 X' p. D0 k- J# }6 a- @$ x
3 P" L# Q# a6 m, W
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);: _/ f6 M) w) {$ G" P& o$ ^) A
7 }4 G) W: W @4 M+ P* ^7 i BYTE aPacket[5] = { 0x17 };; `) n% t+ ^' \. X% ?6 w
::memcpy(aPacket + 1, &phand->nItemNum, 4);" C9 W! {$ k8 b2 L; v" I
D2Net::D2SendToServer(5, 0, aPacket);
2 K' Z; N; L& Q; ?- |! F. m- g0 N return TRUE;
2 ]" q. o2 k" `. Z, C0 p, K' f/ Q2 f/ p5 }+ e$ j9 ^
}
V0 ^ ~6 b# X2 V$ z. q; m, e1 j0 q/ u# X/ x( w* p% w
static BOOL PickStorageItemToCursor(DWORD dwItemID)' i% j/ ~4 k$ m6 G$ ~
{" X, r- M! l- g- E4 M7 s
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);5 Q" B1 X9 X! p+ Q
# Y9 R+ R8 q- l
BYTE aPacket[5] = { 0 };6 |: O a x" o
aPacket[0] = 0x19;( ^9 ^' T7 P {9 n
::memcpy(aPacket + 1, &dwItemID, 4);
" i/ ~( k+ |: _5 f7 J" M" V //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);
' |8 P1 l- Z! R: M2 {& k: L D2Net::D2SendToServer(5, 0, aPacket);* V0 H& H! f) ^* ~' G9 R! F Y; G
return TRUE;: N( Q2 R7 l# ~3 i0 q
}
0 I/ U5 m) Q: D) }3 t
: F5 L" B8 \, Y+ U$ W static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
9 C2 \2 @( x3 O% A @/ g {3 n d8 U( j- A4 T( S- `
PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
. J# s# c+ l0 N8 A BYTE aPacket[17] = { 0x1f,0 };
+ K' l$ S+ E4 a, _ ::memcpy(aPacket + 1, &ItemID1, 4);$ H* o/ M7 n* U# k! [- D t: f
::memcpy(aPacket + 5, &ItemID2, 4);. @; L* i$ G( D$ d" S6 m
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
- A% q! V- z# w0 O D2Net::D2SendToServer(17, 0, aPacket);& @& V( ]* n, T: S8 \
return TRUE;
& @8 R4 i1 `0 Y }
8 ?5 f4 p, W# ^$ g0 F! y/ d$ A' Z* D+ Q5 ~% m& t
static BOOL Transmute()
, s1 U( ]( r7 ? {
7 ^$ r G7 v, c7 }) U if (!(*D2Client::ptPlayerClient))return FALSE;
9 O6 r8 t; d, b- c$ [0 I( r' U
8 x& X) V3 d5 q7 B: ` if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))! W9 z7 G+ i8 ?- x% I. K
return FALSE;
8 t& x# C! Z0 _5 h6 `6 q8 L+ o
, x( ?( e, g) V; _; E' y PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);% b z5 ^ Y+ f2 W+ m$ j4 |( o
BYTE aPacket[7] = { 0 };& f& L6 S0 n s( Q
aPacket[0] = 0x4f;
7 h. ?0 ~ K' x' e, m3 k aPacket[1] = 0x18;- @& T( U! O7 j, l; _/ F3 Y6 G
D2Net::D2SendToServer(7, 0, aPacket);4 K& @$ h! o0 s& Q- S6 n; O2 a
return TRUE;, r0 S9 R: X2 J3 @: J! ^
}5 V. E% h3 P2 G2 h: u" f2 }$ k8 P
};
; z4 I- J; l) [' l5 ^' n' \8 l! X. ~
|
|