|
|
转载2 t4 r0 U4 y' ]/ x1 c9 k. O" ?; Z
自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:
1 n j! v+ l; j) l/ m- ?7 b! e. HD2Client:
$ S' \ y0 n) M( v* i+ P6FB20AE1为拦截输入框(用于获得命令)1 j! L2 S" v; i& b1 {4 _ O) t" [
6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发' t- D1 [! e$ b3 Q
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发 g) h: A, l+ W3 j) A% L
6FAF4230为hackmap的loop点 我用的hackmap导出位置; j2 x2 k" x x. Z3 G% T1 ^! }
0 X* L+ \' i2 b/ l) R% D$ w3 s
: ^: Y+ k4 d, T: C' Q" x0 o2 o
发包函数:+ X$ c2 h+ I' _+ [; }
class D2PKT_ITEM8 `1 p( X9 B8 P; o" K' R( S% t7 |8 }0 ?
{1 F2 E! f4 F' b' C
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上
3 r1 i. B9 R+ P; x+ w( C' K#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多' d2 H5 J2 \* b, D2 W1 J& v# f9 f
#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
# Q, A6 _ _& r( d#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上# g. P& o S* d n1 l
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
/ }: k( F) O; k+ e5 n, X#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上 B/ D1 g% x: N0 W7 _
#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏
- j. Z0 f7 Z+ {, U0 C9 r7 B#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上
: g& g2 w: u! k: B7 h1 b/ c: ~, N#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
" l/ I s! d' }! j#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店8 l+ X' r8 V' B9 l
#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV/ F' I/ T, N: b% n' n
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道
+ F9 j8 j8 o; t/ x3 m#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带1 q& d: A8 D6 }+ C
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上
) p& d2 g& P5 h8 G, O: D# a#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -$ h* g) N" Q5 Q+ n/ F
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上; T' W0 o% f" m+ ~
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -3 w. e. j! G ^- f* J: x
8 J4 Z7 l! \8 Q; G9 I G S
#define PacketItemMaxTick 150
, n; a O3 F4 c' r S6 @#define PacketItemPickUpTick 20
6 R" s4 g* u# u4 D# q2 r: b! ]! E4 {5 v' z; o8 Y) r1 N
private:
" i5 S: i4 N9 h+ j( }* A0 v; T static DWORD _PKTItemTick;
( p$ z! e4 A2 H, k static DWORD _PKTItemAction;
7 s. h! w! g K. M2 Q% B! A static DWORD _PKTItemID;" U& P V$ ]! ~5 G
static BYTE _PKTPKTType;; g# h( [7 P% e0 d& q" `
public:
* x; X2 G" _. u3 P7 P' o static DWORD PKTItemGetTick() { return _PKTItemTick; }
, q, x. a# Z8 a8 A. o
2 a8 u7 z% ^, o G5 @7 d static void PKTItemRelease() . R# ^ R$ N; i
{
9 I7 f# i' M1 [. K0 w6 S+ X _PKTItemTick = 0;
( i9 A+ b' N- k _PKTItemAction = 0;
$ B! S8 Y& _8 ^% } _PKTItemID = 0;& [6 r3 S9 {4 p7 h( R
_PKTPKTType = 0;
) W3 o2 l% A5 H3 _8 L }
* u4 L; h" I: F% `% V6 D
8 w: M4 @ F! {" F static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) ; ^# J+ R- S; k. C' B# ~
{4 @( y7 G- w& J+ f8 u" g' d
_PKTPKTType = aPacket0;, f) p8 ?* L, u0 ?4 Y% l
_PKTItemTick = tick;: ]& T# e; [# Z! L. N) O$ u
_PKTItemAction = ItemAction;+ U( G% g; K7 d' V
_PKTItemID = dwItemID;
3 A5 ^; R b$ E/ ~" W) }, z }0 o3 f; D5 E* d0 O4 ~7 |3 c
6 j7 `" S, v9 Z static void PKTItemTellW8(DWORD tick)
+ L* ?- {6 n4 x3 J6 G# u$ X {
+ M8 H/ v% D6 H# x! Z6 c6 @ _PKTItemTick = tick;
1 P& h, ^, E" Q' {% F2 u }
" {( R8 h7 i8 U: X8 ]/ y( x0 x( s/ |7 T2 n( t$ N: `0 S5 J6 X; k
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
' n! y& k8 N' u# J {
, }8 I' u. ~7 |; m- o if (aLength >= 8)
Y& ]; z: P! j4 s/ W {: n6 z- o+ }' M/ [
DWORD dwItemId = 0;) P: H$ f' P3 A" P
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));/ D0 o, X- I: \: N+ ?/ a
if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
3 f7 Q8 }# t5 k* P% n$ H7 G H && _PKTItemAction == ITEM_ACTION_TO_STORAGE
; p r% @; r5 H( o8 ]8 `- O && _PKTPKTType == PACKET_NEWITEM& v0 G+ Z( t5 Q0 }
) q z1 E3 }6 B/ C: X
{3 E9 E0 n5 W4 I( z' k0 V
if (_PKTItemID == 0 && _PKTItemTick)* H5 ^3 j- k6 b4 j
{
, q3 Z: n* G( o1 K" r( Y PKTItemRelease();6 F* t$ `9 W( q- K
}
- L/ B0 F% w% i( i! | else if(_PKTItemID== dwItemId&& _PKTItemTick)) b- M; C" m; q8 b! H6 o$ _4 _8 ?
{
" R( A, u' L, I3 i& [# E/ B PKTItemRelease();
" P: \7 |7 I$ ]+ Y2 X `$ a }
) @1 J3 I. e' g: x1 i }
" f9 r% n1 f, G0 M; G * X7 B# T7 E* s+ e* w; `8 H
}- F0 D7 t* f% g# I7 `$ T* N
}
9 F( {% L! r" t$ s$ t; @* e8 U' @4 N$ Y! \- @6 y
static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored
4 p) k$ p Z' w a; P& V3 p2 N {
+ U3 h/ k' ?9 L; D6 v+ H- [ if (aLength >= 8)
8 {. P9 l% q5 J' p {
1 O9 y% I& l/ S+ n DWORD dwItemId = 0;& o( \% n' d# @% m e
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
9 X8 U. B/ e# x) R& O" ~4 N8 f if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE& h8 {. A( q- e0 O9 A* E8 Y: {" z
&& _PKTItemAction == ITEM_ACTION_FROM_STORAGE9 Q. J% ?# r6 J7 F; a
&& _PKTPKTType == PACKET_ITEMACTION
5 m5 G" Q) F+ t9 ^! k1 I7 o )4 a* r" J6 {" w# { V5 w2 P, q
{" E) |6 l% l, D2 x5 ^1 h
if (dwItemId == 0 && _PKTItemTick)! l/ X- E N8 ?$ C
{
4 O) F+ \: W& Y2 b3 ^0 H2 @ PKTItemRelease();
: d8 C' Z6 S4 n1 r4 _% y; F8 ] }
! ~& j- S! L- _8 o else if (dwItemId == _PKTItemID && _PKTItemTick). x7 O8 s5 j. [
{
: D2 `5 R+ @: ]# K$ `6 L PKTItemRelease();
4 s) ~6 n: R: w4 [ }2 y e o) o2 A v
}7 T8 I! C( g9 v I6 ^; P0 d$ n
7 N" O! \3 Y. L }
, }/ e# @: r# k* E& X. Q, e }8 V/ q+ Q" J2 _- M7 ^
* p% H4 _; i* V% X" J+ j+ ]9 b2 \+ {
static void PKTItemGameLoop()8 ]7 y8 _$ b' S: F7 a# `
{0 L0 d! K0 W/ A! {/ p' A7 _8 H
if (_PKTItemTick > 0)
$ j3 a: a& [! w7 }1 W2 }7 `% t, z _PKTItemTick--;
$ t& t3 E4 E7 C% r, t0 m. q else if (_PKTItemTick == 0)
8 p% K2 x6 x( q" X9 g PKTItemRelease();
7 ~) j/ v3 k: g( I% Q$ V }6 r5 k0 T( F3 N Z1 d: }# m4 c& H
& h) q! j, [6 p' ?" H
static BOOL PKTItemCando()
5 N2 T) `+ d% r& r4 |8 H {. z+ |# L6 i1 ~9 c f
if (_PKTItemTick == 0)return TRUE;
; b' u% |* Z5 t7 X0 }" ~- m return FALSE;
# n$ c9 ~/ k; b3 A- x3 { }2 c7 @3 W& V+ J% N% K0 _2 G% W
! `2 z. u0 j! C3 ] ^
static BOOL BuyItem(DWORD ItemID, DWORD npcid)& ~# D# N' E7 I8 N, i; y7 D. C
{
" F a7 V+ ` v* ?% ] PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
; r, w- ]9 u, H- T: t BYTE aPacket[17] = { 0 };
* C/ u ^4 s! Y6 y3 p aPacket[0] = 0x32;
& C2 F8 |* \* _3 s4 I* X0 X ::memcpy(&aPacket[1], &npcid, 4);
; ?, f1 ]; Z: w* u ::memcpy(&aPacket[5], &ItemID, 4);
4 p; D" N- C# `8 S //return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
# x t+ P6 x6 _' i" ~ D2Net::D2SendToServer(17, 0, aPacket);: |4 [, p( b* G0 O
return TRUE;8 f# w2 A& }& v2 \ K* m
}
9 M. `+ W# j6 I- k, V
' `( H# }: x: J6 G9 k0 E static BOOL SellItem(DWORD ItemID, DWORD npcid)
) _4 _9 H+ X7 Z) h8 T1 c {
! {7 g2 |! W# k- _4 n PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);) @. Y1 V t7 S' l
BYTE aPacket[17] = { 0 };2 R( {& j5 Y3 A) s! h* I
aPacket[0] = 0x33;
( _4 g7 Y$ `1 y$ h' [9 N ::memcpy(&aPacket[1], &npcid, 4);
5 X, G" i# B$ h ::memcpy(&aPacket[5], &ItemID, 4);' X, x) Z, m0 i2 r
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
0 N2 p- O( g& ` D2Net::D2SendToServer(17, 0, aPacket);5 l9 E5 B" ]4 p+ n& v9 _1 e9 A
return TRUE;
( Z; Z( x, G% V3 m9 X }0 [: L& [( Z R/ z
) D6 Z6 I" q0 n- c+ f static BOOL Interact(DWORD nUnitId, DWORD nUnitType);( {* l$ H4 j3 A2 H: q
& A) o- k5 b* x8 A+ F- `5 O& W4 r- i static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
# u9 `3 M! y) u4 `0 a7 C
2 X# s* e. w4 D* `0 A static BOOL OpenCube()
1 _7 ~9 _8 H$ X {
6 M \. ^! C7 \ if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;1 x% Q4 V' t) i2 F9 h; f
! b( B, k( x7 Q' q) \! e UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);# P" b- T+ w' t4 y7 N$ G. I/ t
if (!pCube)2 z! |- X! R) @5 K! f% n- V
{
( }4 m8 s% y/ q6 [: n# G, S pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);. }, V& h# |. P. F Z
if (!pCube)( l5 R+ S5 E5 C$ N. ^0 D0 R$ T
return FALSE;4 s& U+ [( M* `* q; R" r
}1 i V* {( `9 A" l& R0 O$ f6 a
PKTItemTellW8(PacketItemMaxTick);. l/ U( {- q0 f2 R7 ^
4 u0 w2 [3 E, ^ s$ t3 o5 D
D2CoordStrc mypst = { NULL };; h! a, b9 S) D# e$ B3 m2 B5 V, Z
D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
3 i# s& u H% k4 J5 K7 o1 B) c. X0 x2 `- Y+ s G& M) ]
BYTE aPacket[13] = { 0x20,0 };
% r: u5 q' V* a! J5 `( s ::memcpy(aPacket + 1, &pCube->nItemNum, 4);8 @4 U) h$ t/ t) c" p
::memcpy(aPacket + 5, &(mypst.nX), 4);9 \6 `. m" T8 w
::memcpy(aPacket + 9, &(mypst.nY), 4);$ ] |8 _! r6 ?
D2Net::D2SendToServer(13, 0, aPacket);1 q& c: \# X- p' |/ `
return TRUE;' w! X6 B& m5 O) m. V3 `) ~
}: t& T/ f0 G5 A$ z9 `
. r* b9 U. t1 I. Q" T static BOOL ToInvxy(DWORD x, DWORD y)
: }0 @ V5 @5 j E {
8 B3 P/ k/ P" {: z' Y$ D UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory); S; e. W9 w" W% o, k' O, W
) W; z* w. \ F1 u
if (phand == NULL)( B- {- Z! [1 ]9 e3 e# k ?+ d% c
return FALSE;
U/ X9 ]- P" F% q# z) y- \1 ~
) l W5 q) J h. ` PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
* T' S% J: K0 G( _% l% l" g" U8 Y% E4 a; L( Q
BYTE aPacket[17] = { 0x18,0 };5 |1 e1 ~& m8 I* ]) \; y5 {# Q
::memcpy(aPacket + 1, &phand->nItemNum, 4);
! \. H9 q- @3 ^* I ::memcpy(aPacket + 5, &x, 4);3 @7 S# @- x. ]
::memcpy(aPacket + 9, &y, 4);' x& M$ [/ I5 G
D2Net::D2SendToServer(17, 0, aPacket);; E3 [2 U) m2 h7 U# p! @3 i
return TRUE;* y+ E* a0 P2 A5 ^& s; v/ o
}1 S+ L6 `, G* C: G% n, n
* O8 o2 P8 D; s2 E
static BOOL ToInvRandom(BOOL bBagFix = FALSE) / Z z1 G/ X( j4 B' d+ |
{
$ g# x5 l' }( i UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
2 H& ~) T" i1 x6 e if (!phand)2 z$ _& F0 ~5 p. b* d* I+ J
return FALSE;
0 }* t! @. f: X6 D: }, G; `6 s int desx = 0;- L+ {2 o5 l; ?7 o: u0 f# [8 T; v
int desy = 0;0 h, w8 I3 {4 U6 K) c+ i- z0 A" S) g `
if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))5 N3 w* s) E- ]1 R) t7 ^& v7 R
{
1 m* k3 J* g1 Z% a ToInvxy(desx, desy);
/ W2 J; E7 t0 {+ O% |$ W return TRUE;
" S. N6 l$ h7 G/ L: V8 l }
. A G- ]/ ]9 e& X, m return FALSE;
1 ?; y/ r% O" g3 ~0 c% A }3 u( E* w O7 @1 U
( C' ~& n9 }3 G5 b- p
static BOOL ToCube()! [. |/ q8 T7 t
{6 S/ F6 N& b0 d/ E, W: b9 C1 M
if (!(*D2Client::ptPlayerClient))return FALSE;0 Q7 |; j0 e( M: I: g2 z
' d5 Z" z" f' i% A) Q2 u
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
d. g' O" e2 a& e, G. M4 O* r if (!phand)return FALSE;3 \$ T) J) F0 w0 Q1 a! O
; L$ g: Z- W( j" B0 D UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
) Q- v" d/ o& R6 g5 E! ^ if (!pCube)
2 g9 V3 w- O n% r! ]! g {# |6 ^4 U' e/ I$ t2 w6 }8 U
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块- _. \9 B4 ~+ q6 F
if (!pCube || !pCube->nItemNum)
+ q9 k" b/ P1 `- k. \) } m return FALSE;
3 h4 |9 O! d* ?/ {$ ? }4 Z& s* }1 m" b- R- ^1 o* g
6 i; D% S$ G! p* f) Y1 I( P if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE)), j$ h) K; J( k# U+ n
return FALSE;; r6 _% I: R, f, ]
1 `* _9 q. E2 \3 K9 k. ]: \5 T
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);0 y2 x" M M! G9 z( `0 R
8 k$ K; @% B) ? BYTE aPacket[9] = { 0x2A,0 };
1 x+ X' O. x, I, I, F8 L. s ::memcpy(aPacket + 1, &phand->nItemNum, 4);; E4 g6 }; O6 j% @# ?
::memcpy(aPacket + 5, &pCube->nItemNum, 4);
) E% [9 U9 [6 D1 h N) L D2Net::D2SendToServer(9, 0, aPacket);
j* ?1 s2 G2 h* S# S return TRUE;9 x$ C- k' h; M
# N% ]4 z( t" w5 l0 Z }
. \( G Q6 a, O& E/ R9 ~6 T. V5 ] {/ Z1 a$ ?! K/ X
static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno); N$ L* x+ Q+ }" W! l5 o) s
6 V ^3 ?% x! @4 p
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存
$ s6 m, b) `, @' i$ v! N' | {4 W. F# Z x/ @; Q3 V# J9 R
D2CoordStrc mypst = { NULL };
1 A- D; }" A; z5 X. ` D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);, E* B0 C( j9 [( ]3 F& w
7 R0 s: d7 S* v- O if (!mypst.nX)return FALSE;
; G- I2 ?$ l" v5 p! F: X O! L 7 C, d6 d- g4 E
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);; I( h+ B+ {: f! k! {2 r+ l; w' k
$ I7 G. t3 x, q' V9 @ BYTE aPacket[13] = { 0x20,0 };
4 Z) E4 j4 O+ Z. O ::memcpy(aPacket + 1, &dwItemID, 4);
3 E5 ?' V7 `6 e- x+ [# C ::memcpy(aPacket + 5, &mypst.nX, 4);5 M7 }0 U& Z6 l7 E) \
::memcpy(aPacket + 9, &mypst.nY, 4);
: J( H4 `' d" g* F1 ^3 w //return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
" T# ], w2 H) n8 f4 p D2Net::D2SendToServer(13, 0, aPacket);
) G9 M9 b$ V v. R return TRUE;
; l: n! {: q+ y" a+ y }+ M4 {$ u" Y( I; g2 }+ `
8 }/ Z+ Y8 S* x$ \$ \$ N
static BOOL DropCursorItemToGround()
( E- u5 R4 x# _ {; k7 Z" }7 y* y/ X( D. o0 z
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
% h, s) g b3 y# R$ K" {/ I if (!phand)
2 T/ C& k( e- G$ G) ]7 u4 c1 p return FALSE;
% V7 h+ D0 ~3 @: A$ ?& ?, ]/ P
+ O6 G& b+ d6 H) C PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
8 |0 E ^$ J" X! l9 ~$ M! a
* A$ H$ w- ^$ M! l2 G( { BYTE aPacket[5] = { 0x17 };
* H; \4 T( Y5 R. j6 h ::memcpy(aPacket + 1, &phand->nItemNum, 4);
* J: Z, E8 s7 j D2Net::D2SendToServer(5, 0, aPacket);9 }( a5 b, f- a* o, V
return TRUE;
: B" R& z) s& Y: I& [) {: H/ ?
, L* @: i; `/ G3 U; ?4 N0 O }4 w2 L. y- m% ?, }
) z" G1 A1 z6 |( P; q2 ^; b3 l static BOOL PickStorageItemToCursor(DWORD dwItemID)4 d0 @9 O) L8 I/ T! y) M
{* z7 @* o, k- T' K& p) b, h0 c
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
- @% _; }/ n/ w1 m4 w0 o, I5 V g; [/ |; S4 |
BYTE aPacket[5] = { 0 };
8 m, |9 s( _' p0 U1 ~. t* b aPacket[0] = 0x19;% w* l2 Q Z# ]6 ?0 s) G
::memcpy(aPacket + 1, &dwItemID, 4);
, c- j/ |2 S. R; B //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);3 j q; v# ~' F% K I
D2Net::D2SendToServer(5, 0, aPacket);+ T+ g9 w4 B+ p) v% s* L
return TRUE;+ W9 Y- T; x: D" @5 W" w. i/ L
}
6 b% K8 d* ~8 J0 D5 E4 x
! ~* p3 U# Z+ n4 L7 Y' X( y T static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
3 p8 w7 I0 z$ O {
- B) J- f: v0 h2 W0 `. r$ s+ D0 i. Y PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick); [6 v L! \& U6 H) y1 s9 H
BYTE aPacket[17] = { 0x1f,0 };) O4 z8 g# c) t9 i) c
::memcpy(aPacket + 1, &ItemID1, 4);- m' F) M* I2 J ^" V3 o
::memcpy(aPacket + 5, &ItemID2, 4);/ N- Z5 y2 z f) Z! j( |
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
* ?# T+ D$ U4 ]$ u6 B7 q Y8 H D2Net::D2SendToServer(17, 0, aPacket);
/ z/ N( d6 }3 p/ }# M8 h7 W return TRUE;
! h4 E; K1 H1 u9 J+ w# v8 t }
- b* k, a t7 {1 m$ I* Y% j1 G( J/ y( S
static BOOL Transmute()5 L' g: {) p9 q, a$ Z/ ?# L
{8 [$ J* N6 U" D) @9 k9 `
if (!(*D2Client::ptPlayerClient))return FALSE;$ s# v6 I& _/ M" ]( O% L
' y: ?- r& j- i* J- F1 F if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))3 m* b. [ Z; y. S# I
return FALSE;
, E. o& D' G& m9 G3 y
3 z- Y: F! S7 ^: O5 Y7 [7 Y2 F PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);( a- e3 h) C% \2 M
BYTE aPacket[7] = { 0 };! I% }! w; ~- f( ^
aPacket[0] = 0x4f;
5 d& q& d7 K+ ~- V7 u9 D& d* ? aPacket[1] = 0x18;
: |( X* g V- Q; o- O; N4 { D2Net::D2SendToServer(7, 0, aPacket);$ b9 P# J# F! P' P7 i% f2 P# _# g
return TRUE;$ d: x2 [+ e J- M
}
" I: R! b2 ?$ J+ \8 w* Q: |% F};% m4 A+ B( ^* w8 M, f) n& P/ S
! z6 P! g4 b& F |
|