|
|
转载
1 H- a9 }4 J: X4 Y自动合成的逻辑过于复杂就不给出了主要就是利用以下汇编点:& ~5 }2 E0 u5 [$ h; _4 [, t
D2Client:
4 G1 @3 W( E6 N' m8 P: |6FB20AE1为拦截输入框(用于获得命令)
' V& i# y6 o* I0 q4 V+ Q( K/ u6FB5E11C为客户端获得0x9C 0x04数据包位置 也就是进入储存的触发4 ]$ Y) w# W8 r+ t& l
6FB5E8D0为客户端获得0x9D 0x05数据包的位置 也是从储存中提起的触发( n3 ?/ \4 e/ \8 s# C& ^
6FAF4230为hackmap的loop点 我用的hackmap导出位置
( Y+ H$ r7 {8 Y9 |( h. ?+ B% U4 f! f, C) |1 i
9 Z+ N* b( g' H Q6 C% y
发包函数:: f: V4 h S p& r
class D2PKT_ITEM8 _0 j q: O' X) ]3 n
{+ L2 c5 Z9 J, M! ^& K7 w
#define ITEM_ACTION_NEW_GROUND 0x00 //9c//新产生在地上 地上! g! B% ~5 B7 @% X/ \/ k4 [( b3 W
#define ITEM_ACTION_PICK_UP 0x01 //9c//拾取 多
& `7 X* ~+ V( q5 P#define ITEM_ACTION_DROP 0x02 //9c//丢弃 地上
+ ~+ m) `6 H: \# Z' p#define ITEM_ACTION_OLD_GROUND 0x03 //9c//旧的地上 地上( O* Q- ^" z( \4 f+ n/ v+ O
#define ITEM_ACTION_TO_STORAGE 0x04 //9c //到储存 STASH
- Q, ?8 v: c' ~0 R `0 W, s#define ITEM_ACTION_FROM_STORAGE 0x05 //9d 从储存 手上
, e ?8 B6 x, p' M# |, |#define ITEM_ACTION_TO_EQUIP 0x06 //9d 装备 装备栏$ k2 Q2 Y' W* q- k$ ?
#define ITEM_ACTION_FROM_EQUIP 0x08 //9d 从装备 手上: P+ ?) r( i+ {
#define ITEM_ACTION_SWITCH_EQUIP 0x09 //9d 切装备 -
7 E0 T8 f: w) M#define ITEM_ACTION_TO_STORE 0x0B //9c //到商店 商店
, |( z% |4 c3 Z4 s5 e( p, ~#define ITEM_ACTION_FROM_STORE 0x0C //9c 从商店 INV4 e8 r) J2 I g
#define ITEM_ACTION_SWITCH_STORAGE 0x0d //9c 转换储存 不知道 2 b) ?/ S e1 C( I) D
#define ITEM_ACTION_TO_BELTSLOT 0x0E //9c 去腰带 腰带3 v. u4 N+ ]9 ~3 d g, [
#define ITEM_ACTION_FROM_BELTSLOT 0x0F //9c 从腰带 手上$ L) t" s" [, B
#define ITEM_ACTION_SWITCH_BELTSLOT 0x10 //9c 转换腰带 -; M' U6 n W6 t6 D Y: M) t+ X
#define ITEM_ACTION_TO_CURSOR 0x12 //9c 到受伤 手上7 _2 Y" U2 g% p }
#define ITEM_ACTION_SHIFT_BELTSLOT 0x15 //9d 切换腰带 -# Q) K0 P1 B8 O6 y
! r2 c& B( U& }#define PacketItemMaxTick 150
$ g" T) k! Z( }1 G7 ~#define PacketItemPickUpTick 204 H+ }% W! _7 p- u
; X$ V+ K; H2 z, ~; w
private:: W2 c% S l& N5 g; j" ~
static DWORD _PKTItemTick;& c3 u7 z6 H2 j9 ^9 r/ D
static DWORD _PKTItemAction;
# m+ @' j9 e; _3 m+ p static DWORD _PKTItemID;
* l0 Q8 R8 ?$ g5 ^ static BYTE _PKTPKTType;$ x7 t: c9 |1 Y0 {
public:3 H7 G! d! D7 z, J, P
static DWORD PKTItemGetTick() { return _PKTItemTick; }
/ l7 G4 F9 a! Q, u
/ x* N8 N% a' g8 ]5 p! w static void PKTItemRelease() / o) L+ i8 c$ X
{+ c7 w9 V# F) ?- I6 |2 U$ b
_PKTItemTick = 0;9 F- r2 V1 Z" X! R
_PKTItemAction = 0;, Z5 g: c: ?. F+ P! [4 e
_PKTItemID = 0;; X+ J% r7 J c. [6 d
_PKTPKTType = 0;
! Q' F7 m8 J1 y }
4 X$ K1 V, m5 [( W6 U1 P
6 } O+ e( X9 }/ v; F8 b& s static void PKTItemTellW8(BYTE aPacket0, DWORD dwItemID, DWORD ItemAction, DWORD tick) ! f3 M: f6 m$ ~' m7 f" p4 V
{& K4 G- v$ f" e' Y! M7 P( y7 r
_PKTPKTType = aPacket0;; l( a8 |7 O1 }" q* c; `
_PKTItemTick = tick;2 |) R, x. c5 I: I4 N- q5 N# `
_PKTItemAction = ItemAction;
$ r9 A! f7 H, n- |' o" P+ u _PKTItemID = dwItemID;
5 @: w" [; E- ^" ] }3 x4 y+ i6 d4 y& T" w* \
2 b$ c! |1 G6 n6 K1 ~# j static void PKTItemTellW8(DWORD tick)
' L! B3 C/ r6 C, m; w- [0 ? {
: Q" p& S5 ]! y0 g! V' w _PKTItemTick = tick;7 O2 e, m6 `: g0 K! N( i2 n
}
& }; V# x' I8 J/ j. W0 R( @$ V( w& E6 \* v3 m
static void PKTItem9C04(BYTE* aPacket, DWORD aLength,UnitAny* pPlayer)//picktocursor
' \$ f9 ~2 Y" `6 G3 i# b4 G1 O5 f {
1 ?) O4 I9 ~/ V if (aLength >= 8)" o( q* p5 [+ x% O1 o2 w9 l/ ^
{- L7 x, F7 `' d+ ]2 m
DWORD dwItemId = 0;! Y4 i8 v5 S' I) X
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));
9 W: m% q F/ R& E7 E( d1 O if (aPacket[0] == PACKET_NEWITEM && aPacket[1] == ITEM_ACTION_TO_STORAGE
9 g, |. P* p: a2 Z p && _PKTItemAction == ITEM_ACTION_TO_STORAGE
' k2 q* K2 c4 K: f* h6 m* e && _PKTPKTType == PACKET_NEWITEM( b6 x0 N5 z6 u6 C2 ]: V
)
8 k2 ?9 L& T; n; { {
. y5 M, a6 l( @1 V0 ]/ Q if (_PKTItemID == 0 && _PKTItemTick)/ f- Y; t: y ?3 u' m2 U1 m- w: @
{
9 y, C3 c s& V' k( k PKTItemRelease();
' C& ?; Y- F5 c$ E }# N3 @( c5 q! q
else if(_PKTItemID== dwItemId&& _PKTItemTick)( o2 a6 `/ U. H' o: F
{
1 W; `5 b! u# l PKTItemRelease();; i1 k3 B5 |. i. S" I8 V* ~
}+ e4 R6 _7 I4 ]: \" w
}
( |6 x( N+ g* P! F, s
0 T' y) ~: U4 e! H! [* O }; z7 M6 E- [ O9 {0 t' \, \) H" D2 L
}
# q) O2 S9 v3 i% e) A- G1 m
& ~5 t( C7 b) r+ r static void PKTItem9D05(BYTE* aPacket, DWORD aLength, UnitAny* pPlayer)//To Stored# @1 D2 X! l# T7 Y; [+ x5 J
{3 l6 `8 W' \" ^5 w
if (aLength >= 8)
% A( x+ P/ M! i0 Q0 }0 s {
3 ?/ ?+ H$ k/ n* ?6 C5 X5 ` DWORD dwItemId = 0;% r/ k- Q, n3 h5 U* L/ i& R1 [
memcpy(&dwItemId, aPacket + 4, sizeof(DWORD));' D' K( Z! |5 }* x
if (aPacket[0] == PACKET_ITEMACTION && aPacket[1] == ITEM_ACTION_FROM_STORAGE
4 }% T8 N0 T. W" J' i p9 @2 m && _PKTItemAction == ITEM_ACTION_FROM_STORAGE1 J3 \# i' s# o) T1 M3 Z
&& _PKTPKTType == PACKET_ITEMACTION
( V0 y/ t4 ^) Z5 z; | )! `2 }- _, R5 |7 y9 \
{ N. a; `+ I& u) |+ M6 y
if (dwItemId == 0 && _PKTItemTick)* u; `1 n. X! z0 t. ~$ s
{
+ R# M+ H. r4 B6 a$ Z2 | PKTItemRelease();
% d1 L/ q- p% i" E }
& [- C u d/ A else if (dwItemId == _PKTItemID && _PKTItemTick)* d! ^4 i0 `1 R4 d7 M+ p% W
{9 ^* [7 o& Z7 e9 j8 C
PKTItemRelease();; @" S% i+ ?4 ~0 ?2 `* A
}( N' g/ j$ w* V/ F6 Z1 c
}* c7 R8 ^% p% `3 N# o2 e
. S# z+ x7 `1 M: O
}$ f2 v3 k! l" Y. J* }6 [$ j* {
}
! q( S" d9 S L# g/ U. @
; f( Q: K* b! p5 M. ]% j static void PKTItemGameLoop()
: [7 h; c9 y# s3 r$ `2 H {
7 O7 ]& u' a- w3 m if (_PKTItemTick > 0)! i$ W/ C- o: I. f
_PKTItemTick--;7 D- ^! M" k3 N6 p4 O- I
else if (_PKTItemTick == 0)
( {5 d3 M: f- B; p% O( M PKTItemRelease();* ~+ o' ~3 y, c* t# O9 g
}+ k, K0 `6 t" |
5 Z8 @ D. O( S% }/ v' ~8 p) f% r' j7 k) t
static BOOL PKTItemCando()
* I! {1 p' u* s {9 @! `, b9 {; q# d
if (_PKTItemTick == 0)return TRUE;0 b3 H: X+ J' U9 B1 p: z' r
return FALSE;( M3 ^) R& i0 D
}
$ I; O$ ^: V: Y e. R6 V
" L$ v, U* s+ e static BOOL BuyItem(DWORD ItemID, DWORD npcid)( [6 N( ~& ?; K. a# v0 ]
{3 |5 Q8 ^/ j, e o* s
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
) z3 y. @3 ?/ m: X+ Q( P BYTE aPacket[17] = { 0 };$ ]7 {2 O1 W0 H' N& ^- h
aPacket[0] = 0x32;
2 [3 s8 i( M% u* x/ K8 c5 |+ l ::memcpy(&aPacket[1], &npcid, 4);
' Q/ X0 V# ^9 i ::memcpy(&aPacket[5], &ItemID, 4);2 c$ j o E) j2 E7 ?; A5 b3 C2 }
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);7 o! J* L$ a3 |5 ]' d- d! {
D2Net::D2SendToServer(17, 0, aPacket);' e" o0 y% c1 Q, u7 j0 P3 A O
return TRUE;
, d$ c9 C$ Y1 h( ?- A }0 N2 `1 |: ?- G6 k! h* T
7 E; @/ k5 _) t; H* t* n# Y
static BOOL SellItem(DWORD ItemID, DWORD npcid)
: o8 U$ R% a4 V6 g! t {
* ` j, Y- H% z PKTItemTellW8(PACKET_ITEMACTION, 0, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);7 J; g' a4 C. G
BYTE aPacket[17] = { 0 };
- f' c" c+ p. w' m# I7 F aPacket[0] = 0x33;! R6 o: x, g% x& B- Y" \1 |
::memcpy(&aPacket[1], &npcid, 4);8 H6 R7 F3 \' d
::memcpy(&aPacket[5], &ItemID, 4);6 C7 h1 f3 t: c& w9 u
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);, G1 R; H& a' R5 F9 ?9 a
D2Net::D2SendToServer(17, 0, aPacket);1 P' R% `6 R1 o: U, W. n" z
return TRUE;
E! \; \ J6 a& } }/ O6 h7 ~; i! [# a# i1 c
0 ]4 m9 t" K) ~* o9 Y
static BOOL Interact(DWORD nUnitId, DWORD nUnitType);5 g6 ]7 A L" w+ M
9 ]/ S9 ?3 H1 @! o
static BOOL PickGroundItem(UnitAny* pItem, BOOL bShowClientMove, BOOL bToCursor);
$ l r# F2 w; ^3 `; L( A
1 ^+ ~$ n- v& v. i/ [2 m static BOOL OpenCube()3 ?, @1 B5 b7 ~, |3 ^0 \$ N7 r$ r
{
4 H7 q7 O% `+ U3 m. T! b/ q. T- Q if (D2Client::D2GetUIToggle(UIVAR_CUBE))return TRUE;
5 l* Q5 U' j5 P4 } G- n/ x' b% I% ~* D/ p3 d, }
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);- ?) Z# }% H6 i5 |' ~
if (!pCube)
- m1 J' V! i) G- | {4 i5 W$ _4 K/ d8 i& @( T; s
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);5 H+ ]/ @3 ~; j3 A
if (!pCube); T& i( _1 m n6 p
return FALSE;
6 b/ T- f1 _% H* m# y }5 X$ R8 ^6 H: R. d+ `- Z+ y
PKTItemTellW8(PacketItemMaxTick);
; O/ ~7 r" I+ p$ W: R( c8 ^
$ e, D0 b# f% ^! R D2CoordStrc mypst = { NULL };
( p# m, x- ?& j4 l+ C$ V) { D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
: G1 V6 v- j! Q3 M0 n) H9 y( p' z8 ~( G# S# D' r8 m8 I' L) K
BYTE aPacket[13] = { 0x20,0 };
% Q. D! ^2 j" z+ J( U9 _ ::memcpy(aPacket + 1, &pCube->nItemNum, 4);5 t8 K- a# I( A) t; a: @3 U
::memcpy(aPacket + 5, &(mypst.nX), 4);* h4 Q2 u% d8 O7 U
::memcpy(aPacket + 9, &(mypst.nY), 4);; d+ h' z8 M E+ g
D2Net::D2SendToServer(13, 0, aPacket);' v$ ` x: T, @* I7 e
return TRUE;
# y$ n8 f. Y- z9 R" U! i" b }& _- ^1 ~$ ?7 y) i! t
6 E9 \$ F* g3 a, e; W/ L
static BOOL ToInvxy(DWORD x, DWORD y)/ @4 f; g. c ~, T; x6 ~1 }
{+ I7 d) h; [9 C; {! d
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);; _ s( ?6 q' q( H5 e
6 M* i8 Z$ n: h% z# g
if (phand == NULL)2 Z* g5 T L& m; R8 `6 `
return FALSE;4 A/ g4 a0 y7 Z
9 e% n. V/ K: e- V# R
PKTItemTellW8(PACKET_NEWITEM, phand->nUnitId, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);, k# `9 j9 _% }; w6 U1 F
, R( }: B7 e! }! } n( ` BYTE aPacket[17] = { 0x18,0 };! L7 N1 u, f8 K/ `/ d! ^: ~% v1 U
::memcpy(aPacket + 1, &phand->nItemNum, 4);3 S( l% U! o, T8 D" O6 a. }( J
::memcpy(aPacket + 5, &x, 4);
" L, `9 a" Z8 t, a4 s# R6 f% Y9 H2 T ::memcpy(aPacket + 9, &y, 4);
9 T" R, {8 \9 ]% B3 S( Y) P. w5 ~) J D2Net::D2SendToServer(17, 0, aPacket);& X7 ?: \0 Y7 @) T8 s# ]8 l$ r3 R' i
return TRUE;
6 Z- ^. L7 `7 P, Y }6 s4 Q' o- x( z/ X" ]! n
- ]9 ]. ^ k- }" u6 E
static BOOL ToInvRandom(BOOL bBagFix = FALSE)
3 M! Q( V1 F3 L( V) @; @ {4 H' i" w7 r' K% B$ t
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
1 f$ [$ G2 k+ Q- q! L if (!phand), H( N0 |% f$ I3 D0 N
return FALSE;
3 o0 Z) Y% v( _ int desx = 0;+ q" C. z8 ]1 [8 X8 m
int desy = 0;
: C$ E9 z- i6 W* {" G" q if (GetTheFirstStoragePlace(LOC_INV, phand->dwTxtFileNo, &desx, &desy, bBagFix))& w/ P/ u# [# F1 l: k) m( B l
{* f7 e9 h* L$ C' u* K+ c
ToInvxy(desx, desy);4 u1 `- ^: C) D6 k+ r1 o2 R4 w
return TRUE; H4 X, V# |/ Q
}
, n E9 T3 Z, f& ?/ l; G" j% z# X return FALSE;
0 Y' d9 U8 O+ z }
6 p- T ^3 }( G5 f2 b; I+ r9 P9 q: ]) |; ~
static BOOL ToCube()5 m8 P) l5 `& K* O5 m
{
e% Q" J B' i9 n- J, `- F+ a if (!(*D2Client::ptPlayerClient))return FALSE;& P5 s" X& e8 Y% U
& z; K2 C* V- f0 c5 }
UnitAny* phand=D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);
" @( b/ l' W K7 x( U if (!phand)return FALSE;
6 W* r1 O$ }1 i" a: o p2 b% s; Q6 K9 s8 r2 [
UnitAny* pCube = CountStorageItems(LOC_INV, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举身上的方块
' {4 ~+ f3 M- [# W8 B4 c if (!pCube)
7 g& @" i& J! H+ v- B3 n; |. i {1 T1 h: f0 c M% z6 N' G8 T4 h
pCube = CountStorageItems(lOC_STASH, D2TXTCODE('box '), ITEMQUALITY_NORMAL, NULL);//枚举仓库里的方块0 q( o9 _3 x4 R
if (!pCube || !pCube->nItemNum)
, ]- m! [7 \8 z return FALSE;
7 s3 S* k% X' T6 Y$ C. q; H3 ` }
; z6 B' }. x+ z( C9 B& [* o* M9 L# ^6 u$ Y) n8 [
if (!IsStorageCanStore(LOC_CUBE, phand->dwTxtFileNo, FALSE))
! ?+ t% s6 U" I' O+ ~1 u% }; Z return FALSE;/ ]$ u, h$ }2 N2 W e# n4 ^
4 k' x1 s2 ?0 ?" s4 R$ R3 [' j4 F
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
8 ~4 R1 \/ \/ u$ G! y- b4 v6 V. `( d" {$ U% m1 \. l* ^- R6 _: ^0 S" p
BYTE aPacket[9] = { 0x2A,0 };
0 U0 W9 O2 J; C ::memcpy(aPacket + 1, &phand->nItemNum, 4);2 A6 w1 p- c7 `: v/ w! q- k
::memcpy(aPacket + 5, &pCube->nItemNum, 4);; j7 q, d% ]2 ^% J8 K: n; i/ P( D
D2Net::D2SendToServer(9, 0, aPacket);2 h0 R0 b' m' h; ^) {% ]; Q
return TRUE;4 o# ?, m% a* _# d
4 X+ i0 q/ b7 ]9 T: W. Y, @$ B
}+ t- d- i# s: A& l0 [$ C7 c
* I. W. j( X) R0 l, X1 p) g( m static BOOL ToCube(DWORD dwhandID, DWORD dwtxtno);
( ?% A3 b* n$ H) G+ ^3 \$ D0 ]* d1 |; j* n' A2 f9 f; ~ q6 L' X
static BOOL RCBag(DWORD dwItemID)//使用之前一定要检查能不能储存4 f% `7 i& C/ k% Q
{
8 N- m0 n$ M5 Z+ P5 G8 z D2CoordStrc mypst = { NULL };
% f$ g8 q, Z- ]+ c2 U# [" ? D2Common::D2GetUnitXY(*D2Client::ptPlayerClient, &mypst);
3 }8 n3 G8 _, \; w! x. K: |3 \' |
* ~( l: G9 C# }/ x" O if (!mypst.nX)return FALSE;" u% {. r- g" m9 F9 c3 Z
" V7 G# c5 x% ?4 w) I; o0 D# x
PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
9 Q6 k/ |; K( @# v' x% V0 Q( E2 `9 T- U, z
BYTE aPacket[13] = { 0x20,0 };2 P7 y% u' x4 W4 q
::memcpy(aPacket + 1, &dwItemID, 4);
+ a* `0 ~9 r! u1 ?2 E7 x ::memcpy(aPacket + 5, &mypst.nX, 4);* Q7 m# X7 I, A' D
::memcpy(aPacket + 9, &mypst.nY, 4);7 l* N2 [ E/ Z4 Q
//return D2Net::D2NetSendPacketToServer(0, aPacket, 13);
. H0 u: H5 `8 O D2Net::D2SendToServer(13, 0, aPacket);
9 G3 C2 A; j7 y! ~ return TRUE;7 n& f4 {, L5 p3 x7 }
}. m6 w9 [+ Z6 V) J4 N
8 z" V3 v# n& U6 r( s5 I# Q
static BOOL DropCursorItemToGround()4 m2 `/ x+ G; S
{9 f1 d9 U! Q$ i: N
UnitAny* phand = D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory);& s+ ?& F2 w& p6 |
if (!phand)
. g6 F& w& A W9 C+ I7 _5 t% V return FALSE;2 k9 v1 e: A' I8 N4 B
* O1 J! C( c2 g; |. {: T0 |/ l
PKTItemTellW8(PACKET_NEWITEM, phand->nItemNum, ITEM_ACTION_DROP, PacketItemMaxTick);
- P, u' X& O9 s% |# s# d
- l$ w* l x# P3 q$ r, N BYTE aPacket[5] = { 0x17 };
! e0 J& z0 b7 C% C1 d Q4 K! u ::memcpy(aPacket + 1, &phand->nItemNum, 4);
3 ]7 G. \/ l7 k; B9 B D2Net::D2SendToServer(5, 0, aPacket);
. a" K! }' _, w- k) Z7 O return TRUE;9 n! Y. [ O. Y- y4 I2 E
; A, ?" X) E3 p n: Y& a }2 h; k) T# I! L! N8 \# V2 }5 U% n2 Y
# P: n0 v$ W% g5 Q+ q8 O* h2 s static BOOL PickStorageItemToCursor(DWORD dwItemID)1 U* J+ P) F. @1 D: \/ L
{+ u7 N2 m" g* z Q5 B1 l& K
PKTItemTellW8(PACKET_ITEMACTION, dwItemID, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
5 h/ T1 H! y, \& `' A
- m' l4 s/ p/ g K1 q BYTE aPacket[5] = { 0 };
+ U: Q# p/ Q% ^. X" X/ e) _/ F aPacket[0] = 0x19;
; C1 r7 I7 }# ~/ z0 U5 Z/ O3 R ::memcpy(aPacket + 1, &dwItemID, 4);
. t& r1 `$ w8 k& O1 R, T! a- j //return D2Net::D2NetSendPacketToServer(0, aPacket, 5);$ p3 v$ c0 j8 m7 ^
D2Net::D2SendToServer(5, 0, aPacket);3 `. b5 ~2 x# C3 t, W" ^
return TRUE;) D: e, |+ r% ]5 t& t" G% k, S
}
' `5 F# U- I0 Z3 O$ {
$ x# T2 Y% ^ h static BOOL InteractItem(DWORD ItemID1, DWORD ItemID2)
& ?1 @: E1 a1 |* ~; k4 h {
$ M1 l8 G' y5 y' K$ n5 W% v) N PKTItemTellW8(PACKET_ITEMACTION, ItemID1, ITEM_ACTION_FROM_STORAGE, PacketItemMaxTick);
# e& U0 |/ f9 L5 ~ n: C BYTE aPacket[17] = { 0x1f,0 };/ r5 l, N8 j4 d) ~# V$ T* o. t% I# M
::memcpy(aPacket + 1, &ItemID1, 4);
4 M: V& a1 O% e: S3 @2 _& W9 f3 h" u% P ::memcpy(aPacket + 5, &ItemID2, 4);% ?( d1 v0 b! @* ~/ f
//return D2Net::D2NetSendPacketToServer(0, aPacket, 17);
7 O0 `9 K+ q" Q; ^4 W1 X D2Net::D2SendToServer(17, 0, aPacket);: U! a( M# f1 K9 C0 M
return TRUE;
( }; s+ D( J8 n# P9 a/ r) c }) E x! i% C& T5 h7 w% V2 l
$ O2 K/ b( p) ?% `. y4 C E( \
static BOOL Transmute()7 d# n0 T2 o: b1 `/ ?& d* a
{
$ h& s! c L0 J6 j if (!(*D2Client::ptPlayerClient))return FALSE;# D" a' w3 G% } ^' [ d L
% V2 r" o% j4 ?1 M if (D2Common::D2GetCursorItem((*D2Client::ptPlayerClient)->ptInventory))
/ k) I) f" M+ \! i return FALSE;" ~. D$ q/ z! e% f2 U
# V; t' Q* V6 D& s PKTItemTellW8(PACKET_NEWITEM, 0, ITEM_ACTION_TO_STORAGE, PacketItemMaxTick);
) @4 R# `# B4 c; Q- K/ \ BYTE aPacket[7] = { 0 };
5 u& i% u9 ?0 K% I" w aPacket[0] = 0x4f;
: Z8 q! k& x7 c9 n8 D3 S aPacket[1] = 0x18;
3 p6 X1 O6 r# l" N& e% D+ U D2Net::D2SendToServer(7, 0, aPacket);) z6 i H: D( U8 n5 ~# @0 [- M$ Q
return TRUE;
# @7 x5 F; |2 s3 _: ?* C& Y }7 t$ b7 n1 e. S3 f! c# C8 ?& }
};7 |) I+ ~' s p$ ]/ Y0 C) E2 d1 ]
$ `6 p6 a% f# t |
|